📄 nroff1.s
字号:
/// nroff1 -- text formatter/ rts = 104000 signal = 48. nop = 000240 jmp ibuf.dataibuf: /init code in ibuf+obuf cmp sp,$end bhi 1f jsr r5,string; emes1 sys exit1: clr r0 jsr pc,ttyn cmpb r0,$'x bne 0f inc iflg mov $1,r0 jsr pc,ttyn0: movb r0,ttyx+8 clr r0 jsr pc,mesg sys open; ttyx; 2 bes 0f mov r0,ttyid mov r0,ttyod0: mov ttyid,r0 sys gtty; ttys sys signal; 1; place sys signal; 2; place bit $1,r0 beq 0f sys signal; 2; 1 /no deletes sys signal; 3; 1 /no quits sys signal; 1; 1 /allow hangup0: mov $'%,rlist mov $"nl,rlist+2 mov $"dn,rlist+4 mov $"yr,rlist+6 mov $"mo,rlist+8. mov $"dy,rlist+10. mov $"dw,rlist+12. mov $"hp,rlist+14. mov sp,r0 jsr pc,makebf sys open; suffil; 0 bes 1f mov r0,suff sys seek; 20; 0 bes 1f mov suff,r0 sys read; suftab; 2*26.1: clr r0 mov (sp)+,argc dec argc ble 4f1: tst (sp)+ mov (sp),r4 cmpb (r4)+,$'+ bne 2f jsr r5,pnum; pfrom br 3f2: cmpb -1(r4),$'- bne 2f tstb (r4) beq 4f cmpb (r4),$'m bne 0f mov $nextf1,r0 tstb (r4)+8: movb (r4)+,(r0)+ bne 8b inc nx inc mflg br 3f0: cmpb (r4),$'r bne 0f tstb (r4)+ movb (r4)+,r0 beq 3f jsr pc,findr mov r1,-(sp) mov r4,ibufp mov $-1,eibuf jsr pc,atoi mov (sp)+,r1 mov r0,(r1) clr ch br 3f0: cmpb (r4),$'s bne 0f inc stop br 3f0: cmpb (r4),$'o bne 0f inc old br 3f0: cmpb (r4),$'i bne 0f inc stdi br 3f0: cmpb (r4),$'q bne 0f inc quiet br 3f0: cmpb (r4),$'h bne 0f clr slow br 3f0: cmpb (r4),$'n bne 0f inc r4 jsr r5,pnum; npn br 3f0: jsr r5,pnum; pto3: dec argc bgt 1b2:4:/ tst index/ beq 1f/ sys creat; indf; 666/ mov r0,indid1:/ mov $nop,get1a clr init mov $ibuf,ibufp mov $ibuf,eibuf mov sp,argp clr r01: movb r0,trtab(r0) inc r0 cmp r0,$128. bne 1b movb $040,trtab+014 mov sp,ssp mov $70.,vlist+6 jsr pc,ctime mov $-1,nl mov $end,enda clr ioff jmp loopmakebf: tst (r0)+ mov (r0),r0 cmpb (r0),$'a bne 0f mov $bfn1,r0 mov r0,7f mov r0,8f mov r0,9f/ mov r0,place10: sys stat; 8:bfn; stbuf bec 2f sys creat; 9:bfn; 600 bec 1f2: incb bfn1+3 cmpb bfn1+3,$'z blos 0b jmp place1: mov r0,ibf mov $blockend,r0 sub $block,r0 cmp r0,$1024. blos 1f 41: mov r0,blocksize clr -(sp)2: mov ibf,r0 sys write; block; 1024. inc (sp) cmp (sp),nev ble 2b mov (sp)+,r3 mpy $1024.,r3 mov r3,nextb mov r3,first mov ibf,r0 sys close sys open; 7:bfn; 2 jes place mov r0,ibf mov r0,ibf1 cmp $bfn1,7b beq 1f sys unlink; bfn1: rts pcctime: sys time sub $18000.,r1 /5hrs for est sbc r0 ashc $-2,r0 div $21600.,r0 inc r0 mov r0,dy/ mov r1,fd add $3,r0 mov r0,r1 sxt r0 div $7,r0 inc r1 mov r1,dw3: mov yr,r1 sxt r0 div $4,r0 mov $28.,ms+2 tst r1 bne 0f mov $29.,ms+20: clr r01: cmp dy,ms(r0) ble 2f sub ms(r0),dy tst (r0)+ cmp r0,$24. blt 1b inc yr mov yr,r1 br 3b2: asr r0 inc r0 mov r0,mo rts pcms: 31.;28.;31.;30.;31.;30.;31.;31.;30.;31.;30.;31.pnum: clr -(sp) clr r31: movb (r4)+,r0 sub $'0,r0 cmp r0,$9 bhi 1f inc (sp) mpy $10.,r3 add r0,r3 br 1b1: mov r3,r0 tst (sp)+ beq 2f mov r0,*(r5)+1: rts r52: tst (r5)+ br 1bemes1: <Too many files.\n\0>.evenobuf=ibuf+512..=ibuf+1024..textloop: clr nlflg clr nflush clr nb mov ilistp,r1 jsr pc,getch1 mov r0,ch cmp ilistp,r1 beq 1f tst ejf beq 1f cmp ilistp,ejl bhi 1f mov ilistp,ejl inc nflush jsr pc,newline br loop1: jsr pc,getchar tst pendt bne 0f tst lit ble 1f cmp frame,litlev bhi 1f dec lit br 0f1: cmpb r0,cc beq 3f cmpb r0,c2 beq 2f cmpb r0,tch beq 4f cmpb r0,$002 beq 6f0: movb r0,ch jsr pc,text br loop4: inc tflg inc copyf0: jsr pc,getchar mov r0,r5 jsr pc,putchar cmp r5,$'\n bne 0b clr tflg clr copyf br loop2: inc nb3: jsr pc,control5: jsr pc,flushi br loop6: inc raw jsr pc,get1 movb r0,xpc clr nlflg0: jsr pc,get1 cmpb r0,xpc beq 7f jsr pc,pchar2 br 0b7: clr raw jbr loopmesg: tst r0 bne setsame sys stat; ttyx; stbuf mov stbuf+4,0f mov 0f,1f bic $22,0f sys 0;7f.data7: sys chmod; ttyx; 0:...text rts pcsetsame: sys 0;7f.data7: sys chmod; ttyx; 1:...text rts pcstringfl: jsr pc,flushstring: mov r0,-(sp) mov r1,-(sp) mov r2,-(sp) mov (r5)+,r1 mov r1,r2 mov r1,9f1: tstb (r1)+ bne 1b dec r1 sub r2,r1 mov r1,1f mov ttyod,r0 cmp r0,ibf beq 2f0: sys 0;7f.data7: sys write; 9:..; 1:...text bes 2f1: mov (sp)+,r2 mov (sp)+,r1 mov (sp)+,r0 rts r52: sys creat; tmfile; 666 bes 1b mov r0,ttyod br 0bflushi: tst nflush bne 1f clr ch tst nlflg bne 1f tst donef beq 2f cmp $ilist,ilistp beq 1f2: jsr pc,getchar br flushi1: rts pcgettchar: tst ul ble getchar tst ulstate beq 3f tst bsc bgt 1f tst ulc bgt 2f clr ulstate br 3f1: dec bsc mov $010,r0 rts pc2: dec ulc mov $'_,r0 rts pc3: jsr pc,getchar cmp r0,$016 beq 4f cmp r0,$017 beq 4f cmp r0,$'0 blt 1f cmp r0,$'9 ble 2f cmp r0,$'A blt 1f cmp r0,$'Z ble 2f cmp r0,$'a blt 1f cmp r0,$'z ble 2f1: tst ulc ble 4f3: mov $1,ulstate mov r0,ch br gettchar2: inc bsc inc ulc4: tst r0 rts pcrtnch: mov ch,r0 clr ch tst r0 rts pcgetchar: mov r1,-(sp)1: jsr pc,getch1 bmi 2f cmpb r0,fc bne 2f tst copyf bne 2f jsr pc,setfield br 1b2: mov (sp)+,r1 tst r0 rts pcgetch1: tst ch bne rtnch mov r1,-(sp)1: jsr pc,getch0 bmi 2f tst copyf bne 2f cmpb r0,$030 /\w bne 2f jsr r5,setwd;getch0 br 1b2: jsr pc,width add r1,column mov (sp)+,r1 tst r0 rts pcgetch0: tst ch bne rtnch1: tst nlflg beq 1f mov $'\n,r0 rts pc1: mov r1,-(sp)1: jsr pc,get1 cmpb r0,eschar bne 2f jsr pc,get1 jsr r5,switch; esctab cmpb r0,$'\n bne 3f/ clr column br 1b2: cmp r0,$033 /prefix bne 3f jsr pc,get1 jsr r5,switch; pfxtab3: cmpb r0,$376 /comment bne 2f0: jsr pc,get1 bmi 0b cmpb r0,$012 bne 0b2: cmpb numc,r0 bne 2f clr r1 jsr pc,setn br 1b2: cmpb r0,$372 /mark hor place bne 2f tst copyf bne 2f mov r0,r1 jsr pc,setn jsr pc,findr jeq 1b mov column,(r1) jbr 1b2: cmpb r0,$025 /text string bne 2f jsr pc,setstr br 1b2: cmpb dolc,r0 bne 2f jsr pc,seta br 1b2: cmpb r0,$026 /font indicator bne 2f jsr pc,get1 br 1b2: cmpb r0,$027 /point size bne 2f jsr pc,eatps br 1b2: cmpb r0,$021 /spead line bne 2f tst copyf bne 2f inc spread br 1b2: cmpb r0,$006 /repeat bne 2f jsr pc,setrpt br 1b2: cmp r0,$'\n bne 3f inc nlflg clr column tst ip bne 3f inc iline3: mov (sp)+,r1 tst r0 rts pceatps: jsr pc,get1 cmpb r0,$'+ beq 0f cmpb r0,$'- beq 0f sub $'0,r0 ble 1f cmp r0,$3 bgt 1f0: jsr pc,get11: rts pc.dataesctab:.byte '*, 025 /text string.byte 'n, 034 /number char.byte '$, 020 /dollar chareschar:.byte '\\, 134 /backslash.byte 'e, 013 /printable escape char.byte 'f, 026 /font indicator.byte 's, 027 /point size.byte '&, 037 /filler.byte 't, 011 /hor tab.byte '!, 024 /transparent char.byte 'p, 021 /spread line.byte 'c, 005 /interrupted text.byte 'k, 372 /mk hor/ 014 hidden tab replacement character.byte ' , 014 /\(space).byte 'x, 016 /SO (extra chars).byte 'y, 017 /SI (normal characters).byte 'l, 0177 /delete.byte 'd, 032 /hlf (down).byte 'u, 035 /hlr (up).byte 'r, 036 /flr (reverse).byte 'a, 001 /leader char.byte ':, 003 /lem char.byte '?, 002 /raw trans.byte '", 376 /comment.byte 'w, 030 /width size char.byte 0, 0.textpfxtab: .byte '7, 036 /flr .byte '8, 035 /hlr .byte '9, 032 /hlf .byte '1, 026 /set hor tabs .byte '2, 027 /clr hor tabs .byte 0,0pfxtab1:switch: mov r1,-(sp) mov (r5)+,r11: cmpb (r1)+,r0 beq 1f tstb (r1)+ bne 1b cmp r1,$pfxtab ble 0f cmp r1,$pfxtab1 bgt 0f mov $037,r00: mov (sp)+,r1 rts r51: movb (r1)+,r0 mov (sp)+,r1 rts r5get1: tst nspace ble 1f dec nspace mov rchar,r0 rts pc1: mov r1,-(sp)4: tst cp beq 2f movb *cp,r0 bne 1f clr cp br 4b1: inc cp br 8f2: tst ap beq 2f movb *ap,r0 bne 1f clr ap br 4b1: inc ap br 8f2: cmp $-1,ip bne 1f jsr pc,rdtty br 8f1: tst ip beq 5f jsr pc,rbf br 8f5: tst donef beq 0f jmp done0: tst nx bne 0f3: mov ibufp,r1 cmp r1,eibuf bne 3f cmp r1,$-1 beq 3f0: tst nfo bne 2f1: jsr pc,nextfile bne 3b2: clr nx mov ifile,r0 sys read; ibuf; 512. bes 1b tst r0 beq 1b mov $ibuf,r1 add r1,r0 mov r0,eibuf3: movb (r1)+,r0 bic $!377,r0 inc ioff mov r1,ibufp tst raw bne 6f cmpb r0,$040 bhis 8f mov r0,-(sp) mov cbits,r0 mov cbits+2,r1 ashc (sp),r0 bmi 0f clr (sp)0: mov (sp)+,r08: tst raw1 bne 6f cmp r0,$004 beq 4b tst copyf bne 6f cmpb r0,$011 /tab bne 0f mov tabc,rchar br 1f0: cmpb r0,$001 bne 6f mov dotc,rchar1: cmpb r0,fc beq 6f cmpb r0,padc beq 6f mov (sp)+,r1 mov $tabtab,r0 inc nspace1: tst (r0) jeq get1 cmp column,(r0)+ bge 1b mov -(r0),nspace sub column,nspace jbr get16:/get1a: br 7f tst init bne 7f tst r0 jeq 4b7: mov (sp)+,r1 tst r0 rts pccbits: 040743;20 /001,007-012,033 (soh,bel,bs,tab,nl,so,si,esc)/cbits: 041743;20 /001,006-012,033 (soh,ack,bel,bs,tab,nl,so,si,esc)edone: mov $stk,frame clr ipdone: clr app clr ds mov em,r0 beq 0f clr em mov pc,donef mov frame,-(sp) jsr pc,cont1 cmp (sp)+,frame bne 1f0: tst nfo beq 3f clr op clr mflg tst woff beq 0f clr r0 jsr pc,wbt0: clr pendnf tst pendw beq 0f clr *pendw clr pendw0: cmp $1,donef beq done1 mov $1,donef clr ip mov $ilist,ilistp jsr pc,rbreak inc nflush mov $ilist,r0 jsr pc,eject1: mov ssp,sp jmp loopdone1:/ tst pendb/ bne 0b tst nl beq 1f jsr pc,newline br 1b1:3:done2: jsr pc,flushplace: sys signal; 2; 1 tst quiet beq 1f bis $10,ttym mov ttyid,r0 sys stty; ttys1: mov $1,r0 jsr pc,mesg mov outid,r0 sys close sys wait sys exitnextfile: mov ifile,r0 beq 1f sys close1: tst nx beq 2f mov $nextf,r0 br 3f2: cmp ifp,$ifl beq 1f jsr pc,popf bne nextfile tst pc rts pc1: dec argc blt 4f mov *argp,r0 add $2,argp3: mov r0,5f cmpb (r0)+,$'- bne 0f tstb (r0) bne 0f clr r0 br 1f0: sys 0;7f.data7: sys open; 5:..; 0.text bec 1f sub mflg,nfo jgt done jsr r5,string; omes mov 5b,8f jmp 7f.data7: jsr r5,string; 8:.. jmp 6f.text6: jsr r5,string; 9f jbr done1: clr iline inc nfo mov r0,ifile clr ioff rts pc4: sub mflg,nfo beq 0f tst stdi jeq done0: clr iline clr mflg inc nfo clr stdi clr ifile clr ioff rts pcomes: <Cannot open: \0>9: <\n\0>.evenpopf: clr -(sp) mov ifp,r1 cmp r1,$ifl beq 1f sub $2,ifp mov -(r1),ifile mov [offl-ifl](r1),ioff mov ioff,0f bic $777,0f mov ifile,r0 beq 4f sys 0;7f.data7: sys seek; 0:..; 0.text bes 2f mov ifile,r0 sys read; ibuf; 512. bes 2f add $ibuf,r0 mov r0,eibuf sub ioff,0b mov $ibuf,ibufp mov ifile,r0 jsr pc,ttyn cmpb r0,$'x bne 1f sub 0b,ibufp cmp ibufp,eibuf blo 1f2: inc (sp)1: tst (sp)+ rts pc4: jsr pc,restbuf br 1bsavebuf: mov $ibuf,r0 mov $xbuf,r1 mov ibufp,xbufp mov eibuf,xeibuf1: mov (r0)+,(r1)+ cmp r0,eibuf blo 1b rts pcrestbuf: mov $xbuf,r0 mov $ibuf,r1 mov xbufp,ibufp mov xeibuf,eibuf1: mov (r0)+,(r1)+ cmp r1,eibuf blo 1b rts pcputchar: bic $!377,r0 beq 2f tstb r0 bmi pchar2 cmpb r0,$013 /\e bne 0f tst op bne 0f movb eschar,r0 br putchar0: movb trtab(r0),r0 cmp r0,$' bne 1f inc nsp2: rts pc1: cmp r0,$'\n bne 1f clr nsp clr ocol br pchar11: mov $011,-(sp)1: tst nsp beq 2f tst slow bne 4f tst op bne 4f jsr pc,dsp cmp nsp,r1 blt 4f mov $011,(sp) cmp r1,$1 bgt 8f mov $040,(sp) dec nsp br 9f8: sub r1,nsp9: mov r0,-(sp)3: mov 2(sp),r0 jsr pc,pchar1 mov (sp)+,r0 br 1b4: mov r0,-(sp) mov $' ,r0 jsr pc,pchar1 mov (sp)+,r0 dec nsp bne 4b2: tst (sp)+ cmp r0,$026 blt 2f cmp r0,$037 beq 3f bgt 2f mov r0,-(sp) jsr r5, switch; unpfx cmp (sp)+,r0 beq 2f mov r0,-(sp) mov $033,r0 /prefix jsr pc,pchar1 dec ocol mov (sp)+,r02:pchar1: cmp r0,$011 bne 1f jsr pc,dsp br 2f1: jsr pc,width2: add r1,ocolpchar2: tst op beq 1f mov op,r1 jsr pc,wbf mov r1,op br 3f1: tst tflg bne 1f cmp pn,pfrom blt 3f clr pfrom1: movb r0,*obufp inc obufp cmp obufp,$obuf+512. beq flush3: rts pcdsp: clr r11: add $8.,r1 cmp ocol,r1 bgt 1b sub ocol,r1 bne 2f mov $8.,r12: rts pcunpfx: .byte 032, '9 .byte 035, '8 .byte 036, '7 .byte 031, '3 .byte 030, '4 .byte 026, '1 .byte 027, '2 .byte 0,0flush: mov obufp,r0 sub $obuf,r0 mov r0,0f mov outid,r0 sys 0;7f.data7: sys write; obuf; 0:0.text jes place inc toolate mov $obuf,obufp rts pcrdtty:/ mov sp,r1/ sys signal; 2; rdtty1 clr r0 sys read; char; 1 tst r0 bne 2frdtty1:/ mov r1,sp jsr pc,popirdtty2: clr tty tst quiet beq 0f bis $10,ttym mov ttyid,r0 sys stty; ttys0: clr r01:/ sys signal; 2; place rts pc2: mov char,r0 cmpb r0,$'\n beq 3f mov $1,tty br 1b3: inc tty cmp tty,$3 beq rdtty1 br 1bttyn: mov r1,-(sp) mov $'x,-(sp) clr -(sp) sys fstat; ybuf bes 3f mov ybuf+2,(sp) sys open; dev; 0 bes 3f mov r0,r11: mov r1,r0 sys read; ybuf; 16. bes 2f cmp r0,$16. bne 2f mov $ybuf,r0 cmp (r0)+,(sp) bne 1b cmp (r0)+,$"tt bne 1b cmpb (r0)+,$'y bne 1b tstb (r0)+ beq 1b cmpb (r0),$'\0 bne 1b movb -(r0),2(sp)2: mov r1,r0 sys close3: tst (sp)+ movb (sp)+,r0 mov (sp)+,r1 rts pcdev: </dev\0>.evencont1: mov r0,-(sp) mov pc,r2 br 0fcontrol: jsr pc,getchar mov r0,-(sp) jsr pc,getchar cmpb r0,$'\n beq 8f cmpb r0,$' / bne 9f8: mov r0,ch clr r09: swab r0 bis (sp),r0 clr r20: mov $contab,r11: mov (r1)+,(sp) bic $100000,(sp) cmp r0,(sp) bne 4f mov (r1),(sp) tst -(r1) bpl 3f clr *nxf tst r2 bne 2f jsr pc,collect2: jsr pc,flushi jsr pc,pushi beq 5f mov (sp),ip br 5f3: jmp *(sp)+4: cmp (r1)+,$-1 bne 1b5: tst (sp)+ rts pc.datacontab:<ad>; casead<bp>; casebp<pn>; casepn<br>; casebr<cc>; casecc<c2>; casec2<ce>; casece<fi>; casefi<in>; casein<li>; caseli<ll>; casell<ls>; casels<ns>; casens<rs>; casers<na>; casena<ne>; casene<nf>; casenf<pl>; casepl<sp>; casesp<lv>; casesv<sv>; casesv<os>; caseos<ta>; caseta<ti>; caseti<tr>; casetr<ul>; caseul<tl>; casetl<lt>; caselt<hc>; casehc<hy>; casehy<nh>; casenh<nm>; casenm<np>; casenp<nn>; casenn<ar>; casear<ro>; casero<RO>; caseroc<nx>; casenx<so>; caseso<po>; casepo<de>; casede<ds>; caseds<am>; caseam<as>; caseas<da>; caseda<di>; casedi<rm>; caserm<rn>; casern<ig>; caseig<tc>; casetc<ec>; caseec<eo>; caseeo<lc>; caselc<nc>; casenc<ev>; caseev<if>; caseif<wh>; casewh<ch>; casech<rd>; caserd<tm>; casetm<nr>; casenr<mk>; casemk<rt>; casert<ab>; casest<fl>; casefl<ex>; done<xh>; casexh<em>; caseem<fc>; casefc<af>; caseaf<pi>; casepi<hw>; casehwbnames: .=.+512.-1; -1.text
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -