Work on file usr/source/s7/roff4.s
Synthesized-from: v5
--- /dev/null
+/
+/ copyright 1972 bell telephone laboratories inc.
+/
+
+/ roff4 -- runoff
+
+text:
+/ inc tottext
+ clr ulstate
+ clr wch
+ clr wne
+ tst ce
+ bne nofill
+ tst fi
+ beq nofill
+ jsr pc,getchar
+2:
+ mov r0,ch
+ cmp $' ,r0
+ bne 2f
+ jsr pc,rbreak
+1:
+ jsr pc,getchar
+ cmp $' ,r0
+ bne 2b
+ inc un
+ br 1b
+2:
+ cmp r0,$'\n
+ bne 2f
+ jsr pc,rbreak
+ clr ch
+ jsr pc,nline
+ br 4f
+2:
+ tst wch
+ bne 3f
+ jsr pc,getword
+ br 4f
+3:
+ jsr pc,movword
+ bne 2b
+ jsr pc,adjust
+ br 2b
+4:
+ dec ul
+ bge 1f
+ clr ul
+1:
+ rts pc
+
+nofill:
+ jsr pc,rbreak
+1:
+ jsr pc,gettchar
+ cmp r0,$'\n
+ beq 1f
+ jsr pc,width
+ add r1,ne
+ 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
+ tst numbmod
+ beq 2f
+ add $2,un
+2:
+ clr fac
+ clr fmq
+ mov $1000,nwd
+ mov $' ,r0
+ jsr pc,storeline
+ jsr pc,rbreak
+ dec ul
+ bpl 2f
+ clr ul
+2:
+ 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
+ jsr pc,rbreak
+ 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 wch,wordend
+ mov wordp,r4
+ add r4,wordend
+ 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
+ cmp nel,$4
+ ble 1f
+ mov ls,r0
+ add nl,r0
+ cmp r0,bl
+ bgt 2f
+ mov ls,r0
+ asl r0
+ add nl,r0
+ cmp r0,bl
+ bgt 1f
+2:
+ 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 $4,r3
+ cmp r3,$word
+ blo 2f
+ movb (r3),r2
+ bic $!177,r2
+ jsr pc,alph2
+ beq 3f
+ cmp nel,$2
+ ble 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)
+ cmp r4,$word
+ bge 4f
+ 4
+4:
+ tst (sp)+
+ sez
+ rts pc
+
+topbot:
+ mov pl,r0
+ bne 1f
+ clr bl
+ rts pc
+1:
+ sub ma3,r0
+ sub ma4,r0
+ sub hx,r0
+ mov r0,bl
+ mov ma1,r0
+ add ma2,r0
+ add hx,r0
+ cmp r0,bl
+ blt 1f
+ mov $2,r0
+ mov r0,ma1
+ mov r0,ma2
+ mov r0,ma3
+ mov r0,ma4
+ mov $66.,pl
+ br topbot
+1:
+ cmp nl,bl
+ ble 1f
+ mov bl,nl
+1:
+ rts pc
+
+width:
+ cmp r0,ohc
+ beq 2f
+ tst r0
+ beq 2f
+ cmp r0,$0177
+ beq 2f
+ cmp r0,$010
+ bne 1f
+ mov $-1,r1
+ rts pc
+1:
+ cmp $' ,r0
+ bgt 2f
+ mov $1,r1
+ rts pc
+2:
+ clr r1
+ rts pc
+
+headin:
+ jsr pc,skipcont
+ mov nextb,r1
+ mov r1,*(r5)+
+ jsr pc,gettchar
+ cmp r0,$'\n
+ beq 2f
+ mov r0,r2
+1:
+ jsr pc,gettchar
+ cmp r0,$'\n
+ beq 2f
+ cmp r0,r2
+ bne 3f
+ clr r0
+3:
+ jsr pc,wbf
+ br 1b
+2:
+ clr r0
+ jsr pc,wbf
+ mov r1,nextb
+ mov ll,llh
+ rts r5
+
+headout:
+ tst hx
+ bne 0f
+ tst (r5)+
+ rts r5
+0:
+ clr -(sp)
+ mov *(r5),r2
+ mov ibf1,nfile
+ jsr r5,headseg; width
+ mov r0,-(sp)
+ jsr r5,headseg; width
+ mov r0,-(sp)
+ jsr r5,headseg; width
+ mov r0,-(sp)
+ mov po,r0
+ jsr pc,space
+ tst numbmod
+ beq 1f
+ mov $5,r0
+ add ni,r0
+ mov r0,6(sp)
+1:
+ mov *(r5)+,r2
+ jsr r5,headseg; putchar
+ mov llh,r0
+ add 6(sp),r0
+ sub 2(sp),r0
+ asr r0
+ sub 4(sp),r0
+ bge 1f
+ clr r0
+1:
+ mov r0,-(sp)
+ jsr pc,space
+ jsr r5,headseg; putchar
+ mov llh,r0
+ sub (sp)+,r0
+ sub (sp)+,r0
+ sub (sp)+,r0
+ sub (sp)+,r0
+ add (sp)+,r0
+ jsr pc,space
+ jsr r5,headseg; putchar
+ jsr pc,newline
+ rts r5
+
+headseg:
+ clr -(sp)
+1:
+ mov r1,-(sp)
+ mov r2,r1
+ inc r2
+ jsr pc,rdsufb
+ mov (sp)+,r1
+ tstb r0
+ beq 1f
+ cmp r0,$'%
+ beq 2f
+ jsr pc,*(r5)
+ add r1,(sp)
+ br 1b
+2:
+ mov pn,r0
+ clr r1
+ tst ro
+ beq 2f
+ mov $ones,onesp
+ mov $fives,fivesp
+ jsr pc,roman
+ add r1,(sp)
+ br 1b
+2:
+ jsr pc,decml
+ 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,decml
+ mov r1,2(sp)
+1:
+ mov (sp)+,r0
+ add $'0,r0
+ jsr pc,*(r5)
+ add (sp)+,r1
+ rts pc
+
+roman:
+ mov r2,-(sp)
+ mov r3,-(sp)
+ 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,roman
+ 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
+