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