/ getty --  get name and tty mode
/ for initialization

/ cycle through speeds and "login:" messages
/ summarized in itab

stty = 31.
gtty = 32.

	sys	signal; 3; 1
	sys	signal; 2; 1
	clr	r0
	sys	gtty; name
	mov	name+4,r0
	bic	$!26,r0
	mov	r0,flags	/ use xtab,cr,ucase from driver
	jsr	r5,nextspeed
1:
	mov	$name,r5
2:
	jsr	r5,getc
	cmp	r0,$'\n
	beq	1f
	cmp	r0,$'\r
	beq	4f
	cmp	r0,$'@
	beq	1b
	cmp	r0,$'#
	bne	3f
	cmp	r5,$name
	blos	2b
	dec	r5
	br	2b
3:
	cmp	r5,$name+30.
	bhis	2b
	movb	r0,(r5)+
	br	2b
4:
	bis	$20,flags		/cr bit
	mov	$'\n,r0
	jsr	pc,putc
	br	2f
1:
	mov	$'\r,r0
	jsr	pc,putc
2:
	clrb	(r5)+

/ determine whether terminal is upper-case only

	mov	$name,r5
1:
	movb	(r5)+,r0
	beq	1f
	cmp	r0,$'A
	blo	2f
	cmp	r0,$'Z
	bhi	2f
	add	$40,r0		/ map to lc
	movb	r0,-1(r5)
	br	1b
2:
	cmp	r0,$'a
	blo	1b
	cmp	r0,$'z
	bhi	1b
	bic	$4,flags
	br	1b
1:
	mov	fstate,r4
	bis	flags,4(r4)
	clr	r0
	sys	0; 9f
.data
9:
	sys	stty; fstate: ..
.text

go:
	sys	exec; login; loginp
	sys	exit

getc:
	clr	r0
	sys	read; ch; 1
	bes	done
	tst	r0
	beq	done
	bic	$!177,ch
	mov	ch,r2
	beq	1f
getc1:
	cmp	r2,$174
	bhis	3f
	mov	$1,r0
	movb	ch,r0
	jsr	pc,putc
3:
	mov	r2,r0
	rts	r5
1:
	mov	$name,(sp)
	jsr	r5,nextspeed
2:
	clr	r0		/ flush nulls
	sys	read; ch; 1
	bes	done
	tst	r0
	beq	done
	movb	ch,r2
	beq	2b
	br	getc1

done:
	sys	exit

nextspeed:
	mov	itabp,r1
	mov	(r1)+,0f
	bne	1f
	mov	$itab,itabp
	br	nextspeed
1:
	clr	r0
	sys	0; 9f
.data
9:
	sys	stty; 0:..
.text
	bes	go
	mov	(r1)+,-(sp)
	mov	(r1)+,fstate
	mov	r1,itabp
	mov	(sp)+,r1
1:
	movb	(r1)+,r0
	beq	1f
	jsr	pc,putc
	br	1b
1:
	rts	r5

putc:
	bic	$!177,r0
	movb	r0,ch
	mov	$1,r0
	sys	write; ch; 1
	rts	pc

itabp:	itab
loginp:	login
	name
	0

itab:
	itn300; tnmes;  tn300
	itty37; ttymes; tty37
	0

.data
itty37:
	.byte	5, 5
	0; 340	/ any parity, raw
tty37:
	.byte	5, 5
	0; 210	/ 37 parity, echo
itn300:
	.byte	7, 7
	0; 340	/ any parity, raw, cr
tn300:
	.byte	7, 7
	0; 10310	/ any parity, echo, no tab del

ttymes:
	<\n\r\p:\alogin: \0>
tnmes:
	<\n\r\p;login: \0>

login:	</bin/login\0>
	.even

nl:	<\n>
cr:	<\r>

.bss
flags:	.=.+2
ch:	.=.+2
name:	.=.+32.
