home *** CD-ROM | disk | FTP | other *** search
/ minnie.tuhs.org / unixen.tar / unixen / PDP-11 / Trees / V6 / usr / source / s1 / fed2.s < prev    next >
Encoding:
Text File  |  1975-05-13  |  5.6 KB  |  534 lines

  1. /
  2. /
  3. ed:
  4.     mov    (sp)+,r3
  5.     ble    error
  6. econ:
  7.     sys    stat; ftemp; buffer
  8.     bec    2f
  9.     sys    creat; ftemp; 666
  10.     mov    r0,tmpw
  11.     sys    open; ftemp; 0
  12.     mov    r0,tmpr
  13.     br    1f
  14. 2:
  15.     cmpb    $'z,ftemp+9.
  16.     bne    2f
  17.     mov    $1,r0
  18.     sys    write; erm; 23.
  19.     jmp    loop
  20. 2:
  21.     incb    ftemp+9.
  22.     br    econ
  23. 1:
  24.     mov    (sp),r0
  25.     jsr    pc,getspq
  26.     bes    3f
  27.     mov    r0,r4
  28.     mov    r2,r1
  29.     jsr    pc,rewind
  30.     mov    $buffer,r2
  31. 1:
  32.     jsr    pc,getchar
  33.     bes    1f
  34.     movb    r0,(r2)+
  35.     br    1b
  36. 1:
  37.     movb    $'\n,(r2)+
  38.     jsr    pc,output
  39.     mov    r4,r1
  40.     jsr    pc,rewind
  41. 2:
  42.     mov    $buffer,r2
  43. 1:
  44.     jsr    pc,getchar
  45.     bes    1f
  46.     movb    r0,(r2)+
  47.     cmp    r2,$bufend
  48.     blo    1b
  49.     mov    tmpw,r0
  50.     sys    write; buffer; 512.
  51.     br    2b
  52. 1:
  53.     sub    $buffer,r2
  54.     beq    4f
  55.     mov    r2,0f
  56.     mov    tmpw,r0
  57.     sys    write; buffer; 0:..
  58. 4:
  59.     tst    iflag
  60.     beq    1f
  61.     mov    tmpw,r0
  62.     sys    close
  63.     mov    tmpr,r0
  64.     sys    close
  65.     sys    unlink; ftemp
  66.     jmp    loop
  67. 1:
  68.     mov    tmpw,r0
  69.     sys    close
  70.     sys    fork
  71.     br    5f
  72.     mov    r1,-(sp)
  73.     sys    wait
  74.     sys    signal; 2; inter
  75.     mov    (sp)+,r1
  76.     mov    a(r1),w(r1)
  77. 2:
  78.     mov    tmpr,r0
  79.     sys    read; buffer; 512.
  80.     tst    r0
  81.     beq    2f
  82.     add    $buffer,r0
  83.     mov    r0,bufend
  84.     mov    $buffer,r2
  85. 1:
  86.     movb    (r2)+,r0
  87.     jsr    pc,putchar
  88.     cmp    r2,bufend
  89.     blo    1b
  90.     br    2b
  91. 2:
  92.     mov    tmpr,r0
  93.     sys    close
  94.     sys    unlink; ftemp
  95.     tst    iflag
  96.     beq    1f
  97.     jmp    loop
  98. 1:
  99.     tst    qflag
  100.     bgt    1f
  101.     tst    (sp)+
  102.     dec    r3
  103.     bgt    1f
  104.     jmp    loop
  105. 1:    jmp    econ
  106.     jmp    loop
  107. 3:
  108.     mov    (sp),r2
  109.     mov    $2,r0
  110.     jsr    pc,allocate
  111. 1:
  112.     tstb    (r2)
  113.     beq    1f
  114.     movb    (r2)+,r0
  115.     jsr    pc,putchar
  116.     br    1b
  117. 1:
  118.     mov    r1,r0
  119.     mov    asmem,r1
  120.     jsr    pc,putword
  121.     mov    $2,r0
  122.     jsr    pc,allocate
  123.     mov    r1,r0
  124.     mov    asmem,r1
  125.     jsr    pc,putword
  126.     mov    r0,r1
  127.     br    4b
  128. 5:
  129.     mov    $2,r0
  130. 1:
  131.     sys    close
  132.     inc    r0
  133.     cmp    r0,$10.
  134.     blo    1b
  135.     sys    exec; edd; eda
  136.     sys    exit
  137. eda:    edd; ftemp; 0
  138. edd:    </bin/ed\0>
  139.     .even
  140. ftemp:    </tmp/ftmpa\0>
  141. erm:    <Cannot open temp. file\n>
  142.     .even
  143. tmpw:    .=.+2
  144. tmpr:    .=.+2
  145. /
  146. /    remove a 'file' from memory
  147. /
  148. remove:
  149.     mov    (sp)+,r3
  150.     bgt    5f
  151.     mov    $1,vflag
  152.     mov    asmem,r1
  153.     jsr    pc,rewind
  154.     mov    r(r1),-(sp)
  155. 4:
  156.     tst    iflag
  157.     beq    1f
  158.     jmp    loop
  159. 1:
  160.     jsr    pc,getword
  161.     bes    4f
  162.     mov    r0,r2
  163.     jsr    pc,ask
  164.     bec    1f
  165.     mov    r(r1),(sp)
  166.     br    4b
  167. 1:
  168.     jsr    pc,getword
  169.     br    2f
  170. 5:
  171.     mov    (sp),r0
  172.     jsr    pc,getspq
  173.     bec    2f
  174.     tst    qflag
  175.     blt    6f
  176.     mov    (sp),r1
  177.     jsr    pc,nothere
  178.     br    3f
  179. 2:
  180.     mov    r0,r1
  181.     jsr    pc,release
  182.     mov    r2,r1
  183.     jsr    pc,release
  184.     jsr    pc,rm
  185. 3:
  186.     tst    vflag
  187.     bne    3f
  188.     tst    iflag
  189.     beq    1f
  190.     jmp    loop
  191. 1:
  192.     tst    qflag
  193.     bgt    5b
  194. 6:
  195.     tst    (sp)+
  196.     dec    r3
  197.     bgt    5b
  198.     jmp    loop
  199. 3:
  200.     mov    asmem,r1
  201.     mov    (sp),r(r1)
  202.     br    4b
  203. 4:
  204.     tst    (sp)+
  205.     jmp    loop
  206. /
  207. /    rename a 'file'
  208. /
  209. rename:
  210.     mov    (sp)+,r3
  211.     bne    1f
  212.     jmp    error
  213. 1:
  214.     sub    $2,r3
  215.     blt    1f
  216. 5:
  217.     mov    (sp),r0
  218.     jsr    pc,getsp
  219.     bes    4f
  220.     tst    (sp)+
  221.     sub    $4,r(r1)
  222.     mov    (sp),r0
  223.     mov    r2,-(sp)
  224.     mov    r(r1),-(sp)
  225.     jsr    pc,getsp
  226.     bes    3f
  227.     mov    r2,-(sp)
  228.     mov    r0,r1
  229.     jsr    pc,release
  230.     jsr    pc,rm
  231.     mov    (sp)+,r0
  232.     mov    (sp)+,r(r1)
  233.     jsr    pc,alterword
  234.     mov    (sp)+,r1
  235.     jsr    pc,release
  236.     br    5f
  237. 3:
  238.     mov    (sp)+,r(r1)
  239.     mov    (sp)+,r1
  240.     jsr    pc,release
  241.     mov    $2,r0
  242.     jsr    pc,allocate
  243.     mov    (sp)+,r2
  244. 2:
  245.     movb    (r2)+,r0
  246.     beq    2f
  247.     jsr    pc,putchar
  248.     br    2b
  249. 2:
  250.     mov    r1,r0
  251.     mov    asmem,r1
  252.     jsr    pc,alterword
  253. 5:
  254.     tst    iflag
  255.     beq    2f
  256.     jmp    loop
  257. 2:
  258.     tst    r3
  259.     beq    2f
  260.     sub    $2,r3
  261.     bge    5b
  262. 1:
  263.     tst    (sp)+
  264.     jmp    error
  265. 2:
  266.     jmp    loop
  267. 4:
  268.     mov    (sp)+,r1
  269.     jsr    pc,nothere
  270.     tst    (sp)+
  271.     br    5b
  272. /
  273. /    list contents of asmem
  274. /
  275. list:
  276.     mov    $buffer,r2
  277.     movb    $'\n,(r2)+
  278.     jsr    pc,output
  279.     mov    (sp)+,r3
  280.     beq    1f
  281.     mov    $1,vflag
  282. 5:
  283.     tst    iflag
  284.     beq    2f
  285.     jmp    loop
  286. 2:
  287.     mov    (sp),r0
  288.     jsr    pc,getspq
  289.     bes    4f
  290.     mov    r2,r1
  291.     br    3f
  292. 1:
  293.     mov    asmem,r1
  294.     jsr    pc,fsfile
  295.     sub    $2,r(r1)
  296. 2:
  297.     tst    iflag
  298.     bne    2f
  299.     jsr    pc,backword
  300.     bes    2f
  301.     mov    r0,r1
  302. 3:
  303.     jsr    pc,getn
  304.     movb    $'\n,(r2)+
  305.     jsr    pc,output
  306.     tst    vflag
  307.     bne    1f
  308.     mov    asmem,r1
  309.     sub    $2,r(r1)
  310.     br    2b
  311. 1:
  312.     tst    qflag
  313.     bgt    5b
  314. 4:
  315.     tst    (sp)+
  316.     dec    r3
  317.     bgt    5b
  318. 2:
  319.     mov    $buffer,r2
  320.     movb    $'\n,(r2)+
  321.     jsr    pc,output
  322.     jmp    loop
  323. /
  324. /    list a 'file
  325. /
  326. listf:
  327.     mov    (sp)+,r3
  328.     bgt    4f
  329.     jmp    error
  330. 4:
  331.     mov    (sp),r0
  332.     jsr    pc,getspq
  333.     bes    3f
  334.     mov    r0,r4
  335.     mov    r2,r1
  336.     jsr    pc,rewind
  337.     mov    $buffer,r2
  338.     movb    $'\n,(r2)+
  339. 1:
  340.     jsr    pc,getchar
  341.     bes    1f
  342.     movb    r0,(r2)+
  343.     cmp    r2,$bufend
  344.     blo    1b
  345.     jsr    pc,output
  346.     br    1b
  347. 1:
  348.     mov    r4,r1
  349.     jsr    pc,rewind
  350.     movb    $':,(r2)+
  351.     cmp    r2,$bufend
  352.     blo    2f
  353.     jsr    pc,output
  354. 2:
  355.     movb    $'\n,(r2)+
  356. 1:
  357.     tst    iflag
  358.     beq    2f
  359.     jmp    loop
  360. 2:
  361.     cmp    r2,$bufend
  362.     blo    2f
  363.     jsr    pc,output
  364. 2:
  365.     jsr    pc,getchar
  366.     bes    1f
  367.     movb    r0,(r2)+
  368.     br    1b
  369. 1:
  370.     jsr    pc,output
  371. 3:
  372.     tst    qflag
  373.     bgt    4b
  374.     tst    (sp)+
  375.     dec    r3
  376.     bgt    4b
  377.     mov    $buffer,r2
  378.     movb    $'\n,(r2)+
  379.     jsr    pc,output
  380.     jmp    loop
  381. /
  382. fin:
  383.     jsr    pc,flush
  384.     jsr    pc,whead
  385.     4
  386. q:
  387.     jsr    pc,flush
  388.     jsr    pc,whead
  389.     sys    exit
  390. memck:    mov    (sp)+,r3
  391. 2:
  392.     ble    2f
  393.     mov    (sp)+,r1
  394.     cmpb    (r1),$'p
  395.     bne    1f
  396.     bis    $1,vflag
  397.     br    3f
  398. 1:
  399.     cmpb    (r1),$'f
  400.     bne    3f
  401.     bis    $2,vflag
  402. 3:
  403.     dec    r3
  404.     br    2b
  405. 2:
  406.     clr    freeh
  407.     mov    $freeb,r2
  408. 1:
  409.     clr    (r2)+
  410.     cmp    r2,$freen
  411.     blo    1b
  412.     mov    $headers,r2
  413. 2:
  414.     cmp    l(r2),$hsz
  415.     beq    6f
  416.     jsr    pc,ck
  417.     bec    1f
  418.     cmp    r2,asmem
  419.     beq    1f
  420.     mov    asmem,r1
  421.     jsr    pc,rewind
  422.     clr    r3
  423. 4:
  424.     inc    r3
  425.     jsr    pc,getword
  426.     bes    5f
  427.     cmp    r0,r2
  428.     bne    4b
  429. 6:
  430.     inc    freeh
  431. 1:
  432. cont:
  433.     add    $8.,r2
  434.     cmp    r2,$headend-4
  435.     blo    2b
  436.     mov    asmem,r1
  437.     jsr    pc,rewind
  438. 4:
  439.     jsr    pc,getword
  440.     bes    4f
  441.     tst    r(r0)
  442.     beq    2f
  443.     mov    r0,r2
  444.     jsr    pc,ck
  445.     bes    4b
  446. 2:
  447.     sub    $hblk,r0
  448.     jsr    r5,oct
  449.     mov    $1,r0
  450.     sys    write; re; 24.
  451.     cmp    vflag,$1
  452.     beq    4b
  453.     bit    $1,r3
  454.     beq    2f
  455.     jsr    pc,getword
  456.     mov    r0,r1
  457.     jsr    pc,release
  458.     br    3f
  459. 2:
  460.     jsr    pc,backword
  461.     add    $4,r(r1)
  462.     mov    r0,r1
  463.     jsr    pc,release
  464. 3:
  465.     jsr    pc,rm
  466.     clr    r3
  467.     br    4b
  468. 4:
  469.     mov    freeh,r0
  470.     jsr    r5,decml
  471.     mov    $1,r0
  472.     sys    write; frh; 14.
  473.     mov    $freeb,r2
  474.     mov    $1,r3
  475. 6:
  476.     cmp    r2,$freen
  477.     bhis    6f
  478.     mov    (r2)+,r0
  479.     beq    3f
  480.     jsr    r5,decml
  481.     mov    $1,r0
  482.     sys    write; frb; 18.
  483.     mov    r3,r0
  484.     jsr    r5,decml
  485.     mov    $1,r0
  486.     sys    write; lf; 1.
  487. 3:
  488.     asl    r3
  489.     br    6b
  490. 6:
  491.     mov    $1,r0
  492.     sys    write; lf; 1.
  493.     jmp    loop
  494. 5:
  495.     mov    r2,r0
  496.     sub    $hblk,r0
  497.     jsr    r5,oct
  498.     mov    $1,r0
  499.     sys    write; un; 26.
  500.     tst    vflag
  501.     beq    1b
  502.     mov    r2,r1
  503.     cmp    vflag,$2
  504.     beq    3f
  505.     jsr    pc,rewind
  506.     mov    $buffer,r2
  507. 2:
  508.     jsr    pc,getchar
  509.     bes    2f
  510.     movb    r0,(r2)+
  511.     cmp    r2,$buffer+80.
  512.     blo    2b
  513.     jsr    pc,output
  514.     br    2b
  515. 2:
  516.     movb    $'\n,(r2)+
  517.     jsr    pc,output
  518.     mov    r1,r2
  519.     cmp    vflag,$1
  520.     bne    3f
  521.     jmp    cont
  522. 3:
  523.     jsr    pc,release
  524.     jmp    cont
  525. /
  526. interrupt: 4
  527. /
  528. un:    < header not accounted for\n>
  529. re:    < part of asmem released\n>
  530. lf:    <\n>
  531. frh:    < free headers\n >
  532. frb:    < free blocks size >
  533. endc:    .even
  534.