1363 lines
14 KiB
ArmAsm
1363 lines
14 KiB
ArmAsm
/
|
|
/
|
|
|
|
/ nroff1 -- text formatter
|
|
|
|
/ rts = 104000
|
|
signal = 48.
|
|
nop = 000240
|
|
|
|
jmp ibuf
|
|
.data
|
|
ibuf: /init code in ibuf+obuf
|
|
cmp sp,$end
|
|
bhi 1f
|
|
jsr r5,string; emes1
|
|
sys exit
|
|
1:
|
|
clr r0
|
|
jsr pc,ttyn
|
|
cmpb r0,$'x
|
|
bne 0f
|
|
inc iflg
|
|
mov $1,r0
|
|
jsr pc,ttyn
|
|
0:
|
|
movb r0,ttyx+8
|
|
clr r0
|
|
jsr pc,mesg
|
|
sys open; ttyx; 2
|
|
bes 0f
|
|
mov r0,ttyid
|
|
mov r0,ttyod
|
|
0:
|
|
mov ttyid,r0
|
|
sys gtty; ttys
|
|
sys signal; 1; place
|
|
sys signal; 2; place
|
|
bit $1,r0
|
|
beq 0f
|
|
sys signal; 2; 1 /no deletes
|
|
sys signal; 3; 1 /no quits
|
|
sys signal; 1; 1 /allow hangup
|
|
0:
|
|
mov $'%,rlist
|
|
mov $"nl,rlist+2
|
|
mov $"dn,rlist+4
|
|
mov $"yr,rlist+6
|
|
mov $"mo,rlist+8.
|
|
mov $"dy,rlist+10.
|
|
mov $"dw,rlist+12.
|
|
mov $"hp,rlist+14.
|
|
mov sp,r0
|
|
jsr pc,makebf
|
|
sys open; suffil; 0
|
|
bes 1f
|
|
mov r0,suff
|
|
sys seek; 20; 0
|
|
bes 1f
|
|
mov suff,r0
|
|
sys read; suftab; 2*26.
|
|
1:
|
|
clr r0
|
|
mov (sp)+,argc
|
|
dec argc
|
|
ble 4f
|
|
1:
|
|
tst (sp)+
|
|
mov (sp),r4
|
|
cmpb (r4)+,$'+
|
|
bne 2f
|
|
jsr r5,pnum; pfrom
|
|
br 3f
|
|
2:
|
|
cmpb -1(r4),$'-
|
|
bne 2f
|
|
tstb (r4)
|
|
beq 4f
|
|
cmpb (r4),$'m
|
|
bne 0f
|
|
mov $nextf1,r0
|
|
tstb (r4)+
|
|
8:
|
|
movb (r4)+,(r0)+
|
|
bne 8b
|
|
inc nx
|
|
inc mflg
|
|
br 3f
|
|
0:
|
|
cmpb (r4),$'r
|
|
bne 0f
|
|
tstb (r4)+
|
|
movb (r4)+,r0
|
|
beq 3f
|
|
jsr pc,findr
|
|
mov r1,-(sp)
|
|
mov r4,ibufp
|
|
mov $-1,eibuf
|
|
jsr pc,atoi
|
|
mov (sp)+,r1
|
|
mov r0,(r1)
|
|
clr ch
|
|
br 3f
|
|
0:
|
|
cmpb (r4),$'s
|
|
bne 0f
|
|
inc stop
|
|
br 3f
|
|
0:
|
|
cmpb (r4),$'o
|
|
bne 0f
|
|
inc old
|
|
br 3f
|
|
0:
|
|
cmpb (r4),$'i
|
|
bne 0f
|
|
inc stdi
|
|
br 3f
|
|
0:
|
|
cmpb (r4),$'q
|
|
bne 0f
|
|
inc quiet
|
|
br 3f
|
|
0:
|
|
cmpb (r4),$'h
|
|
bne 0f
|
|
clr slow
|
|
br 3f
|
|
0:
|
|
cmpb (r4),$'n
|
|
bne 0f
|
|
inc r4
|
|
jsr r5,pnum; npn
|
|
br 3f
|
|
0:
|
|
jsr r5,pnum; pto
|
|
3:
|
|
dec argc
|
|
bgt 1b
|
|
2:
|
|
4:
|
|
/ tst index
|
|
/ beq 1f
|
|
/ sys creat; indf; 666
|
|
/ mov r0,indid
|
|
1:
|
|
/ mov $nop,get1a
|
|
clr init
|
|
mov $ibuf,ibufp
|
|
mov $ibuf,eibuf
|
|
mov sp,argp
|
|
clr r0
|
|
1:
|
|
movb r0,trtab(r0)
|
|
inc r0
|
|
cmp r0,$128.
|
|
bne 1b
|
|
movb $040,trtab+014
|
|
mov sp,ssp
|
|
mov $70.,vlist+6
|
|
jsr pc,ctime
|
|
mov $-1,nl
|
|
mov $end,enda
|
|
clr ioff
|
|
jmp loop
|
|
makebf:
|
|
tst (r0)+
|
|
mov (r0),r0
|
|
cmpb (r0),$'a
|
|
bne 0f
|
|
mov $bfn1,r0
|
|
mov r0,7f
|
|
mov r0,8f
|
|
mov r0,9f
|
|
/ mov r0,place1
|
|
0:
|
|
sys stat; 8:bfn; stbuf
|
|
bec 2f
|
|
sys creat; 9:bfn; 600
|
|
bec 1f
|
|
2:
|
|
incb bfn1+3
|
|
cmpb bfn1+3,$'z
|
|
blos 0b
|
|
jmp place
|
|
1:
|
|
mov r0,ibf
|
|
mov $blockend,r0
|
|
sub $block,r0
|
|
cmp r0,$1024.
|
|
blos 1f
|
|
4
|
|
1:
|
|
mov r0,blocksize
|
|
clr -(sp)
|
|
2:
|
|
mov ibf,r0
|
|
sys write; block; 1024.
|
|
inc (sp)
|
|
cmp (sp),nev
|
|
ble 2b
|
|
|
|
mov (sp)+,r3
|
|
mpy $1024.,r3
|
|
mov r3,nextb
|
|
mov r3,first
|
|
mov ibf,r0
|
|
sys close
|
|
sys open; 7:bfn; 2
|
|
jes place
|
|
mov r0,ibf
|
|
mov r0,ibf1
|
|
cmp $bfn1,7b
|
|
beq 1f
|
|
sys unlink; bfn
|
|
1:
|
|
rts pc
|
|
|
|
ctime:
|
|
sys time
|
|
sub $18000.,r1 /5hrs for est
|
|
sbc r0
|
|
ashc $-2,r0
|
|
div $21600.,r0
|
|
inc r0
|
|
mov r0,dy
|
|
/ mov r1,fd
|
|
add $3,r0
|
|
mov r0,r1
|
|
sxt r0
|
|
div $7,r0
|
|
inc r1
|
|
mov r1,dw
|
|
3:
|
|
mov yr,r1
|
|
sxt r0
|
|
div $4,r0
|
|
mov $28.,ms+2
|
|
tst r1
|
|
bne 0f
|
|
mov $29.,ms+2
|
|
0:
|
|
clr r0
|
|
1:
|
|
cmp dy,ms(r0)
|
|
ble 2f
|
|
sub ms(r0),dy
|
|
tst (r0)+
|
|
cmp r0,$24.
|
|
blt 1b
|
|
inc yr
|
|
mov yr,r1
|
|
br 3b
|
|
2:
|
|
asr r0
|
|
inc r0
|
|
mov r0,mo
|
|
rts pc
|
|
ms: 31.;28.;31.;30.;31.;30.;31.;31.;30.;31.;30.;31.
|
|
|
|
pnum:
|
|
clr -(sp)
|
|
clr r3
|
|
1:
|
|
movb (r4)+,r0
|
|
sub $'0,r0
|
|
cmp r0,$9
|
|
bhi 1f
|
|
inc (sp)
|
|
mpy $10.,r3
|
|
add r0,r3
|
|
br 1b
|
|
1:
|
|
mov r3,r0
|
|
tst (sp)+
|
|
beq 2f
|
|
mov r0,*(r5)+
|
|
1:
|
|
rts r5
|
|
2:
|
|
tst (r5)+
|
|
br 1b
|
|
|
|
emes1: <Too many files.\n\0>
|
|
.even
|
|
obuf=ibuf+512.
|
|
.=ibuf+1024.
|
|
.text
|
|
loop:
|
|
clr nlflg
|
|
clr nflush
|
|
clr nb
|
|
mov ilistp,r1
|
|
jsr pc,getch1
|
|
mov r0,ch
|
|
cmp ilistp,r1
|
|
beq 1f
|
|
tst ejf
|
|
beq 1f
|
|
cmp ilistp,ejl
|
|
bhi 1f
|
|
mov ilistp,ejl
|
|
inc nflush
|
|
jsr pc,newline
|
|
br loop
|
|
1:
|
|
jsr pc,getchar
|
|
tst pendt
|
|
bne 0f
|
|
tst lit
|
|
ble 1f
|
|
cmp frame,litlev
|
|
bhi 1f
|
|
dec lit
|
|
br 0f
|
|
1:
|
|
cmpb r0,cc
|
|
beq 3f
|
|
cmpb r0,c2
|
|
beq 2f
|
|
cmpb r0,tch
|
|
beq 4f
|
|
cmpb r0,$002
|
|
beq 6f
|
|
0:
|
|
movb r0,ch
|
|
jsr pc,text
|
|
br loop
|
|
4:
|
|
inc tflg
|
|
inc copyf
|
|
0:
|
|
jsr pc,getchar
|
|
mov r0,r5
|
|
jsr pc,putchar
|
|
cmp r5,$'\n
|
|
bne 0b
|
|
clr tflg
|
|
clr copyf
|
|
br loop
|
|
2:
|
|
inc nb
|
|
3:
|
|
jsr pc,control
|
|
5:
|
|
jsr pc,flushi
|
|
br loop
|
|
6:
|
|
inc raw
|
|
jsr pc,get1
|
|
movb r0,xpc
|
|
clr nlflg
|
|
0:
|
|
jsr pc,get1
|
|
cmpb r0,xpc
|
|
beq 7f
|
|
jsr pc,pchar2
|
|
br 0b
|
|
7:
|
|
clr raw
|
|
jbr loop
|
|
|
|
mesg:
|
|
tst r0
|
|
bne setsame
|
|
sys stat; ttyx; stbuf
|
|
mov stbuf+4,0f
|
|
mov 0f,1f
|
|
bic $22,0f
|
|
sys 0;7f
|
|
.data
|
|
7: sys chmod; ttyx; 0:..
|
|
.text
|
|
rts pc
|
|
setsame:
|
|
sys 0;7f
|
|
.data
|
|
7: sys chmod; ttyx; 1:..
|
|
.text
|
|
rts pc
|
|
|
|
stringfl:
|
|
jsr pc,flush
|
|
string:
|
|
mov r0,-(sp)
|
|
mov r1,-(sp)
|
|
mov r2,-(sp)
|
|
mov (r5)+,r1
|
|
mov r1,r2
|
|
mov r1,9f
|
|
1:
|
|
tstb (r1)+
|
|
bne 1b
|
|
dec r1
|
|
sub r2,r1
|
|
mov r1,1f
|
|
mov ttyod,r0
|
|
cmp r0,ibf
|
|
beq 2f
|
|
0:
|
|
sys 0;7f
|
|
.data
|
|
7: sys write; 9:..; 1:..
|
|
.text
|
|
bes 2f
|
|
1:
|
|
mov (sp)+,r2
|
|
mov (sp)+,r1
|
|
mov (sp)+,r0
|
|
rts r5
|
|
2:
|
|
sys creat; tmfile; 666
|
|
bes 1b
|
|
mov r0,ttyod
|
|
br 0b
|
|
|
|
flushi:
|
|
tst nflush
|
|
bne 1f
|
|
clr ch
|
|
tst nlflg
|
|
bne 1f
|
|
tst donef
|
|
beq 2f
|
|
cmp $ilist,ilistp
|
|
beq 1f
|
|
2:
|
|
jsr pc,getchar
|
|
br flushi
|
|
1:
|
|
rts pc
|
|
|
|
gettchar:
|
|
tst ul
|
|
ble getchar
|
|
tst ulstate
|
|
beq 3f
|
|
tst bsc
|
|
bgt 1f
|
|
tst ulc
|
|
bgt 2f
|
|
clr ulstate
|
|
br 3f
|
|
1:
|
|
dec bsc
|
|
mov $010,r0
|
|
rts pc
|
|
2:
|
|
dec ulc
|
|
mov $'_,r0
|
|
rts pc
|
|
3:
|
|
jsr pc,getchar
|
|
cmp r0,$016
|
|
beq 4f
|
|
cmp r0,$017
|
|
beq 4f
|
|
cmp r0,$'0
|
|
blt 1f
|
|
cmp r0,$'9
|
|
ble 2f
|
|
cmp r0,$'A
|
|
blt 1f
|
|
cmp r0,$'Z
|
|
ble 2f
|
|
cmp r0,$'a
|
|
blt 1f
|
|
cmp r0,$'z
|
|
ble 2f
|
|
1:
|
|
tst ulc
|
|
ble 4f
|
|
3:
|
|
mov $1,ulstate
|
|
mov r0,ch
|
|
br gettchar
|
|
2:
|
|
inc bsc
|
|
inc ulc
|
|
4:
|
|
tst r0
|
|
rts pc
|
|
|
|
rtnch:
|
|
mov ch,r0
|
|
clr ch
|
|
tst r0
|
|
rts pc
|
|
|
|
getchar:
|
|
mov r1,-(sp)
|
|
1:
|
|
jsr pc,getch1
|
|
bmi 2f
|
|
cmpb r0,fc
|
|
bne 2f
|
|
tst copyf
|
|
bne 2f
|
|
jsr pc,setfield
|
|
br 1b
|
|
2:
|
|
mov (sp)+,r1
|
|
tst r0
|
|
rts pc
|
|
getch1:
|
|
tst ch
|
|
bne rtnch
|
|
mov r1,-(sp)
|
|
1:
|
|
jsr pc,getch0
|
|
bmi 2f
|
|
tst copyf
|
|
bne 2f
|
|
cmpb r0,$030 /\w
|
|
bne 2f
|
|
jsr r5,setwd;getch0
|
|
br 1b
|
|
2:
|
|
jsr pc,width
|
|
add r1,column
|
|
mov (sp)+,r1
|
|
tst r0
|
|
rts pc
|
|
|
|
getch0:
|
|
tst ch
|
|
bne rtnch
|
|
1:
|
|
tst nlflg
|
|
beq 1f
|
|
mov $'\n,r0
|
|
rts pc
|
|
1:
|
|
mov r1,-(sp)
|
|
1:
|
|
jsr pc,get1
|
|
cmpb r0,eschar
|
|
bne 2f
|
|
jsr pc,get1
|
|
jsr r5,switch; esctab
|
|
cmpb r0,$'\n
|
|
bne 3f
|
|
/ clr column
|
|
br 1b
|
|
2:
|
|
cmp r0,$033 /prefix
|
|
bne 3f
|
|
jsr pc,get1
|
|
jsr r5,switch; pfxtab
|
|
3:
|
|
cmpb r0,$376 /comment
|
|
bne 2f
|
|
0:
|
|
jsr pc,get1
|
|
bmi 0b
|
|
cmpb r0,$012
|
|
bne 0b
|
|
2:
|
|
cmpb numc,r0
|
|
bne 2f
|
|
clr r1
|
|
jsr pc,setn
|
|
br 1b
|
|
2:
|
|
cmpb r0,$372 /mark hor place
|
|
bne 2f
|
|
tst copyf
|
|
bne 2f
|
|
mov r0,r1
|
|
jsr pc,setn
|
|
jsr pc,findr
|
|
jeq 1b
|
|
mov column,(r1)
|
|
jbr 1b
|
|
2:
|
|
cmpb r0,$025 /text string
|
|
bne 2f
|
|
jsr pc,setstr
|
|
br 1b
|
|
2:
|
|
cmpb dolc,r0
|
|
bne 2f
|
|
jsr pc,seta
|
|
br 1b
|
|
2:
|
|
cmpb r0,$026 /font indicator
|
|
bne 2f
|
|
jsr pc,get1
|
|
br 1b
|
|
2:
|
|
cmpb r0,$027 /point size
|
|
bne 2f
|
|
jsr pc,eatps
|
|
br 1b
|
|
2:
|
|
cmpb r0,$021 /spead line
|
|
bne 2f
|
|
tst copyf
|
|
bne 2f
|
|
inc spread
|
|
br 1b
|
|
2:
|
|
cmpb r0,$006 /repeat
|
|
bne 2f
|
|
jsr pc,setrpt
|
|
br 1b
|
|
2:
|
|
cmp r0,$'\n
|
|
bne 3f
|
|
inc nlflg
|
|
clr column
|
|
tst ip
|
|
bne 3f
|
|
inc iline
|
|
3:
|
|
mov (sp)+,r1
|
|
tst r0
|
|
rts pc
|
|
|
|
eatps:
|
|
jsr pc,get1
|
|
cmpb r0,$'+
|
|
beq 0f
|
|
cmpb r0,$'-
|
|
beq 0f
|
|
sub $'0,r0
|
|
ble 1f
|
|
cmp r0,$3
|
|
bgt 1f
|
|
0:
|
|
jsr pc,get1
|
|
1:
|
|
rts pc
|
|
|
|
.data
|
|
esctab:
|
|
.byte '*, 025 /text string
|
|
.byte 'n, 034 /number char
|
|
.byte '$, 020 /dollar char
|
|
eschar:
|
|
.byte '\\, 134 /backslash
|
|
.byte 'e, 013 /printable escape char
|
|
.byte 'f, 026 /font indicator
|
|
.byte 's, 027 /point size
|
|
.byte '&, 037 /filler
|
|
.byte 't, 011 /hor tab
|
|
.byte '!, 024 /transparent char
|
|
.byte 'p, 021 /spread line
|
|
.byte 'c, 005 /interrupted text
|
|
.byte 'k, 372 /mk hor
|
|
/ 014 hidden tab replacement character
|
|
.byte ' , 014 /\(space)
|
|
.byte 'x, 016 /SO (extra chars)
|
|
.byte 'y, 017 /SI (normal characters)
|
|
.byte 'l, 0177 /delete
|
|
.byte 'd, 032 /hlf (down)
|
|
.byte 'u, 035 /hlr (up)
|
|
.byte 'r, 036 /flr (reverse)
|
|
.byte 'a, 001 /leader char
|
|
.byte ':, 003 /lem char
|
|
.byte '?, 002 /raw trans
|
|
.byte '", 376 /comment
|
|
.byte 'w, 030 /width size char
|
|
.byte 0, 0
|
|
.text
|
|
|
|
pfxtab:
|
|
.byte '7, 036 /flr
|
|
.byte '8, 035 /hlr
|
|
.byte '9, 032 /hlf
|
|
.byte '1, 026 /set hor tabs
|
|
.byte '2, 027 /clr hor tabs
|
|
.byte 0,0
|
|
pfxtab1:
|
|
|
|
switch:
|
|
mov r1,-(sp)
|
|
mov (r5)+,r1
|
|
1:
|
|
cmpb (r1)+,r0
|
|
beq 1f
|
|
tstb (r1)+
|
|
bne 1b
|
|
cmp r1,$pfxtab
|
|
ble 0f
|
|
cmp r1,$pfxtab1
|
|
bgt 0f
|
|
mov $037,r0
|
|
0:
|
|
mov (sp)+,r1
|
|
rts r5
|
|
1:
|
|
movb (r1)+,r0
|
|
mov (sp)+,r1
|
|
rts r5
|
|
|
|
get1:
|
|
tst nspace
|
|
ble 1f
|
|
dec nspace
|
|
mov rchar,r0
|
|
rts pc
|
|
1:
|
|
mov r1,-(sp)
|
|
4:
|
|
tst cp
|
|
beq 2f
|
|
movb *cp,r0
|
|
bne 1f
|
|
clr cp
|
|
br 4b
|
|
1:
|
|
inc cp
|
|
br 8f
|
|
2:
|
|
tst ap
|
|
beq 2f
|
|
movb *ap,r0
|
|
bne 1f
|
|
clr ap
|
|
br 4b
|
|
1:
|
|
inc ap
|
|
br 8f
|
|
2:
|
|
cmp $-1,ip
|
|
bne 1f
|
|
jsr pc,rdtty
|
|
br 8f
|
|
1:
|
|
tst ip
|
|
beq 5f
|
|
jsr pc,rbf
|
|
br 8f
|
|
5:
|
|
tst donef
|
|
beq 0f
|
|
jmp done
|
|
0:
|
|
tst nx
|
|
bne 0f
|
|
3:
|
|
mov ibufp,r1
|
|
cmp r1,eibuf
|
|
bne 3f
|
|
cmp r1,$-1
|
|
beq 3f
|
|
0:
|
|
tst nfo
|
|
bne 2f
|
|
1:
|
|
jsr pc,nextfile
|
|
bne 3b
|
|
2:
|
|
clr nx
|
|
mov ifile,r0
|
|
sys read; ibuf; 512.
|
|
bes 1b
|
|
tst r0
|
|
beq 1b
|
|
mov $ibuf,r1
|
|
add r1,r0
|
|
mov r0,eibuf
|
|
3:
|
|
movb (r1)+,r0
|
|
bic $!377,r0
|
|
inc ioff
|
|
mov r1,ibufp
|
|
tst raw
|
|
bne 6f
|
|
cmpb r0,$040
|
|
bhis 8f
|
|
mov r0,-(sp)
|
|
mov cbits,r0
|
|
mov cbits+2,r1
|
|
ashc (sp),r0
|
|
bmi 0f
|
|
clr (sp)
|
|
0:
|
|
mov (sp)+,r0
|
|
8:
|
|
tst raw1
|
|
bne 6f
|
|
cmp r0,$004
|
|
beq 4b
|
|
tst copyf
|
|
bne 6f
|
|
cmpb r0,$011 /tab
|
|
bne 0f
|
|
mov tabc,rchar
|
|
br 1f
|
|
0:
|
|
cmpb r0,$001
|
|
bne 6f
|
|
mov dotc,rchar
|
|
1:
|
|
cmpb r0,fc
|
|
beq 6f
|
|
cmpb r0,padc
|
|
beq 6f
|
|
mov (sp)+,r1
|
|
mov $tabtab,r0
|
|
inc nspace
|
|
1:
|
|
tst (r0)
|
|
jeq get1
|
|
cmp column,(r0)+
|
|
bge 1b
|
|
mov -(r0),nspace
|
|
sub column,nspace
|
|
jbr get1
|
|
6:
|
|
/get1a: br 7f
|
|
tst init
|
|
bne 7f
|
|
tst r0
|
|
jeq 4b
|
|
7:
|
|
mov (sp)+,r1
|
|
tst r0
|
|
rts pc
|
|
cbits: 040743;20 /001,007-012,033 (soh,bel,bs,tab,nl,so,si,esc)
|
|
/cbits: 041743;20 /001,006-012,033 (soh,ack,bel,bs,tab,nl,so,si,esc)
|
|
|
|
edone:
|
|
mov $stk,frame
|
|
clr ip
|
|
done:
|
|
clr app
|
|
clr ds
|
|
mov em,r0
|
|
beq 0f
|
|
clr em
|
|
mov pc,donef
|
|
mov frame,-(sp)
|
|
jsr pc,cont1
|
|
cmp (sp)+,frame
|
|
bne 1f
|
|
0:
|
|
tst nfo
|
|
beq 3f
|
|
clr op
|
|
clr mflg
|
|
tst woff
|
|
beq 0f
|
|
clr r0
|
|
jsr pc,wbt
|
|
0:
|
|
clr pendnf
|
|
tst pendw
|
|
beq 0f
|
|
clr *pendw
|
|
clr pendw
|
|
0:
|
|
cmp $1,donef
|
|
beq done1
|
|
mov $1,donef
|
|
clr ip
|
|
mov $ilist,ilistp
|
|
jsr pc,rbreak
|
|
inc nflush
|
|
mov $ilist,r0
|
|
jsr pc,eject
|
|
1:
|
|
mov ssp,sp
|
|
jmp loop
|
|
done1:
|
|
/ tst pendb
|
|
/ bne 0b
|
|
tst nl
|
|
beq 1f
|
|
jsr pc,newline
|
|
br 1b
|
|
1:
|
|
3:
|
|
done2:
|
|
jsr pc,flush
|
|
place:
|
|
sys signal; 2; 1
|
|
tst quiet
|
|
beq 1f
|
|
bis $10,ttym
|
|
mov ttyid,r0
|
|
sys stty; ttys
|
|
1:
|
|
mov $1,r0
|
|
jsr pc,mesg
|
|
mov outid,r0
|
|
sys close
|
|
sys wait
|
|
sys exit
|
|
|
|
nextfile:
|
|
mov ifile,r0
|
|
beq 1f
|
|
sys close
|
|
1:
|
|
tst nx
|
|
beq 2f
|
|
mov $nextf,r0
|
|
br 3f
|
|
2:
|
|
cmp ifp,$ifl
|
|
beq 1f
|
|
jsr pc,popf
|
|
bne nextfile
|
|
tst pc
|
|
rts pc
|
|
1:
|
|
dec argc
|
|
blt 4f
|
|
mov *argp,r0
|
|
add $2,argp
|
|
3:
|
|
mov r0,5f
|
|
cmpb (r0)+,$'-
|
|
bne 0f
|
|
tstb (r0)
|
|
bne 0f
|
|
clr r0
|
|
br 1f
|
|
0:
|
|
sys 0;7f
|
|
.data
|
|
7: sys open; 5:..; 0
|
|
.text
|
|
bec 1f
|
|
sub mflg,nfo
|
|
jgt done
|
|
jsr r5,string; omes
|
|
mov 5b,8f
|
|
jmp 7f
|
|
.data
|
|
7: jsr r5,string; 8:..
|
|
jmp 6f
|
|
.text
|
|
6:
|
|
jsr r5,string; 9f
|
|
jbr done
|
|
1:
|
|
clr iline
|
|
inc nfo
|
|
mov r0,ifile
|
|
clr ioff
|
|
rts pc
|
|
4:
|
|
sub mflg,nfo
|
|
beq 0f
|
|
tst stdi
|
|
jeq done
|
|
0:
|
|
clr iline
|
|
clr mflg
|
|
inc nfo
|
|
clr stdi
|
|
clr ifile
|
|
clr ioff
|
|
rts pc
|
|
omes: <Cannot open: \0>
|
|
9: <\n\0>
|
|
.even
|
|
|
|
popf:
|
|
clr -(sp)
|
|
mov ifp,r1
|
|
cmp r1,$ifl
|
|
beq 1f
|
|
sub $2,ifp
|
|
mov -(r1),ifile
|
|
mov [offl-ifl](r1),ioff
|
|
mov ioff,0f
|
|
bic $777,0f
|
|
mov ifile,r0
|
|
beq 4f
|
|
sys 0;7f
|
|
.data
|
|
7: sys seek; 0:..; 0
|
|
.text
|
|
bes 2f
|
|
mov ifile,r0
|
|
sys read; ibuf; 512.
|
|
bes 2f
|
|
add $ibuf,r0
|
|
mov r0,eibuf
|
|
sub ioff,0b
|
|
mov $ibuf,ibufp
|
|
mov ifile,r0
|
|
jsr pc,ttyn
|
|
cmpb r0,$'x
|
|
bne 1f
|
|
sub 0b,ibufp
|
|
cmp ibufp,eibuf
|
|
blo 1f
|
|
2:
|
|
inc (sp)
|
|
1:
|
|
tst (sp)+
|
|
rts pc
|
|
4:
|
|
jsr pc,restbuf
|
|
br 1b
|
|
|
|
savebuf:
|
|
mov $ibuf,r0
|
|
mov $xbuf,r1
|
|
mov ibufp,xbufp
|
|
mov eibuf,xeibuf
|
|
1:
|
|
mov (r0)+,(r1)+
|
|
cmp r0,eibuf
|
|
blo 1b
|
|
rts pc
|
|
|
|
restbuf:
|
|
mov $xbuf,r0
|
|
mov $ibuf,r1
|
|
mov xbufp,ibufp
|
|
mov xeibuf,eibuf
|
|
1:
|
|
mov (r0)+,(r1)+
|
|
cmp r1,eibuf
|
|
blo 1b
|
|
rts pc
|
|
|
|
putchar:
|
|
bic $!377,r0
|
|
beq 2f
|
|
tstb r0
|
|
bmi pchar2
|
|
cmpb r0,$013 /\e
|
|
bne 0f
|
|
tst op
|
|
bne 0f
|
|
movb eschar,r0
|
|
br putchar
|
|
0:
|
|
movb trtab(r0),r0
|
|
cmp r0,$'
|
|
bne 1f
|
|
inc nsp
|
|
2:
|
|
rts pc
|
|
1:
|
|
cmp r0,$'\n
|
|
bne 1f
|
|
clr nsp
|
|
clr ocol
|
|
br pchar1
|
|
1:
|
|
mov $011,-(sp)
|
|
1:
|
|
tst nsp
|
|
beq 2f
|
|
tst slow
|
|
bne 4f
|
|
tst op
|
|
bne 4f
|
|
jsr pc,dsp
|
|
cmp nsp,r1
|
|
blt 4f
|
|
mov $011,(sp)
|
|
cmp r1,$1
|
|
bgt 8f
|
|
mov $040,(sp)
|
|
dec nsp
|
|
br 9f
|
|
8:
|
|
sub r1,nsp
|
|
9:
|
|
mov r0,-(sp)
|
|
3:
|
|
mov 2(sp),r0
|
|
jsr pc,pchar1
|
|
mov (sp)+,r0
|
|
br 1b
|
|
4:
|
|
mov r0,-(sp)
|
|
mov $' ,r0
|
|
jsr pc,pchar1
|
|
mov (sp)+,r0
|
|
dec nsp
|
|
bne 4b
|
|
2:
|
|
tst (sp)+
|
|
cmp r0,$026
|
|
blt 2f
|
|
cmp r0,$037
|
|
beq 3f
|
|
bgt 2f
|
|
mov r0,-(sp)
|
|
jsr r5, switch; unpfx
|
|
cmp (sp)+,r0
|
|
beq 2f
|
|
mov r0,-(sp)
|
|
mov $033,r0 /prefix
|
|
jsr pc,pchar1
|
|
dec ocol
|
|
mov (sp)+,r0
|
|
2:
|
|
pchar1:
|
|
cmp r0,$011
|
|
bne 1f
|
|
jsr pc,dsp
|
|
br 2f
|
|
1:
|
|
jsr pc,width
|
|
2:
|
|
add r1,ocol
|
|
pchar2:
|
|
tst op
|
|
beq 1f
|
|
mov op,r1
|
|
jsr pc,wbf
|
|
mov r1,op
|
|
br 3f
|
|
1:
|
|
tst tflg
|
|
bne 1f
|
|
cmp pn,pfrom
|
|
blt 3f
|
|
clr pfrom
|
|
1:
|
|
movb r0,*obufp
|
|
inc obufp
|
|
cmp obufp,$obuf+512.
|
|
beq flush
|
|
3:
|
|
rts pc
|
|
|
|
dsp:
|
|
clr r1
|
|
1:
|
|
add $8.,r1
|
|
cmp ocol,r1
|
|
bgt 1b
|
|
sub ocol,r1
|
|
bne 2f
|
|
mov $8.,r1
|
|
2:
|
|
rts pc
|
|
|
|
unpfx:
|
|
.byte 032, '9
|
|
.byte 035, '8
|
|
.byte 036, '7
|
|
.byte 031, '3
|
|
.byte 030, '4
|
|
.byte 026, '1
|
|
.byte 027, '2
|
|
.byte 0,0
|
|
|
|
flush:
|
|
mov obufp,r0
|
|
sub $obuf,r0
|
|
mov r0,0f
|
|
mov outid,r0
|
|
sys 0;7f
|
|
.data
|
|
7: sys write; obuf; 0:0
|
|
.text
|
|
jes place
|
|
inc toolate
|
|
mov $obuf,obufp
|
|
rts pc
|
|
|
|
rdtty:
|
|
/ mov sp,r1
|
|
/ sys signal; 2; rdtty1
|
|
clr r0
|
|
sys read; char; 1
|
|
tst r0
|
|
bne 2f
|
|
rdtty1:
|
|
/ mov r1,sp
|
|
jsr pc,popi
|
|
rdtty2:
|
|
clr tty
|
|
tst quiet
|
|
beq 0f
|
|
bis $10,ttym
|
|
mov ttyid,r0
|
|
sys stty; ttys
|
|
0:
|
|
clr r0
|
|
1:
|
|
/ sys signal; 2; place
|
|
rts pc
|
|
2:
|
|
mov char,r0
|
|
cmpb r0,$'\n
|
|
beq 3f
|
|
mov $1,tty
|
|
br 1b
|
|
3:
|
|
inc tty
|
|
cmp tty,$3
|
|
beq rdtty1
|
|
br 1b
|
|
|
|
ttyn:
|
|
mov r1,-(sp)
|
|
mov $'x,-(sp)
|
|
clr -(sp)
|
|
sys fstat; ybuf
|
|
bes 3f
|
|
mov ybuf+2,(sp)
|
|
sys open; dev; 0
|
|
bes 3f
|
|
mov r0,r1
|
|
1:
|
|
mov r1,r0
|
|
sys read; ybuf; 16.
|
|
bes 2f
|
|
cmp r0,$16.
|
|
bne 2f
|
|
mov $ybuf,r0
|
|
cmp (r0)+,(sp)
|
|
bne 1b
|
|
cmp (r0)+,$"tt
|
|
bne 1b
|
|
cmpb (r0)+,$'y
|
|
bne 1b
|
|
tstb (r0)+
|
|
beq 1b
|
|
cmpb (r0),$'\0
|
|
bne 1b
|
|
movb -(r0),2(sp)
|
|
2:
|
|
mov r1,r0
|
|
sys close
|
|
3:
|
|
tst (sp)+
|
|
movb (sp)+,r0
|
|
mov (sp)+,r1
|
|
rts pc
|
|
dev: </dev\0>
|
|
.even
|
|
|
|
cont1:
|
|
mov r0,-(sp)
|
|
mov pc,r2
|
|
br 0f
|
|
control:
|
|
jsr pc,getchar
|
|
mov r0,-(sp)
|
|
jsr pc,getchar
|
|
cmpb r0,$'\n
|
|
beq 8f
|
|
cmpb r0,$' /
|
|
bne 9f
|
|
8:
|
|
mov r0,ch
|
|
clr r0
|
|
9:
|
|
swab r0
|
|
bis (sp),r0
|
|
clr r2
|
|
0:
|
|
mov $contab,r1
|
|
1:
|
|
mov (r1)+,(sp)
|
|
bic $100000,(sp)
|
|
cmp r0,(sp)
|
|
bne 4f
|
|
mov (r1),(sp)
|
|
tst -(r1)
|
|
bpl 3f
|
|
clr *nxf
|
|
tst r2
|
|
bne 2f
|
|
jsr pc,collect
|
|
2:
|
|
jsr pc,flushi
|
|
jsr pc,pushi
|
|
beq 5f
|
|
mov (sp),ip
|
|
br 5f
|
|
3:
|
|
jmp *(sp)+
|
|
4:
|
|
cmp (r1)+,$-1
|
|
bne 1b
|
|
5:
|
|
tst (sp)+
|
|
rts pc
|
|
|
|
.data
|
|
contab:
|
|
<ad>; casead
|
|
<bp>; casebp
|
|
<pn>; casepn
|
|
<br>; casebr
|
|
<cc>; casecc
|
|
<c2>; casec2
|
|
<ce>; casece
|
|
<fi>; casefi
|
|
<in>; casein
|
|
<li>; caseli
|
|
<ll>; casell
|
|
<ls>; casels
|
|
<ns>; casens
|
|
<rs>; casers
|
|
<na>; casena
|
|
<ne>; casene
|
|
<nf>; casenf
|
|
<pl>; casepl
|
|
<sp>; casesp
|
|
<lv>; casesv
|
|
<sv>; casesv
|
|
<os>; caseos
|
|
<ta>; caseta
|
|
<ti>; caseti
|
|
<tr>; casetr
|
|
<ul>; caseul
|
|
<tl>; casetl
|
|
<lt>; caselt
|
|
<hc>; casehc
|
|
<hy>; casehy
|
|
<nh>; casenh
|
|
<nm>; casenm
|
|
<np>; casenp
|
|
<nn>; casenn
|
|
<ar>; casear
|
|
<ro>; casero
|
|
<RO>; caseroc
|
|
<nx>; casenx
|
|
<so>; caseso
|
|
<po>; casepo
|
|
<de>; casede
|
|
<ds>; caseds
|
|
<am>; caseam
|
|
<as>; caseas
|
|
<da>; caseda
|
|
<di>; casedi
|
|
<rm>; caserm
|
|
<rn>; casern
|
|
<ig>; caseig
|
|
<tc>; casetc
|
|
<ec>; caseec
|
|
<eo>; caseeo
|
|
<lc>; caselc
|
|
<nc>; casenc
|
|
<ev>; caseev
|
|
<if>; caseif
|
|
<wh>; casewh
|
|
<ch>; casech
|
|
<rd>; caserd
|
|
<tm>; casetm
|
|
<nr>; casenr
|
|
<mk>; casemk
|
|
<rt>; casert
|
|
<ab>; casest
|
|
<fl>; casefl
|
|
<ex>; done
|
|
<xh>; casexh
|
|
<em>; caseem
|
|
<fc>; casefc
|
|
<af>; caseaf
|
|
<pi>; casepi
|
|
<hw>; casehw
|
|
bnames: .=.+512.
|
|
-1; -1
|
|
.text
|