/ / / 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