xref: /plan9/sys/src/cmd/unix/drawterm/include/fcall.h (revision 58da3067adcdccaaa043d0bfde28ba83b7ced07d)
18ccd4a63SDavid du Colombier #define	VERSION9P	"9P2000"
28ccd4a63SDavid du Colombier 
38ccd4a63SDavid du Colombier #define	MAXWELEM	16
48ccd4a63SDavid du Colombier 
58ccd4a63SDavid du Colombier typedef
68ccd4a63SDavid du Colombier struct	Fcall
78ccd4a63SDavid du Colombier {
88ccd4a63SDavid du Colombier 	uchar	type;
98ccd4a63SDavid du Colombier 	u32int	fid;
108ccd4a63SDavid du Colombier 	ushort	tag;
118ccd4a63SDavid du Colombier 	u32int	msize;		/* Tversion, Rversion */
128ccd4a63SDavid du Colombier 	char	*version;	/* Tversion, Rversion */
138ccd4a63SDavid du Colombier 	ushort	oldtag;		/* Tflush */
148ccd4a63SDavid du Colombier 	char	*ename;		/* Rerror */
158ccd4a63SDavid du Colombier 	Qid	qid;		/* Rattach, Ropen, Rcreate */
168ccd4a63SDavid du Colombier 	u32int	iounit;		/* Ropen, Rcreate */
178ccd4a63SDavid du Colombier 	Qid	aqid;		/* Rauth */
188ccd4a63SDavid du Colombier 	u32int	afid;		/* Tauth, Tattach */
198ccd4a63SDavid du Colombier 	char	*uname;		/* Tauth, Tattach */
208ccd4a63SDavid du Colombier 	char	*aname;		/* Tauth, Tattach */
218ccd4a63SDavid du Colombier 	u32int	perm;		/* Tcreate */
228ccd4a63SDavid du Colombier 	char	*name;		/* Tcreate */
238ccd4a63SDavid du Colombier 	uchar	mode;		/* Tcreate, Topen */
248ccd4a63SDavid du Colombier 	u32int	newfid;		/* Twalk */
258ccd4a63SDavid du Colombier 	ushort	nwname;		/* Twalk */
268ccd4a63SDavid du Colombier 	char	*wname[MAXWELEM];	/* Twalk */
278ccd4a63SDavid du Colombier 	ushort	nwqid;		/* Rwalk */
288ccd4a63SDavid du Colombier 	Qid	wqid[MAXWELEM];		/* Rwalk */
298ccd4a63SDavid du Colombier 	vlong	offset;		/* Tread, Twrite */
308ccd4a63SDavid du Colombier 	u32int	count;		/* Tread, Twrite, Rread */
318ccd4a63SDavid du Colombier 	char	*data;		/* Twrite, Rread */
328ccd4a63SDavid du Colombier 	ushort	nstat;		/* Twstat, Rstat */
338ccd4a63SDavid du Colombier 	uchar	*stat;		/* Twstat, Rstat */
348ccd4a63SDavid du Colombier } Fcall;
358ccd4a63SDavid du Colombier 
368ccd4a63SDavid du Colombier 
378ccd4a63SDavid du Colombier #define	GBIT8(p)	((p)[0])
388ccd4a63SDavid du Colombier #define	GBIT16(p)	((p)[0]|((p)[1]<<8))
398ccd4a63SDavid du Colombier #define	GBIT32(p)	((p)[0]|((p)[1]<<8)|((p)[2]<<16)|((p)[3]<<24))
40*58da3067SDavid du Colombier #define	GBIT64(p)	((vlong)((p)[0]|((p)[1]<<8)|((p)[2]<<16)|((p)[3]<<24)) |\
418ccd4a63SDavid du Colombier 				((vlong)((p)[4]|((p)[5]<<8)|((p)[6]<<16)|((p)[7]<<24)) << 32))
428ccd4a63SDavid du Colombier 
438ccd4a63SDavid du Colombier #define	PBIT8(p,v)	(p)[0]=(v)
448ccd4a63SDavid du Colombier #define	PBIT16(p,v)	(p)[0]=(v);(p)[1]=(v)>>8
458ccd4a63SDavid du Colombier #define	PBIT32(p,v)	(p)[0]=(v);(p)[1]=(v)>>8;(p)[2]=(v)>>16;(p)[3]=(v)>>24
468ccd4a63SDavid du Colombier #define	PBIT64(p,v)	(p)[0]=(v);(p)[1]=(v)>>8;(p)[2]=(v)>>16;(p)[3]=(v)>>24;\
478ccd4a63SDavid du Colombier 			(p)[4]=(v)>>32;(p)[5]=(v)>>40;(p)[6]=(v)>>48;(p)[7]=(v)>>56
488ccd4a63SDavid du Colombier 
498ccd4a63SDavid du Colombier #define	BIT8SZ		1
508ccd4a63SDavid du Colombier #define	BIT16SZ		2
518ccd4a63SDavid du Colombier #define	BIT32SZ		4
528ccd4a63SDavid du Colombier #define	BIT64SZ		8
538ccd4a63SDavid du Colombier #define	QIDSZ	(BIT8SZ+BIT32SZ+BIT64SZ)
548ccd4a63SDavid du Colombier 
558ccd4a63SDavid du Colombier /* STATFIXLEN includes leading 16-bit count */
568ccd4a63SDavid du Colombier /* The count, however, excludes itself; total size is BIT16SZ+count */
578ccd4a63SDavid du Colombier #define STATFIXLEN	(BIT16SZ+QIDSZ+5*BIT16SZ+4*BIT32SZ+1*BIT64SZ)	/* amount of fixed length data in a stat buffer */
588ccd4a63SDavid du Colombier 
598ccd4a63SDavid du Colombier #define	NOTAG		(ushort)~0U	/* Dummy tag */
608ccd4a63SDavid du Colombier #define	NOFID		(u32int)~0U	/* Dummy fid */
618ccd4a63SDavid du Colombier #define	IOHDRSZ		24	/* ample room for Twrite/Rread header (iounit) */
628ccd4a63SDavid du Colombier 
638ccd4a63SDavid du Colombier enum
648ccd4a63SDavid du Colombier {
658ccd4a63SDavid du Colombier 	Tversion =	100,
668ccd4a63SDavid du Colombier 	Rversion,
678ccd4a63SDavid du Colombier 	Tauth =		102,
688ccd4a63SDavid du Colombier 	Rauth,
698ccd4a63SDavid du Colombier 	Tattach =	104,
708ccd4a63SDavid du Colombier 	Rattach,
718ccd4a63SDavid du Colombier 	Terror =	106,	/* illegal */
728ccd4a63SDavid du Colombier 	Rerror,
738ccd4a63SDavid du Colombier 	Tflush =	108,
748ccd4a63SDavid du Colombier 	Rflush,
758ccd4a63SDavid du Colombier 	Twalk =		110,
768ccd4a63SDavid du Colombier 	Rwalk,
778ccd4a63SDavid du Colombier 	Topen =		112,
788ccd4a63SDavid du Colombier 	Ropen,
798ccd4a63SDavid du Colombier 	Tcreate =	114,
808ccd4a63SDavid du Colombier 	Rcreate,
818ccd4a63SDavid du Colombier 	Tread =		116,
828ccd4a63SDavid du Colombier 	Rread,
838ccd4a63SDavid du Colombier 	Twrite =	118,
848ccd4a63SDavid du Colombier 	Rwrite,
858ccd4a63SDavid du Colombier 	Tclunk =	120,
868ccd4a63SDavid du Colombier 	Rclunk,
878ccd4a63SDavid du Colombier 	Tremove =	122,
888ccd4a63SDavid du Colombier 	Rremove,
898ccd4a63SDavid du Colombier 	Tstat =		124,
908ccd4a63SDavid du Colombier 	Rstat,
918ccd4a63SDavid du Colombier 	Twstat =	126,
928ccd4a63SDavid du Colombier 	Rwstat,
938ccd4a63SDavid du Colombier 	Tmax,
948ccd4a63SDavid du Colombier };
958ccd4a63SDavid du Colombier 
968ccd4a63SDavid du Colombier uint	convM2S(uchar*, uint, Fcall*);
978ccd4a63SDavid du Colombier uint	convS2M(Fcall*, uchar*, uint);
988ccd4a63SDavid du Colombier uint	sizeS2M(Fcall*);
998ccd4a63SDavid du Colombier 
1008ccd4a63SDavid du Colombier int	statcheck(uchar *abuf, uint nbuf);
1018ccd4a63SDavid du Colombier uint	convM2D(uchar*, uint, Dir*, char*);
1028ccd4a63SDavid du Colombier uint	convD2M(Dir*, uchar*, uint);
1038ccd4a63SDavid du Colombier uint	sizeD2M(Dir*);
1048ccd4a63SDavid du Colombier 
1058ccd4a63SDavid du Colombier int	fcallfmt(Fmt*);
1068ccd4a63SDavid du Colombier int	dirfmt(Fmt*);
1078ccd4a63SDavid du Colombier int	dirmodefmt(Fmt*);
1088ccd4a63SDavid du Colombier 
1098ccd4a63SDavid du Colombier int	read9pmsg(int, void*, uint);
1108ccd4a63SDavid du Colombier 
111