1*46439007SCharles.ForsythStyx: module 2*46439007SCharles.Forsyth{ 3*46439007SCharles.Forsyth PATH: con "/dis/lib/styx.dis"; 4*46439007SCharles.Forsyth PATHV1: con "/dis/lib/styx1.dis"; 5*46439007SCharles.Forsyth 6*46439007SCharles.Forsyth VERSION: con "9P2000"; 7*46439007SCharles.Forsyth MAXWELEM: con 16; 8*46439007SCharles.Forsyth 9*46439007SCharles.Forsyth NOTAG: con 16rFFFF; 10*46439007SCharles.Forsyth NOFID: con int ~0; # 32 bits in this version of Styx 11*46439007SCharles.Forsyth 12*46439007SCharles.Forsyth BIT8SZ: con 1; 13*46439007SCharles.Forsyth BIT16SZ: con 2; 14*46439007SCharles.Forsyth BIT32SZ: con 4; 15*46439007SCharles.Forsyth BIT64SZ: con 8; 16*46439007SCharles.Forsyth QIDSZ: con BIT8SZ+BIT32SZ+BIT64SZ; 17*46439007SCharles.Forsyth 18*46439007SCharles.Forsyth STATFIXLEN: con BIT16SZ+QIDSZ+5*BIT16SZ+4*BIT32SZ+BIT64SZ; # amount of fixed length data in a stat buffer 19*46439007SCharles.Forsyth IOHDRSZ: con 24; # room for Twrite/Rread header 20*46439007SCharles.Forsyth MAXFDATA: con 8192; # `reasonable' iounit 21*46439007SCharles.Forsyth MAXRPC: con IOHDRSZ+MAXFDATA; # usable default for fversion and iounit 22*46439007SCharles.Forsyth 23*46439007SCharles.Forsyth Tversion, # 100 24*46439007SCharles.Forsyth Rversion, 25*46439007SCharles.Forsyth Tauth, # 102 26*46439007SCharles.Forsyth Rauth, 27*46439007SCharles.Forsyth Tattach, # 104 28*46439007SCharles.Forsyth Rattach, 29*46439007SCharles.Forsyth Terror, # 106, illegal 30*46439007SCharles.Forsyth Rerror, 31*46439007SCharles.Forsyth Tflush, #108 32*46439007SCharles.Forsyth Rflush, 33*46439007SCharles.Forsyth Twalk, # 110 34*46439007SCharles.Forsyth Rwalk, 35*46439007SCharles.Forsyth Topen, # 112 36*46439007SCharles.Forsyth Ropen, 37*46439007SCharles.Forsyth Tcreate, # 114 38*46439007SCharles.Forsyth Rcreate, 39*46439007SCharles.Forsyth Tread, # 116 40*46439007SCharles.Forsyth Rread, 41*46439007SCharles.Forsyth Twrite, # 118 42*46439007SCharles.Forsyth Rwrite, 43*46439007SCharles.Forsyth Tclunk, # 120 44*46439007SCharles.Forsyth Rclunk, 45*46439007SCharles.Forsyth Tremove, # 122 46*46439007SCharles.Forsyth Rremove, 47*46439007SCharles.Forsyth Tstat, # 124 48*46439007SCharles.Forsyth Rstat, 49*46439007SCharles.Forsyth Twstat, #126 50*46439007SCharles.Forsyth Rwstat, 51*46439007SCharles.Forsyth Tmax: con 100+iota; 52*46439007SCharles.Forsyth 53*46439007SCharles.Forsyth ERRMAX: con 128; 54*46439007SCharles.Forsyth 55*46439007SCharles.Forsyth OREAD: con 0; # open for read 56*46439007SCharles.Forsyth OWRITE: con 1; # write 57*46439007SCharles.Forsyth ORDWR: con 2; # read and write 58*46439007SCharles.Forsyth OEXEC: con 3; # execute, == read but check execute permission 59*46439007SCharles.Forsyth OTRUNC: con 16; # or'ed in (except for exec), truncate file first 60*46439007SCharles.Forsyth ORCLOSE: con 64; # or'ed in, remove on close 61*46439007SCharles.Forsyth 62*46439007SCharles.Forsyth # mode bits in Dir.mode used by the protocol 63*46439007SCharles.Forsyth DMDIR: con int 1<<31; # mode bit for directory 64*46439007SCharles.Forsyth DMAPPEND: con int 1<<30; # mode bit for append-only files 65*46439007SCharles.Forsyth DMEXCL: con int 1<<29; # mode bit for exclusive use files 66*46439007SCharles.Forsyth DMAUTH: con int 1<<27; # mode bit for authentication files 67*46439007SCharles.Forsyth 68*46439007SCharles.Forsyth # Qid.qtype 69*46439007SCharles.Forsyth QTDIR: con 16r80; 70*46439007SCharles.Forsyth QTAPPEND: con 16r40; 71*46439007SCharles.Forsyth QTEXCL: con 16r20; 72*46439007SCharles.Forsyth QTAUTH: con 16r08; 73*46439007SCharles.Forsyth QTFILE: con 16r00; 74*46439007SCharles.Forsyth 75*46439007SCharles.Forsyth Tmsg: adt { 76*46439007SCharles.Forsyth tag: int; 77*46439007SCharles.Forsyth pick { 78*46439007SCharles.Forsyth Readerror => 79*46439007SCharles.Forsyth error: string; # tag is unused in this case 80*46439007SCharles.Forsyth Version => 81*46439007SCharles.Forsyth msize: int; 82*46439007SCharles.Forsyth version: string; 83*46439007SCharles.Forsyth Auth => 84*46439007SCharles.Forsyth afid: int; 85*46439007SCharles.Forsyth uname, aname: string; 86*46439007SCharles.Forsyth Attach => 87*46439007SCharles.Forsyth fid, afid: int; 88*46439007SCharles.Forsyth uname, aname: string; 89*46439007SCharles.Forsyth Flush => 90*46439007SCharles.Forsyth oldtag: int; 91*46439007SCharles.Forsyth Walk => 92*46439007SCharles.Forsyth fid, newfid: int; 93*46439007SCharles.Forsyth names: array of string; 94*46439007SCharles.Forsyth Open => 95*46439007SCharles.Forsyth fid, mode: int; 96*46439007SCharles.Forsyth Create => 97*46439007SCharles.Forsyth fid: int; 98*46439007SCharles.Forsyth name: string; 99*46439007SCharles.Forsyth perm, mode: int; 100*46439007SCharles.Forsyth Read => 101*46439007SCharles.Forsyth fid: int; 102*46439007SCharles.Forsyth offset: big; 103*46439007SCharles.Forsyth count: int; 104*46439007SCharles.Forsyth Write => 105*46439007SCharles.Forsyth fid: int; 106*46439007SCharles.Forsyth offset: big; 107*46439007SCharles.Forsyth data: array of byte; 108*46439007SCharles.Forsyth Clunk or 109*46439007SCharles.Forsyth Stat or 110*46439007SCharles.Forsyth Remove => 111*46439007SCharles.Forsyth fid: int; 112*46439007SCharles.Forsyth Wstat => 113*46439007SCharles.Forsyth fid: int; 114*46439007SCharles.Forsyth stat: Sys->Dir; 115*46439007SCharles.Forsyth } 116*46439007SCharles.Forsyth 117*46439007SCharles.Forsyth read: fn(fd: ref Sys->FD, msize: int): ref Tmsg; 118*46439007SCharles.Forsyth unpack: fn(a: array of byte): (int, ref Tmsg); 119*46439007SCharles.Forsyth pack: fn(nil: self ref Tmsg): array of byte; 120*46439007SCharles.Forsyth packedsize: fn(nil: self ref Tmsg): int; 121*46439007SCharles.Forsyth text: fn(nil: self ref Tmsg): string; 122*46439007SCharles.Forsyth mtype: fn(nil: self ref Tmsg): int; 123*46439007SCharles.Forsyth }; 124*46439007SCharles.Forsyth 125*46439007SCharles.Forsyth Rmsg: adt { 126*46439007SCharles.Forsyth tag: int; 127*46439007SCharles.Forsyth pick { 128*46439007SCharles.Forsyth Readerror => 129*46439007SCharles.Forsyth error: string; # tag is unused in this case 130*46439007SCharles.Forsyth Version => 131*46439007SCharles.Forsyth msize: int; 132*46439007SCharles.Forsyth version: string; 133*46439007SCharles.Forsyth Auth => 134*46439007SCharles.Forsyth aqid: Sys->Qid; 135*46439007SCharles.Forsyth Attach => 136*46439007SCharles.Forsyth qid: Sys->Qid; 137*46439007SCharles.Forsyth Flush => 138*46439007SCharles.Forsyth Error => 139*46439007SCharles.Forsyth ename: string; 140*46439007SCharles.Forsyth Clunk or 141*46439007SCharles.Forsyth Remove or 142*46439007SCharles.Forsyth Wstat => 143*46439007SCharles.Forsyth Walk => 144*46439007SCharles.Forsyth qids: array of Sys->Qid; 145*46439007SCharles.Forsyth Create or 146*46439007SCharles.Forsyth Open => 147*46439007SCharles.Forsyth qid: Sys->Qid; 148*46439007SCharles.Forsyth iounit: int; 149*46439007SCharles.Forsyth Read => 150*46439007SCharles.Forsyth data: array of byte; 151*46439007SCharles.Forsyth Write => 152*46439007SCharles.Forsyth count: int; 153*46439007SCharles.Forsyth Stat => 154*46439007SCharles.Forsyth stat: Sys->Dir; 155*46439007SCharles.Forsyth } 156*46439007SCharles.Forsyth 157*46439007SCharles.Forsyth read: fn(fd: ref Sys->FD, msize: int): ref Rmsg; 158*46439007SCharles.Forsyth unpack: fn(a: array of byte): (int, ref Rmsg); 159*46439007SCharles.Forsyth pack: fn(nil: self ref Rmsg): array of byte; 160*46439007SCharles.Forsyth packedsize: fn(nil: self ref Rmsg): int; 161*46439007SCharles.Forsyth text: fn(nil: self ref Rmsg): string; 162*46439007SCharles.Forsyth mtype: fn(nil: self ref Rmsg): int; 163*46439007SCharles.Forsyth }; 164*46439007SCharles.Forsyth 165*46439007SCharles.Forsyth init: fn(); 166*46439007SCharles.Forsyth 167*46439007SCharles.Forsyth readmsg: fn(fd: ref Sys->FD, msize: int): (array of byte, string); 168*46439007SCharles.Forsyth istmsg: fn(f: array of byte): int; 169*46439007SCharles.Forsyth 170*46439007SCharles.Forsyth compatible: fn(t: ref Tmsg.Version, msize: int, version: string): (int, string); 171*46439007SCharles.Forsyth 172*46439007SCharles.Forsyth packdirsize: fn(d: Sys->Dir): int; 173*46439007SCharles.Forsyth packdir: fn(d: Sys->Dir): array of byte; 174*46439007SCharles.Forsyth unpackdir: fn(f: array of byte): (int, Sys->Dir); 175*46439007SCharles.Forsyth dir2text: fn(d: Sys->Dir): string; 176*46439007SCharles.Forsyth qid2text: fn(q: Sys->Qid): string; 177*46439007SCharles.Forsyth 178*46439007SCharles.Forsyth utflen: fn(s: string): int; 179*46439007SCharles.Forsyth 180*46439007SCharles.Forsyth # temporary undocumented compatibility function 181*46439007SCharles.Forsyth write: fn(fd: ref Sys->FD, a: array of byte, n: int): int; 182*46439007SCharles.Forsyth}; 183