📄 nroff4.s
字号:
/// nroff4text: inc nflush cmp nl,$-1 bne 0f jsr pc,newln1 rts pc0: 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 0f1: jsr pc,getchar bmi 1f cmpb r0,$' / beq 3f cmpb r0,tabc bne 1f3: inc x br 1b1: tst nlflg bne 6f mov r0,ch tst x beq 2f0: jsr pc,rbreak tst nc bne 5f tst wch bne 5f add x,un clr x jsr pc,setnel tst trap bne 5f2: tst x bne 0b tst nlflg beq 2f6: clr nflush clr x clr pendt clr ch mov $1,r0 jsr pc,casesp1 rts pc8: tst x bne 0b2: tst spread bne 1f tst pendw bne 0f tst wch bne 3f0:7: jsr pc,getword br 4f3: jsr pc,movword bne 2b tst nlflg beq 1f clr pendt1: jsr pc,adjust tst trap beq 2b tst nlflg beq 5f4: clr pendt tst pendw bne 5f dec ul bge 5f clr ul5: clr nflush rts pcnofill: tst pendnf bne 1f clr over jsr pc,rbreak tst trap bne 3f tst nlflg bne 6b clr fac clr fmq mov $1000,nwd1: jsr pc,gettchar bmi 0f cmpb r0,$'\n beq 1f cmpb r0,ohc beq 1b cmpb r0,$005 beq 4f0: jsr pc,storeline br 1b1: tst ce ble 2f dec ce mov nel,r0 asr r0 bpl 1f clr r01: add r0,un2: tst nc bne 0f mov $037,r0 jsr pc,storeline0: jsr pc,rbreak dec ul bpl 3f clr ul3: clr nflush clr pendnf rts pc4: inc pendnf clr nflush jsr pc,flushi rts pcadjust: 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,r21: mov r3,fac mov r2,fmq mov (sp)+,r3 mov (sp)+,r2 mov $-1,lastl jsr pc,rbreak1 clr spread rts pcfill: mov fmq,r01: 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 1f2: dec fac bmi 1f inc r01: jsr pc,space movb (r2),r0 rts pcmovword: mov wordp,r4 tst nwd bne 2f1: movb (r4)+,r0 cmp r0,$' bne 1f dec wch jsr pc,width sub r1,wne br 1b1: dec r42: cmp wne,nel ble 1f tst nwd beq 2f cmp nel,$4 blt 1f cmp wch,$5 /don't do 4 char words ble 1f2: bit $2,hyf beq 0f tst op bne 0f clr r0 jsr pc,findt dec r1 ble 1f0: jsr pc,hyphen1: 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 2f3: mov r0,-(sp) clr r0 jsr pc,storeline mov (sp)+,r0 inc nhyph2: jsr pc,width sub r1,wne jsr pc,storeline dec wch bne 1b tst nel blt 1f inc nwd tst (sp)+ clz rts pc1: mov linep,r31: tst nhyph bne 2f tst nwd beq 3f cmp wch,(sp) beq 4f2: movb -(r3),r0 bne 2f dec nhyph bne 5f tst nwd beq 6f5: tst nel ble 2f6: cmpb -1(r3),$'- beq 3f movb $'-,(r3) dec nel inc ne br 3f2: dec nc tstb (r3) beq 1b jsr pc,width sub r1,ne add r1,nel inc wch dec r4 add r1,wne br 1b3: inc nwd4: mov r4,wordp bicb $!177,(r4) tst (sp)+ sez rts pcwidth: mov r0,-(sp) cmpb r0,$014 bne 0f mov $1,r1 br 3f0: cmpb r0,$013 bne 0f movb eschar,r00: 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 3f1: cmp $' ,r0 bgt 2f mov $1,r1 br 3f2: clr r13: mov (sp)+,r0 rts pcsetwd: mov column,-(sp) clr column mov r2,-(sp) clr -(sp) jsr pc,*(r5) mov r0,r21: jsr pc,*(r5) bmi 0f cmpb r0,r2 beq 2f0: tst nlflg bne 2f jsr pc,width add r1,(sp) br 1b2: mov (sp)+,r0 jsr pc,setn0 mov (sp)+,r2 mov (sp)+,column tst (r5)+ rts r5header:/headin: clr nls jsr pc,skipcont mov $'',r2 tst op beq 1f jsr pc,wbfl1: jsr pc,alloc bne 0f rts pc0: mov nextb,r12: mov r1,headp jsr pc,getchar bmi 3f cmpb r0,$'\n beq 2f mov r0,r21: jsr pc,getchar bmi 3f cmpb r0,$'\n beq 2f0: cmpb r0,r2 bne 3f mov $004,r03: jsr pc,wbf br 1b2: 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,space1: 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 2f1: jsr pc,space2: 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; putchar1: jsr pc,newline cmp nl,hnl ble 0f mov nl,hnl0: mov headp,r0 jsr pc,free rts pcheadseg: 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 2f0: jsr pc,*(r5) add r1,(sp) br 1b2: mov $'%,r0 jsr pc,findr mov [flist-vlist](r1),nform mov pn,r0 clr r1 jsr pc,fnumb add r1,(sp) br 1b1: mov (sp)+,r0 tst (r5)+ rts r5space: jsr r5,nlines;putchar rts pcnlines: mov r0,-(sp)1: dec (sp) blt 1f mov $' ,r0 jsr pc,*(r5) br 1b1: cmp (r5)+,(sp)+ rts r5decimal: jsr pc,decml tst (r5)+ rts r5decml: mov r2,-(sp) mov r3,-(sp) jsr pc,decml1 mov (sp)+,r3 mov (sp)+,r2 rts pcdecml1: 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 pcroman0: jsr pc,roman tst (r5)+ rts r5roman: tst r0 beq decml mov r2,-(sp) mov r3,-(sp) cmp ro,$2 bne 1f mov $cones,onesp mov $cfives,fivesp br 2f1: mov $ones,onesp mov $fives,fivesp2: jsr pc,roman1 mov (sp)+,r3 mov (sp)+,r2 rts pcroman1: 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 3f2: movb *fivesp,r03: jsr pc,*(r5) add (sp)+,r1 rts pc1: 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 2b1: mov (sp)+,r1 rts pcabc0: jsr pc,abc tst (r5)+ rts r5abc: mov r2,-(sp) mov r3,-(sp) mov r0,r3 bne 0f mov $'0,r0 jsr pc,*(r5) br 1f0: dec r3 jsr pc,abc11: mov (sp)+,r3 mov (sp)+,r2 rts pcabc1: clr r2 dvd $26.,r2 mov r3,-(sp) mov r2,r3 beq 1f dec r3 jsr pc,abc11: cmp ro,$2 beq 1f add $'a,(sp) br 2f1: add $'A,(sp)2: mov (sp)+,r0 jsr pc,*(r5) rts pcfnumb0: jsr pc,fnumb tst (r5)+ rts r5fnumb: mov ro,-(sp) mov nform,ro bne 0f mov (sp),ro br 1f0: dec ro1: tst ro bne 1f jsr pc,decml br 2f1: cmp ro,$2 bgt 1f jsr pc,roman br 2f1: sub $2,ro jsr pc,abc2: 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 pcsetstr: clr -(sp) clr -(sp)0: jsr pc,get1 bmi 3f bic $!177,r0 cmpb r0,$'\\ bne 1f4: jsr pc,get1 jsr r5,switch;esctab cmpb r0,dolc bne 2f jsr pc,seta br 0b2: cmpb r0,numc bne 1f clr r1 jsr pc,setn br 0b1: tst 2(sp) bne 5f bic $!177,r0 cmpb r0,$'( bne 1f inc 2(sp) jsr pc,get1 bic $!177,r0 cmpb r0,$'\\ beq 4b5: mov r0,-(sp) jsr pc,get1 bic $!177,r0 swab r0 bis (sp)+,r01: mov $contab,r11: mov (r1)+,(sp) bic $100000,(sp) cmp r0,(sp) beq 2f cmp (r1)+,$-1 bne 1b br 3f2: mov (r1),(sp) tst -(r1) bpl 3f clr *nxf jsr pc,pushi mov (sp),ip3: cmp (sp)+,(sp)+ rts pccopys: inc copyf jsr pc,skipcont bne 2f jsr pc,getchar bmi 0f cmpb r0,$'" bne 0f1: jsr pc,getchar tst nlflg bne 2f0: jsr pc,wbf br 1b2: clr r0 jsr pc,wbt clr copyf rts pcsetrpt: inc copyf inc raw1 jsr pc,get1 dec copyf dec raw1 mov r0,r1 jsr pc,get1 cmpb r0,$006 beq 1f0: movb r0,rchar movb r1,nspace cmpb r1,$377 bne 1f clr nspace1: rts pcsetfield: 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,r01: tst (r0) beq 4f cmp (sp),(r0)+ bge 1b mov -(r0),2(sp) sub (sp),2(sp) /h mov $fbuf,r21: jsr pc,getch1 bmi 0f cmpb r0,padc bne 2f jsr pc,width sub r1,column inc npad mov r2,-(sp) add $2,r22: cmpb r0,fc beq 3f cmpb r0,$'\n bne 0f mov $012,r4 clr nlflg br 3f0: movb r0,(r2)+ cmp r2,$efbuf-6 blo 1b3: tst npad bne 0f inc npad mov r2,-(sp) add $3,r20: 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,r31: mov (sp)+,r2 movb $006,(r2)+ movb r0,(r2)+ movb r3,(r2) tst r1 beq 0f incb -1(r2) dec r10: tstb -(r2) bne 0f movb $377,(r2)0: dec npad bgt 1b mov $fbuf,cp4: cmp (sp)+,(sp)+ mov (sp)+,r4 mov (sp)+,r3 mov (sp)+,r2 mov (sp)+,r1 rts pc
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -