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