/ init -- process control initialization



	sys	intr; 0
	sys	quit; 0
	sys	38. / get console switches
	cmp	r0,$173030
	bne	1f
help:
	clr	r0
	sys	close
	mov	$1,r0
	sys	close
	sys	open; ctty; 0
	sys	open; ctty; 1
	sys	exec; shell; shellp
	br	help
1:
	sys	mount; rk1; usr
	sys	mount; rk2; ssys
	sys	mount; rk3; crp
	mov	$'0,r1
1:
	movb	r1,tapx+8
	sys	chmod; tapx; 17
	inc	r1
	cmp	r1,$'8
	blo	1b
	sys	creat; utmp; 16
	sys	close
	sys	unlink; dpdlock
	sys	fork
		br daemon
	sys	fork
		br dirass
	sys	fork
		br dds
	movb	$'x,zero+8.
	jsr	pc,wtmprec
	mov	$itab,r1
	br	1f

daemon:
	sys	exec; etcdpd; etcdpdp
	sys	exit

dirass:
	sys	chdir; usrmel
	sys	exec; melda; meldap
	sys	exit

dds:
	sys	exec; usrdd; usrddp
	sys	exit

/ create shell processes

1:
	mov	(r1)+,r0
	beq	pwait
	movb	r0,ttyx+8
	jsr	pc,dfork
	mov	r0,(r1)+
	br	1b

/ wait for process to die

pwait:
	sys	wait
	mov	$itab,r1

/ search for process id

2:
	tst	(r1)+
	beq	pwait
	cmp	r0,(r1)+
	bne	2b

/ take name out of utmp

	sub	$4,r1
	mov	r1,-(sp)
	mov	(r1),r1
	sub	$'0,r1
	cmp	r1,$'a-'0
	blo	2f
	sub	$'a-'0-10.,r1	/ map a-z into 10. on
2:
	asl	r1
	asl	r1
	asl	r1
	asl	r1
	mov	r1,0f
	mov	$zero,r1
2:
	clr	(r1)+
	cmp	r1,$zero+16.
	blo	2b
	sys	open; utmp; 1
	bes	2f
	mov	r0,r1
	sys	seek; 0:..; 0
	mov	r1,r0
	sys	write; zero; 16.
	mov	r1,r0
	sys	close

/ re-create user process

2:
	mov	(sp)+,r1
	mov	(r1)+,r0
	movb	r0,ttyx+8
	movb	r0,zero+8.
	jsr	pc,wtmprec
	jsr	pc,dfork
	mov	r0,(r1)+
	br	pwait

dfork:
	sys	fork
		br 1f
	bes	dfork
	rts	pc
1:
	sys	quit; 0
	sys	intr; 0
	sys	chown; ttyx; 0
	sys	chmod; ttyx; 15
	sys	open; ttyx; 0
	bes	help1
	sys	open; ttyx; 1
	bes	help1
	sys	exec; getty; gettyp
	sys	exit			/ HELP!

help1:
	jmp	help

wtmprec:
	mov	r1,-(sp)
	sys	time
	mov	r0,zero+10.
	mov	r1,zero+12.
	sys	open; wtmp; 1
	bes	2f
	mov	r0,r2
	sys	seek; 0; 2
	mov	r2,r0
	sys	write; zero; 16.
	mov	r2,r0
	sys	close
2:
	mov	(sp)+,r1
	rts	pc

etcdpdp:
	etcdpd; 0
meldap:
	melda; 0
usrddp:
	usrdd; 0
usrdd:	</usr/demo/dds\0>
melda:	</usr/mel/da\0>
usrmel:	</usr/mel\0>
rk1:	</dev/rk1\0>
rk2:	</dev/rk2\0>
rk3:	</dev/rk3\0>
usr:	</usr\0>
ssys:	</sys\0>
crp:	</crp\0>
ctty:	</dev/tty\0>
shell:	</bin/sh\0>
shellm:	<-\0>
dpdlock:
	</usr/dpd/lock\0>
etcdpd:
	</etc/dpd\0>
tapx:	</dev/tapx\0>
utmp:	</tmp/utmp\0>
wtmp:	</tmp/wtmp\0>
ttyx:	</dev/ttyx\0>
getty:	</etc/getty\0>
	.even

shellp:	shellm
	0
gettyp:	getty
	0
itab:
	'0; ..
	'1; ..
	'2; ..
	'3; ..
	'4; ..
	'5; ..
	'6; ..
	'7; ..
	'8; ..
	'a; ..
	'b; ..
	 0

	.bss
offset:	.=.+2
zero:	.=.+8.; .=.+6; .=.+2.
