! "W N =    @ #D  D ҃** ^ B ы e@W 0 ,& 7    ` " ɋ -ɋ e- ɋ ?*p ȋB@E A Ze   "@    7@ eEnroff1.s9^i^nroff2.s0^i^6nroff3.sc1^i^OInroff4.s$^i^hnroff5.sv^i^{ nroff8.s ^i^%/ / / 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 r ; casero/ / / nroff2 casead: inc ad jsr pc,skipcont tst nlflg bne 1f jsr pc,getchar cmp r0,$'r /right adj, left ragged bne 0f mov $2,jfomod br 1f 0: cmp r0,$'l /left adj, right ragged bne 0f clr jfomod clr ad br 1f 0: cmp r0,$'c /centered adj bne 0f mov $1,jfomod br 1f 0: clr jfomod /left and right adj inc ad 1: rts pc casebr: jsr pc,rbreak rts pc casecc: clr -(sp) br 0f casec2: mov pc,-(sp) 0: jsr pc,skipcont jsr pc,getchar cmp r0,$'\n beq 2f tst (sp) bne 1f mov r0,cc br 2f 1: mov r0,c2 2: mov r0,ch tst (sp)+ rts pc casece: jsr r5,number; 0 jsr pc,min mov r0,-(sp) jsr pc,rbreak mov (sp)+,ce rts pc casefi: jsr pc,rbreak inc fi rts pc casein: jsr pc,skipcont tst nlflg beq 1f mov in1,r0 br 2f 1: jsr r5,number1; in jsr pc,min 2: mov r0,-(sp) jsr pc,rbreak mov in,in1 mov (sp)+,in tst nc bne 1f mov in,un jsr pc,setnel 1: rts pc caseli: jsr r5,number; 0 jsr pc,min mov r0,lit mov frame,litlev cmp nl,$-1 bne 0f jsr pc,newln1 0: rts pc casell: jsr pc,skipcont tst nlflg beq 1f mov ll1,r0 br 2f 1: jsr r5,number1; ll jsr pc,min 2: mov ll,ll1 mov r0,ll 2: jsr pc,setnel rts pc casels: jsr pc,skipcont tst nlflg beq 1f mov ls1,r0 br 2f 1: jsr r5,number1; ls dec r0 jsr pc,min inc r0 2: mov r0,-(sp) / jsr pc,rbreak mov ls,ls1 mov (sp)+,ls rts pc casens: inc nls rts pc casers: clr nls rts pc casena: clr ad rts pc casene: jsr r5,number; 0 jsr pc,min jsr pc,need2 rts pc casenf: jsr pc,rbreak clr fi rts pc casepn: jsr pc,skipcont bne 1f jsr r5,number1; pn jsr pc,min mov r0,npn 1: rts pc casebp: mov ilistp,-(sp) clr -(sp) jsr pc,skipcont bne 1f jsr r5,number1; pn jsr pc,min mov r0,(sp) 1: jsr pc,rbreak mov (sp)+,r0 beq 0f mov r0,npn 0: bne 2f tst nls bne 3f 2: mov (sp),r0 jsr pc,eject 3: tst (sp)+ rts pc casepl: jsr pc,skipcont tst nlflg bne 1f jsr r5,number1; pl mov r0,pl rts pc 1: mov $66.,pl rts pc casesp: mov pc,-(sp) br 0f casesp1: clr -(sp) 0: mov r0,-(sp) tst nb bne 0f jsr pc,rbreak 0: tst nls bne 2f clr r0 jsr pc,findt tst nb bne 1f tst trap bne 2f 1: tst 2(sp) beq 1f jsr r5,number;0 mov r0,(sp) 1: cmp r1,(sp) bge 1f mov r1,(sp) 1: mov (sp),r0 ble 3f jsr r5,nlines; newline 2: cmp (sp)+,(sp)+ rts pc 3: add nl,r0 cmp (sp)+,(sp)+ br casert1 casert: mov markline,r2 jsr pc,skipcont bne 0f jsr r5,number1;nl casert1: mov r0,r2 0: tst r2 blt 2f cmp r2,nl bge 2f mov nl,r1 mov r2,nl sub r2,r1 mov r1,r2 1: mov $036,r0 jsr pc,putchar dec r2 bgt 1b mov $015,r0 jsr pc,putchar 2: rts pc casesv: clr r0 jsr pc,findt jsr r5,number; 0 cmp r1,r0 bge 1f mov r0,sv rts pc 1: jsr r5,nlines; newline rts pc caseos: tst sv beq 2f clr r0 jsr pc,findt cmp r1,sv bge 1f rts pc 1: mov sv,r0 clr sv jsr r5,nlines; newline 2: rts pc casetr: jsr pc,skipcont 1: jsr pc,getchar cmp r0,$'\n beq 1f mov r0,r1 jsr pc,getchar cmp r0,$'\n bne 2f mov $' ,r0 2: movb r0,trtab(r1) br 1b 1: rts pc caseta: clr -(sp) mov $tabtab,r1 1: jsr pc,getchar tst nlflg bne 1f cmpb r0,$'+ bne 0f inc (sp) br 2f 0: cmpb r0,$'- beq 2f cmpb r0,$'0 blo 1b cmpb r0,$'9 bhi 1b 2: mov r0,ch jsr pc,atoi beq 1f jsr pc,min dec r0 ble 1f cmp r1,$tabtab beq 0f tst (sp) bne 3f cmp r0,-2(r1) bgt 0f 3: add -2(r1),r0 0: clr (sp) mov r0,(r1)+ cmp r1,$etabtab blo 1b tst -(r1) 1: tst (sp)+ clr (r1) rts pc caseti: jsr r5,number; in jsr pc,min mov r0,-(sp) jsr pc,rbreak mov (sp)+,un1 jsr pc,setnel rts pc caseul: jsr r5,number; 0 jsr pc,min mov r0,ul rts pc casetl: jsr pc,header rts pc caselt: jsr pc,skipcont tst nlflg beq 1f mov llh1,r0 br 2f 1: jsr r5,number1; llh jsr pc,min 2: mov llh,llh1 mov r0,llh rts pc casehc: jsr pc,skipcont jsr pc,getchar cmp r0,$'\n bne 1f movb $200,r0 1: mov r0,ohc rts pc casetc: jsr pc,skipcont jsr pc,getchar cmp r0,$'\n bne 1f mov $014,r0 1: mov r0,tabc rts pc caselc: jsr pc,skipcont jsr pc,getchar cmp r0,$'\n bne 1f mov $'.,r0 1: mov r0,dotc rts pc casenc: jsr pc,skipcont jsr pc,getchar cmp r0,$'\n bne 1f mov $034,r0 1: mov r0,numc rts pc casehy: mov $1,hyf jsr pc,skipcont bne 1f jsr pc,atoi beq 1f jsr pc,min mov r0,hyf 1: rts pc casenh: clr hyf rts pc casenp: jsr pc,skipcont tst nlflg beq 2f clr ni mov $1,nms mov $1,ndf rts pc casenm: clr numbmod clr nn jsr pc,skipcont tst nlflg beq 1f rts pc 1: inc numbmod jsr r5,number1; lnumber jsr pc,min mov r0,lnumber jsr pc,skipcont 2: jsr r5,3f; ndf tst ndf bne 1f inc ndf 1: jsr pc,skipcont jsr r5,3f; nms jsr pc,skipcont jsr r5,3f; ni rts pc 3: tst nlflg bne 4f jsr pc,atoi beq 4f jsr pc,min mov r0,*(r5) 4: tst (r5)+ rts r5 casenn: jsr r5,number; 0 jsr pc,min mov r0,nn rts pc casear: clr ro rts pc caseroc: mov $2,ro rts pc casero: mov $1,ro rts pc casenx: jsr pc,skipcont jsr r5,getname; nextf inc nx jsr pc,nextfile inc nlflg clr ip clr ap clr nspace clr pendt mov $ilist,ilistp rts pc casepo: jsr pc,skipcont tst nlflg beq 1f mov po1,r0 br 2f 1: jsr r5,number1; po jsr pc,min 2: mov r0,-(sp) / jsr pc,rbreak mov po,po1 mov (sp)+,po rts pc caseig: inc skp jsr pc,copyb rts pc casern: / inc lgf jsr pc,skipcont jsr r5,getname;bname beq 2f jsr pc,findmn beq 2f mov oldptr,-(sp) / inc lgf jsr pc,skipcont jsr r5,getname;bname beq 1f jsr pc,findmn jsr pc,clrold mov (sp),r1 tst -(r1) mov (r1),(sp) bic $77777,(sp) mov bname,(r1) bis (sp),(r1) 1: tst (sp)+ 2: rts pc caserm: / inc lgf jsr pc,skipcont jsr r5,getname;bname beq 1f jsr pc,findmn jsr pc,clrold 1: rts pc caseas: inc app caseds: inc ds br casede caseam: inc app casede: tst op beq 1f jsr pc,wbfl 1: / inc lgf jsr pc,skipcont jsr r5,getname; bname bne 1f clr r1 br 6f 1: clr skp jsr pc,finds beq 7f tst ds beq 0f tst skp bne 5f jsr pc,copys br 5f 0: jsr pc,copyb 5: jsr pc,wbfl jsr pc,clrold tst newptr beq 0f bis $100000,bname mov bname,*newptr 0: mov r1,-(sp) mov apptr,r1 beq 0f mov $004,r0 jsr pc,wbt 0: mov (sp)+,r1 6: clr app clr ds rts pc 7: tst macerr bne 0f jsr r5,stringfl; 8f 0: inc macerr cmp macerr,$1 jeq edone jmp done2 / br 6b 8: .even findmn: mov $contab,r1 1: mov (r1)+,r0 bic $100000,r0 cmp bname,r0 beq 2f cmp (r1)+,$-1 bne 1b clr r1 2: mov r1,oldptr rts pc finds: jsr pc,findmn clr newptr clr apptr clr aplnk tst app beq 0f tst oldptr bne 5f 0: mov $contab,r1 1: tst (r1)+ beq 2f cmp (r1)+,$-1 bne 1b 1: inc skp clr r1 rts pc 2: jsr pc,alloc beq 1b tst oldptr bne 3f 4: tst -(r1) bis $100000,bname mov bname,(r1)+ mov nextb,(r1) br 6f 3: tst diflg bne 4b mov nextb,(r1) tst -(r1) mov r1,newptr br 6f 5: tst -(r1) bmi 1f clr app br 0b 1: tst (r1)+ clr oldptr mov ip,-(sp) mov (r1),ip 1: jsr pc,rbf tst r0 bne 1b mov ip,r1 mov r1,apptr tst diflg bne 0f jsr pc,incoff 0: mov r1,nextb mov (sp)+,ip 6: clr app mov nextb,r1 rts pc clrold: mov oldptr,r0 beq 1f mov (r0),-(sp) clr (r0) tst -(r0) bmi 0f clr (sp) 0: clr (r0) mov (sp)+,r0 beq 1f jsr pc,free 1: rts pc caseda: inc app casedi: / inc lgf clr ditf jsr pc,skipcont jsr r5,getname; bname beq 1f tst op bne 3f inc diflg jsr pc,finds beq 3f mov r1,op jsr pc,clrold / mov blss,sblss / mov alss,salss / clr blss / clr alss clr dnl br 3f 1: tst op beq 3f clr r0 jsr pc,pchar1 jsr pc,wbfl / mov sblss,blss / mov salss,alss clr op 3: clr app clr diflg rts pc caseev: jsr pc,skipcont tst nlflg beq 2f cmp evp,$elist ble 5f 1: sub $2,evp mov *evp,-(sp) br 3f 2: jsr pc,atoi beq 6f cmp r0,nev bgt 6f tst r0 blt 6f cmp evp,$eliste bgt 6f mov r0,-(sp) mov ev,*evp add $2,evp 3: cmp (sp),ev beq 4f mov $1024.,r3 mpy ev,r3 mov r3,8f mov $1024.,r3 mpy (sp),r3 mov r3,9f mov ibf,r0 sys 0;7f .data 7: sys seek; 8:.. ; 0 .text mov ibf,r0 sys write; block; 1024. mov ibf1,r0 sys 0;7f .data 7: sys seek; 9:.. ; 0 .text mov blocksize,0f mov ibf1,r0 sys 0;7f .data 7: sys read; block; 0:.. .text 4: mov (sp)+,ev 5: rts pc 6: jsr r5,string;9f rts pc 9: .even caseif: clr -(sp) jsr pc,skipcont jsr pc,getchar cmp r0,$'! bne 1f inc (sp) br 2f 1: mov r0,ch 2: jsr pc,atoi beq 1f tst r0 bgt 5f /true br 6f /false 1: jsr pc,getchar cmp r0,$'e bne 1f bit $1,pn bne 6f br 5f 1: cmp r0,$'o bne 1f bit $1,pn beq 6f br 5f 1: cmpb r0,$'n beq 5f 1: tst (sp)+ rts pc 5: tst (sp) bne 1b 2: clr column jsr pc,getchar bmi 0f cmpb r0,$' / beq 2b 0: mov r0,ch inc nflush br 1b 6: tst (sp) beq 1b br 2b casewh: clr -(sp) jsr pc,skipcont jsr pc,getchar cmp r0,$'x bne 1f mov $-1,r0 jsr pc,findt add nl,r1 sub dnl,r1 mov r1,r0 br 2f 1: mov r0,ch jsr pc,atoi beq 4f 2: mov r0,(sp) jsr pc,skipcont jsr r5,getname; bname tstb bname bne 1f clr bname 1: mov (sp),r0 jsr pc,findn tst r1 beq 1f mov bname,[mlist-nlist](r1) br 4f 1: mov $mlist,r1 2: tst (r1)+ beq 3f cmp r1,$mliste bgt 4f br 2b 3: mov bname,-2(r1) mov (sp),[nlist-mlist-2](r1) 4: tst (sp)+ rts pc findn: mov $nlist,r1 1: cmp (r1),r0 beq 3f 2: tst (r1)+ cmp r1,$nliste bne 1b clr r1 rts pc 3: tst [mlist-nlist](r1) beq 2b rts pc findm: mov $mlist,r1 1: cmp (r1),bname beq 3f 2: tst (r1)+ cmp r1,$mliste bne 1b clr r1 rts pc 3: sub $[mlist-nlist],r1 rts pc casech: clr -(sp) jsr pc,skipcont jsr pc,atoi beq 2f jsr pc,findn br 3f 2: jsr r5,getname; bname tstb bname beq 1f jsr pc,findm 3: tst r1 beq 1f mov r1,(sp) jsr pc,skipcont jsr pc,atoi beq 2f mov r0,*(sp) 1: tst (sp)+ rts pc 2: jsr pc,getchar tst nlflg bne 1b mov *(sp),r0 beq 1b bgt 0f add pl,r0 inc r0 0: sub nl,r0 ble 1b dec r0 ble 1b cmp dnl,r0 bge 0f mov dnl,r0 0: sub r0,*(sp) br 1b casemk: jsr pc,skipcont beq 1f mov nl,markline rts pc 1: jsr r5,getname; bname mov bname,r0 beq 2f jsr pc,findr beq 2f mov nl,(r1) 2: rts pc casetm: inc copyf jsr pc,skipcont mov $bname,r1 1: jsr pc,getchar bmi 1b movb r0,(r1)+ tst nlflg bne 2f cmp r1,$ename blo 1b movb $'\n,-1(r1) 2: clrb (r1) jsr r5,stringfl; bname clr copyf rts pc caserd: jsr pc,skipcont jsr r5,getname; bname tst iflg bne 1f tst quiet bne 2f tstb bname beq 5f jsr r5,string; bname jsr r5,string; 3f 1: jsr pc,collect inc tty jsr pc,pushi beq 6f mov $-1,ip rts pc 2: bic $10,ttym mov ttyid,r0 sys stty; ttys jsr pc,flush 5: jsr r5,string;4f br 1b 6: jmp rdtty2 3: <: \0> 4: <\0> /bell .even caseaf: jsr pc,skipcont bne 3f jsr r5,getname;bname mov bname,r0 beq 3f jsr pc,findr jsr pc,skipcont jsr pc,getchar mov $4f,r2 1: cmpb r0,(r2)+ beq 2f inc r2 tstb (r2) bne 1b 2: movb (r2),[flist-vlist](r1) 3: rts pc 4: .byte '1,1 .byte 'i,2 .byte 'I,3 .byte 'a,4 .byte 'A,5 .byte 0,0 casenr: jsr pc,skipcont bne 5f jsr r5,getname; bname mov bname,r0 jsr pc,findr mov r1,0f beq 5f jsr pc,skipcont bne 5f jmp 7f .data 7: jsr r5,number1; 0:.. jmp 8f .text 8: bne 1f clr r0 1: mov r0,*0b jsr pc,skipcont bne 5f jsr pc,atoi beq 5f mov r0,[inclist-vlist](r1) 5: rts pc casefl: jsr pc,rbreak jsr pc,flush rts pc casexh: / tst x.5 / bne 1f inc x.5 rts pc /1: / clr x.5 / rts pc caseso: jsr pc,skipcont tst nlflg bne 1f jsr r5,getname; nextf tstb nextf beq 1f sys open; nextf; 0 bes 1f mov ifp,r1 cmp r1,$ifle bhi 1f mov r0,-(sp) jsr pc,flushi mov ifile,(r1) mov (sp)+,ifile mov ioff,[offl-ifl](r1) add $2,ifp clr ioff inc nx inc nflush tst (r1) bne 1f jsr pc,savebuf 1: rts pc caseeo: clr r0 br 1f caseec: jsr pc,skipcont jsr pc,getchar cmpb r0,$'\n bne 1f movb $'\\,r0 1: movb r0,eschar movb r0,eschar+1 rts pc casest: 4 caseem: clr em jsr pc,skipcont bne 1f jsr r5,getname;bname beq 1f mov bname,em 1: rts pc casefc: mov $4,fc mov $' ,padc jsr pc,skipcont bne 1f jsr pc,getchar bmi 1f movb r0,fc jsr pc,skipcont bne 1f mov ch,r0 bmi 1f cmpb r0,fc beq 1f movb r0,padc 1: rts pc casepi: tst toolate bne 1f jsr pc,skipcont jsr r5,getname;bname beq 1f sys 42. /pipe jes place mov r0,pipin mov r1,outid sys fork br 2f jes place mov $1,r0 sys close mov pipin,r0 sys close 1: inc toolate rts pc 2: clr r0 sys close mov pipin,r0 sys 41. /dup mov outid,r0 sys close sys exec;bname;args jsr r5,string;9f sys exit args: bname;0 9: .even getchar bmi 1f movb r0,fc jsr pc,skipcont bne 1f mov ch,r0 bmi 1f cmpb r0,fc beq 1f movb r0,padc 1: rts pc casepi: tst toolate bne 1f jsr pc,skipcont jsr r5,getname;bname beq 1f sys 42. /pipe jes place mov r0,pipin mov r1,outid sys fork br 2f jes place mov $1,r0 sys close mov pipin,r0 sys close 1: inc too/ / / nroff3 skipcont: / mov r2,-(sp) 0: jsr pc,getchar / mov r0,r2 / jsr pc,alph2 / beq 0b 1: cmp $' ,r0 bne 1f jsr pc,getchar br 1b 1: / mov (sp)+,r2 mov r0,ch tst nlflg rts pc rbreak: jsr pc,rbreak1 clr totout rts pc rbreak1: clr trap tst nb beq 1f rts pc 1: cmp nl,$-1 bne 1f jsr pc,newln1 rts pc 1: tst nc bne 1f tst pendw bne 4f tst wch beq 4f jsr pc,setnel jsr pc,movword nop 1: clrb *linep clr nls inc totout tst lastl bmi 1f mov ne,lastl br 0f 1: mov ll,lastl 0: tst op bne 0f mov po,r0 jsr pc,space 0: jsr pc,donum mov un,r0 jsr pc,space jsr pc,jfo mov $line,r2 1: movb (r2)+,r0 cmp $' ,r0 bne 2f jsr pc,fill tst nc bne 1b br 3f 2: jsr pc,putchar dec nc bgt 1b 3: clr nwd clr ne mov in,un jsr pc,setnel jsr pc,newline cmp nl,hnl ble 0f mov nl,hnl 0: tst trap bne 3f mov ls,r2 dec r2 clr r0 jsr pc,findt cmp r1,r2 bgt 1f mov r1,r0 jsr r5,nlines; newline br 3f 1: mov r2,r0 jsr r5,nlines;newline 3: / clr pendb clr spread rts pc 4: jsr pc,setnel rts pc jfo: tst jfomod beq 1f mov fac,r0 add fmq,r0 beq 1f clr fac clr fmq mov nel,r0 cmp jfomod,$1 bne 2f asr r0 2: jsr pc,space 1: rts pc donum: tst numbmod beq 2f dec nn blt 1f 0: mov $3,r0 add nms,r0 add ni,r0 jsr pc,space rts pc 1: mov lnumber,r1 sxt r0 mov ndf,-(sp) dvd (sp)+,r0 tst r1 beq 1f inc lnumber br 0b 1: clr r0 cmp lnumber,$100. bge 1f inc r0 cmp lnumber,$10. bge 1f inc r0 1: add ni,r0 jsr pc,space mov lnumber,r0 jsr r5,decimal; putchar mov nms,r0 jsr pc,space inc lnumber 2: rts pc newline: mov $'\n,r0 jsr pc,putchar tst op beq 1f inc dnl rts pc 1: tst x.5 beq 1f mov $032,r0 jsr pc,putchar 1: inc nl cmp nl,pl blo 3f newln1: clr nl clr hnl clr ejf mov $ilist,ejl tst donef beq 2f tst nc bne 1f tst wch bne 1f jmp done1 1: tst ndone jne done1 inc ndone clr donef cmp frame,$stk bne 2f inc nflush 2: inc pn tst npn beq 1f mov npn,pn clr npn 1: cmp pn,pto ble 2f jsr pc,flush jmp place 2: tst stop beq 2f cmp pn,pfrom blo 2f jsr pc,flush / mov sp,r1 / sys signal; 2; 1f mov ttyid,r0 sys read; char; 1 1: / mov r1,sp / sys signal; 2; place 2: / cmp numbmod,$1 / bne 3f / mov $1,lnumber 3: clr trap jsr pc,findnl tst r1 beq 4f mov [mlist-nlist](r1),r0 mov frame,-(sp) jsr pc,cont1 cmp (sp)+,frame beq 4f inc trap / inc nlflg rts pc 4: tst ejf beq 5f cmp ilistp,ejl beq newline 5: rts pc findnl: mov $nlist,r1 1: mov (r1),r0 tst r0 bpl 2f add pl,r0 inc r0 2: cmp nl,r0 beq 4f 3: tst (r1)+ cmp r1,$nliste bne 1b clr r1 rts pc 4: tst [mlist-nlist](r1) beq 3b rts pc number: jsr pc,skipcont number1: clr -(sp) mov r1,-(sp) mov r3,-(sp) clr r3 clr -(sp) 1: jsr pc,getchar cmp r0,$'+ beq 2f cmp r0,$'- beq 2f mov r0,ch 1: jsr pc,atoi beq 3f mov r0,r3 inc 6(sp) br 3f 2: mov r0,(sp) br 1b 3: tst 6(sp) bne 1f mov $1,r3 1: mov (r5)+,r0 beq 1f mov (r0),r0 1: mov (sp)+,r1 cmp r1,$'- bne 1f sub r3,r0 br 2f 1: cmp r1,$'+ bne 1f add r3,r0 br 2f 1: mov r3,r0 2: mov (sp)+,r3 mov (sp)+,r1 tst (sp)+ rts r5 eject: / tst ejf / bne 2f inc ejf mov r0,ejl tst trap bne 2f jsr pc,newline 2: rts pc storeline: cmp linep,$line+linsiz bhis 1f movb r0,*linep inc linep jsr pc,width add r1,ne sub r1,nel inc nc rts pc 1: tst over bne 2f jsr r5,stringfl; linemes 2: inc over rts pc linemes: .even getword: clr -(sp) clr -(sp) mov pendw,r2 bne 5f mov $word,r2 clr over clr wne clr wch clr nhyph clr hypedf mov $word,wordp 1: jsr pc,gettchar bmi 4f cmpb r0,$'\n bne 0f clr wne clr wch br 3f 0: cmpb r0,ohc bne 2f inc hypedf br 1b 2: cmpb $' ,r0 bne 2f jsr pc,storeword br 1b 2: 4: mov r0,-(sp) mov $' ,r0 / bis chbits,r0 jsr pc,storeword tst spaceflg beq 2f jsr pc,storeword clr spaceflg 2: mov (sp)+,r0 2: tst r0 bmi 0f cmpb r0,$005 beq 6f 0: inc 2(sp) jsr pc,storeword bisb (sp),-1(r2) /add in hyphen clr (sp) 5: jsr pc,gettchar bmi 1f cmpb r0,ohc bne 1f inc hypedf jsr pc,gettchar mov $200,(sp) 1: tst r0 bmi 2b cmpb $' ,r0 beq 1f cmpb $'\n,r0 bne 2b cmpb -1(r2),$'. beq 0f cmpb -1(r2),$'! beq 0f cmpb -1(r2),$'? bne 1f 0: inc spaceflg 1: add $2,4(sp) clrb (r2)+ 3: clr pendw cmp (sp)+,(sp)+ mov $word,wordp jsr pc,setnel / jsr pc,wordout rts pc 6: tst (sp)+ tst (sp)+ beq 7f mov r2,pendw 0: clr nflush jsr pc,flushi rts pc 7: clr wch br 0b setnel: tst nc bne 2f mov $line,linep mov ll,nel tst un1 blt 1f mov un1,un mov $-1,un1 1: sub un,nel clr ne clr fac clr fmq 2: rts pc storeword: cmp r2,$eword bhis 1f jsr pc,width add r1,wne inc wch movb r0,(r2)+ rts pc 1: tst over bne 2f jsr r5,stringfl; wordmes 2: inc over rts pc wordmes: .even need: need2: mov r0,-(sp) clr r0 jsr pc,findt cmp (sp)+,r1 ble 1f / mov ilistp,r0 / jsr pc,eject mov r1,r0 clr nls jsr r5,nlines;newline 1: rts pc min: tst r0 bge 1f clr r0 1: rts pc getname: mov r1,-(sp) mov r2,-(sp) mov (r5),r1 mov $namesiz,r2 1: jsr pc,getchar tst nlflg bne 2f cmp r0,$040 beq 2f cmp r0,$0176 blos 4f 2: mov r0,ch 3: clrb (r1)+ mov (sp)+,r2 mov (sp)+,r1 tstb *(r5)+ rts r5 4: movb r0,(r1)+ dec r2 beq 3b br 1b copyb: inc copyf jsr pc,flushi clr nlflg clr -(sp) mov $1,-(sp) 1: jsr pc,getchar bmi 9f cmpb r0,$'\n bne 2f mov $1,(sp) clr nlflg br 4f 2: cmpb r0,$'. bne 9f cmp (sp),$1 bgt 3f blt 9f inc (sp) br 4f 3: tst skp bne 0f jsr pc,wbfl mov 2(sp),r1 clr r0 jsr pc,wbt 0: inc (sp) br 5f 9: clr (sp) 4: mov r1,2(sp) tst skp bne 5f jsr pc,wbf 5: cmp (sp),$3 bne 1b cmp (sp)+,(sp)+ 6: clr copyf rts pc allocmes: .even alloc: mov r1,-(sp) clr nextb mov $blist,r1 1: tst (r1)+ beq 3f cmp r1,$eblist blo 1b 2: mov (sp)+,r1 tst nextb rts pc 3: mov $-1,-(r1) jsr pc,offset cmp r1,first blo 2b mov r1,nextb br 2b free: mov r1,-(sp) mov r0,r1 beq 2f 1: jsr pc,blistptr tst (r1) beq 2f cmp (r1),$-1 bne 3f clr (r1) 2: mov (sp)+,r1 rts pc 3: mov (r1),-(sp) clr (r1) mov (sp)+,r1 br 1b offset: sub $blist,r1 ash $7,r1 add first,r1 rts pc blistptr: mov r0,-(sp) clr r0 sub first,r1 ashc $-7,r0 bic $1,r1 add $blist,r1 mov (sp)+,r0 rts pc wbt: jsr pc,wbf jsr pc,wbfl rts pc wbf: tst woff bne 0f mov r1,woff mov $wbuf,wbufp 0: mov r0,*wbufp add $2,wbufp add $2,r1 bit $377,r1 bne 2f sub $2,r1 jsr pc,blistptr cmp (r1),$-1 bne 1f jsr pc,wbfl jsr pc,alloc bne 0f jsr r5,stringfl;allocmes jmp done 0: mov nextb,(r1) 1: mov (r1),r1 2: cmp wbufp,$wbufe bhis wbfl rts pc wbfl: tst woff beq 0f mov wbufp,9f sub $wbuf,9f beq 0f mov ibf,r0 sys 0;7f .data 7: sys seek; woff:..;0 .text mov ibf,r0 sys 0;7f .data 7: sys write; wbuf; 9:.. .text clr woff mov $-1,roff 0: rts pc rbf: mov ip,r1 jsr pc,rbf0 bne 0f tst app bne 1f jsr pc,popi rts pc 0: jsr pc,incoff 1: mov r1,ip rts pc rbf0: mov r1,-(sp) bic $377,r1 cmp r1,roff beq 1f mov r1,roff mov ibf1,r0 sys 0;7f .data 7: sys seek; roff:-1 ;0 .text mov ibf1,r0 sys read;rbuf;256. tst r0 bne 1f tst (sp)+ sez rts pc 1: mov (sp),r0 bic $!377,r0 mov (sp)+,r1 mov rbuf(r0),r0 rts pc incoff: add $2,r1 bit $377,r1 bne 1f sub $2,r1 jsr pc,blistptr mov (r1),r1 beq 5f cmp $-1,r1 beq 5f 1: rts pc 5: jsr r5,stringfl; badmes jmp place badmes: .even alph: movb (r0),r2 alph2: cmp r2,$'A blo 1f cmp r2,$'Z blos 2f cmp r2,$'a blo 1f cmp r2,$'z bhi 1f 2: sez rts pc 1: clz rts pc rdsufb: mov r1,-(sp) bic $177,r1 cmp r1,sufoff beq 2f mov r1,sufoff mov suff,r0 sys 0;7f .data 7: sys seek; sufoff: -1; 0 .text mov suff,r0 sys read; sufbuf; 128. 2: mov (sp),r0 bic $!177,r0 movb sufbuf(r0),r0 mov (sp)+,r1 rts pc atoi: jsr pc,atoi1 bne 1f rts pc 1: mov r1,-(sp) mov r0,-(sp) 1: jsr pc,getchar cmp r0,$'+ beq 4f cmp r0,$'- beq 5f 2: cmp r0,$'* bne 2f jsr pc,atoi1 beq 3f mov r0,r1 mpy (sp),r1 mov r1,(sp) br 1b 2: cmp r0,$'\/ bne 2f jsr pc,atoi1 beq 3f mov r0,-(sp) mov 2(sp),r1 sxt r0 dvd (sp),r0 mov r0,2(sp) tst (sp)+ br 1b 2: mov r0,ch 3: mov (sp)+,r0 mov (sp)+,r1 tst pc rts pc 4: jsr pc,atoi1 beq 3b add r0,(sp) br 1b 5: jsr pc,atoi1 beq 3b sub r0,(sp) br 1b atoi1: clr -(sp) mov r3,-(sp) clr -(sp) clr r3 jsr pc,getchar cmp r0,$'- bne 2f inc (sp) 1: jsr pc,getchar 2: sub $'0,r0 cmp r0,$9 bhi 1f inc 4(sp) mpy $10.,r3 add r0,r3 br 1b 1: add $'0,r0 mov r0,ch bne 0f mov $' ,ch 0: tst (sp)+ beq 1f neg r3 1: mov r3,r0 mov (sp)+,r3 tst (sp)+ rts pc findt: mov r0,-(sp) mov $-1,-(sp) mov $nlist,r1 1: tst [mlist-nlist](r1) bne 3f 2: tst (r1)+ cmp r1,$nliste ble 1b br 8f 3: mov (r1),r0 tst 2(sp) bmi 6f /- traps beq 4f /all traps tst (r1) /+ traps bmi 2b 4: tst (r1) bpl 5f mov pl,r0 inc r0 add (r1),r0 5: sub nl,r0 ble 2b cmp r0,(sp) bhis 2b mov r0,(sp) br 2b 6: tst (r1) bpl 2b br 4b 8: mov (sp),r1 bpl 9f mov pl,r1 sub nl,r1 9: cmp (sp)+,(sp)+ rts pc findr: mov $rlist,r1 1: tst (r1) beq 2f cmp (r1)+,r0 beq 3f cmp r1,$rliste blos 1b tst numerr bne 0f jsr r5,stringfl; 9f 0: inc numerr / clr r1 / rts pc cmp numerr,$1 jeq edone jmp done2 2: mov r0,(r1) br 4f 3: tst -(r1) 4: add $[vlist-rlist],r1 rts pc 9: .even setn0: clr -(sp) clr -(sp) mov $1,nform jbr setn1 setn: mov r1,-(sp) clr -(sp) clr temp jsr pc,get1 cmpb r0,$'+ bne 1f inc (sp) 0: jsr pc,get1 1: cmpb r0,$'\\ bne 1f 3: jsr pc,get1 jsr r5,switch;esctab cmpb r0,dolc bne 1f jsr pc,seta br 0b 1: tst temp bne 2f bic $!177,r0 cmpb r0,$'( bne 1f inc temp jsr pc,get1 2: bic $!177,r0 cmpb r0,$'\\ beq 3b mov r0,-(sp) jsr pc,get1 bic $!177,r0 swab r0 bis (sp)+,r0 1: cmpb 2(sp),$372 beq 5f /exit if called by \k clr nform cmp r0,$".v bne 0f mov ls,r0 br setn1 0: cmp r0,$".p bne 0f mov pl,r0 br setn1 0: cmp r0,$".t bne 0f clr r0 jsr pc,findt mov r1,r0 br setn1 0: cmp r0,$".o bne 0f mov po,r0 br setn1 0: cmp r0,$".l bne 0f mov ll,r0 br setn1 0: cmp r0,$".i bne 0f mov in,r0 br setn1 0: cmp r0,$".$ bne 0f mov *frame,r0 br setn1 0: cmp r0,$".x bne 0f mov evp,r0 br setn1 0: cmp r0,$".c bne 0f mov iline,r0 br setn1 0: cmp r0,$".h bne 0f mov hnl,r0 br setn1 0: cmp r0,$".n bne 0f mov lastl,r0 br setn1 0: jsr pc,findr tst r1 beq 5f tst (sp) beq 1f add [inclist-vlist](r1),(r1) 1: mov (r1),r0 mov [flist-vlist](r1),nform setn1: mov r4,-(sp) mov $cbuf,r4 tst r0 bge 1f movb $'-,(r4)+ neg r0 1: jsr r5,fnumb0;wrc clrb (r4) mov (sp)+,r4 mov $cbuf,cp 5: tst (sp)+ mov (sp)+,r1 rts pc wrc: cmp r4,$stk bhis 1f movb r0,(r4)+ 1: rts pc seta: jsr pc,get1 cmp r0,$'\\ bne 1f jsr pc,get1 jsr r5,switch;esctab cmp r0,numc bne 1f clr r1 jsr pc,setn br seta 1: sub $060,r0 ble 2f cmp r0,$9. bgt 2f cmp r0,*frame bgt 2f asl r0 add frame,r0 add $stksiz-2,r0 mov (r0),ap 2: rts pc stksiz = 16. pushi: clr r0 mov enda,-(sp) sub $stksiz,(sp) cmp nxf,(sp)+ blo 0f jsr pc,setbrk beq 2f br pushi 0: mov nxf,r0 tst (r0)+ /nargs mov frame,(r0)+ mov ip,(r0)+ mov nspace,(r0)+ clr nspace mov rchar,(r0)+ clr rchar mov pendt,(r0)+ mov ap,(r0)+ mov ch,(r0)+ clr ch clr ap clr pendt mov nxf,frame tst *nxf bne 1f add $stksiz,nxf br 2f 1: mov r1,nxf 2: tst r0 rts pc popi: cmp frame,$stk beq 1f mov frame,r0 mov r0,nxf clr (r0)+ mov (r0)+,frame mov (r0)+,ip mov (r0)+,nspace mov (r0)+,rchar mov (r0)+,pendt mov (r0)+,ap mov (r0)+,r0 / cmp frame,litlev / bhis 1f / clr lit 1: rts pc setbrk: tst noset bne 2f mov enda,-(sp) add $516.,(sp) bic $777,(sp) mov (sp)+,0f sys 0;7f .data 7: sys break; 0:.. .text bes 1f mov 0b,enda sub $2,enda clz rts pc 1: inc noset 2: sez rts pc collect: inc copyf jsr pc,skipcont clr *nxf mov nxf,r2 add $stksiz,r2 mov r2,r1 add $18.,r1 mov r1,-(sp) mov nxf,-(sp) cmp r1,enda blo 1f jsr pc,setbrk beq 7f 1: clr quote cmp r2,2(sp) beq 9f jsr pc,skipcont tst nlflg bne 9f mov r1,(r2)+ jsr pc,getchar cmp r0,$'" bne 3f inc quote 2: jsr pc,getchar 3: tst nlflg bne 8f tst quote bne 4f cmp r0,$' / beq 8f br 5f 4: cmp r0,$'" bne 5f jsr pc,getchar cmpb r0,$'" bne 8f 5: movb r0,(r1)+ mov enda,-(sp) sub $4,(sp) cmp r1,(sp)+ blo 2b jsr pc,setbrk beq 6f br 2b 8: mov r0,ch 6: clrb (r1)+ tst nlflg bne 9f tst noset beq 1b 9: mov (sp),nxf sub nxf,r2 sub $stksiz,r2 asr r2 mov r2,*nxf bit $1,r1 beq 7f inc r1 7: clr copyf cmp (sp)+,(sp)+ rts pc e 9f mov r1,(r2)+ jsr pc,getchar cmp r0,$'" bne 3f inc quote 2: jsr pc,getchar 3: tst nlflg bne 8f tst quote bne 4f cmp r0,$' / beq 8f br 5f 4: / / / 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 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 mo/ / / hyp1 -- driver hyphen: tst hypedf bne 3f tst hyf beq 3f inc hypedf mov wordp,r0 clr nhyph 1: jsr pc,punct bne 1f inc r0 br 1b 1: jsr pc,alph bne 3f mov r0,wordstart 1: inc r0 jsr pc,alph beq 1b dec r0 mov r0,hstart 1: inc r0 tstb (r0) beq 2f jsr pc,punct bne 3f br 1b 2: mov hstart,wordend jsr pc,exword beq 0f jsr r5,suffix tst exf bne 0f jsr r5,digram 0: bit $4,hyf beq 0f mov wordend,r0 bicb $!177,-1(r0) 0: mov wordstart,r0 bicb $!177,1(r0) bit $10,hyf beq 3f bicb $!177,2(r0) 3: rts pc casehw: jsr pc,skipcont bne 2f mov nexth,r1 cmp r1,$ehbuf-2 bhis 3f 1: jsr pc,getchar bmi 1f cmpb r0,$' / beq 4f cmpb r0,$012 beq 1f movb r0,(r1)+ cmp r1,$ehbuf-2 blo 1b br 3f 1: clrb (r1)+ mov r1,nexth clrb (r1)+ 2: rts pc 3: jsr r5,string;hmess clrb *nexth br 2b 4: jsr pc,1b br casehw hmess: .even exword: clr exf clr -(sp) mov r1,-(sp) mov r2,-(sp) mov r3,-(sp) mov r4,-(sp) mov $hbuf,r2 mov hstart,r0 cmpb (r0)+,(r0)+ 0: mov r2,8(sp) mov wordstart,r1 tstb (r2) beq 4f 1: movb (r2)+,r4 cmpb r4,$'- beq 1b movb (r1)+,r3 / tstb r3 / bne 2f cmp r1,r0 blo 2f tstb r4 beq 3f 2: tstb r4 bne 2f / tstb (r1) tstb -1(r0) bne 2f cmpb r3,$'s beq 3f 2: tstb r4 beq 0b / tstb r3 / beq 2f cmp r1,r0 bhis 2f cmpb r4,r3 beq 1b 2: tstb (r2)+ bne 2b br 0b 3: mov wordstart,r1 mov 8(sp),r2 clr 8(sp) inc exf 1: tstb (r1)+ cmpb (r2)+,$'- bne 0f bisb $200,-1(r1) tstb (r2)+ 0: tstb (r2) bne 1b 4: mov (sp)+,r4 mov (sp)+,r3 mov (sp)+,r2 mov (sp)+,r1 tst (sp)+ rts pc punct: tst old bne 4f cmpb (r0),$010 beq 0f movb (r0),r2 jsr pc,alph2 beq 0f sez rts pc 0: clz rts pc 4: mov $3f,r2 1: cmpb (r0),(r2)+ beq 2f tstb (r2) bne 1b clz 2: rts pc 3: < .,()"\'`\0> /should be more .even maplow: cmp r2,$'a bhis 1f add $'a-'A,r2 1: rts pc vowel: cmpb r2,$'a beq 1f cmpb r2,$'e beq 1f cmpb r2,$'i beq 1f cmpb r2,$'o beq 1f cmpb r2,$'u beq 1f cmpb r2,$'y beq 1f cmpb r2,$'A beq 1f cmpb r2,$'E beq 1f cmpb r2,$'I beq 1f cmpb r2,$'O beq 1f cmpb r2,$'U beq 1f cmpb r2,$'Y 1: rts pc checkvow: mov r0,-(sp) 1: movb -(r0),r2 jsr pc,vowel beq 1f jsr pc,alph beq 1b mov (sp)+,r0 clz rts r5 1: mov (sp)+,r0 sez rts r5 / hyp2 -- suffix and digram digram: mov hstart,r0 1: jsr pc,alph bne 3f jsr pc,vowel beq 1f dec r0 br 1b 1: mov r0,hstart 1: movb -(r0),r2 jsr pc,alph2 bne 3f jsr pc,vowel bne 1b clr maxdig mov r0,nhstart 1: mov $1,r3 movb -1(r0),r2 jsr pc,alph2 beq 2f movb (r0),r2 mov $'a,r1 jsr r5,dilook; bxh br 4f 2: movb -2(r0),r2 mov $xxh,0f jsr pc,alph2 beq 2f mov $bxxh,0f 2: movb -1(r0),r1 movb (r0),r2 jmp 7f .data 7: jsr r5,dilook; 0:xxh jmp 8f .text 8: 4: movb (r0)+,r1 movb (r0),r2 jsr r5,dilook; xhx movb (r0),r1 movb 1(r0),r2 jsr r5,dilook; hxx cmp r3,maxdig blos 2f mov r3,maxdig mov r0,maxloc 2: cmp r0,hstart blo 1b mov nhstart,hstart cmp maxdig,thresh blo digram bisb $200,*maxloc inc nhyph / mov maxdig,*octbufp / inc octcnt / add $2,octbufp br digram 3: rts r5 dilook: mov r4,-(sp) bic $!177,r2 bic $!177,r1 jsr pc,maplow sub $'a,r2 cmp r2,$'z-'a bhi 3f mov r2,r4 mov r1,r2 jsr pc,maplow sub $'a,r2 cmp r2,$'z-'a bhi 3f mov r3,-(sp) mov r2,r3 mpy $13.,r3 clr r2 clc ror r4 adc r2 add r3,r4 add (r5)+,r4 movb (r4),r4 tst r2 bne 1f asr r4 asr r4 asr r4 asr r4 1: bic $!17,r4 mov r4,r3 mpy (sp)+,r3 br 4f 3: clr r3 tst (r5)+ 4: mov (sp)+,r4 rts r5 suffix: mov hstart,r0 jsr pc,alph bne 4f jsr pc,maplow sub $'a,r2 asl r2 mov suftab(r2),-(sp) bic $!37777,(sp) beq 3f 1: mov hstart,r0 mov (sp),r1 jsr pc,rdsuf movb (r1),r3 beq 3f bic $!17,r3 add r3,(sp) add r1,r3 2: movb -(r3),r2 cmp r3,r1 ble 2f bic $!177,r2 mov r2,-(sp) movb -(r0),r2 jsr pc,maplow cmp r2,(sp)+ bne 1b br 2b 2: mov hstart,r0 tst (sp)+ movb (r1),r3 bic $!17,r3 add r1,r3 bitb $200,(r1)+ bne 1f 2: dec r0 cmp r3,r1 ble 2f tstb -(r3) bpl 2b 1: mov r0,hstart dec hstart bitb $100,-1(r1) bne 2b jsr r5,checkvow bne 4f bisb $200,(r0) br 2b 2: bitb $40,-(r1) bne 4f jsr pc,exword bne suffix br 4f / beq suffix / br 4f 3: tst (sp)+ 4: rts r5 rdsuf: mov r0,-(sp) mov suff,nfile mov 4(sp),r1 jsr pc,rdsufb mov $sufb,r2 movb r0,(r2)+ mov r0,r3 bic $!17,r3 1: dec r3 blt 1f inc r1 jsr pc,rdsufb movb r0,(r2)+ br 1b 1: mov $sufb,r1 mov (sp)+,r0 rts pc r3 bitb $200,(r1)+ bne 1f 2: dec r0 cmp r3,r1 ble 2f tstb -(r3) bpl 2b 1: mov r0,hstart dec hstart bitb $100,-1(r1) bne 2b jsr/ / / nroff8 .data nexth: hbuf outid: 1 init: 1 slow: 1 nflush: 0 nev: 2 ev: 0 nextb: .=.+2 evp: elist pto: 9999. po: 0 po1: 0 npn: 0 pl: 66. obufp: obuf wbufp: wbuf thresh: 240 suffil: ones: fives: cones: cfives: ttyx: tmfile: bfn: bfn1: /indf: .even ttyid: 0 ttyod: 2 ilistp: frame: stk nxf: stk+12. dolc: 020 tch: 024 ifp: ifl namesiz = 88. bname: nextf: nextf1: .=nextf+namesiz ename: .=.+2 fc: 004 block: /environment block totout: .=.+2 ls: 1 ls1: 1 ll: 65. ll1: 65. llh: 65. llh1: 65. ad: 1 nms: 1 ndf: 1 fi: 1 cc: '. c2: '' ohc: 200 hyf: 1 hypedf: 0 un1: -1 tabc: 014 dotc: '. numc: 034 tabtab: 8.;16.;24.;32.;40.;48.;56.;64.;72. 80.;88.;96.;104.;112.;120.;128.;136.;144.;152.;160. .=.+44. .even etabtab: fac: .=.+2 fmq: .=.+2 ne: .=.+2 nel: .=.+2 lastl: 0 jfomod: .=.+2 wordp: .=.+2 spaceflg: .=.+2 linep: .=.+2 wordend: .=.+2 wordstart: .=.+2 wne: .=.+2 nc: .=.+2 nb: .=.+2 lnumber: .=.+2 numbmod: .=.+2 nwd: .=.+2 nn: .=.+2 ni: .=.+2 ul: .=.+2 ce: .=.+2 rchar: .=.+2 nspace: .=.+2 in: .=.+2 in1: .=.+2 un: .=.+2 wch: .=.+2 x: .=.+2 /pendb: .=.+2 pendt: .=.+2 pendw: .=.+2 spread: .=.+2 word: .=.+200. eword: .=.+2 stbuf: linsiz = 600. line: .=.+linsiz blockend: .=.+2 dummy: .=block+1024. .bss bss: hnl: .=.+2 iline: .=.+2 exf: .=.+2 hbuf: .=.+128. ehbuf: ndone: .=.+2 ttys: .=.+4 ttym: .=.+2 nform: .=.+2 toolate: .=.+2 pipin: .=.+2 npad: .=.+2 padc: .=.+2 fbuf: .=.+252. efbuf: .=.+4 em: .=.+2 old: .=.+2 raw: .=.+2 raw1: .=.+2 xpc: .=.+2 copyf: .=.+2 aplnk: .=.+2 apptr: .=.+2 app: .=.+2 blist: .=.+512. eblist: .=.+2 diflg: .=.+2 ditf: .=.+2 first: .=.+2 macerr: .=.+2 numerr: .=.+2 newptr: .=.+2 oldptr: .=.+2 rbuf: .=.+256. wbuf: .=.+256. wbufe: .=.+2 mflg: .=.+2 iflg: .=.+2 pendnf: .=.+2 over: .=.+2 temp: .=.+2 nfo: .=.+2 ds: .=.+2 markline: .=.+2 litlev: .=.+2 lit: .=.+2 ioff: .=.+2 ifl: .=.+8. ifle: .=.+2 offl: .=.+10. noset: .=.+2 quote: .=.+2 x.5: .=.+2 /index: .=.+2 stdi: .=.+2 /indid: .=.+2 sv: .=.+2 tty: .=.+2 quiet: .=.+2 trap: .=.+2 nls: .=.+2 elist: .=.+18. eliste: .=.+2 rlist: .=.+158. rliste: .=.+2 vlist: pn: .=.+2 nl: .=.+2 dnl: .=.+2 yr: .=.+2 mo: .=.+2 dy: .=.+2 dw: .=.+2 column: .=.+2 .=.+144. inclist: .=.+160. flist: .=.+160. nlist: .=.+28. nliste: .=.+2 mlist: .=.+28. mliste: .=.+2 donef: .=.+2 ssp: .=.+2 stop: .=.+2 nx: .=.+2 ibf: .=.+2 ibf1: .=.+2 skp: .=.+2 ejf: .=.+2 /ejf1: .=.+2 ejl: .=.+2 ip: .=.+2 cp: .=.+2 ap: .=.+2 op: .=.+2 tflg: .=.+2 ocol: .=.+2 nlflg: .=.+2 ch: .=.+2 maxdig: .=.+2 maxloc: .=.+2 hstart: .=.+2 nhstart: .=.+2 nhyph: .=.+2 argc: .=.+2 argp: .=.+2 ibufp: .=.+2 xbufp: .=.+2 xbuf: .=.+514. eibuf: .=.+2 xeibuf: .=.+2 ulstate: .=.+2 ulc: .=.+2 bsc: .=.+2 nsp: .=.+2 ro: .=.+2 pfrom: .=.+2 onesp: .=.+2 fivesp: .=.+2 suff: .=.+2 sufb: .=.+20. sufbuf: .=.+128. suftab: .=2*26.+. ifile: .=.+2 char: .=.+2 nfile: .=.+2 headp: .=.+2 trtab: .=.+128. blocksize: .=.+2 enda: .=.+2 ybuf: cbuf: .=.+34. ilist: stk: .=.+60. end: +2 tflg: .=.+2 ocol: .=.+2 nlflg: .=.+2 ch: .=.+2 m