MiniUnix/usr/source/s7/nroff4.s
/
/
/ nroff4
text:
inc nflush
cmp nl,$-1
bne 0f
jsr pc,newln1
rts pc
0:
clr ulstate
jsr pc,setnel
tst ce
bne nofill
tst fi
beq nofill
tst pendw
bne 7f
tst pendt
bne 8f
inc pendt
tst x
bne 0f
1:
jsr pc,getchar
bmi 1f
cmpb r0,$' /
beq 3f
cmpb r0,tabc
bne 1f
3:
inc x
br 1b
1:
tst nlflg
bne 6f
mov r0,ch
tst x
beq 2f
0:
jsr pc,rbreak
tst nc
bne 5f
tst wch
bne 5f
add x,un
clr x
jsr pc,setnel
tst trap
bne 5f
2:
tst x
bne 0b
tst nlflg
beq 2f
6:
clr nflush
clr x
clr pendt
clr ch
mov $1,r0
jsr pc,casesp1
rts pc
8:
tst x
bne 0b
2:
tst spread
bne 1f
tst pendw
bne 0f
tst wch
bne 3f
0:
7:
jsr pc,getword
br 4f
3:
jsr pc,movword
bne 2b
tst nlflg
beq 1f
clr pendt
1:
jsr pc,adjust
tst trap
beq 2b
tst nlflg
beq 5f
4:
clr pendt
tst pendw
bne 5f
dec ul
bge 5f
clr ul
5:
clr nflush
rts pc
nofill:
tst pendnf
bne 1f
clr over
jsr pc,rbreak
tst trap
bne 3f
tst nlflg
bne 6b
clr fac
clr fmq
mov $1000,nwd
1:
jsr pc,gettchar
bmi 0f
cmpb r0,$'\n
beq 1f
cmpb r0,ohc
beq 1b
cmpb r0,$005
beq 4f
0:
jsr pc,storeline
br 1b
1:
tst ce
ble 2f
dec ce
mov nel,r0
asr r0
bpl 1f
clr r0
1:
add r0,un
2:
tst nc
bne 0f
mov $037,r0
jsr pc,storeline
0:
jsr pc,rbreak
dec ul
bpl 3f
clr ul
3:
clr nflush
clr pendnf
rts pc
4:
inc pendnf
clr nflush
jsr pc,flushi
rts pc
adjust:
mov r2,-(sp)
mov r3,-(sp)
clr r2
clr r3
tst ad
beq 1f
mov nwd,r0
dec r0
ble 1f
mov nel,r3
ble 1f
dvd r0,r2
1:
mov r3,fac
mov r2,fmq
mov (sp)+,r3
mov (sp)+,r2
mov $-1,lastl
jsr pc,rbreak1
clr spread
rts pc
fill:
mov fmq,r0
1:
inc r0
dec nc
cmpb (r2)+,$'
beq 1b
dec r2
bit $1,totout
beq 2f
inc fac
cmp fac,nwd
blt 1f
inc r0
br 1f
2:
dec fac
bmi 1f
inc r0
1:
jsr pc,space
movb (r2),r0
rts pc
movword:
mov wordp,r4
tst nwd
bne 2f
1:
movb (r4)+,r0
cmp r0,$'
bne 1f
dec wch
jsr pc,width
sub r1,wne
br 1b
1:
dec r4
2:
cmp wne,nel
ble 1f
tst nwd
beq 2f
cmp nel,$4
blt 1f
cmp wch,$5 /don't do 4 char words
ble 1f
2:
bit $2,hyf
beq 0f
tst op
bne 0f
clr r0
jsr pc,findt
dec r1
ble 1f
0:
jsr pc,hyphen
1:
clr nhyph
mov wch,-(sp)
1:
movb (r4)+,r0
cmp r0,$'-
bne 2f
movb (r4),r2
jsr pc,alph2
bne 2f
bisb $200,(r4)
2:
tst r0
bpl 2f
bic $!177,r0
mov r4,r3
sub $3,r3
cmp r3,$word
blo 2f
movb (r3),r2
bic $!177,r2
jsr pc,alph2
bne 2f
3:
mov r0,-(sp)
clr r0
jsr pc,storeline
mov (sp)+,r0
inc nhyph
2:
jsr pc,width
sub r1,wne
jsr pc,storeline
dec wch
bne 1b
tst nel
blt 1f
inc nwd
tst (sp)+
clz
rts pc
1:
mov linep,r3
1:
tst nhyph
bne 2f
tst nwd
beq 3f
cmp wch,(sp)
beq 4f
2:
movb -(r3),r0
bne 2f
dec nhyph
bne 5f
tst nwd
beq 6f
5:
tst nel
ble 2f
6:
cmpb -1(r3),$'-
beq 3f
movb $'-,(r3)
dec nel
inc ne
br 3f
2:
dec nc
tstb (r3)
beq 1b
jsr pc,width
sub r1,ne
add r1,nel
inc wch
dec r4
add r1,wne
br 1b
3:
inc nwd
4:
mov r4,wordp
bicb $!177,(r4)
tst (sp)+
sez
rts pc
width:
mov r0,-(sp)
cmpb r0,$014
bne 0f
mov $1,r1
br 3f
0:
cmpb r0,$013
bne 0f
movb eschar,r0
0:
bic $!177,r0
cmp r0,ohc
beq 2f
tst r0
beq 2f
cmp r0,$0177
beq 2f
cmp r0,$010
bne 1f
mov $-1,r1
br 3f
1:
cmp $' ,r0
bgt 2f
mov $1,r1
br 3f
2:
clr r1
3:
mov (sp)+,r0
rts pc
setwd:
mov column,-(sp)
clr column
mov r2,-(sp)
clr -(sp)
jsr pc,*(r5)
mov r0,r2
1:
jsr pc,*(r5)
bmi 0f
cmpb r0,r2
beq 2f
0:
tst nlflg
bne 2f
jsr pc,width
add r1,(sp)
br 1b
2:
mov (sp)+,r0
jsr pc,setn0
mov (sp)+,r2
mov (sp)+,column
tst (r5)+
rts r5
header:
/headin:
clr nls
jsr pc,skipcont
mov $'',r2
tst op
beq 1f
jsr pc,wbfl
1:
jsr pc,alloc
bne 0f
rts pc
0:
mov nextb,r1
2:
mov r1,headp
jsr pc,getchar
bmi 3f
cmpb r0,$'\n
beq 2f
mov r0,r2
1:
jsr pc,getchar
bmi 3f
cmpb r0,$'\n
beq 2f
0:
cmpb r0,r2
bne 3f
mov $004,r0
3:
jsr pc,wbf
br 1b
2:
mov $004,r0
jsr pc,wbf
mov $004,r0
jsr pc,wbf
clr r0
jsr pc,wbt
/headout:
clr -(sp)
mov headp,r2
jsr r5,headseg; width
mov r0,-(sp)
jsr r5,headseg; width
mov r0,-(sp)
jsr r5,headseg; width
mov r0,-(sp)
tst op
bne 1f
mov po,r0
jsr pc,space
1:
mov headp,r2
jsr r5,headseg; putchar
mov llh,r0
add 6(sp),r0
sub 2(sp),r0
asr r0
sub 4(sp),r0
mov r0,-(sp)
tst 4(sp)
bne 1f
tst 2(sp)
beq 2f
1:
jsr pc,space
2:
jsr r5,headseg; putchar
mov llh,r0
sub (sp)+,r0
sub (sp)+,r0
sub (sp)+,r0
sub (sp)+,r0
add (sp)+,r0
tst -10(sp)
beq 1f
jsr pc,space
jsr r5,headseg; putchar
1:
jsr pc,newline
cmp nl,hnl
ble 0f
mov nl,hnl
0:
mov headp,r0
jsr pc,free
rts pc
headseg:
clr -(sp)
1:
mov r1,-(sp)
mov r2,r1
jsr pc,rbf0
jsr pc,incoff
mov r1,r2
mov (sp)+,r1
tst r0
beq 1f
bmi 0f
cmpb r0,$004
beq 1f
cmpb r0,$'%
beq 2f
0:
jsr pc,*(r5)
add r1,(sp)
br 1b
2:
mov $'%,r0
jsr pc,findr
mov [flist-vlist](r1),nform
mov pn,r0
clr r1
jsr pc,fnumb
add r1,(sp)
br 1b
1:
mov (sp)+,r0
tst (r5)+
rts r5
space:
jsr r5,nlines;putchar
rts pc
nlines:
mov r0,-(sp)
1:
dec (sp)
blt 1f
mov $' ,r0
jsr pc,*(r5)
br 1b
1:
cmp (r5)+,(sp)+
rts r5
decimal:
jsr pc,decml
tst (r5)+
rts r5
decml:
mov r2,-(sp)
mov r3,-(sp)
jsr pc,decml1
mov (sp)+,r3
mov (sp)+,r2
rts pc
decml1:
mov r1,-(sp)
clr r2
mov r0,r3
dvd $10.,r2
mov r3,-(sp)
mov r2,r0
beq 1f
jsr pc,decml1
mov r1,2(sp)
1:
mov (sp)+,r0
add $'0,r0
jsr pc,*(r5)
add (sp)+,r1
rts pc
roman0:
jsr pc,roman
tst (r5)+
rts r5
roman:
tst r0
beq decml
mov r2,-(sp)
mov r3,-(sp)
cmp ro,$2
bne 1f
mov $cones,onesp
mov $cfives,fivesp
br 2f
1:
mov $ones,onesp
mov $fives,fivesp
2:
jsr pc,roman1
mov (sp)+,r3
mov (sp)+,r2
rts pc
roman1:
clr r2
mov r0,r3
bne .+4
rts pc
mov r1,-(sp)
dvd $10.,r2
mov r3,-(sp)
mov r2,r0
inc onesp
inc fivesp
jsr pc,roman1
mov r1,2(sp)
dec onesp
dec fivesp
clr r2
mov (sp)+,r3
dvd $5.,r2
cmp r3,$4
bne 1f
movb *onesp,r0
jsr pc,*(r5)
add r1,(sp)
tst r2
beq 2f
inc onesp
movb *onesp,r0
dec onesp
br 3f
2:
movb *fivesp,r0
3:
jsr pc,*(r5)
add (sp)+,r1
rts pc
1:
tst r2
beq 2f
movb *fivesp,r0
jsr pc,*(r5)
add r1,(sp)
2:
dec r3
blt 1f
movb *onesp,r0
jsr pc,*(r5)
add r1,(sp)
br 2b
1:
mov (sp)+,r1
rts pc
abc0:
jsr pc,abc
tst (r5)+
rts r5
abc:
mov r2,-(sp)
mov r3,-(sp)
mov r0,r3
bne 0f
mov $'0,r0
jsr pc,*(r5)
br 1f
0:
dec r3
jsr pc,abc1
1:
mov (sp)+,r3
mov (sp)+,r2
rts pc
abc1:
clr r2
dvd $26.,r2
mov r3,-(sp)
mov r2,r3
beq 1f
dec r3
jsr pc,abc1
1:
cmp ro,$2
beq 1f
add $'a,(sp)
br 2f
1:
add $'A,(sp)
2:
mov (sp)+,r0
jsr pc,*(r5)
rts pc
fnumb0:
jsr pc,fnumb
tst (r5)+
rts r5
fnumb:
mov ro,-(sp)
mov nform,ro
bne 0f
mov (sp),ro
br 1f
0:
dec ro
1:
tst ro
bne 1f
jsr pc,decml
br 2f
1:
cmp ro,$2
bgt 1f
jsr pc,roman
br 2f
1:
sub $2,ro
jsr pc,abc
2:
mov (sp)+,ro
rts pc
/wordout:
/ tst index
/ beq 1f
/ mov wch,0f
/ beq 1f
/ mov indid,r0
/ sys write; word; 0:..
/ mov indid,r0
/ sys write; 8f; 1
/ mov indid,r0
/ jsr r5,numb; pn
/ mov indid,r0
/ sys write; 8f; 1
/ mov nl,char
/ inc char
/ mov indid,r0
/ jsr r5,numb; char
/ mov indid,r0
/ sys write; 9f; 1
/1:
/ rts pc
/8: 011 /tab
/9: <\n\0>
/ .even
/numb:
/ mov r2,-(sp)
/ mov r3,-(sp)
/ mov *(r5)+,r3
/ mov r0,r1
/ jsr pc,numb1
/ mov (sp)+,r3
/ mov (sp)+,r2
/ rts r5
/numb1:
/ clr r2
/ dvd $10.,r2
/ mov r3,-(sp)
/ mov r2,r3
/ beq 1f
/ jsr pc,numb1
/1:
/ add $'0,(sp)
/ mov (sp)+,char
/ mov r1,r0
/ sys write; char; 1
/ rts pc
setstr:
clr -(sp)
clr -(sp)
0:
jsr pc,get1
bmi 3f
bic $!177,r0
cmpb r0,$'\\
bne 1f
4:
jsr pc,get1
jsr r5,switch;esctab
cmpb r0,dolc
bne 2f
jsr pc,seta
br 0b
2:
cmpb r0,numc
bne 1f
clr r1
jsr pc,setn
br 0b
1:
tst 2(sp)
bne 5f
bic $!177,r0
cmpb r0,$'(
bne 1f
inc 2(sp)
jsr pc,get1
bic $!177,r0
cmpb r0,$'\\
beq 4b
5:
mov r0,-(sp)
jsr pc,get1
bic $!177,r0
swab r0
bis (sp)+,r0
1:
mov $contab,r1
1:
mov (r1)+,(sp)
bic $100000,(sp)
cmp r0,(sp)
beq 2f
cmp (r1)+,$-1
bne 1b
br 3f
2:
mov (r1),(sp)
tst -(r1)
bpl 3f
clr *nxf
jsr pc,pushi
mov (sp),ip
3:
cmp (sp)+,(sp)+
rts pc
copys:
inc copyf
jsr pc,skipcont
bne 2f
jsr pc,getchar
bmi 0f
cmpb r0,$'"
bne 0f
1:
jsr pc,getchar
tst nlflg
bne 2f
0:
jsr pc,wbf
br 1b
2:
clr r0
jsr pc,wbt
clr copyf
rts pc
setrpt:
inc copyf
inc raw1
jsr pc,get1
dec copyf
dec raw1
mov r0,r1
jsr pc,get1
cmpb r0,$006
beq 1f
0:
movb r0,rchar
movb r1,nspace
cmpb r1,$377
bne 1f
clr nspace
1:
rts pc
setfield:
clr npad
mov r1,-(sp)
mov r2,-(sp)
mov r3,-(sp)
mov r4,-(sp)
clr r4
clr -(sp)
jsr pc,width
sub r1,column /start
mov column,-(sp)
mov $tabtab,r0
1:
tst (r0)
beq 4f
cmp (sp),(r0)+
bge 1b
mov -(r0),2(sp)
sub (sp),2(sp) /h
mov $fbuf,r2
1:
jsr pc,getch1
bmi 0f
cmpb r0,padc
bne 2f
jsr pc,width
sub r1,column
inc npad
mov r2,-(sp)
add $2,r2
2:
cmpb r0,fc
beq 3f
cmpb r0,$'\n
bne 0f
mov $012,r4
clr nlflg
br 3f
0:
movb r0,(r2)+
cmp r2,$efbuf-6
blo 1b
3:
tst npad
bne 0f
inc npad
mov r2,-(sp)
add $3,r2
0:
movb r4,(r2)+
clrb (r2)+
jsr pc,width
sub r1,column
mov npad,r1
asl r1
add sp,r1
mov (r1),-(sp)
sub column,(r1) /-s
mov (sp)+,column
add 2(r1),(r1) /h-s
mov (r1),r1
mov r1,r2
sxt r0
div npad,r0
mov $014,r3 /unpaddable sp
tst r2
bpl 1f
neg r0
neg r1
mov $010,r3
1:
mov (sp)+,r2
movb $006,(r2)+
movb r0,(r2)+
movb r3,(r2)
tst r1
beq 0f
incb -1(r2)
dec r1
0:
tstb -(r2)
bne 0f
movb $377,(r2)
0:
dec npad
bgt 1b
mov $fbuf,cp
4:
cmp (sp)+,(sp)+
mov (sp)+,r4
mov (sp)+,r3
mov (sp)+,r2
mov (sp)+,r1
rts pc