Annotation of ntddk/inc/mtf.h, revision 1.1.1.1

1.1       root        1: /**
                      2: Copyright(c) Maynard Electronics, Inc. 1984-92
                      3: 
                      4: 
                      5:      Name:          mtf.h
                      6: 
                      7:      Description:   Microsoft Tape Format v1.0 tape structure definitions
                      8:                     and attribute bit definitions.
                      9: 
                     10: 
                     11:      $Log:   T:/LOGFILES/MTF.H_V  $
                     12: 
                     13:    Rev 1.6   20 Jun 1993 16:19:56   GREGG
                     14: Changed data encrypt bit def and replaced compr algor with vendor id in SSET.
                     15: 
                     16:    Rev 1.5   26 Apr 1993 11:45:48   GREGG
                     17: Seventh in a series of incremental changes to bring the translator in line
                     18: with the MTF spec:
                     19: 
                     20:      - Changed handling of EOM processing during non-OTC EOS processing.
                     21: 
                     22: Matches CHANNEL.H 1.17, MAYN40RD.C 1.60, TFWRITE.C 1.63, MTF.H 1.5,
                     23:         TFLUTILS.C 1.44, MTF10WDB.C 1.10, MTF10WT.C 1.9
                     24: 
                     25:    Rev 1.4   22 Apr 1993 03:31:38   GREGG
                     26: Third in a series of incremental changes to bring the translator in line
                     27: with the MTF spec:
                     28: 
                     29:      - Removed all references to the DBLK element 'string_storage_offset',
                     30:        which no longer exists.
                     31:      - Check for incompatable versions of the Tape Format and OTC and deals
                     32:        with them the best it can, or reports tape as foreign if they're too
                     33:        far out.  Includes ignoring the OTC and not allowing append if the
                     34:        OTC on tape is a future rev, different type, or on an alternate
                     35:        partition.
                     36:      - Updated OTC "location" attribute bits, and changed definition of
                     37:        CFIL to store stream number instead of stream ID.
                     38: 
                     39: Matches: TFL_ERR.H 1.9, MTF10WDB.C 1.7, TRANSLAT.C 1.39, FMTINF.H 1.11,
                     40:          OTC40RD.C 1.24, MAYN40RD.C 1.56, MTF10WT.C 1.7, OTC40MSC.C 1.20
                     41:          DETFMT.C 1.13, MTF.H 1.4
                     42: 
                     43:    Rev 1.3   19 Apr 1993 18:02:30   GREGG
                     44: Second in a series of incremental changes to bring the translator in line
                     45: with the MTF spec:
                     46: 
                     47:      Changes to write version 2 of OTC, and to read both versions.
                     48: 
                     49: Matches: mayn40rd.c 1.55, otc40msc.c 1.19, otc40rd.c 1.23, otc40wt.c 1.23,
                     50:          makevcb.c 1.15, fsys.h 1.32, fsys_str.h 1.46, tpos.h 1.16,
                     51:          mayn40.h 1.32, mtf.h 1.3.
                     52: 
                     53: NOTE: There are additional changes to the catalogs needed to save the OTC
                     54:       version and put it in the tpos structure before loading the OTC
                     55:       File/Directory Detail.  These changes are NOT listed above!
                     56: 
                     57:    Rev 1.2   07 Dec 1992 10:20:26   GREGG
                     58: Changes for tf ver moved to SSET, otc ver added to SSET and links added to FDD.
                     59: 
                     60:    Rev 1.1   24 Nov 1992 18:18:50   GREGG
                     61: Updates to match MTF document.
                     62: 
                     63:    Rev 1.0   23 Nov 1992 14:25:14   GREGG
                     64: Initial revision.
                     65: 
                     66: **/
                     67: 
                     68: #ifndef _MTF_H_
                     69: #define _MTF_H_
                     70: 
                     71: /**/
                     72: /*
                     73:      MTF Constants
                     74: */
                     75: 
                     76: #define FORMAT_VER_MAJOR      1
                     77: #define FORMAT_VER_MINOR      0
                     78: 
                     79: #define TAPE_CATALOG_VER      2
                     80: 
                     81: #define PW_ENCRYPT_NONE       0
                     82: #define DATA_ENCRYPT_NONE     0
                     83: #define COMPRESS_NONE         0
                     84: #define ECC_NONE              0
                     85: 
                     86: #define MTF10_OTC             1
                     87: 
                     88: #define LOCAL_TZ              127
                     89: 
                     90: 
                     91: /*
                     92:      MTF Block Types
                     93: */
                     94: 
                     95: #define  MTF_TAPE_N     "TAPE"    /* Tape Header ID */
                     96: #define  MTF_VOLB_N     "VOLB"    /* Volume Control Block ID */
                     97: #define  MTF_SSET_N     "SSET"    /* Start of Backup Set Description Block ID */
                     98: #define  MTF_ESET_N     "ESET"    /* End of Backup Set Description Block ID */
                     99: #define  MTF_EOTM_N     "EOTM"    /* End of tape, continuation Block ID */
                    100: #define  MTF_DIRB_N     "DIRB"    /* Directory Descriptor Block ID */
                    101: #define  MTF_FILE_N     "FILE"    /* File Descriptor Block ID */
                    102: #define  MTF_CFIL_N     "CFIL"    /* Corrupt File Descriptor Block ID */
                    103: #define  MTF_ESPB_N     "ESPB"    /* End of Set Pad Block */
                    104: #define  MTF_SSES_N     "SSES"
                    105: #define  MTF_ESES_N     "ESES"
                    106: 
                    107: 
                    108: /*
                    109:      DBLK Block Attributes
                    110: 
                    111:      The lower 16 bits are reserved for general attribute bits (those
                    112:      which may appear in more than one type of DBLK), the upper 16 are
                    113:      for attributes which are specific to one type of DBLK.
                    114: 
                    115:      Note that the block specific bit definitions overlap, and the block
                    116:      type is used to determine the meaning of a given bit.
                    117: */
                    118: 
                    119: /* General : */
                    120: #define MTF_DB_CONT_BIT                 0x00000001UL
                    121: #define MTF_DB_COMPRESS_BIT             0x00000004UL
                    122: #define MTF_DB_EOS_AT_EOM_BIT           0x00000008UL
                    123: #define MTF_DB_VAR_BLKS_BIT             0x00000010UL
                    124: #define MTF_DB_SESSION_BIT              0x00000020UL
                    125: 
                    126: /* THDR : */
                    127: #define MTF_DB_SM_EXISTS                0x00010000UL
                    128: #define MTF_DB_FDD_ALLOWED              0x00020000UL
                    129: #define MTF_DB_SM_ALT_OVERWRITE         0x00040000UL
                    130: #define MTF_DB_FDD_ALT_PART             0x00080000UL
                    131: #define MTF_DB_SM_ALT_APPEND            0x00200000UL
                    132: 
                    133: /* SSET : */
                    134: #define MTF_DB_FDD_EXISTS               0x00010000UL
                    135: #define MTF_DB_ENCRYPT_BIT              0x00020000UL
                    136: 
                    137: /* ESET : */
                    138: #define MTF_DB_FDD_ABORTED_BIT          0x00010000UL
                    139: #define MTF_DB_END_OF_FAMILY_BIT        0x00020000UL
                    140: #define MTF_DB_ABORTED_SET_BIT          0x00040000UL
                    141: #define MTF_DB_SET_VERIFIED_BIT         0x00080000UL
                    142: 
                    143: /* EOTM : */
                    144: #define MTF_DB_NO_ESET_PBA              0x00010000UL
                    145: #define MTF_DB_INVALID_ESET_PBA         0x00020000UL
                    146: 
                    147: 
                    148: /* Turn on packing here.  Need to be sure that date is packed. */
                    149: #pragma pack(1)
                    150: 
                    151: /**/
                    152: /*
                    153:      Compressed date structure for storing dates in minimal space on tape:
                    154: 
                    155:      BYTE 0    BYTE 1    BYTE 2    BYTE 3    BYTE 4
                    156:     76543210  76543210  76543210  76543210  76543210
                    157:     yyyyyyyy  yyyyyymm  mmdddddh  hhhhmmmm  mmssssss
                    158: */
                    159: typedef struct {
                    160:      UINT8     dt_field[5] ;
                    161: } MTF_DATE_TIME, * MTF_DATE_TIME_PTR ;
                    162: 
                    163: 
                    164: /**/
                    165: /*
                    166:      Tape Address
                    167: */
                    168: typedef struct {
                    169:      UINT16 data_size;        /* Size of the data */
                    170:      UINT16 data_offset;      /* Offset to the data */
                    171: } MTF_TAPE_ADDRESS, * MTF_TAPE_ADDRESS_PTR;
                    172: 
                    173: 
                    174: /**/
                    175: /*
                    176:      Stream Header
                    177: */
                    178: typedef struct {
                    179:    UINT32 id ;           /* Identifier for stream      */
                    180:    UINT16 fs_attribs ;   /* FileSystem Attribute       */
                    181:    UINT16 tf_attribs ;   /* TapeFormat Attributes      */
                    182:    UINT64 data_length ;  /* Offset to stream           */
                    183:    UINT16 encr_algor ;   /* Data encryption algorithm  */
                    184:    UINT16 comp_algor ;   /* Data compression algorithm */
                    185:    UINT16 chksum ;       /* Checksum                   */
                    186: } MTF_STREAM, * MTF_STREAM_PTR ;
                    187: 
                    188: 
                    189: /**/
                    190: /*
                    191:      Common DBLK Header
                    192: */
                    193: typedef struct {
                    194:      UINT8  block_type[4] ;         /* Unique identifier, see above */
                    195:      UINT32 block_attribs ;         /* Common attributes for this block */
                    196:      UINT16 offset_to_data ;        /* Offset to data associated with this
                    197:                                        DBLK, or offset to next DBLK or
                    198:                                        filemark if there is no associated
                    199:                                        data.
                    200:                                     */
                    201:      UINT8  machine_os_id    ;      /* Machine/OS id where written, low byte */
                    202:      UINT8  machine_os_version ;    /* Machine/OS id where written, high byte */
                    203:      UINT64 displayable_size ;      /* Displayable data size */
                    204:      UINT64 logical_block_address ; /* Logical blk address relative to SSET */
                    205:      UINT64 session_id ;            /* For interleaved streams */
                    206:      UINT32 control_block_id ;      /* Used for error recovery */
                    207: 
                    208:      UINT8  reserved[4] ;           /* Was offset to string storage */
                    209:      MTF_TAPE_ADDRESS os_specific_data ;      /* Size and offset of OS specific stuff */
                    210:      UINT8  string_type ;           /* ASCII, Unicode, etc. */
                    211:      UINT8  pad ;                   /* For alignment purposes */
                    212:      UINT16 hdr_chksm ;             /* Checksum of the block header.  The
                    213:                                        algorithm is: XOR each word preceeding
                    214:                                        this one and store the result here.
                    215:                                        (When the checksum is verified the
                    216:                                        'block_type' is also checked for a
                    217:                                        non-zero value.
                    218:                                     */
                    219: } MTF_DB_HDR, * MTF_DB_HDR_PTR ;
                    220: 
                    221: 
                    222: /**/
                    223: /*
                    224:      Tape Header DBLK (TAPE)
                    225: */
                    226: typedef struct {
                    227:      MTF_DB_HDR          block_header;
                    228:      UINT32              tape_id_number ;
                    229:      UINT32              tape_attributes ;
                    230:      UINT16              tape_seq_number ;
                    231:      UINT16              password_encryption_algor;
                    232:      UINT16              ecc_algorithm ;
                    233:      UINT16              tape_catalog_type ;
                    234:      MTF_TAPE_ADDRESS    tape_name ;
                    235:      MTF_TAPE_ADDRESS    tape_description ;
                    236:      MTF_TAPE_ADDRESS    tape_password ;
                    237:      MTF_TAPE_ADDRESS    software_name ;
                    238:      UINT16              logical_block_size ;
                    239:      UINT16              software_vendor_id ;
                    240:      MTF_DATE_TIME       tape_date ;
                    241:      UINT8               tf_major_ver ;
                    242: } MTF_TAPE, * MTF_TAPE_PTR;
                    243: 
                    244: 
                    245: /**/
                    246: /*
                    247:      Start of Set DBLK (SSET)
                    248: */
                    249: typedef struct {
                    250:      MTF_DB_HDR          block_hdr ;
                    251:      UINT32              sset_attribs ;
                    252:      UINT16              password_encryption_algor ;
                    253:      UINT16              data_encryption_algor ;
                    254:      UINT16              software_vendor_id ;
                    255:      UINT16              backup_set_number ;
                    256:      MTF_TAPE_ADDRESS    backup_set_name ;
                    257:      MTF_TAPE_ADDRESS    backup_set_description ;
                    258:      MTF_TAPE_ADDRESS    backup_set_password ;
                    259:      MTF_TAPE_ADDRESS    user_name ;
                    260:      UINT64              physical_block_address ;
                    261:      MTF_DATE_TIME       backup_date ;
                    262:      UINT8               software_ver_mjr ;
                    263:      UINT8               software_ver_mnr ;
                    264:      INT8                time_zone ;
                    265:      UINT8               tf_minor_ver ;
                    266:      UINT8               tape_cat_ver ;
                    267: } MTF_SSET, * MTF_SSET_PTR ;
                    268: 
                    269: 
                    270: /**/
                    271: /*
                    272:      Volume DBLK (VOLB)
                    273: */
                    274: typedef struct {
                    275:      MTF_DB_HDR          block_hdr ;
                    276:      UINT32              volume_attribs ;
                    277:      MTF_TAPE_ADDRESS    device_name ;
                    278:      MTF_TAPE_ADDRESS    volume_name ;
                    279:      MTF_TAPE_ADDRESS    machine_name ;
                    280:      MTF_DATE_TIME       backup_date ;
                    281: } MTF_VOL, * MTF_VOL_PTR ;
                    282: 
                    283: 
                    284: /**/
                    285: /*
                    286:      Directory DBLK (DIRB)
                    287: */
                    288: typedef struct {
                    289:      MTF_DB_HDR          block_hdr ;
                    290:      UINT32              directory_attribs ;
                    291:      MTF_DATE_TIME       last_mod_date ;
                    292:      MTF_DATE_TIME       create_date ;
                    293:      MTF_DATE_TIME       backup_date ;
                    294:      MTF_DATE_TIME       last_access_date ;
                    295:      UINT32              directory_id ;
                    296:      MTF_TAPE_ADDRESS    directory_name ;
                    297: } MTF_DIR, * MTF_DIR_PTR ;
                    298: 
                    299: 
                    300: /**/
                    301: /*
                    302:      File DBLK (FILE)
                    303: */
                    304: typedef struct {
                    305:      MTF_DB_HDR          block_hdr ;
                    306:      UINT32              file_attributes ;
                    307:      MTF_DATE_TIME       last_mod_date ;
                    308:      MTF_DATE_TIME       create_date ;
                    309:      MTF_DATE_TIME       backup_date ;
                    310:      MTF_DATE_TIME       last_access_date ;
                    311:      UINT32              directory_id ;
                    312:      UINT32              file_id ;
                    313:      MTF_TAPE_ADDRESS    file_name ;
                    314: } MTF_FILE, * MTF_FILE_PTR ;
                    315: 
                    316: 
                    317: /**/
                    318: /*
                    319:      Corrupt File DBLK (CFIL)
                    320: */
                    321: typedef struct {
                    322:      MTF_DB_HDR     block_hdr ;
                    323:      UINT32         corrupt_file_attribs ;
                    324:      UINT32         file_id ;
                    325:      UINT32         directory_id ;
                    326:      UINT64         stream_offset ;
                    327:      UINT16         corrupt_stream_number ;
                    328: } MTF_CFIL, * MTF_CFIL_PTR ;
                    329: 
                    330: 
                    331: /**/
                    332: /*
                    333:      Start of Set DBLK (ESET)
                    334: */
                    335: typedef struct {
                    336:      MTF_DB_HDR     block_hdr ;
                    337:      UINT32         eset_attribs ;
                    338:      UINT32         corrupt_file_count ;
                    339:      UINT64         set_map_phys_blk_adr ;
                    340:      UINT64         fdd_phys_blk_adr ;
                    341:      UINT16         fdd_tape_seq_number ;
                    342:      UINT16         backup_set_number ;
                    343:      MTF_DATE_TIME  backup_date ;
                    344: } MTF_ESET, * MTF_ESET_PTR ;
                    345: 
                    346: 
                    347: /**/
                    348: /*
                    349:      End of Tape DBLK (EOTM)
                    350: */
                    351: typedef struct {
                    352:      MTF_DB_HDR     block_hdr;
                    353:      UINT64         eset_phys_blk_adr ;
                    354: } MTF_EOTM, * MTF_EOTM_PTR;
                    355: 
                    356: 
                    357: /**/
                    358: /*
                    359:      End of Set Pad DBLK (ESPB)
                    360: */
                    361: typedef struct {
                    362:      MTF_DB_HDR    block_hdr ;
                    363: } MTF_ESPB, * MTF_ESPB_PTR ;
                    364: 
                    365: 
                    366: 
                    367: /***************************************************************************\
                    368: 
                    369:                     MTF On Tape Catalog Structures
                    370: 
                    371: \***************************************************************************/
                    372: 
                    373: /**/
                    374: /*
                    375:      Set Map Header
                    376: */
                    377: typedef struct {
                    378:      UINT32    family_id ;
                    379:      UINT16    num_set_recs ;
                    380:      UINT8     pad[2] ;
                    381: } MTF_SM_HDR, * MTF_SM_HDR_PTR ;
                    382: 
                    383: 
                    384: /**/
                    385: /*
                    386:      Set Map Entry
                    387: */
                    388: typedef struct {
                    389:      UINT16              length ;
                    390:      UINT16              seq_num ;
                    391:      UINT32              blk_attribs ;
                    392:      UINT32              set_attribs ;
                    393:      UINT64              sset_pba ;
                    394:      UINT64              fdd_pba ;
                    395:      UINT16              fdd_seq_num ;
                    396:      UINT16              set_num ;
                    397:      UINT64              lba ;
                    398:      UINT32              num_dirs ;
                    399:      UINT32              num_files ;
                    400:      UINT32              num_corrupt_files ;
                    401:      UINT64              disp_size ;
                    402:      UINT16              num_volumes ;
                    403:      UINT16              pswd_encr_algor ;
                    404:      MTF_TAPE_ADDRESS    set_name ;
                    405:      MTF_TAPE_ADDRESS    password ;
                    406:      MTF_TAPE_ADDRESS    set_descr ;
                    407:      MTF_TAPE_ADDRESS    user_name ;
                    408:      MTF_DATE_TIME       backup_date ;
                    409:      INT8                time_zone ;
                    410:      UINT8               os_id ;
                    411:      UINT8               os_ver ;
                    412:      UINT8               string_type ;
                    413:      UINT8               tf_minor_ver ;
                    414:      UINT8               tape_cat_ver ;
                    415: } MTF_SM_ENTRY, * MTF_SM_ENTRY_PTR ;
                    416: 
                    417: 
                    418: /**/
                    419: /*
                    420:      File / Directory Detail Common Header
                    421: */
                    422: typedef struct {
                    423:      UINT16    length ;
                    424:      UINT8     type[4] ;
                    425:      UINT16    seq_num ;
                    426:      UINT32    blk_attribs ;
                    427:      UINT64    lba ;
                    428:      UINT64    disp_size ;
                    429:      INT32     link ;
                    430:      UINT8     os_id ;
                    431:      UINT8     os_ver ;
                    432:      UINT8     string_type ;
                    433:      UINT8     pad ;
                    434: } MTF_FDD_HDR, * MTF_FDD_HDR_PTR ;
                    435: 
                    436: 
                    437: /**/
                    438: /*
                    439:      File / Directory Detail and Set Map Volume Entry
                    440: */
                    441: typedef struct {
                    442:      UINT32              vol_attribs ;
                    443:      MTF_TAPE_ADDRESS    device_name ;
                    444:      MTF_TAPE_ADDRESS    vol_name ;
                    445:      MTF_TAPE_ADDRESS    machine_name ;
                    446:      MTF_DATE_TIME       backup_date ;
                    447: } MTF_FDD_VOL_V1, * MTF_FDD_VOL_V1_PTR ;
                    448: 
                    449: typedef struct {
                    450:      UINT32              vol_attribs ;
                    451:      MTF_TAPE_ADDRESS    device_name ;
                    452:      MTF_TAPE_ADDRESS    vol_name ;
                    453:      MTF_TAPE_ADDRESS    machine_name ;
                    454:      MTF_TAPE_ADDRESS    os_info ;
                    455:      MTF_DATE_TIME       backup_date ;
                    456: } MTF_FDD_VOL_V2, * MTF_FDD_VOL_V2_PTR ;
                    457: 
                    458: 
                    459: /**/
                    460: /*
                    461:      File / Directory Detail Directory Entry
                    462: */
                    463: typedef struct {
                    464:      MTF_DATE_TIME       last_mod_date ;
                    465:      MTF_DATE_TIME       create_date ;
                    466:      MTF_DATE_TIME       backup_date ;
                    467:      MTF_DATE_TIME       last_access_date ;
                    468:      UINT32              dir_attribs ;
                    469:      MTF_TAPE_ADDRESS    dir_name ;
                    470: } MTF_FDD_DIR_V1, * MTF_FDD_DIR_V1_PTR ;
                    471: 
                    472: typedef struct {
                    473:      MTF_DATE_TIME       last_mod_date ;
                    474:      MTF_DATE_TIME       create_date ;
                    475:      MTF_DATE_TIME       backup_date ;
                    476:      MTF_DATE_TIME       last_access_date ;
                    477:      UINT32              dir_attribs ;
                    478:      MTF_TAPE_ADDRESS    dir_name ;
                    479:      MTF_TAPE_ADDRESS    os_info ;
                    480: } MTF_FDD_DIR_V2, * MTF_FDD_DIR_V2_PTR ;
                    481: 
                    482: 
                    483: /**/
                    484: /*
                    485:      File / Directory Detail File Entry
                    486: */
                    487: typedef struct {
                    488:      MTF_DATE_TIME       last_mod_date ;
                    489:      MTF_DATE_TIME       create_date ;
                    490:      MTF_DATE_TIME       backup_date ;
                    491:      MTF_DATE_TIME       last_access_date ;
                    492:      UINT32              file_attribs ;
                    493:      MTF_TAPE_ADDRESS    file_name ;
                    494: } MTF_FDD_FILE_V1, * MTF_FDD_FILE_V1_PTR ;
                    495: 
                    496: typedef struct {
                    497:      MTF_DATE_TIME       last_mod_date ;
                    498:      MTF_DATE_TIME       create_date ;
                    499:      MTF_DATE_TIME       backup_date ;
                    500:      MTF_DATE_TIME       last_access_date ;
                    501:      UINT32              file_attribs ;
                    502:      MTF_TAPE_ADDRESS    file_name ;
                    503:      MTF_TAPE_ADDRESS    os_info ;
                    504: } MTF_FDD_FILE_V2, * MTF_FDD_FILE_V2_PTR ;
                    505: 
                    506: 
                    507: /* Turn packing back to what was specified on command line, or default
                    508:    packing.
                    509: */
                    510: #pragma pack()
                    511: 
                    512: #endif

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.