xref: /plan9/sys/src/cmd/unix/drawterm/kern/procinit.c (revision 8ccd4a6360d974db7bd7bbd4f37e7018419ea908)
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