MiniUnix/usr/source/s1/form3.s
/ esub
/ r1 = pointer to input string
/
esub:
mov r1,-(sp)
tst switch
beq 1f
mov opointer,r1
jsr pc,putword
1:
tst iflag
beq 1f
mov $2,tflag
jmp interrupt
1:
inc switch
mov $10.,r0
jsr pc,allocate
mov r1,r0
mov opointer,r1
jsr pc,putword
mov (sp)+,r1
jsr pc,scan
tst iflag
beq 1f
mov $3,tflag
jmp interrupt
1:
mov r2,-(sp)
mov r1,r0
mov ipointer,r1
jsr pc,putword
mov opointer,r1
jsr pc,pop
bec 9f; 4; 9:
mov r0,-(sp) /last output
mov asmem,r1
jsr pc,getsp
bes 2f
5:
clr curlyf
mov (sp),r1
mov r0,r2
jsr pc,release
6:
mov opointer,r1
jsr pc,pop
bec 4f
clr switch
4: mov r2,r1
jsr pc,rewind
tst (sp)+
mov (sp)+,r2
rts pc
/ not in memory
2:
mov curly,r1
jsr pc,getsp
bes 2f
br 5b
2:
mov (sp),r1
jsr pc,rewind
mov $'\[,r0
1:
jsr r5,tfoput
jsr pc,getchar
bec 1b
mov $'\],r0
jsr r5,tfoput
mov $10.,r0
jsr pc,allocate
mov r1,r2
mov (sp),r0
tst curlyf
beq 1f
clr curlyf
mov curly,r1
jsr pc,addentry
br 2f
1:
mov asmem,r1
jsr pc,whead
jsr pc,addentry
2:
mov r2,r1
jsr pc,accept
br 6b
/
/
/ earg
/ r0 = number in ascii
/
earg:
tst iflag
beq 1f
mov $4,tflag
jmp interrupt
1:
mov r1,-(sp)
inc argf
sub $'0,r0
asl r0
mov arg(r0),r1
beq 5f
4:
mov (sp),r0
mov r1,(sp)
mov ipointer,r1
jsr pc,putword
mov opointer,r1
jsr pc,pop
bec 3f
clr switch
3:
mov (sp)+,r1
jsr pc,rewind
jsr pc,scan
mov r0,-(sp)
mov ipointer,r1
jsr pc,pop
bec 9f; 4; 9:
mov r0,r1
clr argf
clr curlyf
mov (sp)+,r0
rts pc
5:
mov r0,-(sp)
mov $'\[,r0
jsr r5,tfoput
mov (sp),r0
asr r0
add $'0,r0
jsr r5,tfoput
mov $'\],r0
jsr r5,tfoput
mov $10.,r0
jsr pc,allocate
mov (sp)+,r0
mov r1,arg(r0)
jsr pc,accept
br 4b