Research V7 development
authorKen Thompson <ken@research.uucp>
Wed, 10 Jan 1979 20:03:48 +0000 (15:03 -0500)
committerKen Thompson <ken@research.uucp>
Wed, 10 Jan 1979 20:03:48 +0000 (15:03 -0500)
Work on file usr/src/cmd/roff/roff1.s
Work on file usr/src/cmd/roff/roff3.s
Work on file usr/src/cmd/roff/roff2.s
Work on file usr/src/cmd/roff/roff4.s
Work on file usr/src/cmd/roff/roff5.s
Work on file usr/src/cmd/roff/roff7.s
Work on file usr/src/cmd/roff/roff8.s

Synthesized-from: v7

usr/src/cmd/roff/roff1.s [new file with mode: 0644]
usr/src/cmd/roff/roff2.s [new file with mode: 0644]
usr/src/cmd/roff/roff3.s [new file with mode: 0644]
usr/src/cmd/roff/roff4.s [new file with mode: 0644]
usr/src/cmd/roff/roff5.s [new file with mode: 0644]
usr/src/cmd/roff/roff7.s [new file with mode: 0644]
usr/src/cmd/roff/roff8.s [new file with mode: 0644]

diff --git a/usr/src/cmd/roff/roff1.s b/usr/src/cmd/roff/roff1.s
new file mode 100644 (file)
index 0000000..05e12af
--- /dev/null
@@ -0,0 +1,570 @@
+/
+/
+
+/ roff1 -- text formatter
+
+       .globl _ttyname
+       nop = 000240
+       signal = 48.
+
+ibuf: /init code in ibuf+obuf
+       cmp     sp,$end
+       bhi     1f
+       jsr     r5,string; emes1
+       sys     exit
+1:
+       clr     r0
+       jsr     pc,mesg
+       sys     signal; 1; place
+       sys     signal; 2; place
+       jsr     pc,makebf
+       sys     open; suffil; 0
+       bes     1f
+       mov     r0,suff
+       sys     lseek; 0;20; 0  /actually lseek
+       bes     1f
+       mov     suff,r0
+       sys     read; suftab; 2*26.
+1:
+       clr     r0
+       mov     (sp)+,argc
+       dec     argc
+       bne     1f
+       jmp     place
+1:
+       tst     (sp)+
+       mov     (sp),r4
+       cmpb    (r4)+,$'+
+       bne     2f
+       jsr     r5,pnum; pfrom
+       br      3f
+2:
+       cmpb    -1(r4),$'-
+       bne     2f
+       cmpb    (r4),$'s
+       bne     0f
+       inc     stop
+       br      3f
+0:
+       cmpb    (r4),$'h
+       bne     0f
+       clr     slow
+       br      3f
+0:
+       jsr     r5,pnum; pto
+3:
+       dec     argc
+       bgt     1b
+2:
+       mov     $nop,get1a
+       mov     $ibuf,ibufp
+       mov     $ibuf,eibuf
+       mov     sp,argp
+       jsr     pc,topbot
+       clr     r0
+1:
+       movb    r0,trtab(r0)
+       inc     r0
+       cmp     r0,$128.
+       bne     1b
+       jsr     pc,rbreak
+       jsr     pc,istop
+       jmp     loop
+makebf:
+       sys     stat; bfn; stbuf
+       bec     2f
+       sys     creat; bfn; 400
+       bec     1f
+2:
+       incb    bfn+8
+       cmpb    bfn+8,$'z
+       blos    makebf
+       jmp     place
+1:
+       mov     r0,ibf
+       sys     write; sufbuf;128.
+       sys     open; bfn;0
+       mov     r0,ibf1
+       rts     pc
+
+string:
+       mov     (r5)+,r1
+       mov     r1,r2
+       mov     r1,0f
+1:
+       tstb    (r1)+
+       bne     1b
+       sub     r2,r1
+       mov     r1,1f
+       mov     $1,r0
+       sys     write; 0:..; 1:..
+       rts     r5
+
+emes1: <Too many files.\n\0>
+xxx:
+.even
+obuf=ibuf+512.
+.=ibuf+1024.
+loop:
+       clr     nlflg
+       jsr     pc,getchar
+       cmpb    r0,cc
+       beq     2f
+       movb    r0,ch
+       jsr     pc,text
+       br      loop
+2:
+       jsr     pc,control
+       jsr     pc,flushi
+       br      loop
+
+mesg:
+       tst     r0
+       bne     setsame
+       clr     -(sp)
+       jsr     pc,_ttyname
+       tst     (sp)+
+       mov     r0,9f
+       mov     r0,8f
+       mov     r0,7f
+       sys     stat; 9:..; stbuf
+       mov     stbuf+4,0f
+       mov     0f,1f
+       bic     $22,0f
+       sys     chmod; 8:..; 0:..
+       rts     pc
+setsame:
+       sys     chmod; 7:..; 1:..
+       rts     pc
+
+pnum:
+       mov     r4,ibufp
+       mov     $37777,eibuf
+       jsr     r5,number1; 0
+       mov     r0,*(r5)+
+       clr     ch
+       rts     r5
+
+flushi:
+       clr     ch
+       tst     nlflg
+       bne     1f
+       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,$'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
+       bgt     3f
+       rts     pc
+3:
+       mov     $1,ulstate
+       mov     r0,ch
+       br      gettchar
+2:
+       inc     bsc
+       inc     ulc
+       rts     pc
+
+getchar:
+       mov     ch,r0
+       beq     1f
+       clr     ch
+       rts     pc
+1:
+       tst     nlflg
+       beq     1f
+       mov     $'\n,r0
+       rts     pc
+1:
+       jsr     pc,get1
+       cmp     r0,$'\\
+       bne     2f
+       jsr     pc,get1
+       jsr     r5,switch; esctab
+       br      3f
+2:
+       cmp     r0,$033  /prefix
+       bne     3f
+       jsr     pc,get1
+       jsr     r5,switch; pfxtab
+3:
+       cmp     r0,$'\n
+       bne     3f
+       inc     nlflg
+       clr     column
+3:
+       mov     r1,-(sp)
+       jsr     pc,width
+       add     r1,column
+       mov     (sp)+,r1
+       rts     pc
+
+esctab:
+   .byte 'd, 032  /hlf (down)
+   .byte 'u, 035  /hlr (up)
+   .byte 'r, 036  /flr (reverse)
+   .byte 'x, 016  /SO (extra chars)
+   .byte 'y, 017  /SI (normal characters)
+   .byte 'l, 0177 /delete
+   .byte 't, 011  /hor tab
+   .byte 'a, 0100 /at sign
+   .byte 'n, 043  /number sign
+   .byte '\\, 134 /backslash
+   .byte 0, 0
+
+pfxtab:
+   .byte '7, 036  /flr
+   .byte '8, 035  /hlr
+   .byte '9, 032  /hlf
+   .byte '4, 030  /brs
+   .byte '3, 031  /rrs
+   .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     tabc,r0
+       rts     pc
+1:
+       mov     r1,-(sp)
+4:
+       tst     ip
+       beq     5f
+       jsr     pc,rbf
+       br      6f
+5:
+       tst     nx
+       bne     0f
+       mov     ibufp,r1
+       cmp     r1,eibuf
+       bne     3f
+0:
+       mov     ifile,r0
+       bne     2f
+1:
+       jsr     pc,nextfile
+2:
+       clr     nx
+       sys     read; ibuf; 512.
+       bes     done
+       tst     r0
+       beq     1b
+       mov     $ibuf,r1
+       add     r1,r0
+       mov     r0,eibuf
+3:
+       movb    (r1)+,r0
+       mov     r1,ibufp
+1:
+       cmp     r0,$011 /tab
+       bne     6f
+       mov     (sp)+,r1
+       mov     $tabtab,r0
+       inc     nspace
+1:
+       tstb    (r0)
+       beq     get1
+       cmpb    column,(r0)+
+       bge     1b
+       movb    -(r0),nspace
+       sub     column,nspace
+       br      get1
+6:
+get1a: br      7f
+       tst     r0
+       beq     4b
+7:
+       mov     (sp)+,r1
+       rts     pc
+
+nextfile:
+       mov     ifile,r0
+       beq     1f
+       sys     close
+1:
+       tst     nx
+       beq     2f
+       mov     $nextf,0f
+       br      3f
+2:
+       dec     argc
+       blt     done
+       mov     *argp,0f
+       add     $2,argp
+3:
+       sys     open; 0:..; 0
+       bes     done
+       mov     r0,ifile
+       rts     pc
+
+done:
+       jsr     pc,rbreak
+       jsr     pc,eject
+       jsr     pc,flush
+place:
+       sys     signal; 2; 1
+       mov     $1,r0
+       jsr     pc,mesg
+       sys     unlink; bfn
+       sys     exit
+
+       rts     pc
+
+putchar:
+       cmp     pn,pfrom
+       blt     2f
+       clr     pfrom
+       bic     $!177,r0
+       beq     2f
+       movb    trtab(r0),r0
+       cmp     r0,$' 
+       bne     1f
+       inc     nsp
+2:
+       rts     pc
+1:
+       cmp     r0,$'\n
+       bne     1f
+       clr     nsp
+       clr     ocol
+       br      2f
+1:
+       tst     nsp
+       beq     2f
+       tst     slow
+       bne     4f
+       jsr     pc,dsp
+       cmp     nsp,r1
+       blt     4f
+       mov     $011,3f+2
+       cmp     r1,$1
+       bgt     8f
+       mov     $040,3f+2
+       dec     nsp
+       br      9f
+8:
+       sub     r1,nsp
+9:
+       mov     r0,-(sp)
+3:
+       mov     $011,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:
+       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
+       movb    r0,*obufp
+       inc     obufp
+       cmp     obufp,$obuf+128.
+       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     $1,r0
+       sys     write; obuf; 0:0
+       mov     $obuf,obufp
+       rts     pc
+
+control:
+       jsr     pc,getchar
+       mov     r0,-(sp)
+       jsr     pc,getchar
+       swab    r0
+       bis     (sp),r0
+       mov     $contab,r1
+1:
+       mov     (r1)+,(sp)
+       bic     $100000,(sp)
+       cmp     r0,(sp)
+       bne     4f
+       mov     (r1),(sp)
+       tst     -(r1)
+       bpl     3f
+       jsr     pc,flushi
+       cmp     ilistp,$iliste
+       bgt     5f
+       mov     ip,*ilistp
+       add     $2,ilistp
+       mov     (sp),ip
+       br      5f
+3:
+       jmp     *(sp)+
+4:
+       cmp     (r1)+,$-1
+       bne     1b
+5:
+       tst     (sp)+
+       rts     pc
+
+contab:
+   <ad>; casead
+   <bp>; casebp
+   <br>; casebr
+   <cc>; casecc
+   <ce>; casece
+   <ds>; caseds
+   <fi>; casefi
+   <in>; casein
+   <ix>; caseix
+   <li>; caseli
+   <ll>; casell
+   <ls>; casels
+   <na>; casena
+   <ne>; casene
+   <nf>; casenf
+   <pa>; casepa
+   <bl>; casebl
+   <pl>; casepl
+   <sk>; casesk
+   <sp>; casesp
+   <ss>; casess
+   <ta>; caseta
+   <ti>; caseti
+   <tr>; casetr
+   <ul>; caseul
+   <un>; caseun
+   <he>; casehe
+   <hx>; casehx
+   <fo>; casefo
+   <eh>; caseeh
+   <oh>; caseoh
+   <ef>; caseef
+   <of>; caseof
+   <m1>; casem1
+   <m2>; casem2
+   <m3>; casem3
+   <m4>; casem4
+   <hc>; casehc
+   <hy>; casehy
+   <n1>; casen1
+   <n2>; casen2
+   <nn>; casenn
+   <ni>; caseni
+   <jo>; casejo
+   <ar>; casear
+   <ro>; casero
+   <nx>; casenx
+   <po>; casepo
+   <de>; casede
+   <ig>; caseig
+   <tc>; casetc
+   <mk>; casemk
+bnames: .=.+100.
+    -1; -1
diff --git a/usr/src/cmd/roff/roff2.s b/usr/src/cmd/roff/roff2.s
new file mode 100644 (file)
index 0000000..3823c86
--- /dev/null
@@ -0,0 +1,406 @@
+/
+/
+
+/ roff2 -- runoff
+
+casead:
+       jsr     pc,rbreak
+       inc     ad
+       rts     pc
+
+       rts     pc
+
+casebr:
+       jsr     pc,rbreak
+       rts     pc
+
+casecc:
+       jsr     pc,skipcont
+       jsr     pc,getchar
+       cmp     r0,$'\n
+       beq     1f
+       movb    r0,cc
+1:
+       mov     r0,ch
+       rts     pc
+
+casece:
+       jsr     pc,rbreak
+       jsr     r5,number; 0
+       jsr     pc,min
+       mov     r0,ce
+       jsr     pc,need
+       rts     pc
+
+caseds:
+       jsr     pc,rbreak
+       mov     $2,ls
+       rts     pc
+
+casefi:
+       jsr     pc,rbreak
+       inc     fi
+       rts     pc
+
+casein:
+       jsr     pc,rbreak
+       jsr     r5,number; in
+       jsr     pc,min
+       mov     r0,in
+       mov     r0,un
+       rts     pc
+
+caseix:
+       jsr     r5,number; in
+       jsr     pc,min
+       mov     r0,in
+       rts     pc
+
+caseli:
+       jsr     r5,number; 0
+       mov     r0,-(sp)
+1:
+       dec     (sp)
+       blt     1f
+       jsr     pc,flushi
+       clr     nlflg
+       jsr     pc,text
+       br      1b
+1:
+       tst     (sp)+
+       rts     pc
+
+casell:
+       jsr     r5,number; ll
+       jsr     pc,min
+       mov     r0,ll
+       rts     pc
+
+casels:
+       jsr     pc,rbreak
+       jsr     pc,skipcont
+       jsr     pc,getchar
+       cmp     r0,$'\n
+       bne     1f
+       mov     ls1,ls
+       rts     pc
+1:
+       mov     r0,ch
+       jsr     r5,number1; ls
+       dec     r0
+       jsr     pc,min
+       inc     r0
+       mov     r0,ls
+       mov     r0,ls1
+       rts     pc
+
+casena:
+       jsr     pc,rbreak
+       clr     ad
+       rts     pc
+
+casene:
+       jsr     r5,number; 0
+       jsr     pc,min
+       jsr     pc,need
+       rts     pc
+
+casenf:
+       jsr     pc,rbreak
+       clr     fi
+       rts     pc
+
+casepa:
+casebp:
+       jsr     pc,rbreak
+       jsr     pc,eject
+       jsr     pc,skipcont
+       tst     nlflg
+       bne     1f
+       jsr     r5,number; pn
+       jsr     pc,min
+       mov     r0,pn
+1:
+       rts     pc
+
+casebl:
+       jsr     pc,rbreak
+       jsr     r5,number; 0
+       jsr     pc,min
+       mov     r0,-(sp)
+       jsr     pc,need2
+1:
+       dec     (sp)
+       blt     1f
+       mov     $' ,r0
+       jsr     pc,storeline
+       jsr     pc,rbreak
+       br      1b
+1:
+       tst     (sp)+
+       rts     pc
+
+casepl:
+       jsr     r5,number; pl
+       mov     r0,pl
+       jsr     pc,topbot
+       rts     pc
+
+casesk:
+       jsr     r5,number; 0
+       jsr     pc,min
+       mov     r0,skip
+       rts     pc
+
+casesp:
+       jsr     pc,rbreak
+       jsr     r5,number; 0
+       jsr     r5,nlines; nline
+       rts     pc
+
+casess:
+       jsr     pc,rbreak
+       mov     $1,ls
+       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:
+       mov     $tabtab,r1
+1:
+       cmp     r1,$etabtab
+       bhis    1f
+       jsr     r5,number; 0
+       jsr     pc,min
+       dec     r0
+       ble     1f
+       movb    r0,(r1)+
+       br      1b
+1:
+       clrb    (r1)
+       rts     pc
+
+caseti:
+       jsr     pc,rbreak
+       jsr     r5,number; in
+       jsr     pc,min
+       mov     r0,un
+       rts     pc
+
+caseul:
+       jsr     r5,number; 0
+       jsr     pc,min
+       mov     r0,ul
+       rts     pc
+
+caseun:
+       jsr     r5,number; 0
+       sub     in,r0
+       neg     r0
+       jsr     pc,min
+       mov     r0,un
+       rts     pc
+
+casehx:
+       tst     hx
+       beq     1f
+       clr     hx
+       br      2f
+1:
+       inc     hx
+2:
+       jsr     pc,topbot
+       rts     pc
+
+casehe:
+       jsr     r5,headin; ehead
+       mov     ehead,ohead
+       rts     pc
+casefo:
+       jsr     r5,headin; efoot
+       mov     efoot,ofoot
+       rts     pc
+
+caseeh:
+       jsr     r5,headin; ehead
+       rts     pc
+
+caseoh:
+       jsr     r5,headin; ohead
+       rts     pc
+
+caseef:
+       jsr     r5,headin; efoot
+       rts     pc
+
+caseof:
+       jsr     r5,headin; ofoot
+       rts     pc
+
+casem1:
+       jsr     r5,number; ma1
+       jsr     pc,min
+       mov     r0,ma1
+       br      1f
+
+casem2:
+       jsr     r5,number; ma2
+       jsr     pc,min
+       mov     r0,ma2
+       br      1f
+
+casem3:
+       jsr     r5,number; ma3
+       jsr     pc,min
+       mov     r0,ma3
+       br      1f
+
+casem4:
+       jsr     r5,number; ma4
+       jsr     pc,min
+       mov     r0,ma4
+1:
+       jsr     pc,topbot
+       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     $' ,r0
+1:
+       mov     r0,tabc
+       rts     pc
+
+casehy:
+       jsr     r5,number; 0
+       mov     r0,hyf
+       rts     pc
+
+casen1:
+       jsr     pc,rbreak
+       mov     $1,numbmod
+       br      1f
+casen2:
+       jsr     pc,rbreak
+       mov     $2,numbmod
+1:
+       clr     nn
+       jsr     r5,number; 0
+       tst     r0
+       ble     1f
+       mov     r0,lnumber
+       rts     pc
+1:
+       clr     numbmod
+       rts     pc
+
+casenn:
+       jsr     r5,number; 0
+       jsr     pc,min
+       mov     r0,nn
+       rts     pc
+
+caseni:
+       jsr     r5,number; ni
+       jsr     pc,min
+       mov     r0,ni
+       rts     pc
+
+casejo:
+       jsr     r5,number; 0
+       mov     r0,jfomod
+       rts     pc
+
+casear:
+       clr     ro
+       rts     pc
+
+casero:
+       inc     ro
+       rts     pc
+
+casenx:
+       jsr     pc,skipcont
+       jsr     r5,getname; nextf
+       inc     nx
+       jsr     pc,nextfile
+       inc     nlflg
+       clr     ip
+       mov     $ilist,ilistp
+       rts     pc
+
+casepo:
+       jsr     pc,rbreak
+       jsr     r5,number; po
+       jsr     pc,min
+       mov     r0,po
+       rts     pc
+
+casede:
+       tst     ip
+       bne     5f
+       jsr     pc,skipcont
+       jsr     r5,getname; bname
+       clr     skp
+       mov     $contab,r1
+       clr     -(sp)
+1:
+       mov     (r1)+,(sp)
+       beq     2f
+       bic     $100000,(sp)
+       cmp     bname,(sp)
+       bne     3f
+2:
+       bis     $100000,bname
+       mov     nextb,(r1)
+       mov     bname,-(r1)
+       br      4f
+3:
+       cmp     (r1)+,$-1
+       bne     1b
+       inc     skp
+4:
+       tst     (r1)+
+       jsr     pc,copyb
+       tst     (sp)+
+5:
+       rts     pc
+
+caseig:
+       inc     skp
+       jsr     pc,copyb
+       rts     pc
+
+casemk:
+       jsr     pc,rbreak
+       mov     $002,r0 /stx
+       jsr     pc,putchar
+       rts     pc
+
diff --git a/usr/src/cmd/roff/roff3.s b/usr/src/cmd/roff/roff3.s
new file mode 100644 (file)
index 0000000..aeed595
--- /dev/null
@@ -0,0 +1,485 @@
+/
+/
+
+/roff3 -- runoff
+
+skipcont:
+       jsr     pc,getchar
+       mov     r0,r2
+       jsr     pc,alph2
+       beq     skipcont
+1:
+       cmp     $' ,r0
+       bne     1f
+       jsr     pc,getchar
+       br      1b
+1:
+       mov     r0,ch
+       rts     pc
+
+rbreak:
+       tst     nc
+       ble     4f
+       clrb    *linep
+       inc     totout
+       mov     ls,r0
+       dec     r0
+       jsr     r5,nlines; nline
+       tst     pl
+       beq     4f
+       cmp     nl,bl
+       bne     1f
+3:
+       jsr     pc,eject
+1:
+       tst     nl
+       bne     3f
+       mov     ma1,r0
+       jsr     r5,nlines; newline
+       bit     $1,pn
+       bne     1f
+       jsr     r5,headout; ehead
+       br      2f
+1:
+       jsr     r5,headout; ohead
+2:
+       mov     ma2,r0
+       jsr     r5,nlines; newline
+       dec     skip
+       bge     3b
+3:
+       mov     po,r0
+       jsr     pc,space
+       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:
+       jsr     pc,newline
+       clr     nwd
+       clr     ne
+       mov     in,un
+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
+       mov     $5,r0
+       add     ni,r0
+       jsr     pc,space
+       rts     pc
+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     $2,r0
+       jsr     pc,space
+       inc     lnumber
+2:
+       rts     pc
+
+
+newline:
+       mov     $'\n,r0
+       jsr     pc,putchar
+       inc     nl
+       rts     pc
+
+nline:
+       mov     nl,r0
+       beq     1f
+       cmp     r0,bl
+       beq     1f
+       jsr     pc,newline
+1:
+       rts     pc
+
+number:
+       jsr     pc,skipcont
+number1:
+       mov     r1,-(sp)
+       mov     r3,-(sp)
+       clr     r3
+       clr     -(sp)
+       clr     -(sp)
+1:
+       jsr     pc,getchar
+       cmp     r0,$'+
+       beq     2f
+       cmp     r0,$'-
+       beq     2f
+       sub     $'0,r0
+       cmp     r0,$9.
+       bhi     3f
+       inc     (sp)
+       mpy     $10.,r3
+       add     r0,r3
+       br      1b
+2:
+       mov     r0,2(sp)
+       br      1b
+3:
+       add     $'0,r0
+       mov     r0,ch
+       mov     (sp)+,r0
+       bne     1f
+       mov     $1,r3
+       mov     r3,r0
+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
+       rts     r5
+
+eject:
+       tst     pl
+       beq     1f
+       tst     nl
+       beq     1f
+       mov     pl,r0
+       sub     nl,r0
+       sub     ma4,r0
+       sub     hx,r0
+       jsr     r5,nlines; newline
+       bit     $1,pn
+       bne     2f
+       jsr     r5,headout; efoot
+       br      3f
+2:
+       jsr     r5,headout; ofoot
+3:
+       cmp     numbmod,$1
+       bne     3f
+       mov     $1,lnumber
+3:
+       mov     ma4,r0
+       jsr     r5,nlines; newline
+       clr     nl
+       inc     pn
+1:
+       cmp     pn,pto
+       ble     1f
+       jsr     pc,flush
+       jmp     place
+1:
+istop:
+       tst     stop
+       beq     2f
+       cmp     pn,pfrom
+       blo     2f
+       jsr     pc,flush
+/      mov     sp,r1
+/      sys     signal; 2; 1f
+       clr     r0
+       sys     read; garb; 1
+1:
+/      mov     r1,sp
+/      sys     signal; 2; place
+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
+1:
+       rts     pc
+
+getword:
+       mov     $word,r2
+       clr     wne
+       clr     wch
+       clr     nhyph
+       clr     hypedf
+       mov     $word,wordp
+       clr     -(sp)
+1:
+       jsr     pc,gettchar
+       cmp     r0,$'\n
+       beq     3f
+       cmp     r0,ohc
+       bne     2f
+       inc     hypedf
+       br      1b
+2:
+       cmp     $' ,r0
+       bne     2f
+       jsr     pc,storeword
+       br      1b
+2:
+       mov     r0,-(sp)
+       mov     $' ,r0
+       jsr     pc,storeword
+       tst     spaceflg
+       beq     2f
+       jsr     pc,storeword
+       clr     spaceflg
+2:
+       mov     (sp)+,r0
+2:
+       jsr     pc,storeword
+       bisb    (sp),-1(r2)     /add in hyphen
+       clr     (sp)
+       jsr     pc,gettchar
+       cmp     r0,ohc
+       bne     1f
+       inc     hypedf
+       jsr     pc,gettchar
+       mov     $200,(sp)
+1:
+       cmp     $' ,r0
+       beq     1f
+       cmp     $'\n,r0
+       bne     2b
+       cmpb    -1(r2),$'.
+       bne     1f
+       inc     spaceflg
+1:
+       add     $2,2(sp)
+1:
+       clrb    (r2)+
+3:
+       tst     (sp)+
+       mov     $word,wordp
+       tst     nc
+       bne     1f
+       jsr     pc,setnel
+1:
+       rts     pc
+
+setnel:
+       mov     $line,linep
+       mov     ll,nel
+       sub     un,nel
+       clr     ne
+       clr     fac
+       clr     fmq
+       rts     pc
+
+storeword:
+       jsr     pc,width
+       add     r1,wne
+       inc     wch
+       movb    r0,(r2)+
+       rts     pc
+
+need:
+       mov     r0,r3
+       mpy     ls,r3
+       mov     r3,r0
+need2:
+       add     nl,r0
+       cmp     r0,bl
+       ble     1f
+       jsr     pc,eject
+1:
+       rts     pc
+
+min:
+       tst     r0
+       bge     1f
+       clr     r0
+1:
+       rts     pc
+
+getname:
+       mov     r1,-(sp)
+       mov     r2,-(sp)
+       mov     (r5)+,r1
+       mov     $18.,r2
+1:
+       jsr     pc,getchar
+       cmp     r0,$041
+       blt     2f
+       cmp     r0,$0176
+       ble     4f
+2:
+       mov     r0,ch
+3:
+       clrb    (r1)+
+       mov     (sp)+,r2
+       mov     (sp)+,r1
+       rts     r5
+4:
+       movb    r0,(r1)+
+       dec     r2
+       beq     3b
+       br      1b
+
+copyb:
+       mov     (r1),r1
+       jsr     pc,flushi
+       clr     nlflg
+       mov     $1,-(sp)
+1:
+       jsr     pc,getchar
+       cmp     r0,$'\n
+       bne     2f
+       mov     $1,(sp)
+       clr     nlflg
+       br      4f
+2:
+       cmp     r0,$'.
+       bne     9f
+       cmp     (sp),$1
+       bgt     3f
+       blt     9f
+       inc     (sp)
+       br      4f
+3:
+       dec     r1
+       clr     r0
+       inc     (sp)
+       br      4f
+9:
+       clr     (sp)
+4:
+       tst     skp
+       bne     5f
+       jsr     pc,wbf
+5:
+       cmp     (sp),$3
+       bne     1b
+       tst     (sp)+
+       tst     skp
+       bne     6f
+       mov     r1,nextb
+6:
+       rts     pc
+
+popi:
+       cmp     ilistp,$ilist
+       beq     1f
+       sub     $2,ilistp
+       mov     *ilistp,ip
+1:
+       rts     pc
+
+wbf:
+       mov     r0,char
+       mov     r1,offb
+       mov     ibf,r0
+       sys     lseek;0; offb:..;0      /actually lseek
+       mov     ibf,r0
+       sys     write; char;1
+       inc     r1
+       cmp     ibf1,ofile
+       bne     1f
+       mov     $-1,ofile
+1:
+       rts     pc
+rbf:
+       mov     ip,r1
+       mov     ibf1,nfile
+       jsr     pc,rdsufb
+       tstb    r0
+       bne     2f
+       jsr     pc,popi
+       rts     pc
+2:
+       inc     ip
+       rts     pc
+
+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     $77,r1
+       cmp     r1,sufoff
+       bne     1f
+       cmp     nfile,ofile
+       beq     2f
+1:
+       mov     r1,sufoff
+       mov     nfile,ofile
+       mov     nfile,r0
+       sys     lseek;0; sufoff: -1; 0  /actually lseek
+       mov     nfile,r0
+       sys     read; sufbuf; 512.
+2:
+       mov     (sp),r0
+       bic     $!77,r0
+       movb    sufbuf(r0),r0
+       mov     (sp)+,r1
+       rts     pc
diff --git a/usr/src/cmd/roff/roff4.s b/usr/src/cmd/roff/roff4.s
new file mode 100644 (file)
index 0000000..2972597
--- /dev/null
@@ -0,0 +1,516 @@
+/
+/
+
+/ roff4 -- runoff
+
+text:
+/      inc     tottext
+       clr     ulstate
+       clr     wch
+       clr     wne
+       tst     ce
+       bne     nofill
+       tst     fi
+       beq     nofill
+       jsr     pc,getchar
+2:
+       mov     r0,ch
+       cmp     $' ,r0
+       bne     2f
+       jsr     pc,rbreak
+1:
+       jsr     pc,getchar
+       cmp     $' ,r0
+       bne     2b
+       inc     un
+       br      1b
+2:
+       cmp     r0,$'\n
+       bne     2f
+       jsr     pc,rbreak
+       clr     ch
+       jsr     pc,nline
+       br      4f
+2:
+       tst     wch
+       bne     3f
+       jsr     pc,getword
+               br 4f
+3:
+       jsr     pc,movword
+       bne     2b
+       jsr     pc,adjust
+       br      2b
+4:
+       dec     ul
+       bge     1f
+       clr     ul
+1:
+       rts     pc
+
+nofill:
+       jsr     pc,rbreak
+1:
+       jsr     pc,gettchar
+       cmp     r0,$'\n
+       beq     1f
+       jsr     pc,width
+       add     r1,ne
+       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
+       tst     numbmod
+       beq     2f
+       add     $2,un
+2:
+       clr     fac
+       clr     fmq
+       mov     $1000,nwd
+       mov     $' ,r0
+       jsr     pc,storeline
+       jsr     pc,rbreak
+       dec     ul
+       bpl     2f
+       clr     ul
+2:
+       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
+       jsr     pc,rbreak
+       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     wch,wordend
+       mov     wordp,r4
+       add     r4,wordend
+       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
+       cmp     nel,$4
+       ble     1f
+       mov     ls,r0
+       add     nl,r0
+       cmp     r0,bl
+       bgt     2f
+       mov     ls,r0
+       asl     r0
+       add     nl,r0
+       cmp     r0,bl
+       bgt     1f
+2:
+       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     $4,r3
+       cmp     r3,$word
+       blo     2f
+       movb    (r3),r2
+       bic     $!177,r2
+       jsr     pc,alph2
+       beq     3f
+       cmp     nel,$2
+       ble     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)
+       cmp     r4,$word
+       bge     4f
+       4
+4:
+       tst     (sp)+
+       sez
+       rts     pc
+
+topbot:
+       mov     pl,r0
+       bne     1f
+       clr     bl
+       rts     pc
+1:
+       sub     ma3,r0
+       sub     ma4,r0
+       sub     hx,r0
+       mov     r0,bl
+       mov     ma1,r0
+       add     ma2,r0
+       add     hx,r0
+       cmp     r0,bl
+       blt     1f
+       mov     $2,r0
+       mov     r0,ma1
+       mov     r0,ma2
+       mov     r0,ma3
+       mov     r0,ma4
+       mov     $66.,pl
+       br      topbot
+1:
+       cmp     nl,bl
+       ble     1f
+       mov     bl,nl
+1:
+       rts     pc
+
+width:
+       cmp     r0,ohc
+       beq     2f
+       tst     r0
+       beq     2f
+       cmp     r0,$0177
+       beq     2f
+       cmp     r0,$010
+       bne     1f
+       mov     $-1,r1
+       rts     pc
+1:
+       cmp     $' ,r0
+       bgt     2f
+       mov     $1,r1
+       rts     pc
+2:
+       clr     r1
+       rts     pc
+
+headin:
+       jsr     pc,skipcont
+       mov     nextb,r1
+       mov     r1,*(r5)+
+       jsr     pc,gettchar
+       cmp     r0,$'\n
+       beq     2f
+       mov     r0,r2
+1:
+       jsr     pc,gettchar
+       cmp     r0,$'\n
+       beq     2f
+       cmp     r0,r2
+       bne     3f
+       clr     r0
+3:
+       jsr     pc,wbf
+       br      1b
+2:
+       clr     r0
+       jsr     pc,wbf
+       mov     r1,nextb
+       mov     ll,llh
+       rts     r5
+
+headout:
+       tst     hx
+       bne     0f
+       tst     (r5)+
+       rts     r5
+0:
+       clr     -(sp)
+       mov     *(r5),r2
+       mov     ibf1,nfile
+       jsr     r5,headseg; width
+       mov     r0,-(sp)
+       jsr     r5,headseg; width
+       mov     r0,-(sp)
+       jsr     r5,headseg; width
+       mov     r0,-(sp)
+       mov     po,r0
+       jsr     pc,space
+       tst     numbmod
+       beq     1f
+       mov     $5,r0
+       add     ni,r0
+       mov     r0,6(sp)
+1:
+       mov     *(r5)+,r2
+       jsr     r5,headseg; putchar
+       mov     llh,r0
+       add     6(sp),r0
+       sub     2(sp),r0
+       asr     r0
+       sub     4(sp),r0
+       bge     1f
+       clr     r0
+1:
+       mov     r0,-(sp)
+       jsr     pc,space
+       jsr     r5,headseg; putchar
+       mov     llh,r0
+       sub     (sp)+,r0
+       sub     (sp)+,r0
+       sub     (sp)+,r0
+       sub     (sp)+,r0
+       add     (sp)+,r0
+       jsr     pc,space
+       jsr     r5,headseg; putchar
+       jsr     pc,newline
+       rts     r5
+
+headseg:
+       clr     -(sp)
+1:
+       mov     r1,-(sp)
+       mov     r2,r1
+       inc     r2
+       jsr     pc,rdsufb
+       mov     (sp)+,r1
+       tstb    r0
+       beq     1f
+       cmp     r0,$'%
+       beq     2f
+       jsr     pc,*(r5)
+       add     r1,(sp)
+       br      1b
+2:
+       mov     pn,r0
+       clr     r1
+       tst     ro
+       beq     2f
+       mov     $ones,onesp
+       mov     $fives,fivesp
+       jsr     pc,roman
+       add     r1,(sp)
+       br      1b
+2:
+       jsr     pc,decml
+       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,decml
+       mov     r1,2(sp)
+1:
+       mov     (sp)+,r0
+       add     $'0,r0
+       jsr     pc,*(r5)
+       add     (sp)+,r1
+       rts     pc
+
+roman:
+       mov     r2,-(sp)
+       mov     r3,-(sp)
+       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,roman
+       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
+
diff --git a/usr/src/cmd/roff/roff5.s b/usr/src/cmd/roff/roff5.s
new file mode 100644 (file)
index 0000000..790a990
--- /dev/null
@@ -0,0 +1,294 @@
+/
+/
+
+/ 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
+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:
+       jsr     r5,suffix
+       jsr     r5,digram
+3:
+       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:
+       cmp     r2,$'a
+       beq     1f
+       cmp     r2,$'e
+       beq     1f
+       cmp     r2,$'i
+       beq     1f
+       cmp     r2,$'o
+       beq     1f
+       cmp     r2,$'u
+       beq     1f
+       cmp     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
+       jsr     r5,dilook; 0:xxh
+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)
+       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
diff --git a/usr/src/cmd/roff/roff7.s b/usr/src/cmd/roff/roff7.s
new file mode 100644 (file)
index 0000000..8b52a04
--- /dev/null
@@ -0,0 +1,121 @@
+/
+/
+
+/ hyp4 -- digram tables
+
+bxh:
+.byte 060,000,040,000,040,000,000,040,000,000,040,000,040
+
+hxx:
+.byte 006,042,041,123,021,024,063,042,002,043,021,001,022
+.byte 140,000,200,003,260,006,000,160,007,000,140,000,320
+.byte 220,000,160,005,240,010,000,100,006,000,200,000,320
+.byte 240,000,120,003,140,000,000,240,010,000,220,000,160
+.byte 042,023,041,040,040,022,043,041,030,064,021,000,041
+.byte 100,000,140,000,220,006,000,140,003,000,200,000,000
+.byte 200,000,120,002,220,010,000,160,006,000,140,000,320
+.byte 020,000,020,000,020,000,000,020,000,000,020,000,000
+.byte 043,163,065,044,022,043,104,042,061,146,061,000,007
+.byte 100,000,140,000,040,000,000,100,000,000,120,000,000
+.byte 140,000,040,011,060,004,001,120,003,000,140,000,040
+.byte 200,000,100,000,140,000,000,140,000,000,140,000,240
+.byte 200,000,140,000,160,000,000,220,000,000,140,000,240
+.byte 200,000,140,000,160,000,000,220,000,000,060,000,240
+.byte 021,043,041,121,040,023,042,003,142,042,061,001,022
+.byte 120,000,140,010,140,010,000,140,002,000,120,000,120
+.byte 000,000,000,000,360,000,000,000,000,000,160,000,000
+.byte 100,000,040,005,120,000,000,100,000,000,060,000,140
+.byte 140,040,100,001,240,041,000,242,000,002,140,000,100
+.byte 240,000,120,002,200,000,000,320,007,000,240,000,340
+.byte 101,021,041,020,040,005,042,121,002,021,201,000,020
+.byte 160,000,100,000,140,000,000,160,006,000,220,000,140
+.byte 140,000,020,001,020,000,000,100,001,000,300,000,000
+.byte 000,000,000,000,000,000,000,000,000,000,000,000,000
+.byte 106,041,040,147,040,000,063,041,001,102,160,002,002
+.byte 300,000,040,017,140,017,000,240,000,000,140,000,120
+
+bxxh:
+.byte 005,150,153,062,062,246,152,127,146,203,310,017,206
+.byte 100,000,120,000,140,000,000,100,000,000,120,000,060
+.byte 100,000,040,000,060,000,000,060,000,000,220,000,040
+.byte 100,000,120,000,200,000,000,100,000,000,140,000,060
+.byte 043,142,046,140,062,147,210,131,046,106,246,017,111
+.byte 060,000,020,000,060,000,000,040,000,000,100,000,000
+.byte 060,000,040,000,040,000,000,040,000,000,100,000,040
+.byte 100,000,100,000,100,000,000,040,000,000,100,000,140
+.byte 066,045,145,140,000,070,377,030,130,103,003,017,006
+.byte 040,000,040,000,020,000,000,040,000,000,100,000,000
+.byte 200,000,020,000,140,000,000,120,000,000,120,000,040
+.byte 120,000,040,000,060,000,000,060,000,000,160,000,040
+.byte 120,000,040,000,120,000,000,040,000,000,160,000,040
+.byte 120,000,020,000,140,000,000,120,000,000,140,000,040
+.byte 051,126,150,140,060,210,146,006,006,165,003,017,244
+.byte 120,000,040,000,160,000,000,140,000,000,060,000,140
+.byte 000,000,000,000,000,000,000,000,000,000,000,000,000
+.byte 140,000,140,000,060,000,000,100,000,000,140,000,020
+.byte 120,000,020,000,060,000,000,060,000,000,060,000,040
+.byte 140,000,020,000,100,000,000,140,000,000,140,000,020
+.byte 070,125,051,162,120,105,126,104,006,044,000,017,052
+.byte 140,000,020,000,140,000,000,060,000,000,060,000,040
+.byte 020,000,000,000,020,000,000,000,000,000,000,000,060
+.byte 140,000,160,000,200,000,000,140,000,000,000,000,240
+.byte 065,042,060,200,000,210,222,146,006,204,220,012,003
+.byte 240,000,020,000,120,000,000,200,000,000,200,000,240
+
+xhx:
+.byte 032,146,042,107,076,102,042,146,202,050,006,000,051
+.byte 036,377,057,013,057,366,377,057,001,377,057,000,040
+.byte 037,377,020,000,100,022,377,057,362,116,100,000,017
+.byte 057,377,057,031,137,363,377,037,362,270,077,000,117
+.byte 074,142,012,236,076,125,063,165,341,046,047,000,024
+.byte 020,017,075,377,040,001,377,017,001,204,020,000,040
+.byte 057,017,057,340,140,362,314,117,003,302,100,000,057
+.byte 057,357,077,017,100,366,314,057,342,346,037,000,060
+.byte 252,145,072,157,377,165,063,066,164,050,363,000,362
+.byte 000,000,020,000,020,000,000,017,000,000,020,000,000
+.byte 117,017,237,377,200,354,125,110,004,257,000,000,300
+.byte 057,367,054,357,157,216,314,114,217,353,053,000,057
+.byte 077,213,077,077,177,317,377,114,377,352,077,000,076
+.byte 077,213,077,077,157,177,377,054,377,352,117,000,075
+.byte 125,230,065,216,057,066,063,047,345,126,011,000,033
+.byte 057,377,051,360,120,361,273,056,001,256,057,000,060
+.byte 000,000,000,000,000,000,000,000,000,000,000,000,000
+.byte 076,310,056,310,137,174,273,055,335,266,033,000,155
+.byte 077,157,057,360,057,063,042,024,077,206,020,000,040
+.byte 057,037,077,360,100,365,377,037,362,176,050,000,026
+.byte 167,146,042,112,077,110,062,254,366,052,377,000,163
+.byte 060,000,040,000,120,000,377,060,012,000,037,000,257
+.byte 037,232,157,361,040,003,125,010,001,256,000,000,340
+.byte 377,377,377,377,377,377,377,377,377,377,377,017,277
+.byte 253,315,257,216,377,206,146,306,371,126,232,000,004
+.byte 057,012,100,360,160,360,000,040,000,017,157,000,176
+
+xxh:
+.byte 045,150,154,162,042,246,210,147,152,103,230,017,206
+.byte 100,000,040,000,140,000,000,100,000,021,120,017,060
+.byte 100,000,040,002,140,320,000,060,000,001,220,017,040
+.byte 100,001,120,001,241,000,000,100,000,020,140,017,060
+.byte 023,162,046,142,022,207,210,131,052,106,250,017,110
+.byte 060,000,042,000,160,000,000,040,000,212,100,017,000
+.byte 140,000,040,002,140,000,000,120,000,040,120,017,040
+.byte 100,000,100,000,140,001,021,140,000,046,100,017,140
+.byte 066,045,025,201,020,130,146,030,130,103,025,017,006
+.byte 100,000,040,000,020,000,000,040,000,000,200,017,000
+.byte 200,000,020,001,140,000,000,140,000,000,120,017,040
+.byte 120,026,042,020,140,161,042,143,000,022,162,017,040
+.byte 121,042,060,020,140,200,000,123,000,021,220,017,041
+.byte 121,042,060,120,140,200,000,123,000,021,160,017,041
+.byte 051,126,150,141,060,210,146,066,026,165,026,017,247
+.byte 120,000,040,003,160,000,000,140,000,021,100,017,140
+.byte 000,000,000,000,200,000,000,000,000,000,000,017,000
+.byte 141,023,122,040,160,143,042,142,000,047,143,017,020
+.byte 120,000,040,006,140,060,000,141,000,026,100,017,040
+.byte 140,000,020,007,100,000,000,140,000,001,140,017,020
+.byte 110,125,051,162,120,125,127,104,006,104,000,017,052
+.byte 140,000,040,000,160,000,000,140,000,000,060,017,000
+.byte 040,005,020,000,040,313,231,030,000,140,000,017,056
+.byte 140,000,160,000,200,000,000,140,000,000,000,017,240
+.byte 065,042,060,040,000,206,231,146,006,224,220,017,004
+.byte 240,000,020,000,140,000,000,220,000,000,200,017,141
+
+.even
diff --git a/usr/src/cmd/roff/roff8.s b/usr/src/cmd/roff/roff8.s
new file mode 100644 (file)
index 0000000..0a94bdd
--- /dev/null
@@ -0,0 +1,128 @@
+/
+/
+
+/ roff5 -- runoff
+
+slow:  1
+pto:   9999.
+po:    0
+ls:    1
+ls1:   1
+pn:    1
+ma1:   2
+ma2:   2
+ma3:   1
+ma4:   3
+ll:    65.
+llh:   65.
+hx:    1
+pl:    66.
+ad:    1
+fi:    1
+cc:    '.
+ohc:   200
+hyf:   1
+hypedf:        0
+obufp: obuf
+thresh:        240
+tabc:  ' 
+tabtab:
+       .byte 8.,16.,24.,32.,40.,48.,56.,64.,72.,80.
+       .byte 88.,96.,104.,112.,120.,128.,136.,144.,152.,160.
+       .byte 0,0,0,0,0,0,0,0,0,0
+etabtab: 0
+suffil:
+       </usr/lib/suftab\0>
+ones:
+       <ixcm>
+fives:
+       <vld>
+bfn:   </tmp/rtma\0>
+       .even
+ofile: -1
+nextb: 4
+ilistp:        ilist
+
+.bss
+old:   .=.+2
+stop:  .=.+2
+garb:  .=.+2
+bname:
+nextf: .=.+20.
+nx:    .=.+2
+ibf:   .=.+2
+ibf1:  .=.+2
+skp:   .=.+2
+ip:    .=.+2
+ilist: .=.+8.
+iliste:        .=.+2
+column:        .=.+2
+ocol:  .=.+2
+nspace:        .=.+2
+fac:   .=.+2
+fmq:   .=.+2
+nhl:   .=.+2
+nel:   .=.+2
+jfomod:        .=.+2
+wordp: .=.+2
+nlflg: .=.+2
+/tottext: .=.+2
+/totcon: .=.+2
+spaceflg: .=.+2
+ch:    .=.+2
+linep: .=.+2
+undflg:        .=.+2
+wordend:       .=.+2
+maxdig:        .=.+2
+maxloc:        .=.+2
+totout:        .=.+2
+hstart:        .=.+2
+nhstart: .=.+2
+nhyph: .=.+2
+argc:  .=.+2
+argp:  .=.+2
+ibufp: .=.+2
+eibuf: .=.+2
+wne:   .=.+2
+nl:    .=.+2
+bl:    .=.+2
+nc:    .=.+2
+ne:    .=.+2
+lnumber:       .=.+2
+numbmod:       .=.+2
+skip:  .=.+2
+nwd:   .=.+2
+ulstate:       .=.+2
+ulc:   .=.+2
+bsc:   .=.+2
+nsp:   .=.+2
+nn:    .=.+2
+ro:    .=.+2
+pfrom: .=.+2
+ni:    .=.+2
+onesp: .=.+2
+fivesp:        .=.+2
+ul:    .=.+2
+ce:    .=.+2
+in:    .=.+2
+un:    .=.+2
+wch:   .=.+2
+suff:  .=.+2
+sufb:  .=.+20.
+sufbuf:        .=.+512.
+suftab:        .=.+[2*26.]
+ifile: .=.+2
+char:  .=.+2
+nfile: .=.+2
+ehead: .=.+2
+ohead: .=.+2
+efoot: .=.+2
+ofoot: .=.+2
+trtab: .=.+128.
+word:  .=.+200.
+
+stbuf:
+linsiz = 500.
+line:  .=.+linsiz
+end:
+