Research V6 development
authorKen Thompson <ken@research.uucp>
Wed, 14 May 1975 00:49:31 +0000 (19:49 -0500)
committerKen Thompson <ken@research.uucp>
Wed, 14 May 1975 00:49:31 +0000 (19:49 -0500)
Work on file usr/source/s1/fed2.s

Co-Authored-By: Dennis Ritchie <dmr@research.uucp>
Synthesized-from: v6

usr/source/s1/fed2.s [new file with mode: 0644]

diff --git a/usr/source/s1/fed2.s b/usr/source/s1/fed2.s
new file mode 100644 (file)
index 0000000..9c20fcf
--- /dev/null
@@ -0,0 +1,533 @@
+/
+/
+ed:
+       mov     (sp)+,r3
+       ble     error
+econ:
+       sys     stat; ftemp; buffer
+       bec     2f
+       sys     creat; ftemp; 666
+       mov     r0,tmpw
+       sys     open; ftemp; 0
+       mov     r0,tmpr
+       br      1f
+2:
+       cmpb    $'z,ftemp+9.
+       bne     2f
+       mov     $1,r0
+       sys     write; erm; 23.
+       jmp     loop
+2:
+       incb    ftemp+9.
+       br      econ
+1:
+       mov     (sp),r0
+       jsr     pc,getspq
+       bes     3f
+       mov     r0,r4
+       mov     r2,r1
+       jsr     pc,rewind
+       mov     $buffer,r2
+1:
+       jsr     pc,getchar
+       bes     1f
+       movb    r0,(r2)+
+       br      1b
+1:
+       movb    $'\n,(r2)+
+       jsr     pc,output
+       mov     r4,r1
+       jsr     pc,rewind
+2:
+       mov     $buffer,r2
+1:
+       jsr     pc,getchar
+       bes     1f
+       movb    r0,(r2)+
+       cmp     r2,$bufend
+       blo     1b
+       mov     tmpw,r0
+       sys     write; buffer; 512.
+       br      2b
+1:
+       sub     $buffer,r2
+       beq     4f
+       mov     r2,0f
+       mov     tmpw,r0
+       sys     write; buffer; 0:..
+4:
+       tst     iflag
+       beq     1f
+       mov     tmpw,r0
+       sys     close
+       mov     tmpr,r0
+       sys     close
+       sys     unlink; ftemp
+       jmp     loop
+1:
+       mov     tmpw,r0
+       sys     close
+       sys     fork
+       br      5f
+       mov     r1,-(sp)
+       sys     wait
+       sys     signal; 2; inter
+       mov     (sp)+,r1
+       mov     a(r1),w(r1)
+2:
+       mov     tmpr,r0
+       sys     read; buffer; 512.
+       tst     r0
+       beq     2f
+       add     $buffer,r0
+       mov     r0,bufend
+       mov     $buffer,r2
+1:
+       movb    (r2)+,r0
+       jsr     pc,putchar
+       cmp     r2,bufend
+       blo     1b
+       br      2b
+2:
+       mov     tmpr,r0
+       sys     close
+       sys     unlink; ftemp
+       tst     iflag
+       beq     1f
+       jmp     loop
+1:
+       tst     qflag
+       bgt     1f
+       tst     (sp)+
+       dec     r3
+       bgt     1f
+       jmp     loop
+1:     jmp     econ
+       jmp     loop
+3:
+       mov     (sp),r2
+       mov     $2,r0
+       jsr     pc,allocate
+1:
+       tstb    (r2)
+       beq     1f
+       movb    (r2)+,r0
+       jsr     pc,putchar
+       br      1b
+1:
+       mov     r1,r0
+       mov     asmem,r1
+       jsr     pc,putword
+       mov     $2,r0
+       jsr     pc,allocate
+       mov     r1,r0
+       mov     asmem,r1
+       jsr     pc,putword
+       mov     r0,r1
+       br      4b
+5:
+       mov     $2,r0
+1:
+       sys     close
+       inc     r0
+       cmp     r0,$10.
+       blo     1b
+       sys     exec; edd; eda
+       sys     exit
+eda:   edd; ftemp; 0
+edd:   </bin/ed\0>
+       .even
+ftemp: </tmp/ftmpa\0>
+erm:   <Cannot open temp. file\n>
+       .even
+tmpw:  .=.+2
+tmpr:  .=.+2
+/
+/      remove a 'file' from memory
+/
+remove:
+       mov     (sp)+,r3
+       bgt     5f
+       mov     $1,vflag
+       mov     asmem,r1
+       jsr     pc,rewind
+       mov     r(r1),-(sp)
+4:
+       tst     iflag
+       beq     1f
+       jmp     loop
+1:
+       jsr     pc,getword
+       bes     4f
+       mov     r0,r2
+       jsr     pc,ask
+       bec     1f
+       mov     r(r1),(sp)
+       br      4b
+1:
+       jsr     pc,getword
+       br      2f
+5:
+       mov     (sp),r0
+       jsr     pc,getspq
+       bec     2f
+       tst     qflag
+       blt     6f
+       mov     (sp),r1
+       jsr     pc,nothere
+       br      3f
+2:
+       mov     r0,r1
+       jsr     pc,release
+       mov     r2,r1
+       jsr     pc,release
+       jsr     pc,rm
+3:
+       tst     vflag
+       bne     3f
+       tst     iflag
+       beq     1f
+       jmp     loop
+1:
+       tst     qflag
+       bgt     5b
+6:
+       tst     (sp)+
+       dec     r3
+       bgt     5b
+       jmp     loop
+3:
+       mov     asmem,r1
+       mov     (sp),r(r1)
+       br      4b
+4:
+       tst     (sp)+
+       jmp     loop
+/
+/      rename a 'file'
+/
+rename:
+       mov     (sp)+,r3
+       bne     1f
+       jmp     error
+1:
+       sub     $2,r3
+       blt     1f
+5:
+       mov     (sp),r0
+       jsr     pc,getsp
+       bes     4f
+       tst     (sp)+
+       sub     $4,r(r1)
+       mov     (sp),r0
+       mov     r2,-(sp)
+       mov     r(r1),-(sp)
+       jsr     pc,getsp
+       bes     3f
+       mov     r2,-(sp)
+       mov     r0,r1
+       jsr     pc,release
+       jsr     pc,rm
+       mov     (sp)+,r0
+       mov     (sp)+,r(r1)
+       jsr     pc,alterword
+       mov     (sp)+,r1
+       jsr     pc,release
+       br      5f
+3:
+       mov     (sp)+,r(r1)
+       mov     (sp)+,r1
+       jsr     pc,release
+       mov     $2,r0
+       jsr     pc,allocate
+       mov     (sp)+,r2
+2:
+       movb    (r2)+,r0
+       beq     2f
+       jsr     pc,putchar
+       br      2b
+2:
+       mov     r1,r0
+       mov     asmem,r1
+       jsr     pc,alterword
+5:
+       tst     iflag
+       beq     2f
+       jmp     loop
+2:
+       tst     r3
+       beq     2f
+       sub     $2,r3
+       bge     5b
+1:
+       tst     (sp)+
+       jmp     error
+2:
+       jmp     loop
+4:
+       mov     (sp)+,r1
+       jsr     pc,nothere
+       tst     (sp)+
+       br      5b
+/
+/      list contents of asmem
+/
+list:
+       mov     $buffer,r2
+       movb    $'\n,(r2)+
+       jsr     pc,output
+       mov     (sp)+,r3
+       beq     1f
+       mov     $1,vflag
+5:
+       tst     iflag
+       beq     2f
+       jmp     loop
+2:
+       mov     (sp),r0
+       jsr     pc,getspq
+       bes     4f
+       mov     r2,r1
+       br      3f
+1:
+       mov     asmem,r1
+       jsr     pc,fsfile
+       sub     $2,r(r1)
+2:
+       tst     iflag
+       bne     2f
+       jsr     pc,backword
+       bes     2f
+       mov     r0,r1
+3:
+       jsr     pc,getn
+       movb    $'\n,(r2)+
+       jsr     pc,output
+       tst     vflag
+       bne     1f
+       mov     asmem,r1
+       sub     $2,r(r1)
+       br      2b
+1:
+       tst     qflag
+       bgt     5b
+4:
+       tst     (sp)+
+       dec     r3
+       bgt     5b
+2:
+       mov     $buffer,r2
+       movb    $'\n,(r2)+
+       jsr     pc,output
+       jmp     loop
+/
+/      list a 'file
+/
+listf:
+       mov     (sp)+,r3
+       bgt     4f
+       jmp     error
+4:
+       mov     (sp),r0
+       jsr     pc,getspq
+       bes     3f
+       mov     r0,r4
+       mov     r2,r1
+       jsr     pc,rewind
+       mov     $buffer,r2
+       movb    $'\n,(r2)+
+1:
+       jsr     pc,getchar
+       bes     1f
+       movb    r0,(r2)+
+       cmp     r2,$bufend
+       blo     1b
+       jsr     pc,output
+       br      1b
+1:
+       mov     r4,r1
+       jsr     pc,rewind
+       movb    $':,(r2)+
+       cmp     r2,$bufend
+       blo     2f
+       jsr     pc,output
+2:
+       movb    $'\n,(r2)+
+1:
+       tst     iflag
+       beq     2f
+       jmp     loop
+2:
+       cmp     r2,$bufend
+       blo     2f
+       jsr     pc,output
+2:
+       jsr     pc,getchar
+       bes     1f
+       movb    r0,(r2)+
+       br      1b
+1:
+       jsr     pc,output
+3:
+       tst     qflag
+       bgt     4b
+       tst     (sp)+
+       dec     r3
+       bgt     4b
+       mov     $buffer,r2
+       movb    $'\n,(r2)+
+       jsr     pc,output
+       jmp     loop
+/
+fin:
+       jsr     pc,flush
+       jsr     pc,whead
+       4
+q:
+       jsr     pc,flush
+       jsr     pc,whead
+       sys     exit
+memck: mov     (sp)+,r3
+2:
+       ble     2f
+       mov     (sp)+,r1
+       cmpb    (r1),$'p
+       bne     1f
+       bis     $1,vflag
+       br      3f
+1:
+       cmpb    (r1),$'f
+       bne     3f
+       bis     $2,vflag
+3:
+       dec     r3
+       br      2b
+2:
+       clr     freeh
+       mov     $freeb,r2
+1:
+       clr     (r2)+
+       cmp     r2,$freen
+       blo     1b
+       mov     $headers,r2
+2:
+       cmp     l(r2),$hsz
+       beq     6f
+       jsr     pc,ck
+       bec     1f
+       cmp     r2,asmem
+       beq     1f
+       mov     asmem,r1
+       jsr     pc,rewind
+       clr     r3
+4:
+       inc     r3
+       jsr     pc,getword
+       bes     5f
+       cmp     r0,r2
+       bne     4b
+6:
+       inc     freeh
+1:
+cont:
+       add     $8.,r2
+       cmp     r2,$headend-4
+       blo     2b
+       mov     asmem,r1
+       jsr     pc,rewind
+4:
+       jsr     pc,getword
+       bes     4f
+       tst     r(r0)
+       beq     2f
+       mov     r0,r2
+       jsr     pc,ck
+       bes     4b
+2:
+       sub     $hblk,r0
+       jsr     r5,oct
+       mov     $1,r0
+       sys     write; re; 24.
+       cmp     vflag,$1
+       beq     4b
+       bit     $1,r3
+       beq     2f
+       jsr     pc,getword
+       mov     r0,r1
+       jsr     pc,release
+       br      3f
+2:
+       jsr     pc,backword
+       add     $4,r(r1)
+       mov     r0,r1
+       jsr     pc,release
+3:
+       jsr     pc,rm
+       clr     r3
+       br      4b
+4:
+       mov     freeh,r0
+       jsr     r5,decml
+       mov     $1,r0
+       sys     write; frh; 14.
+       mov     $freeb,r2
+       mov     $1,r3
+6:
+       cmp     r2,$freen
+       bhis    6f
+       mov     (r2)+,r0
+       beq     3f
+       jsr     r5,decml
+       mov     $1,r0
+       sys     write; frb; 18.
+       mov     r3,r0
+       jsr     r5,decml
+       mov     $1,r0
+       sys     write; lf; 1.
+3:
+       asl     r3
+       br      6b
+6:
+       mov     $1,r0
+       sys     write; lf; 1.
+       jmp     loop
+5:
+       mov     r2,r0
+       sub     $hblk,r0
+       jsr     r5,oct
+       mov     $1,r0
+       sys     write; un; 26.
+       tst     vflag
+       beq     1b
+       mov     r2,r1
+       cmp     vflag,$2
+       beq     3f
+       jsr     pc,rewind
+       mov     $buffer,r2
+2:
+       jsr     pc,getchar
+       bes     2f
+       movb    r0,(r2)+
+       cmp     r2,$buffer+80.
+       blo     2b
+       jsr     pc,output
+       br      2b
+2:
+       movb    $'\n,(r2)+
+       jsr     pc,output
+       mov     r1,r2
+       cmp     vflag,$1
+       bne     3f
+       jmp     cont
+3:
+       jsr     pc,release
+       jmp     cont
+/
+interrupt: 4
+/
+un:    < header not accounted for\n>
+re:    < part of asmem released\n>
+lf:    <\n>
+frh:   < free headers\n >
+frb:   < free blocks size >
+endc:  .even