1 #include "u.h" 2 #include "lib.h" 3 #include "dat.h" 4 #include "fns.h" 5 #include "error.h" 6 7 Rgrp *thergrp; 8 9 void 10 procinit0(void) 11 { 12 Proc *p; 13 14 p = newproc(); 15 p->fgrp = dupfgrp(nil); 16 p->rgrp = newrgrp(); 17 p->pgrp = newpgrp(); 18 _setproc(p); 19 20 up->slash = namec("#/", Atodir, 0, 0); 21 cnameclose(up->slash->name); 22 up->slash->name = newcname("/"); 23 up->dot = cclone(up->slash); 24 } 25 26 Ref pidref; 27 28 Proc* 29 newproc(void) 30 { 31 Proc *p; 32 33 p = mallocz(sizeof(Proc), 1); 34 p->pid = incref(&pidref); 35 strcpy(p->user, eve); 36 p->syserrstr = p->errbuf0; 37 p->errstr = p->errbuf1; 38 strcpy(p->text, "drawterm"); 39 osnewproc(p); 40 return p; 41 } 42 43 int 44 kproc(char *name, void (*fn)(void*), void *arg) 45 { 46 Proc *p; 47 48 p = newproc(); 49 p->fn = fn; 50 p->arg = arg; 51 p->slash = cclone(up->slash); 52 p->dot = cclone(up->dot); 53 p->rgrp = up->rgrp; 54 if(p->rgrp) 55 incref(&p->rgrp->ref); 56 p->pgrp = up->pgrp; 57 if(up->pgrp) 58 incref(&up->pgrp->ref); 59 p->fgrp = up->fgrp; 60 if(p->fgrp) 61 incref(&p->fgrp->ref); 62 strecpy(p->text, p->text+sizeof p->text, name); 63 64 osproc(p); 65 return p->pid; 66 } 67 68