home *** CD-ROM | disk | FTP | other *** search
/ minnie.tuhs.org / unixen.tar / unixen / PDP-11 / Trees / V7 / usr / src / cmd / roff / roff1.s < prev    next >
Encoding:
Text File  |  1979-01-10  |  6.4 KB  |  571 lines

  1. /
  2. /
  3.  
  4. / roff1 -- text formatter
  5.  
  6.     .globl _ttyname
  7.     nop = 000240
  8.     signal = 48.
  9.  
  10. ibuf: /init code in ibuf+obuf
  11.     cmp    sp,$end
  12.     bhi    1f
  13.     jsr    r5,string; emes1
  14.     sys    exit
  15. 1:
  16.     clr    r0
  17.     jsr    pc,mesg
  18.     sys    signal; 1; place
  19.     sys    signal; 2; place
  20.     jsr    pc,makebf
  21.     sys    open; suffil; 0
  22.     bes    1f
  23.     mov    r0,suff
  24.     sys    lseek; 0;20; 0    /actually lseek
  25.     bes    1f
  26.     mov    suff,r0
  27.     sys    read; suftab; 2*26.
  28. 1:
  29.     clr    r0
  30.     mov    (sp)+,argc
  31.     dec    argc
  32.     bne    1f
  33.     jmp    place
  34. 1:
  35.     tst    (sp)+
  36.     mov    (sp),r4
  37.     cmpb    (r4)+,$'+
  38.     bne    2f
  39.     jsr    r5,pnum; pfrom
  40.     br    3f
  41. 2:
  42.     cmpb    -1(r4),$'-
  43.     bne    2f
  44.     cmpb    (r4),$'s
  45.     bne    0f
  46.     inc    stop
  47.     br    3f
  48. 0:
  49.     cmpb    (r4),$'h
  50.     bne    0f
  51.     clr    slow
  52.     br    3f
  53. 0:
  54.     jsr    r5,pnum; pto
  55. 3:
  56.     dec    argc
  57.     bgt    1b
  58. 2:
  59.     mov    $nop,get1a
  60.     mov    $ibuf,ibufp
  61.     mov    $ibuf,eibuf
  62.     mov    sp,argp
  63.     jsr    pc,topbot
  64.     clr    r0
  65. 1:
  66.     movb    r0,trtab(r0)
  67.     inc    r0
  68.     cmp    r0,$128.
  69.     bne    1b
  70.     jsr    pc,rbreak
  71.     jsr    pc,istop
  72.     jmp    loop
  73. makebf:
  74.     sys    stat; bfn; stbuf
  75.     bec    2f
  76.     sys    creat; bfn; 400
  77.     bec    1f
  78. 2:
  79.     incb    bfn+8
  80.     cmpb    bfn+8,$'z
  81.     blos    makebf
  82.     jmp    place
  83. 1:
  84.     mov    r0,ibf
  85.     sys    write; sufbuf;128.
  86.     sys    open; bfn;0
  87.     mov    r0,ibf1
  88.     rts    pc
  89.  
  90. string:
  91.     mov    (r5)+,r1
  92.     mov    r1,r2
  93.     mov    r1,0f
  94. 1:
  95.     tstb    (r1)+
  96.     bne    1b
  97.     sub    r2,r1
  98.     mov    r1,1f
  99.     mov    $1,r0
  100.     sys    write; 0:..; 1:..
  101.     rts    r5
  102.  
  103. emes1: <Too many files.\n\0>
  104. xxx:
  105. .even
  106. obuf=ibuf+512.
  107. .=ibuf+1024.
  108. loop:
  109.     clr    nlflg
  110.     jsr    pc,getchar
  111.     cmpb    r0,cc
  112.     beq    2f
  113.     movb    r0,ch
  114.     jsr    pc,text
  115.     br    loop
  116. 2:
  117.     jsr    pc,control
  118.     jsr    pc,flushi
  119.     br    loop
  120.  
  121. mesg:
  122.     tst    r0
  123.     bne    setsame
  124.     clr    -(sp)
  125.     jsr    pc,_ttyname
  126.     tst    (sp)+
  127.     mov    r0,9f
  128.     mov    r0,8f
  129.     mov    r0,7f
  130.     sys    stat; 9:..; stbuf
  131.     mov    stbuf+4,0f
  132.     mov    0f,1f
  133.     bic    $22,0f
  134.     sys    chmod; 8:..; 0:..
  135.     rts    pc
  136. setsame:
  137.     sys    chmod; 7:..; 1:..
  138.     rts    pc
  139.  
  140. pnum:
  141.     mov    r4,ibufp
  142.     mov    $37777,eibuf
  143.     jsr    r5,number1; 0
  144.     mov    r0,*(r5)+
  145.     clr    ch
  146.     rts    r5
  147.  
  148. flushi:
  149.     clr    ch
  150.     tst    nlflg
  151.     bne    1f
  152.     jsr    pc,getchar
  153.     br    flushi
  154. 1:
  155.     rts    pc
  156.  
  157. gettchar:
  158.     tst    ul
  159.     ble    getchar
  160.     tst    ulstate
  161.     beq    3f
  162.     tst    bsc
  163.     bgt    1f
  164.     tst    ulc
  165.     bgt    2f
  166.     clr    ulstate
  167.     br    3f
  168. 1:
  169.     dec    bsc
  170.     mov    $010,r0
  171.     rts    pc
  172. 2:
  173.     dec    ulc
  174.     mov    $'_,r0
  175.     rts    pc
  176. 3:
  177.     jsr    pc,getchar
  178.     cmp    r0,$'0
  179.     blt    1f
  180.     cmp    r0,$'9
  181.     ble    2f
  182.     cmp    r0,$'A
  183.     blt    1f
  184.     cmp    r0,$'Z
  185.     ble    2f
  186.     cmp    r0,$'a
  187.     blt    1f
  188.     cmp    r0,$'z
  189.     ble    2f
  190. 1:
  191.     tst    ulc
  192.     bgt    3f
  193.     rts    pc
  194. 3:
  195.     mov    $1,ulstate
  196.     mov    r0,ch
  197.     br    gettchar
  198. 2:
  199.     inc    bsc
  200.     inc    ulc
  201.     rts    pc
  202.  
  203. getchar:
  204.     mov    ch,r0
  205.     beq    1f
  206.     clr    ch
  207.     rts    pc
  208. 1:
  209.     tst    nlflg
  210.     beq    1f
  211.     mov    $'\n,r0
  212.     rts    pc
  213. 1:
  214.     jsr    pc,get1
  215.     cmp    r0,$'\\
  216.     bne    2f
  217.     jsr    pc,get1
  218.     jsr    r5,switch; esctab
  219.     br    3f
  220. 2:
  221.     cmp    r0,$033  /prefix
  222.     bne    3f
  223.     jsr    pc,get1
  224.     jsr    r5,switch; pfxtab
  225. 3:
  226.     cmp    r0,$'\n
  227.     bne    3f
  228.     inc    nlflg
  229.     clr    column
  230. 3:
  231.     mov    r1,-(sp)
  232.     jsr    pc,width
  233.     add    r1,column
  234.     mov    (sp)+,r1
  235.     rts    pc
  236.  
  237. esctab:
  238.    .byte 'd, 032  /hlf (down)
  239.    .byte 'u, 035  /hlr (up)
  240.    .byte 'r, 036  /flr (reverse)
  241.    .byte 'x, 016  /SO (extra chars)
  242.    .byte 'y, 017  /SI (normal characters)
  243.    .byte 'l, 0177 /delete
  244.    .byte 't, 011  /hor tab
  245.    .byte 'a, 0100 /at sign
  246.    .byte 'n, 043  /number sign
  247.    .byte '\\, 134 /backslash
  248.    .byte 0, 0
  249.  
  250. pfxtab:
  251.    .byte '7, 036  /flr
  252.    .byte '8, 035  /hlr
  253.    .byte '9, 032  /hlf
  254.    .byte '4, 030  /brs
  255.    .byte '3, 031  /rrs
  256.    .byte '1, 026  /set hor tabs
  257.    .byte '2, 027  /clr hor tabs
  258.    .byte 0,0
  259. pfxtab1:
  260.  
  261. switch:
  262.     mov    r1,-(sp)
  263.     mov    (r5)+,r1
  264. 1:
  265.     cmpb    (r1)+,r0
  266.     beq    1f
  267.     tstb    (r1)+
  268.     bne    1b
  269.     cmp    r1,$pfxtab
  270.     ble    0f
  271.     cmp    r1,$pfxtab1
  272.     bgt    0f
  273.     mov    $037,r0
  274. 0:
  275.     mov    (sp)+,r1
  276.     rts    r5
  277. 1:
  278.     movb    (r1)+,r0
  279.     mov    (sp)+,r1
  280.     rts    r5
  281.  
  282. get1:
  283.     tst    nspace
  284.     ble    1f
  285.     dec    nspace
  286.     mov    tabc,r0
  287.     rts    pc
  288. 1:
  289.     mov    r1,-(sp)
  290. 4:
  291.     tst    ip
  292.     beq    5f
  293.     jsr    pc,rbf
  294.     br    6f
  295. 5:
  296.     tst    nx
  297.     bne    0f
  298.     mov    ibufp,r1
  299.     cmp    r1,eibuf
  300.     bne    3f
  301. 0:
  302.     mov    ifile,r0
  303.     bne    2f
  304. 1:
  305.     jsr    pc,nextfile
  306. 2:
  307.     clr    nx
  308.     sys    read; ibuf; 512.
  309.     bes    done
  310.     tst    r0
  311.     beq    1b
  312.     mov    $ibuf,r1
  313.     add    r1,r0
  314.     mov    r0,eibuf
  315. 3:
  316.     movb    (r1)+,r0
  317.     mov    r1,ibufp
  318. 1:
  319.     cmp    r0,$011    /tab
  320.     bne    6f
  321.     mov    (sp)+,r1
  322.     mov    $tabtab,r0
  323.     inc    nspace
  324. 1:
  325.     tstb    (r0)
  326.     beq    get1
  327.     cmpb    column,(r0)+
  328.     bge    1b
  329.     movb    -(r0),nspace
  330.     sub    column,nspace
  331.     br    get1
  332. 6:
  333. get1a:    br    7f
  334.     tst    r0
  335.     beq    4b
  336. 7:
  337.     mov    (sp)+,r1
  338.     rts    pc
  339.  
  340. nextfile:
  341.     mov    ifile,r0
  342.     beq    1f
  343.     sys    close
  344. 1:
  345.     tst    nx
  346.     beq    2f
  347.     mov    $nextf,0f
  348.     br    3f
  349. 2:
  350.     dec    argc
  351.     blt    done
  352.     mov    *argp,0f
  353.     add    $2,argp
  354. 3:
  355.     sys    open; 0:..; 0
  356.     bes    done
  357.     mov    r0,ifile
  358.     rts    pc
  359.  
  360. done:
  361.     jsr    pc,rbreak
  362.     jsr    pc,eject
  363.     jsr    pc,flush
  364. place:
  365.     sys    signal; 2; 1
  366.     mov    $1,r0
  367.     jsr    pc,mesg
  368.     sys    unlink; bfn
  369.     sys    exit
  370.  
  371.     rts    pc
  372.  
  373. putchar:
  374.     cmp    pn,pfrom
  375.     blt    2f
  376.     clr    pfrom
  377.     bic    $!177,r0
  378.     beq    2f
  379.     movb    trtab(r0),r0
  380.     cmp    r0,$' 
  381.     bne    1f
  382.     inc    nsp
  383. 2:
  384.     rts    pc
  385. 1:
  386.     cmp    r0,$'\n
  387.     bne    1f
  388.     clr    nsp
  389.     clr    ocol
  390.     br    2f
  391. 1:
  392.     tst    nsp
  393.     beq    2f
  394.     tst    slow
  395.     bne    4f
  396.     jsr    pc,dsp
  397.     cmp    nsp,r1
  398.     blt    4f
  399.     mov    $011,3f+2
  400.     cmp    r1,$1
  401.     bgt    8f
  402.     mov    $040,3f+2
  403.     dec    nsp
  404.     br    9f
  405. 8:
  406.     sub    r1,nsp
  407. 9:
  408.     mov    r0,-(sp)
  409. 3:
  410.     mov    $011,r0
  411.     jsr    pc,pchar1
  412.     mov    (sp)+,r0
  413.     br    1b
  414. 4:
  415.     mov    r0,-(sp)
  416.     mov    $' ,r0
  417.     jsr    pc,pchar1
  418.     mov    (sp)+,r0
  419.     dec    nsp
  420.     bne    4b
  421. 2:
  422.     cmp    r0,$026
  423.     blt    2f
  424.     cmp    r0,$037
  425.     beq    3f
  426.     bgt    2f
  427.     mov    r0,-(sp)
  428.     jsr    r5, switch; unpfx
  429.     cmp    (sp)+,r0
  430.     beq    2f
  431.     mov    r0,-(sp)
  432.     mov    $033,r0  /prefix
  433.     jsr    pc,pchar1
  434.     dec    ocol
  435.     mov    (sp)+,r0
  436. 2:
  437. pchar1:
  438.     cmp    r0,$011
  439.     bne    1f
  440.     jsr    pc,dsp
  441.     br    2f
  442. 1:
  443.     jsr    pc,width
  444. 2:
  445.     add    r1,ocol
  446.     movb    r0,*obufp
  447.     inc    obufp
  448.     cmp    obufp,$obuf+128.
  449.     beq    flush
  450. 3:
  451.     rts    pc
  452.  
  453. dsp:
  454.     clr    r1
  455. 1:
  456.     add    $8.,r1
  457.     cmp    ocol,r1
  458.     bgt    1b
  459.     sub    ocol,r1
  460.     bne    2f
  461.     mov    $8.,r1
  462. 2:
  463.     rts    pc
  464.  
  465.  
  466. unpfx:
  467.    .byte 032, '9
  468.    .byte 035, '8
  469.    .byte 036, '7
  470.    .byte 031, '3
  471.    .byte 030, '4
  472.    .byte 026, '1
  473.    .byte 027, '2
  474.    .byte 0,0
  475.  
  476. flush:
  477.     mov    obufp,r0
  478.     sub    $obuf,r0
  479.     mov    r0,0f
  480.     mov    $1,r0
  481.     sys    write; obuf; 0:0
  482.     mov    $obuf,obufp
  483.     rts    pc
  484.  
  485. control:
  486.     jsr    pc,getchar
  487.     mov    r0,-(sp)
  488.     jsr    pc,getchar
  489.     swab    r0
  490.     bis    (sp),r0
  491.     mov    $contab,r1
  492. 1:
  493.     mov    (r1)+,(sp)
  494.     bic    $100000,(sp)
  495.     cmp    r0,(sp)
  496.     bne    4f
  497.     mov    (r1),(sp)
  498.     tst    -(r1)
  499.     bpl    3f
  500.     jsr    pc,flushi
  501.     cmp    ilistp,$iliste
  502.     bgt    5f
  503.     mov    ip,*ilistp
  504.     add    $2,ilistp
  505.     mov    (sp),ip
  506.     br    5f
  507. 3:
  508.     jmp    *(sp)+
  509. 4:
  510.     cmp    (r1)+,$-1
  511.     bne    1b
  512. 5:
  513.     tst    (sp)+
  514.     rts    pc
  515.  
  516. contab:
  517.    <ad>; casead
  518.    <bp>; casebp
  519.    <br>; casebr
  520.    <cc>; casecc
  521.    <ce>; casece
  522.    <ds>; caseds
  523.    <fi>; casefi
  524.    <in>; casein
  525.    <ix>; caseix
  526.    <li>; caseli
  527.    <ll>; casell
  528.    <ls>; casels
  529.    <na>; casena
  530.    <ne>; casene
  531.    <nf>; casenf
  532.    <pa>; casepa
  533.    <bl>; casebl
  534.    <pl>; casepl
  535.    <sk>; casesk
  536.    <sp>; casesp
  537.    <ss>; casess
  538.    <ta>; caseta
  539.    <ti>; caseti
  540.    <tr>; casetr
  541.    <ul>; caseul
  542.    <un>; caseun
  543.    <he>; casehe
  544.    <hx>; casehx
  545.    <fo>; casefo
  546.    <eh>; caseeh
  547.    <oh>; caseoh
  548.    <ef>; caseef
  549.    <of>; caseof
  550.    <m1>; casem1
  551.    <m2>; casem2
  552.    <m3>; casem3
  553.    <m4>; casem4
  554.    <hc>; casehc
  555.    <hy>; casehy
  556.    <n1>; casen1
  557.    <n2>; casen2
  558.    <nn>; casenn
  559.    <ni>; caseni
  560.    <jo>; casejo
  561.    <ar>; casear
  562.    <ro>; casero
  563.    <nx>; casenx
  564.    <po>; casepo
  565.    <de>; casede
  566.    <ig>; caseig
  567.    <tc>; casetc
  568.    <mk>; casemk
  569. bnames: .=.+100.
  570.     -1; -1
  571.