diff options
author | Taru Karttunen <taruti@taruti.net> | 2011-03-30 15:46:40 +0300 |
---|---|---|
committer | Taru Karttunen <taruti@taruti.net> | 2011-03-30 15:46:40 +0300 |
commit | e5888a1ffdae813d7575f5fb02275c6bb07e5199 (patch) | |
tree | d8d51eac403f07814b9e936eed0c9a79195e2450 /sys/src/cmd/unix/drawterm/kern/procinit.c |
Import sources from 2011-03-30 iso image
Diffstat (limited to 'sys/src/cmd/unix/drawterm/kern/procinit.c')
-rwxr-xr-x | sys/src/cmd/unix/drawterm/kern/procinit.c | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/sys/src/cmd/unix/drawterm/kern/procinit.c b/sys/src/cmd/unix/drawterm/kern/procinit.c new file mode 100755 index 000000000..b2299d963 --- /dev/null +++ b/sys/src/cmd/unix/drawterm/kern/procinit.c @@ -0,0 +1,67 @@ +#include "u.h" +#include "lib.h" +#include "dat.h" +#include "fns.h" +#include "error.h" + +Rgrp *thergrp; + +void +procinit0(void) +{ + Proc *p; + + p = newproc(); + p->fgrp = dupfgrp(nil); + p->rgrp = newrgrp(); + p->pgrp = newpgrp(); + _setproc(p); + + up->slash = namec("#/", Atodir, 0, 0); + cnameclose(up->slash->name); + up->slash->name = newcname("/"); + up->dot = cclone(up->slash); +} + +Ref pidref; + +Proc* +newproc(void) +{ + Proc *p; + + p = mallocz(sizeof(Proc), 1); + p->pid = incref(&pidref); + strcpy(p->user, eve); + p->syserrstr = p->errbuf0; + p->errstr = p->errbuf1; + strcpy(p->text, "drawterm"); + osnewproc(p); + return p; +} + +int +kproc(char *name, void (*fn)(void*), void *arg) +{ + Proc *p; + + p = newproc(); + p->fn = fn; + p->arg = arg; + p->slash = cclone(up->slash); + p->dot = cclone(up->dot); + p->rgrp = up->rgrp; + if(p->rgrp) + incref(&p->rgrp->ref); + p->pgrp = up->pgrp; + if(up->pgrp) + incref(&up->pgrp->ref); + p->fgrp = up->fgrp; + if(p->fgrp) + incref(&p->fgrp->ref); + strecpy(p->text, p->text+sizeof p->text, name); + + osproc(p); + return p->pid; +} + |