111 lines
1.2 KiB
ArmAsm
111 lines
1.2 KiB
ArmAsm
signal = 48.
|
|
testing = 0
|
|
/
|
|
/ command interpreter for form letter editor
|
|
/
|
|
/
|
|
/
|
|
command:
|
|
sys signal; 2; inter
|
|
jsr pc,initl
|
|
mov sp,spi
|
|
loop:
|
|
mov spi,sp
|
|
mov $buffer,r2
|
|
clr r4
|
|
clr iflag
|
|
1:
|
|
jsr pc,tfiget
|
|
cmpb $' ,r0
|
|
beq 1f
|
|
cmpb $'\n,r0
|
|
bne 2f
|
|
clrb (r2)
|
|
br 4f
|
|
2:
|
|
movb r0,(r2)+
|
|
br 1b
|
|
1:
|
|
clrb (r2)
|
|
mov $argc,r3
|
|
3:
|
|
mov $arg,r2
|
|
2:
|
|
jsr pc,tfiget
|
|
cmpb $' ,r0
|
|
beq 1f
|
|
cmpb $'\n,r0
|
|
beq 1f
|
|
movb r0,(r2)+
|
|
br 2b
|
|
1:
|
|
clrb (r2)+
|
|
inc r4
|
|
1:
|
|
movb -(r2),sv
|
|
cmp r2,$arg
|
|
blos 1f
|
|
movb -(r2),-(sp)
|
|
movb sv,1(sp)
|
|
cmp r2,$arg
|
|
bhi 1b
|
|
mov sp,(r3)+
|
|
br 2f
|
|
1:
|
|
clrb -(sp)
|
|
movb sv,1(sp)
|
|
mov sp,(r3)
|
|
add $1,(r3)+
|
|
2:
|
|
cmpb r0,$'\n
|
|
bne 3b
|
|
1:
|
|
mov -(r3),-(sp)
|
|
cmp r3,$argc
|
|
bhi 1b
|
|
4:
|
|
mov r4,-(sp)
|
|
3:
|
|
clr r0
|
|
mov $tabl,r4
|
|
2:
|
|
mov (r4)+,r1
|
|
cmp r4,$tend
|
|
bhi error
|
|
add $2,r0
|
|
mov $buffer,r2
|
|
1:
|
|
cmpb (r1)+,(r2)+
|
|
bne 2b
|
|
tstb (r1)
|
|
bne 1b
|
|
tstb (r2)
|
|
bne 2b
|
|
sub $2,r0
|
|
add $jtable,r0
|
|
clr vflag
|
|
clr qflag
|
|
jmp *(r0)
|
|
/
|
|
error:
|
|
mov $1,r0
|
|
sys write; err; 2
|
|
br loop
|
|
/
|
|
/
|
|
tabl: c1; c2; c3; c4; c5; c6; c7; c8;
|
|
tend: 0
|
|
c1: <n\0>
|
|
c2: <p\0>
|
|
c3: <e\0>
|
|
c4: <d\0>
|
|
c5: <m\0>
|
|
c6: <fin\0>
|
|
c7: <q\0>
|
|
c8: <c\0>
|
|
err: <?\n>
|
|
endt: .even
|
|
jtable: list; listf; ed; remove; rename; fin; q; memck;
|
|
spi: .=.+2
|
|
sv: .=.+2
|