|
|
1.1 ! root 1: /* ! 2: * FILES-11 ODS-1 data structures ! 3: * rude comments believed due to Rob Pike ! 4: */ ! 5: ! 6: struct filnam { ! 7: unsigned short f_nam[3]; /* File name (Radix-50) */ ! 8: unsigned short f_typ; /* File type (Radix-50) */ ! 9: unsigned short f_ver; /* Version number */ ! 10: }; ! 11: ! 12: struct uic { ! 13: char u_prog; /* Programmer number */ ! 14: char u_proj; /* Project number */ ! 15: }; ! 16: ! 17: struct fileid { ! 18: unsigned short f_num; /* File number */ ! 19: unsigned short f_seq; /* File sequence number (worthless concept) */ ! 20: unsigned short f_rvn; /* Relative volume number (ditto and MBZ) */ ! 21: }; ! 22: ! 23: struct fcs { ! 24: char f_rtyp; /* Record type */ ! 25: char f_ratt; /* Record attributes */ ! 26: unsigned short f_rsiz; /* Record size */ ! 27: unsigned short f_hibk[2]; /* Highest VBN allocated */ ! 28: unsigned short f_efbk[2]; /* End of file block */ ! 29: unsigned short f_ffby; /* First free byte */ ! 30: }; ! 31: ! 32: /* ! 33: * record types and attributes ! 34: */ ! 35: #define RTVAR 2 /* variable length text records */ ! 36: #define RTCR 2 /* carriage return format */ ! 37: /* need RTBLK xx /* records don't cross blocks */ ! 38: ! 39: struct ident { ! 40: struct filnam i_fnam; /* File name, type, version number */ ! 41: unsigned short i_rvno; /* Revision number */ ! 42: char i_rvdt[7]; /* Revision date (ASCII) */ ! 43: char i_rvti[6]; /* Revision time (ASCII) */ ! 44: char i_crdt[7]; /* Creation time (ASCII) */ ! 45: char i_crti[6]; /* Creation time (ASCII) */ ! 46: char i_exdt[7]; /* Expiration date (ASCII) */ ! 47: char i_UU; /* Unused */ ! 48: }; ! 49: ! 50: struct map { ! 51: char m_esqn; /* Extension segment number */ ! 52: char m_ervn; /* Extension relative volume number */ ! 53: unsigned short m_efnu; /* Extension file number */ ! 54: unsigned short m_efsq; /* Extension file sequence number */ ! 55: char m_ctsz; /* Block count field size */ ! 56: char m_lbsz; /* LBN Field size */ ! 57: unsigned char m_use; /* Map words in use */ ! 58: unsigned char m_max; /* Map words available */ ! 59: unsigned char m_rtrvp[410]; /* Retrieval pointers */ ! 60: }; ! 61: ! 62: struct header { ! 63: char h_idof; /* Ident area offset */ ! 64: char h_mpof; /* Map area offset */ ! 65: unsigned short h_fnum; /* File number */ ! 66: unsigned short h_fseq; /* File sequence number (why no RVN?) */ ! 67: unsigned short h_flev; /* File structure level */ ! 68: struct uic h_fown; /* File owner UIC */ ! 69: short h_fpro; /* File protection code */ ! 70: char h_fcha[2]; /* File characteristics */ ! 71: struct fcs h_fcs; /* FCS area */ ! 72: char h_ufat[18]; /* User attribute area */ ! 73: struct ident h_ident; /* Ident area */ ! 74: struct map h_map; /* Map area */ ! 75: }; ! 76: ! 77: struct homeblock { ! 78: unsigned short H_ibsz; /* Index file bitmap size */ ! 79: unsigned short H_iblb[2]; /* Index file bitmap LBN */ ! 80: unsigned short H_fmax; /* Maximum number of files */ ! 81: unsigned short H_sbcl; /* Storage bitmap cluster factor */ ! 82: unsigned short H_dvty; /* Disk device type */ ! 83: unsigned short H_vlev; /* Volume structure level */ ! 84: char H_vnam[12]; /* Volume name */ ! 85: char H_UU1[4]; /* Unused 1 */ ! 86: struct uic H_vown; /* Volume owner UIC */ ! 87: short H_vpro; /* Volume protection code */ ! 88: char H_vcha[2]; /* Volume characteristics */ ! 89: short H_fpro; /* Default file protection */ ! 90: char H_UU2[6]; /* Unused 2 */ ! 91: char H_wisz; /* Default window size */ ! 92: char H_fiex; /* Default file extend */ ! 93: char H_lruc; /* Directory pre-access limit */ ! 94: char H_UU3[11]; /* Unused 3 */ ! 95: unsigned short H_chk1; /* First checksum */ ! 96: char H_vdat[14]; /* Volume creation date */ ! 97: char H_UU4[398]; /* Unused 4 */ ! 98: char H_indn[12]; /* Volume name (don't you believe H_vnam?) */ ! 99: char H_indo[12]; /* Volume owner (in a different format!) */ ! 100: char H_indf[12]; /* Format type == "DECFILE11A " */ ! 101: char H_UU5[2]; /* Unused 5 */ ! 102: unsigned short H_chk2; /* Final checksum */ ! 103: }; ! 104: ! 105: struct directory { ! 106: struct fileid d_fid; /* File id */ ! 107: struct filnam d_fname; /* File name, type, version number */ ! 108: }; ! 109: ! 110: #define BLKSIZ 512 /* size of a block */ ! 111: ! 112: #define HOMEBLK 1 /* home block is first 512-byte block */ ! 113: #define HOMEOFF 512 /* or HOMEBLK+(HOMEOFF*j) for some j */ ! 114: ! 115: /* ! 116: * well-known files ! 117: */ ! 118: #define FINDEX 1 /* index file */ ! 119: #define FBITMAP 2 /* storage bitmap */ ! 120: #define FROOT 4 /* root directory (MFD) */ ! 121: ! 122: /* ! 123: * fileid to blkno ! 124: * blkno wrt beginning of list in index file ! 125: * for the well-known files, wrt known first file header ! 126: */ ! 127: #define fidtob(f) ((f)-1) ! 128: ! 129: /* ! 130: * blocks in the index file ! 131: * zero-origin, not 1-origin VBNs ! 132: */ ! 133: ! 134: /* boot block 0 */ ! 135: /* home block 1 */ ! 136: #define IBITMAP 2 /* first block of bitmap */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.