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