486 lines
4.7 KiB
ArmAsm
486 lines
4.7 KiB
ArmAsm
/
|
|
/
|
|
|
|
/roff3 -- runoff
|
|
|
|
skipcont:
|
|
jsr pc,getchar
|
|
mov r0,r2
|
|
jsr pc,alph2
|
|
beq skipcont
|
|
1:
|
|
cmp $' ,r0
|
|
bne 1f
|
|
jsr pc,getchar
|
|
br 1b
|
|
1:
|
|
mov r0,ch
|
|
rts pc
|
|
|
|
rbreak:
|
|
tst nc
|
|
ble 4f
|
|
clrb *linep
|
|
inc totout
|
|
mov ls,r0
|
|
dec r0
|
|
jsr r5,nlines; nline
|
|
tst pl
|
|
beq 4f
|
|
cmp nl,bl
|
|
bne 1f
|
|
3:
|
|
jsr pc,eject
|
|
1:
|
|
tst nl
|
|
bne 3f
|
|
mov ma1,r0
|
|
jsr r5,nlines; newline
|
|
bit $1,pn
|
|
bne 1f
|
|
jsr r5,headout; ehead
|
|
br 2f
|
|
1:
|
|
jsr r5,headout; ohead
|
|
2:
|
|
mov ma2,r0
|
|
jsr r5,nlines; newline
|
|
dec skip
|
|
bge 3b
|
|
3:
|
|
mov po,r0
|
|
jsr pc,space
|
|
jsr pc,donum
|
|
mov un,r0
|
|
jsr pc,space
|
|
jsr pc,jfo
|
|
mov $line,r2
|
|
1:
|
|
movb (r2)+,r0
|
|
cmp $' ,r0
|
|
bne 2f
|
|
jsr pc,fill
|
|
tst nc
|
|
bne 1b
|
|
br 3f
|
|
2:
|
|
jsr pc,putchar
|
|
dec nc
|
|
bgt 1b
|
|
3:
|
|
jsr pc,newline
|
|
clr nwd
|
|
clr ne
|
|
mov in,un
|
|
4:
|
|
jsr pc,setnel
|
|
rts pc
|
|
|
|
jfo:
|
|
tst jfomod
|
|
beq 1f
|
|
mov fac,r0
|
|
add fmq,r0
|
|
beq 1f
|
|
clr fac
|
|
clr fmq
|
|
mov nel,r0
|
|
cmp jfomod,$1
|
|
bne 2f
|
|
asr r0
|
|
2:
|
|
jsr pc,space
|
|
1:
|
|
rts pc
|
|
|
|
donum:
|
|
tst numbmod
|
|
beq 2f
|
|
dec nn
|
|
blt 1f
|
|
mov $5,r0
|
|
add ni,r0
|
|
jsr pc,space
|
|
rts pc
|
|
1:
|
|
clr r0
|
|
cmp lnumber,$100.
|
|
bge 1f
|
|
inc r0
|
|
cmp lnumber,$10.
|
|
bge 1f
|
|
inc r0
|
|
1:
|
|
add ni,r0
|
|
jsr pc,space
|
|
mov lnumber,r0
|
|
jsr r5,decimal; putchar
|
|
mov $2,r0
|
|
jsr pc,space
|
|
inc lnumber
|
|
2:
|
|
rts pc
|
|
|
|
|
|
newline:
|
|
mov $'\n,r0
|
|
jsr pc,putchar
|
|
inc nl
|
|
rts pc
|
|
|
|
nline:
|
|
mov nl,r0
|
|
beq 1f
|
|
cmp r0,bl
|
|
beq 1f
|
|
jsr pc,newline
|
|
1:
|
|
rts pc
|
|
|
|
number:
|
|
jsr pc,skipcont
|
|
number1:
|
|
mov r1,-(sp)
|
|
mov r3,-(sp)
|
|
clr r3
|
|
clr -(sp)
|
|
clr -(sp)
|
|
1:
|
|
jsr pc,getchar
|
|
cmp r0,$'+
|
|
beq 2f
|
|
cmp r0,$'-
|
|
beq 2f
|
|
sub $'0,r0
|
|
cmp r0,$9.
|
|
bhi 3f
|
|
inc (sp)
|
|
mpy $10.,r3
|
|
add r0,r3
|
|
br 1b
|
|
2:
|
|
mov r0,2(sp)
|
|
br 1b
|
|
3:
|
|
add $'0,r0
|
|
mov r0,ch
|
|
mov (sp)+,r0
|
|
bne 1f
|
|
mov $1,r3
|
|
mov r3,r0
|
|
1:
|
|
mov (r5)+,r0
|
|
beq 1f
|
|
mov (r0),r0
|
|
1:
|
|
mov (sp)+,r1
|
|
cmp r1,$'-
|
|
bne 1f
|
|
sub r3,r0
|
|
br 2f
|
|
1:
|
|
cmp r1,$'+
|
|
bne 1f
|
|
add r3,r0
|
|
br 2f
|
|
1:
|
|
mov r3,r0
|
|
2:
|
|
mov (sp)+,r3
|
|
mov (sp)+,r1
|
|
rts r5
|
|
|
|
eject:
|
|
tst pl
|
|
beq 1f
|
|
tst nl
|
|
beq 1f
|
|
mov pl,r0
|
|
sub nl,r0
|
|
sub ma4,r0
|
|
sub hx,r0
|
|
jsr r5,nlines; newline
|
|
bit $1,pn
|
|
bne 2f
|
|
jsr r5,headout; efoot
|
|
br 3f
|
|
2:
|
|
jsr r5,headout; ofoot
|
|
3:
|
|
cmp numbmod,$1
|
|
bne 3f
|
|
mov $1,lnumber
|
|
3:
|
|
mov ma4,r0
|
|
jsr r5,nlines; newline
|
|
clr nl
|
|
inc pn
|
|
1:
|
|
cmp pn,pto
|
|
ble 1f
|
|
jsr pc,flush
|
|
jmp place
|
|
1:
|
|
istop:
|
|
tst stop
|
|
beq 2f
|
|
cmp pn,pfrom
|
|
blo 2f
|
|
jsr pc,flush
|
|
/ mov sp,r1
|
|
/ sys signal; 2; 1f
|
|
clr r0
|
|
sys read; garb; 1
|
|
1:
|
|
/ mov r1,sp
|
|
/ sys signal; 2; place
|
|
2:
|
|
rts pc
|
|
|
|
|
|
storeline:
|
|
cmp linep,$line+linsiz
|
|
bhis 1f
|
|
movb r0,*linep
|
|
inc linep
|
|
jsr pc,width
|
|
add r1,ne
|
|
sub r1,nel
|
|
inc nc
|
|
1:
|
|
rts pc
|
|
|
|
getword:
|
|
mov $word,r2
|
|
clr wne
|
|
clr wch
|
|
clr nhyph
|
|
clr hypedf
|
|
mov $word,wordp
|
|
clr -(sp)
|
|
1:
|
|
jsr pc,gettchar
|
|
cmp r0,$'\n
|
|
beq 3f
|
|
cmp r0,ohc
|
|
bne 2f
|
|
inc hypedf
|
|
br 1b
|
|
2:
|
|
cmp $' ,r0
|
|
bne 2f
|
|
jsr pc,storeword
|
|
br 1b
|
|
2:
|
|
mov r0,-(sp)
|
|
mov $' ,r0
|
|
jsr pc,storeword
|
|
tst spaceflg
|
|
beq 2f
|
|
jsr pc,storeword
|
|
clr spaceflg
|
|
2:
|
|
mov (sp)+,r0
|
|
2:
|
|
jsr pc,storeword
|
|
bisb (sp),-1(r2) /add in hyphen
|
|
clr (sp)
|
|
jsr pc,gettchar
|
|
cmp r0,ohc
|
|
bne 1f
|
|
inc hypedf
|
|
jsr pc,gettchar
|
|
mov $200,(sp)
|
|
1:
|
|
cmp $' ,r0
|
|
beq 1f
|
|
cmp $'\n,r0
|
|
bne 2b
|
|
cmpb -1(r2),$'.
|
|
bne 1f
|
|
inc spaceflg
|
|
1:
|
|
add $2,2(sp)
|
|
1:
|
|
clrb (r2)+
|
|
3:
|
|
tst (sp)+
|
|
mov $word,wordp
|
|
tst nc
|
|
bne 1f
|
|
jsr pc,setnel
|
|
1:
|
|
rts pc
|
|
|
|
setnel:
|
|
mov $line,linep
|
|
mov ll,nel
|
|
sub un,nel
|
|
clr ne
|
|
clr fac
|
|
clr fmq
|
|
rts pc
|
|
|
|
storeword:
|
|
jsr pc,width
|
|
add r1,wne
|
|
inc wch
|
|
movb r0,(r2)+
|
|
rts pc
|
|
|
|
need:
|
|
mov r0,r3
|
|
mpy ls,r3
|
|
mov r3,r0
|
|
need2:
|
|
add nl,r0
|
|
cmp r0,bl
|
|
ble 1f
|
|
jsr pc,eject
|
|
1:
|
|
rts pc
|
|
|
|
min:
|
|
tst r0
|
|
bge 1f
|
|
clr r0
|
|
1:
|
|
rts pc
|
|
|
|
getname:
|
|
mov r1,-(sp)
|
|
mov r2,-(sp)
|
|
mov (r5)+,r1
|
|
mov $18.,r2
|
|
1:
|
|
jsr pc,getchar
|
|
cmp r0,$041
|
|
blt 2f
|
|
cmp r0,$0176
|
|
ble 4f
|
|
2:
|
|
mov r0,ch
|
|
3:
|
|
clrb (r1)+
|
|
mov (sp)+,r2
|
|
mov (sp)+,r1
|
|
rts r5
|
|
4:
|
|
movb r0,(r1)+
|
|
dec r2
|
|
beq 3b
|
|
br 1b
|
|
|
|
copyb:
|
|
mov (r1),r1
|
|
jsr pc,flushi
|
|
clr nlflg
|
|
mov $1,-(sp)
|
|
1:
|
|
jsr pc,getchar
|
|
cmp r0,$'\n
|
|
bne 2f
|
|
mov $1,(sp)
|
|
clr nlflg
|
|
br 4f
|
|
2:
|
|
cmp r0,$'.
|
|
bne 9f
|
|
cmp (sp),$1
|
|
bgt 3f
|
|
blt 9f
|
|
inc (sp)
|
|
br 4f
|
|
3:
|
|
dec r1
|
|
clr r0
|
|
inc (sp)
|
|
br 4f
|
|
9:
|
|
clr (sp)
|
|
4:
|
|
tst skp
|
|
bne 5f
|
|
jsr pc,wbf
|
|
5:
|
|
cmp (sp),$3
|
|
bne 1b
|
|
tst (sp)+
|
|
tst skp
|
|
bne 6f
|
|
mov r1,nextb
|
|
6:
|
|
rts pc
|
|
|
|
popi:
|
|
cmp ilistp,$ilist
|
|
beq 1f
|
|
sub $2,ilistp
|
|
mov *ilistp,ip
|
|
1:
|
|
rts pc
|
|
|
|
wbf:
|
|
mov r0,char
|
|
mov r1,offb
|
|
mov ibf,r0
|
|
sys seek; offb:..;0
|
|
mov ibf,r0
|
|
sys write; char;1
|
|
inc r1
|
|
cmp ibf1,ofile
|
|
bne 1f
|
|
mov $-1,ofile
|
|
1:
|
|
rts pc
|
|
rbf:
|
|
mov ip,r1
|
|
mov ibf1,nfile
|
|
jsr pc,rdsufb
|
|
tstb r0
|
|
bne 2f
|
|
jsr pc,popi
|
|
rts pc
|
|
2:
|
|
inc ip
|
|
rts pc
|
|
|
|
alph:
|
|
movb (r0),r2
|
|
alph2:
|
|
cmp r2,$'A
|
|
blo 1f
|
|
cmp r2,$'Z
|
|
blos 2f
|
|
cmp r2,$'a
|
|
blo 1f
|
|
cmp r2,$'z
|
|
bhi 1f
|
|
2:
|
|
sez
|
|
rts pc
|
|
1:
|
|
clz
|
|
rts pc
|
|
|
|
rdsufb:
|
|
mov r1,-(sp)
|
|
bic $77,r1
|
|
cmp r1,sufoff
|
|
bne 1f
|
|
cmp nfile,ofile
|
|
beq 2f
|
|
1:
|
|
mov r1,sufoff
|
|
mov nfile,ofile
|
|
mov nfile,r0
|
|
sys seek; sufoff: -1; 0
|
|
mov nfile,r0
|
|
sys read; sufbuf; 512.
|
|
2:
|
|
mov (sp),r0
|
|
bic $!77,r0
|
|
movb sufbuf(r0),r0
|
|
mov (sp)+,r1
|
|
rts pc
|