|
|
researchv10 Norman
/*
* FILES-11 ODS-1 data structures
* rude comments believed due to Rob Pike
*/
struct filnam {
unsigned short f_nam[3]; /* File name (Radix-50) */
unsigned short f_typ; /* File type (Radix-50) */
unsigned short f_ver; /* Version number */
};
struct uic {
char u_prog; /* Programmer number */
char u_proj; /* Project number */
};
struct fileid {
unsigned short f_num; /* File number */
unsigned short f_seq; /* File sequence number (worthless concept) */
unsigned short f_rvn; /* Relative volume number (ditto and MBZ) */
};
struct fcs {
char f_rtyp; /* Record type */
char f_ratt; /* Record attributes */
unsigned short f_rsiz; /* Record size */
unsigned short f_hibk[2]; /* Highest VBN allocated */
unsigned short f_efbk[2]; /* End of file block */
unsigned short f_ffby; /* First free byte */
};
/*
* record types and attributes
*/
#define RTVAR 2 /* variable length text records */
#define RTCR 2 /* carriage return format */
/* need RTBLK xx /* records don't cross blocks */
struct ident {
struct filnam i_fnam; /* File name, type, version number */
unsigned short i_rvno; /* Revision number */
char i_rvdt[7]; /* Revision date (ASCII) */
char i_rvti[6]; /* Revision time (ASCII) */
char i_crdt[7]; /* Creation time (ASCII) */
char i_crti[6]; /* Creation time (ASCII) */
char i_exdt[7]; /* Expiration date (ASCII) */
char i_UU; /* Unused */
};
struct map {
char m_esqn; /* Extension segment number */
char m_ervn; /* Extension relative volume number */
unsigned short m_efnu; /* Extension file number */
unsigned short m_efsq; /* Extension file sequence number */
char m_ctsz; /* Block count field size */
char m_lbsz; /* LBN Field size */
unsigned char m_use; /* Map words in use */
unsigned char m_max; /* Map words available */
unsigned char m_rtrvp[410]; /* Retrieval pointers */
};
struct header {
char h_idof; /* Ident area offset */
char h_mpof; /* Map area offset */
unsigned short h_fnum; /* File number */
unsigned short h_fseq; /* File sequence number (why no RVN?) */
unsigned short h_flev; /* File structure level */
struct uic h_fown; /* File owner UIC */
short h_fpro; /* File protection code */
char h_fcha[2]; /* File characteristics */
struct fcs h_fcs; /* FCS area */
char h_ufat[18]; /* User attribute area */
struct ident h_ident; /* Ident area */
struct map h_map; /* Map area */
};
struct homeblock {
unsigned short H_ibsz; /* Index file bitmap size */
unsigned short H_iblb[2]; /* Index file bitmap LBN */
unsigned short H_fmax; /* Maximum number of files */
unsigned short H_sbcl; /* Storage bitmap cluster factor */
unsigned short H_dvty; /* Disk device type */
unsigned short H_vlev; /* Volume structure level */
char H_vnam[12]; /* Volume name */
char H_UU1[4]; /* Unused 1 */
struct uic H_vown; /* Volume owner UIC */
short H_vpro; /* Volume protection code */
char H_vcha[2]; /* Volume characteristics */
short H_fpro; /* Default file protection */
char H_UU2[6]; /* Unused 2 */
char H_wisz; /* Default window size */
char H_fiex; /* Default file extend */
char H_lruc; /* Directory pre-access limit */
char H_UU3[11]; /* Unused 3 */
unsigned short H_chk1; /* First checksum */
char H_vdat[14]; /* Volume creation date */
char H_UU4[398]; /* Unused 4 */
char H_indn[12]; /* Volume name (don't you believe H_vnam?) */
char H_indo[12]; /* Volume owner (in a different format!) */
char H_indf[12]; /* Format type == "DECFILE11A " */
char H_UU5[2]; /* Unused 5 */
unsigned short H_chk2; /* Final checksum */
};
struct directory {
struct fileid d_fid; /* File id */
struct filnam d_fname; /* File name, type, version number */
};
#define BLKSIZ 512 /* size of a block */
#define HOMEBLK 1 /* home block is first 512-byte block */
#define HOMEOFF 512 /* or HOMEBLK+(HOMEOFF*j) for some j */
/*
* well-known files
*/
#define FINDEX 1 /* index file */
#define FBITMAP 2 /* storage bitmap */
#define FROOT 4 /* root directory (MFD) */
/*
* fileid to blkno
* blkno wrt beginning of list in index file
* for the well-known files, wrt known first file header
*/
#define fidtob(f) ((f)-1)
/*
* blocks in the index file
* zero-origin, not 1-origin VBNs
*/
/* boot block 0 */
/* home block 1 */
#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.