|
|
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.