Work on file usr/source/s1/form2.s
Co-Authored-By: Ken Thompson <ken@research.uucp>
Synthesized-from: v5
--- /dev/null
+/ scan
+/ r1 = pointer to input header
+/ r0 = pointer to output header
+/ switch = 0 real output
+/ not 0 output to r0
+scan:
+ mov r0,-(sp)
+ mov r1,-(sp)
+
+1:
+ mov (sp),r1
+ jsr pc,getchar
+ bes 5f
+ cmpb r0,$'\\
+ beq 3f
+ cmpb r0,$'\[
+ beq 4f
+ cmpb r0,$'\{
+ beq 4f
+ cmpb r0,$'\]
+ beq 1f
+ cmpb r0,$'\}
+ beq 7f
+ cmpb r0,$'\n
+ bne 6f
+ jsr pc,lookchar
+ bes 5f
+ movb $'\n,r0
+6:
+ tst switch
+ beq 2f
+ mov 2(sp),r1
+ jsr pc,putchar
+ br 1b
+2:
+ jsr r5,putc
+ br 1b
+3:
+ jsr pc,getchar
+ br 6b
+/ have [ or {
+4:
+ mov r(r1),-(sp)
+ jsr pc,getchar
+ bes 1f
+ cmpb r0,$'0
+ blt 4f
+ cmpb r0,$'9
+ bgt 4f
+ jsr pc,getchar
+ cmpb r0,$'\]
+ beq 3f
+ cmpb r0,$'\}
+ beq 3f
+
+4:
+ mov (sp)+,r(r1)
+ mov 2(sp),r0
+ jsr pc,esub
+ mov r1,(sp)
+ mov r0,2(sp)
+ br 1b
+
+/ have arg
+3:
+ tst switch
+ beq 2f
+ mov opointer,r1
+ mov 4(sp),r0
+ jsr pc,putword
+ mov 2(sp),r1
+2:
+ mov (sp)+,r(r1)
+ jsr pc,getchar
+ inc r(r1) /skip ]
+ jsr pc,earg
+ br 1b
+
+5:
+ tst argf
+ bne 1f
+ mov ipointer,r1
+ jsr pc,pop
+ bes 1f
+ mov r0,(sp)
+ br 1b
+7:
+ inc curlyf
+1:
+ mov (sp)+,r1
+ mov (sp)+,r0
+ rts pc