| typedef	struct Ioclust	Ioclust; | 
 | typedef	struct Iobuf	Iobuf; | 
 | typedef	struct Isofile	Isofile; | 
 | typedef struct Xdata	Xdata; | 
 | typedef struct Xfile	Xfile; | 
 | typedef struct Xfs	Xfs; | 
 | typedef struct Xfsub	Xfsub; | 
 |  | 
 | #pragma incomplete Isofile | 
 |  | 
 | enum | 
 | { | 
 | 	Sectorsize = 2048, | 
 | 	Maxname = 256, | 
 | }; | 
 |  | 
 | struct Iobuf | 
 | { | 
 | 	Ioclust* clust; | 
 | 	long	addr; | 
 | 	uchar*	iobuf; | 
 | }; | 
 |  | 
 | struct Ioclust | 
 | { | 
 | 	long	addr;			/* in sectors; good to 8TB */ | 
 | 	Xdata*	dev; | 
 | 	Ioclust* next; | 
 | 	Ioclust* prev; | 
 | 	int	busy; | 
 | 	int	nbuf; | 
 | 	Iobuf*	buf; | 
 | 	uchar*	iobuf; | 
 | }; | 
 |  | 
 | struct Xdata | 
 | { | 
 | 	Xdata*	next; | 
 | 	char*	name;		/* of underlying file */ | 
 | 	Qid	qid; | 
 | 	short	type; | 
 | 	short	fdev; | 
 | 	int	ref;		/* attach count */ | 
 | 	int	dev;		/* for read/write */ | 
 | }; | 
 |  | 
 | struct Xfsub | 
 | { | 
 | 	void	(*reset)(void); | 
 | 	int	(*attach)(Xfile*); | 
 | 	void	(*clone)(Xfile*, Xfile*); | 
 | 	void	(*walkup)(Xfile*); | 
 | 	void	(*walk)(Xfile*, char*); | 
 | 	void	(*open)(Xfile*, int); | 
 | 	void	(*create)(Xfile*, char*, long, int); | 
 | 	long	(*readdir)(Xfile*, uchar*, long, long); | 
 | 	long	(*read)(Xfile*, char*, vlong, long); | 
 | 	long	(*write)(Xfile*, char*, vlong, long); | 
 | 	void	(*clunk)(Xfile*); | 
 | 	void	(*remove)(Xfile*); | 
 | 	void	(*stat)(Xfile*, Dir*); | 
 | 	void	(*wstat)(Xfile*, Dir*); | 
 | }; | 
 |  | 
 | struct Xfs | 
 | { | 
 | 	Xdata*	d;		/* how to get the bits */ | 
 | 	Xfsub*	s;		/* how to use them */ | 
 | 	int	ref; | 
 | 	int	issusp;	/* follows system use sharing protocol */ | 
 | 	long	suspoff;	/* if so, offset at which SUSP area begins */ | 
 | 	int	isrock;	/* Rock Ridge format */ | 
 | 	int	isplan9;	/* has Plan 9-specific directory info */ | 
 | 	Qid	rootqid; | 
 | 	Isofile*	ptr;		/* private data */ | 
 | }; | 
 |  | 
 | struct Xfile | 
 | { | 
 | 	Xfile*	next;		/* in fid hash bucket */ | 
 | 	Xfs*	xf; | 
 | 	long	fid; | 
 | 	ulong	flags; | 
 | 	Qid	qid; | 
 | 	int	len;		/* of private data */ | 
 | 	Isofile*	ptr; | 
 | }; | 
 |  | 
 | enum | 
 | { | 
 | 	Asis, | 
 | 	Clean, | 
 | 	Clunk | 
 | }; | 
 |  | 
 | enum | 
 | { | 
 | 	Oread = 1, | 
 | 	Owrite = 2, | 
 | 	Orclose = 4, | 
 | 	Omodes = 3, | 
 | }; | 
 |  | 
 | extern char	Enonexist[];	/* file does not exist */ | 
 | extern char	Eperm[];	/* permission denied */ | 
 | extern char	Enofile[];	/* no file system specified */ | 
 | extern char	Eauth[];	/* authentication failed */ | 
 |  | 
 | extern char	*srvname; | 
 | extern char	*deffile; | 
 | extern int	chatty; | 
 | extern jmp_buf	err_lab[]; | 
 | extern int	nerr_lab; | 
 | extern char	err_msg[]; | 
 |  | 
 | extern int nojoliet; | 
 | extern int noplan9; | 
 | extern int norock; |