Charles.Forsyth20060303644188019 years agoHistory
110 lines · 2.3 KB · C
RawDownload
typedef struct Dosboot	Dosboot;typedef struct Dos	Dos;typedef struct Dosdir	Dosdir;typedef struct Dosfile	Dosfile;typedef struct Dospart	Dospart; struct Dospart{	uchar flag;		/* active flag */	uchar shead;		/* starting head */	uchar scs[2];		/* starting cylinder/sector */	uchar type;		/* partition type */	uchar ehead;		/* ending head */	uchar ecs[2];		/* ending cylinder/sector */	uchar start[4];		/* starting sector */	uchar len[4];		/* length in sectors */}; #define FAT12	0x01#define FAT16	0x04#define FATHUGE	0x06#define DMDDO	0x54 struct Dosboot{	uchar	magic[3];	uchar	version[8];	uchar	sectsize[2];	uchar	clustsize;	uchar	nresrv[2];	uchar	nfats;	uchar	rootsize[2];	uchar	volsize[2];	uchar	mediadesc;	uchar	fatsize[2];	uchar	trksize[2];	uchar	nheads[2];	uchar	nhidden[4];	uchar	bigvolsize[4];	uchar	driveno;	uchar	reserved0;	uchar	bootsig;	uchar	volid[4];	uchar	label[11];	uchar	reserved1[8];}; struct Dosfile{	Dos	*dos;		/* owning dos file system */	char	name[8];	char	ext[3];	uchar	attr;	long	length;	long	pstart;		/* physical start cluster address */	long	pcurrent;	/* physical current cluster address */	long	lcurrent;	/* logical current cluster address */	long	offset;}; struct Dos{	int	dev;				/* device id */	long	(*read)(int, void*, long);	/* read routine */	long	(*seek)(int, long);		/* seek routine */ 	int	start;		/* start of file system */	int	sectsize;	/* in bytes */	int	clustsize;	/* in sectors */	int	clustbytes;	/* in bytes */	int	nresrv;		/* sectors */	int	nfats;		/* usually 2 */	int	rootsize;	/* number of entries */	int	volsize;	/* in sectors */	int	mediadesc;	int	fatsize;	/* in sectors */	int	fatclusters;	int	fatbits;	/* 12 or 16 */	long	fataddr;	/* sector number */	long	rootaddr;	long	dataaddr;	long	freeptr; 	Dosfile	root;}; struct Dosdir{	uchar	name[8];	uchar	ext[3];	uchar	attr;	uchar	reserved[10];	uchar	time[2];	uchar	date[2];	uchar	start[2];	uchar	length[4];}; #define	DRONLY	0x01#define	DHIDDEN	0x02#define	DSYSTEM	0x04#define	DVLABEL	0x08#define	DDIR	0x10#define	DARCH	0x20 extern int chatty; extern int dosboot(Dos*, char*);extern int dosinit(Dos*, int, int);extern long dosread(Dosfile*, void*, long);extern int dosstat(Dos*, char*, Dosfile*);extern int doswalk(Dosfile*, char*); extern int plan9ini(Dos*, char*);