/ / / nroff1 -- text formatter / rts = 104000 signal = 48. nop = 000240 jmp ibuf .data ibuf: /init code in ibuf+obuf cmp sp,$end bhi 1f jsr r5,string; emes1 sys exit 1: clr r0 jsr pc,ttyn cmpb r0,$'x bne 0f inc iflg mov $1,r0 jsr pc,ttyn 0: movb r0,ttyx+8 clr r0 jsr pc,mesg sys open; ttyx; 2 bes 0f mov r0,ttyid mov r0,ttyod 0: 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 hangup 0: 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 4f 1: tst (sp)+ mov (sp),r4 cmpb (r4)+,$'+ bne 2f jsr r5,pnum; pfrom br 3f 2: 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 3f 0: 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 3f 0: cmpb (r4),$'s bne 0f inc stop br 3f 0: cmpb (r4),$'o bne 0f inc old br 3f 0: cmpb (r4),$'i bne 0f inc stdi br 3f 0: cmpb (r4),$'q bne 0f inc quiet br 3f 0: cmpb (r4),$'h bne 0f clr slow br 3f 0: cmpb (r4),$'n bne 0f inc r4 jsr r5,pnum; npn br 3f 0: jsr r5,pnum; pto 3: dec argc bgt 1b 2: 4: / tst index / beq 1f / sys creat; indf; 666 / mov r0,indid 1: / mov $nop,get1a clr init mov $ibuf,ibufp mov $ibuf,eibuf mov sp,argp clr r0 1: 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 loop makebf: tst (r0)+ mov (r0),r0 cmpb (r0),$'a bne 0f mov $bfn1,r0 mov r0,7f mov r0,8f mov r0,9f / mov r0,place1 0: sys stat; 8:bfn; stbuf bec 2f sys creat; 9:bfn; 600 bec 1f 2: incb bfn1+3 cmpb bfn1+3,$'z blos 0b jmp place 1: mov r0,ibf mov $blockend,r0 sub $block,r0 cmp r0,$1024. blos 1f 4 1: 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; bfn 1: rts pc ctime: 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,dw 3: mov yr,r1 sxt r0 div $4,r0 mov $28.,ms+2 tst r1 bne 0f mov $29.,ms+2 0: clr r0 1: cmp dy,ms(r0) ble 2f sub ms(r0),dy tst (r0)+ cmp r0,$24. blt 1b inc yr mov yr,r1 br 3b 2: asr r0 inc r0 mov r0,mo rts pc ms: 31.;28.;31.;30.;31.;30.;31.;31.;30.;31.;30.;31. pnum: clr -(sp) clr r3 1: movb (r4)+,r0 sub $'0,r0 cmp r0,$9 bhi 1f inc (sp) mpy $10.,r3 add r0,r3 br 1b 1: mov r3,r0 tst (sp)+ beq 2f mov r0,*(r5)+ 1: rts r5 2: tst (r5)+ br 1b emes1: .even obuf=ibuf+512. .=ibuf+1024. .text loop: 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 loop 1: jsr pc,getchar tst pendt bne 0f tst lit ble 1f cmp frame,litlev bhi 1f dec lit br 0f 1: cmpb r0,cc beq 3f cmpb r0,c2 beq 2f cmpb r0,tch beq 4f cmpb r0,$002 beq 6f 0: movb r0,ch jsr pc,text br loop 4: inc tflg inc copyf 0: jsr pc,getchar mov r0,r5 jsr pc,putchar cmp r5,$'\n bne 0b clr tflg clr copyf br loop 2: inc nb 3: jsr pc,control 5: jsr pc,flushi br loop 6: inc raw jsr pc,get1 movb r0,xpc clr nlflg 0: jsr pc,get1 cmpb r0,xpc beq 7f jsr pc,pchar2 br 0b 7: clr raw jbr loop mesg: tst r0 bne setsame sys stat; ttyx; stbuf mov stbuf+4,0f mov 0f,1f bic $22,0f sys 0;7f .data 7: sys chmod; ttyx; 0:.. .text rts pc setsame: sys 0;7f .data 7: sys chmod; ttyx; 1:.. .text rts pc stringfl: jsr pc,flush string: mov r0,-(sp) mov r1,-(sp) mov r2,-(sp) mov (r5)+,r1 mov r1,r2 mov r1,9f 1: tstb (r1)+ bne 1b dec r1 sub r2,r1 mov r1,1f mov ttyod,r0 cmp r0,ibf beq 2f 0: sys 0;7f .data 7: sys write; 9:..; 1:.. .text bes 2f 1: mov (sp)+,r2 mov (sp)+,r1 mov (sp)+,r0 rts r5 2: sys creat; tmfile; 666 bes 1b mov r0,ttyod br 0b flushi: tst nflush bne 1f clr ch tst nlflg bne 1f tst donef beq 2f cmp $ilist,ilistp beq 1f 2: jsr pc,getchar br flushi 1: rts pc gettchar: tst ul ble getchar tst ulstate beq 3f tst bsc bgt 1f tst ulc bgt 2f clr ulstate br 3f 1: dec bsc mov $010,r0 rts pc 2: dec ulc mov $'_,r0 rts pc 3: 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 2f 1: tst ulc ble 4f 3: mov $1,ulstate mov r0,ch br gettchar 2: inc bsc inc ulc 4: tst r0 rts pc rtnch: mov ch,r0 clr ch tst r0 rts pc getchar: mov r1,-(sp) 1: jsr pc,getch1 bmi 2f cmpb r0,fc bne 2f tst copyf bne 2f jsr pc,setfield br 1b 2: mov (sp)+,r1 tst r0 rts pc getch1: 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 1b 2: jsr pc,width add r1,column mov (sp)+,r1 tst r0 rts pc getch0: tst ch bne rtnch 1: tst nlflg beq 1f mov $'\n,r0 rts pc 1: 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 1b 2: cmp r0,$033 /prefix bne 3f jsr pc,get1 jsr r5,switch; pfxtab 3: cmpb r0,$376 /comment bne 2f 0: jsr pc,get1 bmi 0b cmpb r0,$012 bne 0b 2: cmpb numc,r0 bne 2f clr r1 jsr pc,setn br 1b 2: 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 1b 2: cmpb r0,$025 /text string bne 2f jsr pc,setstr br 1b 2: cmpb dolc,r0 bne 2f jsr pc,seta br 1b 2: cmpb r0,$026 /font indicator bne 2f jsr pc,get1 br 1b 2: cmpb r0,$027 /point size bne 2f jsr pc,eatps br 1b 2: cmpb r0,$021 /spead line bne 2f tst copyf bne 2f inc spread br 1b 2: cmpb r0,$006 /repeat bne 2f jsr pc,setrpt br 1b 2: cmp r0,$'\n bne 3f inc nlflg clr column tst ip bne 3f inc iline 3: mov (sp)+,r1 tst r0 rts pc eatps: jsr pc,get1 cmpb r0,$'+ beq 0f cmpb r0,$'- beq 0f sub $'0,r0 ble 1f cmp r0,$3 bgt 1f 0: jsr pc,get1 1: rts pc .data esctab: .byte '*, 025 /text string .byte 'n, 034 /number char .byte '$, 020 /dollar char eschar: .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 .text pfxtab: .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,0 pfxtab1: switch: mov r1,-(sp) mov (r5)+,r1 1: cmpb (r1)+,r0 beq 1f tstb (r1)+ bne 1b cmp r1,$pfxtab ble 0f cmp r1,$pfxtab1 bgt 0f mov $037,r0 0: mov (sp)+,r1 rts r5 1: movb (r1)+,r0 mov (sp)+,r1 rts r5 get1: tst nspace ble 1f dec nspace mov rchar,r0 rts pc 1: mov r1,-(sp) 4: tst cp beq 2f movb *cp,r0 bne 1f clr cp br 4b 1: inc cp br 8f 2: tst ap beq 2f movb *ap,r0 bne 1f clr ap br 4b 1: inc ap br 8f 2: cmp $-1,ip bne 1f jsr pc,rdtty br 8f 1: tst ip beq 5f jsr pc,rbf br 8f 5: tst donef beq 0f jmp done 0: tst nx bne 0f 3: mov ibufp,r1 cmp r1,eibuf bne 3f cmp r1,$-1 beq 3f 0: tst nfo bne 2f 1: jsr pc,nextfile bne 3b 2: clr nx mov ifile,r0 sys read; ibuf; 512. bes 1b tst r0 beq 1b mov $ibuf,r1 add r1,r0 mov r0,eibuf 3: 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)+,r0 8: tst raw1 bne 6f cmp r0,$004 beq 4b tst copyf bne 6f cmpb r0,$011 /tab bne 0f mov tabc,rchar br 1f 0: cmpb r0,$001 bne 6f mov dotc,rchar 1: cmpb r0,fc beq 6f cmpb r0,padc beq 6f mov (sp)+,r1 mov $tabtab,r0 inc nspace 1: tst (r0) jeq get1 cmp column,(r0)+ bge 1b mov -(r0),nspace sub column,nspace jbr get1 6: /get1a: br 7f tst init bne 7f tst r0 jeq 4b 7: mov (sp)+,r1 tst r0 rts pc cbits: 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 ip done: clr app clr ds mov em,r0 beq 0f clr em mov pc,donef mov frame,-(sp) jsr pc,cont1 cmp (sp)+,frame bne 1f 0: tst nfo beq 3f clr op clr mflg tst woff beq 0f clr r0 jsr pc,wbt 0: clr pendnf tst pendw beq 0f clr *pendw clr pendw 0: cmp $1,donef beq done1 mov $1,donef clr ip mov $ilist,ilistp jsr pc,rbreak inc nflush mov $ilist,r0 jsr pc,eject 1: mov ssp,sp jmp loop done1: / tst pendb / bne 0b tst nl beq 1f jsr pc,newline br 1b 1: 3: done2: jsr pc,flush place: sys signal; 2; 1 tst quiet beq 1f bis $10,ttym mov ttyid,r0 sys stty; ttys 1: mov $1,r0 jsr pc,mesg mov outid,r0 sys close sys wait sys exit nextfile: mov ifile,r0 beq 1f sys close 1: tst nx beq 2f mov $nextf,r0 br 3f 2: cmp ifp,$ifl beq 1f jsr pc,popf bne nextfile tst pc rts pc 1: dec argc blt 4f mov *argp,r0 add $2,argp 3: mov r0,5f cmpb (r0)+,$'- bne 0f tstb (r0) bne 0f clr r0 br 1f 0: sys 0;7f .data 7: sys open; 5:..; 0 .text bec 1f sub mflg,nfo jgt done jsr r5,string; omes mov 5b,8f jmp 7f .data 7: jsr r5,string; 8:.. jmp 6f .text 6: jsr r5,string; 9f jbr done 1: clr iline inc nfo mov r0,ifile clr ioff rts pc 4: sub mflg,nfo beq 0f tst stdi jeq done 0: clr iline clr mflg inc nfo clr stdi clr ifile clr ioff rts pc omes: 9: <\n\0> .even popf: 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 .data 7: 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 1f 2: inc (sp) 1: tst (sp)+ rts pc 4: jsr pc,restbuf br 1b savebuf: mov $ibuf,r0 mov $xbuf,r1 mov ibufp,xbufp mov eibuf,xeibuf 1: mov (r0)+,(r1)+ cmp r0,eibuf blo 1b rts pc restbuf: mov $xbuf,r0 mov $ibuf,r1 mov xbufp,ibufp mov xeibuf,eibuf 1: mov (r0)+,(r1)+ cmp r1,eibuf blo 1b rts pc putchar: bic $!377,r0 beq 2f tstb r0 bmi pchar2 cmpb r0,$013 /\e bne 0f tst op bne 0f movb eschar,r0 br putchar 0: movb trtab(r0),r0 cmp r0,$' bne 1f inc nsp 2: rts pc 1: cmp r0,$'\n bne 1f clr nsp clr ocol br pchar1 1: 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 9f 8: sub r1,nsp 9: mov r0,-(sp) 3: mov 2(sp),r0 jsr pc,pchar1 mov (sp)+,r0 br 1b 4: mov r0,-(sp) mov $' ,r0 jsr pc,pchar1 mov (sp)+,r0 dec nsp bne 4b 2: 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)+,r0 2: pchar1: cmp r0,$011 bne 1f jsr pc,dsp br 2f 1: jsr pc,width 2: add r1,ocol pchar2: tst op beq 1f mov op,r1 jsr pc,wbf mov r1,op br 3f 1: tst tflg bne 1f cmp pn,pfrom blt 3f clr pfrom 1: movb r0,*obufp inc obufp cmp obufp,$obuf+512. beq flush 3: rts pc dsp: clr r1 1: add $8.,r1 cmp ocol,r1 bgt 1b sub ocol,r1 bne 2f mov $8.,r1 2: rts pc unpfx: .byte 032, '9 .byte 035, '8 .byte 036, '7 .byte 031, '3 .byte 030, '4 .byte 026, '1 .byte 027, '2 .byte 0,0 flush: mov obufp,r0 sub $obuf,r0 mov r0,0f mov outid,r0 sys 0;7f .data 7: sys write; obuf; 0:0 .text jes place inc toolate mov $obuf,obufp rts pc rdtty: / mov sp,r1 / sys signal; 2; rdtty1 clr r0 sys read; char; 1 tst r0 bne 2f rdtty1: / mov r1,sp jsr pc,popi rdtty2: clr tty tst quiet beq 0f bis $10,ttym mov ttyid,r0 sys stty; ttys 0: clr r0 1: / sys signal; 2; place rts pc 2: mov char,r0 cmpb r0,$'\n beq 3f mov $1,tty br 1b 3: inc tty cmp tty,$3 beq rdtty1 br 1b ttyn: 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,r1 1: 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 close 3: tst (sp)+ movb (sp)+,r0 mov (sp)+,r1 rts pc dev: .even cont1: mov r0,-(sp) mov pc,r2 br 0f control: jsr pc,getchar mov r0,-(sp) jsr pc,getchar cmpb r0,$'\n beq 8f cmpb r0,$' / bne 9f 8: mov r0,ch clr r0 9: swab r0 bis (sp),r0 clr r2 0: mov $contab,r1 1: 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,collect 2: jsr pc,flushi jsr pc,pushi beq 5f mov (sp),ip br 5f 3: jmp *(sp)+ 4: cmp (r1)+,$-1 bne 1b 5: tst (sp)+ rts pc .data contab: ; casead ; casebp ; casepn
; casebr ; casecc ; casec2 ; casece ; casefi ; casein
  • ; caseli ; casell ; casels ; casens ; casers ; casena ; casene ; casenf ; casepl ; casesp ; casesv ; casesv ; caseos ; caseta ; caseti ; casetr
      ; caseul ; casetl ; caselt ; casehc ; casehy ; casenh ; casenm ; casenp ; casenn ; casear ; casero ; caseroc ; casenx ; caseso ; casepo ; casede ; caseds ; caseam ; caseas ; caseda ; casedi ; caserm ; casern ; caseig ; casetc ; caseec ; caseeo ; caselc ; casenc ; caseev ; caseif ; casewh ; casech ; caserd ; casetm ; casenr ; casemk ; casert ; casest ; casefl ; done ; casexh ; caseem ; casefc ; caseaf ; casepi ; casehw bnames: .=.+512. -1; -1 .text