/** Copyright(c) Archive Software Division 1984-89 Name: sypl10.h Date Updated: $./FDT$ $./FTM$ Description: Defines the environment structures for the Sytos Plus Format $Log: T:\logfiles\sypl10.h_v $ Rev 1.10 16 Jan 1994 14:32:04 GREGG Unicode bug fixes. Rev 1.9 22 Nov 1993 18:09:10 BARRY Unicode fixes; got rid of tabs Rev 1.8 15 Jul 1993 14:21:10 STEVEN fix volume header Rev 1.6 19 May 1993 13:13:52 TerriLynn Steve got the correct location of the ECC flag Rev 1.5 11 May 1993 21:55:30 GREGG Moved Sytos translator stuff from layer-wide area to translator. Rev 1.4 10 May 1993 15:12:56 Terri_Lynn Added Steve's changes and My changes for EOM processing Rev 1.3 03 May 1993 16:22:10 TERRI General clean up Moved pragma pack statement to shorten effect Rev 1.2 26 Apr 1993 11:30:22 GREGG Sixth in a series of incremental changes to bring the translator in line with the MTF spec: - Redefined attribute bits to match the spec. - Eliminated unused/undocumented bits. - Added code to translate bits on tapes that were written wrong. Matches MAYN40RD.C 1.59, DBLKS.H 1.15, MAYN40.H 1.34, OTC40RD.C 1.26, SYPL10RD.C 1.8, BACK_VCB.C 1.17, MAYN31RD.C 1.44, SYPL10.H 1.2 Rev 1.1 17 Mar 1993 14:28:32 TERRI Initial CAYMAN beta release ** */ #if !defined SYPL10_H #define SYPL10_H #include "fsstream.h" #include "osinfo.h" #define UNQ_HDR_ID_LEN 9 #define MAX_ACL_INFO_LEN 0x980 #define MAX_EA_DATA_LEN 0x10000 #define SHORT_NAME_LEN 20 #define LONG_NAME_LEN 261 #define DESCRPT_LEN 256 #define FAT_FILE_SYSTEM 0xa000 #define PWD_CRYPT_CHAR 0x0069 /* password encryption character */ #define DRIVEROOT_TYPE 0x003c /* set in drive indicator for drive/root */ #define DIRECTORY_TYPE 0x0041 /* set in drive indicator for directory */ #define SYPL_MAX_STREAMS 4 #define S10_UNIQ_ID { 0xa2, 0x2a, 0x2a, 0xa2, 0xa2, 0x2a, 0x2a, 0xa2, 0x00 } typedef struct sypl_vcb SYPL_VCB, *SYPL_VCB_PTR ; struct sypl_vcb { UINT16 bset_num ; DATE_TIME backup_date_time ; /* from first block */ ACHAR drive[4] ; UINT32 attrib ; } ; typedef struct sypl_env { UINT8 volname[SHORT_NAME_LEN+1]; /* null terminated */ UINT8 password[SHORT_NAME_LEN+1] ; /* tape password null terminated */ UINT32 family_id ; /* from tape header UINT32 date */ UINT16 tape_seq_num ; /* sequence number */ DATE_TIME tape_date ; /* tape creation date */ INT8 tape_descrpt[DESCRPT_LEN+1] ; /* tape description */ INT8 bset_name[SHORT_NAME_LEN+1] ; /* backup set name */ INT8 bset_descrpt[DESCRPT_LEN+1] ; /* backup set description */ DATE_TIME bset_date ; /* backup set date */ UINT16 dir_attribs ; /* directory attributes */ DATE_TIME dir_date ; /* directory date */ UINT16 path_len ; /* length of path */ INT8 path_name[LONG_NAME_LEN+1] ; /* path name */ UINT16 file_attribs ; /* file attributes */ UINT32 file_size ; /* size of file */ UINT16 file_name_len ; /* length of file name */ INT8 file_name[LONG_NAME_LEN+1] ; /* file name */ DATE_TIME file_create_date ; /* file creation date */ DATE_TIME last_access_date ; /* file last access date */ DATE_TIME last_modified_date ; /* file last modified date */ SYPL_VCB current_vcb ; /* current vcb */ UINT16 block_size ; /* block size */ BOOLEAN bytes_left ; /* of header or ECC */ UINT32 prior_blocks_used ; /* copied from CHANNEL::blocks_used */ BOOLEAN continuing; /* TRUE if continuing */ UINT16 destination_tape_seq_num; /* sequence number */ BOOLEAN using_ecc ; /* TRUE if current tape has ECC */ BOOLEAN in_ecc ; /* TRUE if still processing ECC */ BOOLEAN processed_ddb ; /* TRUE if the drive root directory header has been processed */ UINT16 no_streams ; /* number of streams */ UINT16 currentStream ; /* current stream */ STREAM_INFO streams[SYPL_MAX_STREAMS] ; /* array of streams for this block type */ UINT32 pad_size ; /* pad */ BOOLEAN streamMode ; /* yeah or nay */ INT32 next_retrans_size ; } S10_ENV, *S10_ENV_PTR ; typedef enum s10_header_types { tape_header_type = 0x00, file_header_type = 0x02, ecc_header_type = 0x04, backup_set_header_type = 0x05, unknown_header_type = 0x08, directory_header_type = 0x15, } s10_header_types ; #pragma pack(1) typedef struct hdr_common { UINT16 drive_indicator; /* 0 drive or sub directory indicated */ UINT8 uniq_tape_id[UNQ_HDR_ID_LEN]; /* 2 unique header id defined above */ UINT8 type; /* 10 type of header */ } S10_COMMON_HEADER, *S10_COMMON_HEADER_PTR ; typedef struct tape_header_ts { S10_COMMON_HEADER common; /* 0 common to all headers */ INT8 tape_name[SHORT_NAME_LEN]; /* 12 null terminated */ INT8 tape_descrpt[DESCRPT_LEN]; /* 32 tape description */ INT8 password[SHORT_NAME_LEN]; /* 288 tape password */ UINT32 tape_date; /* 308 date of tape creation */ UINT16 tape_seq_num; /* 312 Tape number 1 based */ UINT16 exp_date ; UINT16 MaVevnum ; UINT16 MiVevnum ; UINT16 qfa_flag; /* 322 Quick File Access */ UINT16 ecc_flag; /* 323 if 1 HARDWARE ECC present, 0 otherwise */ UINT8 unkown2[186]; /* 323 unkown */ } S10_TAPE_HEADER, *S10_TAPE_HEADER_PTR ; typedef struct unknown_header_u { S10_COMMON_HEADER common; /* 0 common to all headers */ UINT8 unknown[500]; /* 12 usually zeros or junk */ } S10_UNKOWN_HEADER, *S10_UNKOWN_HEADER_PTR ; typedef struct backup_set_header_b { S10_COMMON_HEADER common; /* 0 common to all headers */ UINT16 end_of_backup; /* 12 if 1 this is end of set 0 for start */ INT8 bset_name[SHORT_NAME_LEN]; /* 14 backup set name */ INT8 bset_descrpt[DESCRPT_LEN]; /* 34 backup set description */ UINT32 bset_date; /* 290 backup set date */ UINT8 unkown1[2]; /* 294 unkown */ UINT8 compression; /* 296 1=compressed, 0=no compression */ UINT8 unkown[31]; /* 297 unknown */ UINT8 eom_identifier[16]; /* 328 EOM identifier */ UINT8 unkown2[168]; /* 344 unkown */ } S10_BACKUP_SET_HEADER, *S10_BACKUP_SET_HEADER_PTR ; typedef struct directory_header_d { S10_COMMON_HEADER common; /* 0 common to all headers */ UINT16 dir_attribs; /* 12 attributes of the directory */ UINT8 unkown1[6]; /* 14 unkown */ UINT32 dir_date; /* 20 41 = date of sub directory; 3C = backup date */ UINT8 unkown2[2]; /* 24 unkown */ UINT16 ea_data_len; /* 26 length of extended attrib data */ UINT8 unkown3[4]; /* 28 unkown */ INT16 acl_info_len; /* 32 length of acl info */ UINT8 unkown4[22]; /* 34 unkown */ UINT16 path_len; /* 56 length of path */ INT8 path_name[261]; /* 58 path name */ UINT8 unkown5[193]; /* 319 unkown */ } S10_DIRECTORY_HEADER, *S10_DIRECTORY_HEADER_PTR ; typedef struct file_header_f { S10_COMMON_HEADER common; /* 0 common to all headers */ UINT16 file_attribs; /* 12 attributes of the file */ UINT8 unkown[2]; /* 14 unkown */ UINT16 ea_data_len; /* 16 length of ea data */ UINT8 unkown1[4]; /* 18 unkown */ UINT32 file_size; /* 22 size of file */ UINT8 unkown2[12]; /* 26 unkown */ UINT32 file_create_date; /* 38 file creation date - HPFS */ UINT32 last_access_date; /* 42 last access date - HPFS */ UINT32 last_modified_date; /* 46 last modified date - HPFS */ UINT32 file_last_access; /* 50 same as file_last access - HPFS */ UINT8 unkown3[6]; /* 54 unkown */ INT16 acl_info_len; /* 60 length of ACL info */ UINT8 unkown4[24]; /* 62 unkown */ UINT16 filename_len; /* 86 length of file name */ INT8 filename[261]; /* 88 path and file name */ UINT8 unkown5[163]; /* 349 unkown */ } S10_FILE_HEADER, *S10_FILE_HEADER_PTR ; typedef struct ecc_header_e { S10_COMMON_HEADER common; /* 0 common to all headers */ UINT8 unkown1[500]; /* 12 unkown */ } S10_ECC_HEADER, *S10_ECC_HEADER_PTR; typedef struct acl_info_a { UINT8 far *resource_name; /* 0 not used contains garbarge */ UINT16 audit_attribs; /* 1 audit attributes none if 0 */ UINT16 num_of_structs; /* 3 count of acl info structs to follow */ } S10_ACL_INFO, *S10_ACL_INFO_PTR; typedef struct acl_data_a { INT8 usergrp_name[22]; /* User or Group name, null terminated */ UINT16 access_rights; /* bits that define the user/goup access rights */ } S10_ACL_DATA, *S10_ACL_DATA_PTR; typedef struct os2_dir_info_m { OS2_DIR_OS_INFO os2_dir_info ; /* Inorder to handoff the dir name */ INT8 string[261] ; /* as well as the ea, or acl info */ } OS2_DIR_INFO, *OS2_DIR_INFO_PTR ; /* to the file system */ typedef struct os2_file_info_m { OS2_FILE_OS_INFO os2_file_info ; /* Inorder to handoff the file name */ INT8 string[261] ; /* as well as the ea, acl and data */ } OS2_FILE_INFO, *OS2_FILE_INFO_PTR ; /* info to the file system */ typedef struct date_field_d { unsigned day : 5 ; /* Extracts the correct number of */ unsigned month : 4 ; /* bits for the "Motorola" type */ unsigned year : 7 ; /* DOS date/time */ } S10_DATE_FIELD, *S10_DATE_FIELD_PTR ; typedef struct time_field_t { unsigned second : 5 ; /* Extracts the correct number of */ unsigned minute : 6 ; /* bits for the "Motorola" type */ unsigned hour : 5 ; /* DOS date/time */ } S10_TIME_FIELD, *S10_TIME_FIELD_PTR ; #pragma pack() #endif