AUSAM/source/S/speed.s

	.globl getc,fopen,putc,flush
	mov	(sp)+,r4	/r4 is argc
	cmp	*(sp)+,$'s	/ invoked via speed command ??
	beq	0f		/ -> yes
	inc	fflag		/ form feed at end please !!
0:
	dec	r4
	ble	0f
	br	eof
0:	jsr	r5,getc;ibuf
	bes	eof
	cmp	r0,$177
	bpl	0b
	cmp	r0,$40
	bpl	2f
	bne	1f
	inc	r5
	br	0b
1:
	sub	$10,r0
	bmi	0b
	cmp	r0,$6
	bpl	0b
	asl	r0
	jsr	pc,*atab(r0)
	br	0b
2:
	tstb	line0(r5)
	bne	2f
	movb	r0,line0(r5)
	inc	r5
	cmp	r5,l0max
	bmi	0b
	mov	r5,l0max
	br	0b
2:
	tstb	line1(r5)
	bne	2f
	movb	r0,line1(r5)
	inc	r5
	cmp	r5,l1max
	bmi	0b
	mov	r5,l1max
	br	0b
2:
	tstb	line2(r5)
	bne	2f
	movb	r0,line2(r5)
	inc	r5
	cmp	r5,l2max
	bmi	0b
	mov	r5,l2max
	br	0b
2:
	jsr	pc,lflush
	movb	r0,line0(r5)
	inc	r5
	mov	r5,l0max
	mov	$15,r0
	jsr	r5,putc; obuf
	br	0b
eof:
	tst	r4
	ble	0f
	dec	r4
	mov	ibuf,r0
	sys	close
	mov	(sp)+,r0
	jsr	r5,fopen;ibuf
	bcc	0b
	mov	$2,r0
	sys	write;filerr;filend-filerr
	br	eof
0:
	tst	fflag		/ form feed wanted ??
	beq	0f
	mov	$14,r0
	jsr	r5,putc; obuf	/ output a form feed
	mov	$2,r0
	sys	write; finmsg ; finmsgl
0:
	jsr	pc,lflush
	jsr	r5,flush;obuf
	sys	exit
.data
atab:	bs; tab; nl; vt; ff; cr
.text
bs:
	dec	r5
	rts	pc
tab:
	add	$10,r5
	bic	$7,r5
	rts	pc
nl:
	jsr	pc,lflush
	clr	r5
	mov	$12,r0
	jsr	r5,putc; obuf
	rts	pc
vt:
ff:
	jsr	pc,lflush
	clr	r5
	mov	$14,r0
	jsr	r5,putc; obuf
	rts	pc
cr:
	clr	r5
	rts	pc

lflush:
	mov	l0max,r1
	bne	1f
	rts	pc
1:
	clr	r3
1:
	movb	line0(r3),r0
	bne	2f
	mov	$40,r0
2:
	clrb	line0(r3)
	jsr	r5,putc; obuf
	inc	r3
	cmp	r3,r1
	bmi	1b
	clr	l0max
	mov	$15,r0
	jsr	r5,putc; obuf
	mov	l1max,r1
	bne	1f
	rts	pc
1:
	clr	r3
1:
	movb	line1(r3),r0
	bne	2f
	mov	$40,r0
2:
	clrb	line1(r3)
	jsr	r5,putc; obuf
	inc	r3
	cmp	r3,r1
	bmi	1b
	clr	l1max
	mov	$15,r0
	jsr	r5,putc; obuf
	mov	l2max,r1
	bne	1f
	rts	pc
1:
	clr	r3
1:
	movb	line2(r3),r0
	bne	2f
	mov	$40,r0
2:
	clrb	line2(r3)
	jsr	r5,putc; obuf
	inc	r3
	cmp	r3,r1
	bmi	1b
	clr	l2max
	rts	pc
	.bss
ibuf:	.=.+518.
line0:	.=.+160.
line1:	.=.+160.
line2:	.=.+160.
l0max:	.=.+2
l1max:	.=.+2
l2max:	.=.+2
	.data
obuf:	1
	.=.+516.
fflag:	0
filerr:	<file not found\n>
filend:
finmsg: <FINISHED\n>
finmsgl = . - finmsg