1*9a747e4fSDavid du Colombier typedef struct Msg Msg; 2*9a747e4fSDavid du Colombier struct Msg 3*9a747e4fSDavid du Colombier { 4*9a747e4fSDavid du Colombier Msg *link; 5*9a747e4fSDavid du Colombier uchar *rp; 6*9a747e4fSDavid du Colombier uchar *ep; 7*9a747e4fSDavid du Colombier }; 8*9a747e4fSDavid du Colombier 9*9a747e4fSDavid du Colombier typedef struct Client Client; 10*9a747e4fSDavid du Colombier struct Client 11*9a747e4fSDavid du Colombier { 12*9a747e4fSDavid du Colombier int moribund; 13*9a747e4fSDavid du Colombier int activethread; 14*9a747e4fSDavid du Colombier int num; 15*9a747e4fSDavid du Colombier int ref; 16*9a747e4fSDavid du Colombier int status; 17*9a747e4fSDavid du Colombier int pid; 18*9a747e4fSDavid du Colombier char *cmd; 19*9a747e4fSDavid du Colombier int fd[2]; 20*9a747e4fSDavid du Colombier char err[ERRMAX]; 21*9a747e4fSDavid du Colombier 22*9a747e4fSDavid du Colombier Req *execreq; 23*9a747e4fSDavid du Colombier Channel *execpid; 24*9a747e4fSDavid du Colombier 25*9a747e4fSDavid du Colombier Req *rq, **erq; /* reading */ 26*9a747e4fSDavid du Colombier Msg *mq, **emq; 27*9a747e4fSDavid du Colombier Ioproc *readerproc; 28*9a747e4fSDavid du Colombier 29*9a747e4fSDavid du Colombier Channel *writerkick; 30*9a747e4fSDavid du Colombier Req *wq, **ewq; /* writing */ 31*9a747e4fSDavid du Colombier Req *curw; /* currently writing */ 32*9a747e4fSDavid du Colombier Ioproc *writerproc; /* writing */ 33*9a747e4fSDavid du Colombier }; 34*9a747e4fSDavid du Colombier extern int nclient; 35*9a747e4fSDavid du Colombier extern Client **client; 36*9a747e4fSDavid du Colombier extern void dataread(Req*, Client*); 37*9a747e4fSDavid du Colombier extern int newclient(void); 38*9a747e4fSDavid du Colombier extern void closeclient(Client*); 39*9a747e4fSDavid du Colombier extern void datawrite(Req*, Client*); 40*9a747e4fSDavid du Colombier extern void ctlwrite(Req*, Client*); 41*9a747e4fSDavid du Colombier extern void clientflush(Req*, Client*); 42*9a747e4fSDavid du Colombier 43*9a747e4fSDavid du Colombier #define emalloc emalloc9p 44*9a747e4fSDavid du Colombier #define estrdup estrdup9p 45*9a747e4fSDavid du Colombier #define erealloc erealloc9p 46*9a747e4fSDavid du Colombier 47*9a747e4fSDavid du Colombier extern Srv fs; 48*9a747e4fSDavid du Colombier extern void initfs(void); 49*9a747e4fSDavid du Colombier extern void setexecname(char*); 50*9a747e4fSDavid du Colombier 51*9a747e4fSDavid du Colombier enum 52*9a747e4fSDavid du Colombier { 53*9a747e4fSDavid du Colombier STACK = 8192, 54*9a747e4fSDavid du Colombier }; 55*9a747e4fSDavid du Colombier 56*9a747e4fSDavid du Colombier enum /* Client.status */ 57*9a747e4fSDavid du Colombier { 58*9a747e4fSDavid du Colombier Closed, 59*9a747e4fSDavid du Colombier Exec, 60*9a747e4fSDavid du Colombier Established, 61*9a747e4fSDavid du Colombier Hangup, 62*9a747e4fSDavid du Colombier }; 63*9a747e4fSDavid du Colombier 64