	tst	r1 / is character nul
	beq	xmtt / yes, get next character
1:
	mov	$240,*$ps / set processor priority equal to 5
	mov	(sp),r2 / r2 contains i node number of file
	asl	r2 / 0%2+28 / multlply inode number by 2
	sub	$21.,r2 / 0%2+7 / subtract 21 from 2x inumber to
			/ get cc, cf, cl offset
	mov	r2,0f / make offset arg of putc
	cmpb	cc(r2),$50. / is char count for device greater than
			    / or equal to 50
	bhis	2f / yes
	jsr	r0,putc; 0:.. / find location in freelist to assign to
			      / device and
		br 2f / place char in list, if none available branch
		      / to put process to sleep
	mov	r0,-(sp) / place calling routines return address on
			 / stack
	mov	0b,r0 / place offset into cc, cl and cf tables in r0
	sub	$7,r0 / subtract seven from offset
	asl	r0 / multiply by 2
	asl	r0 / 0%8 / multiply by 2 (r0 contains 8xtty number)
	jsr	r0,starxmt / attempt to output character
	mov	(sp)+,r0 / pop stack
	br	xmtt / get next character
2:
	mov	r1,-(sp) / place character on stack
	mov	0b,0f / make offset into cc, cf, cl table arg of
		      / sleep (identifies location in wlist)
	jsr	r0,sleep; 0:.. / put process to sleep
	mov	(sp)+,r1 / remove character from stack
	br	1b / try again

rcvt: / read tty
	sub	$28.,r1 / 0%2 r1 contains 2xtty number
	asl	r1
	asl	r1 / r1 contains 8xtty number
	mov	r1,-(sp)
	mov	tty+6(r1),r5 / r5 contains address of 4th word in
			     / tty area
	tst	2(r5) / is char count = 0
	bne	1f / no
	bitb	$40,tty+4(r1) / raw flag set?
	beq	2f / no
	tst	-(sp) / yes, decrement sp
	jsr	r0,rcvch / get character from clist
	tst	(sp)+ / increment sp
	mov	(sp)+,r2 / r2 contains 8xtty number
	bitb	$4,rcsr(r2) / is carrier detect bit on
	beq	3f / no
	jsr	r0,passc / yes, place character in users buffer area
3:
	jmp	ret
2:
	jsr	r0,canon; rcvch / process a line of characters in
				/ clist and place results in tty buffer
