13e12c5d1SDavid du Colombier #pragma lib "libc.a" 23e12c5d1SDavid du Colombier 3*219b2ee8SDavid du Colombier typedef 43e12c5d1SDavid du Colombier struct Fcall 53e12c5d1SDavid du Colombier { 63e12c5d1SDavid du Colombier char type; 73e12c5d1SDavid du Colombier short fid; 83e12c5d1SDavid du Colombier ushort tag; 93e12c5d1SDavid du Colombier union { 103e12c5d1SDavid du Colombier struct { 113e12c5d1SDavid du Colombier ushort oldtag; /* Tflush */ 123e12c5d1SDavid du Colombier Qid qid; /* Rattach, Rwalk, Ropen, Rcreate */ 13*219b2ee8SDavid du Colombier char rauth[AUTHENTLEN]; /* Rattach */ 143e12c5d1SDavid du Colombier }; 153e12c5d1SDavid du Colombier struct { 16*219b2ee8SDavid du Colombier char uname[NAMELEN]; /* Tattach */ 173e12c5d1SDavid du Colombier char aname[NAMELEN]; /* Tattach */ 18*219b2ee8SDavid du Colombier char ticket[TICKETLEN]; /* Tattach */ 19*219b2ee8SDavid du Colombier char auth[AUTHENTLEN]; /* Tattach */ 203e12c5d1SDavid du Colombier }; 213e12c5d1SDavid du Colombier struct { 223e12c5d1SDavid du Colombier char ename[ERRLEN]; /* Rerror */ 23*219b2ee8SDavid du Colombier char authid[NAMELEN]; /* Rsession */ 24*219b2ee8SDavid du Colombier char authdom[DOMLEN]; /* Rsession */ 25*219b2ee8SDavid du Colombier char chal[CHALLEN]; /* Tsession/Rsession */ 263e12c5d1SDavid du Colombier }; 273e12c5d1SDavid du Colombier struct { 283e12c5d1SDavid du Colombier long perm; /* Tcreate */ 293e12c5d1SDavid du Colombier short newfid; /* Tclone, Tclwalk */ 303e12c5d1SDavid du Colombier char name[NAMELEN]; /* Twalk, Tclwalk, Tcreate */ 313e12c5d1SDavid du Colombier char mode; /* Tcreate, Topen */ 323e12c5d1SDavid du Colombier }; 333e12c5d1SDavid du Colombier struct { 343e12c5d1SDavid du Colombier long offset; /* Tread, Twrite */ 353e12c5d1SDavid du Colombier long count; /* Tread, Twrite, Rread */ 363e12c5d1SDavid du Colombier char *data; /* Twrite, Rread */ 373e12c5d1SDavid du Colombier }; 383e12c5d1SDavid du Colombier struct { 393e12c5d1SDavid du Colombier char stat[DIRLEN]; /* Twstat, Rstat */ 403e12c5d1SDavid du Colombier }; 413e12c5d1SDavid du Colombier }; 42*219b2ee8SDavid du Colombier } Fcall; 433e12c5d1SDavid du Colombier 443e12c5d1SDavid du Colombier #define MAXFDATA 8192 45*219b2ee8SDavid du Colombier #define MAXMSG 160 /* max header sans data */ 463e12c5d1SDavid du Colombier #define NOTAG 0xFFFF /* Dummy tag */ 473e12c5d1SDavid du Colombier 483e12c5d1SDavid du Colombier enum 493e12c5d1SDavid du Colombier { 503e12c5d1SDavid du Colombier Tnop = 50, 513e12c5d1SDavid du Colombier Rnop, 52*219b2ee8SDavid du Colombier Tosession = 52, /* illegal */ 53*219b2ee8SDavid du Colombier Rosession, /* illegal */ 543e12c5d1SDavid du Colombier Terror = 54, /* illegal */ 553e12c5d1SDavid du Colombier Rerror, 563e12c5d1SDavid du Colombier Tflush = 56, 573e12c5d1SDavid du Colombier Rflush, 58*219b2ee8SDavid du Colombier Toattach = 58, /* illegal */ 59*219b2ee8SDavid du Colombier Roattach, /* illegal */ 603e12c5d1SDavid du Colombier Tclone = 60, 613e12c5d1SDavid du Colombier Rclone, 623e12c5d1SDavid du Colombier Twalk = 62, 633e12c5d1SDavid du Colombier Rwalk, 643e12c5d1SDavid du Colombier Topen = 64, 653e12c5d1SDavid du Colombier Ropen, 663e12c5d1SDavid du Colombier Tcreate = 66, 673e12c5d1SDavid du Colombier Rcreate, 683e12c5d1SDavid du Colombier Tread = 68, 693e12c5d1SDavid du Colombier Rread, 703e12c5d1SDavid du Colombier Twrite = 70, 713e12c5d1SDavid du Colombier Rwrite, 723e12c5d1SDavid du Colombier Tclunk = 72, 733e12c5d1SDavid du Colombier Rclunk, 743e12c5d1SDavid du Colombier Tremove = 74, 753e12c5d1SDavid du Colombier Rremove, 763e12c5d1SDavid du Colombier Tstat = 76, 773e12c5d1SDavid du Colombier Rstat, 783e12c5d1SDavid du Colombier Twstat = 78, 793e12c5d1SDavid du Colombier Rwstat, 803e12c5d1SDavid du Colombier Tclwalk = 80, 813e12c5d1SDavid du Colombier Rclwalk, 82*219b2ee8SDavid du Colombier Tauth = 82, /* illegal */ 83*219b2ee8SDavid du Colombier Rauth, /* illegal */ 84*219b2ee8SDavid du Colombier Tsession = 84, 85*219b2ee8SDavid du Colombier Rsession, 86*219b2ee8SDavid du Colombier Tattach = 86, 87*219b2ee8SDavid du Colombier Rattach, 883e12c5d1SDavid du Colombier }; 893e12c5d1SDavid du Colombier 903e12c5d1SDavid du Colombier int convM2S(char*, Fcall*, int); 913e12c5d1SDavid du Colombier int convS2M(Fcall*, char*); 923e12c5d1SDavid du Colombier 933e12c5d1SDavid du Colombier int convM2D(char*, Dir*); 943e12c5d1SDavid du Colombier int convD2M(Dir*, char*); 953e12c5d1SDavid du Colombier 96bd389b36SDavid du Colombier int fcallconv(void *, Fconv*); 97bd389b36SDavid du Colombier int dirconv(void *, Fconv*); 98bd389b36SDavid du Colombier int dirmodeconv(void *, Fconv*); 993e12c5d1SDavid du Colombier 1003e12c5d1SDavid du Colombier char* getS(int, char*, Fcall*, long*); 101*219b2ee8SDavid du Colombier 102