summaryrefslogblamecommitdiffstats
path: root/private/utils/ntbackup/inc/sypl10.h
blob: c7fc5e64965f953a8c13b0f0f6360bbc72e541ba (plain) (tree)























































































































































































































































                                                                                                                  
/**
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