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
procinit0(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*
newproc(void)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
kproc(char * name,void (* fn)(void *),void * arg)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