Research V5 development
authorKen Thompson <ken@research.uucp>
Tue, 26 Nov 1974 23:13:21 +0000 (18:13 -0500)
committerKen Thompson <ken@research.uucp>
Tue, 26 Nov 1974 23:13:21 +0000 (18:13 -0500)
Work on file usr/source/s1/chown.s
Work on file usr/source/s4/getchr.s
Work on file usr/sys/filsys.h

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

usr/source/s1/chown.s [new file with mode: 0644]
usr/source/s4/getchr.s [new file with mode: 0644]
usr/sys/filsys.h [new file with mode: 0644]

diff --git a/usr/source/s1/chown.s b/usr/source/s1/chown.s
new file mode 100644 (file)
index 0000000..5bd76d5
--- /dev/null
@@ -0,0 +1,101 @@
+/ chown -- change owner
+
+
+       .globl  fopen, getc, mesg
+
+       mov     sp,r5
+       mov     (r5),r4
+       cmp     r4,$3
+       bge     1f
+       jsr     r5,mesg; <chown uid f1 ...\n\0>; .even
+1:
+       add     $4,r5
+       mov     (r5),r3
+       cmpb    (r3),$'0
+       blt     1f
+       cmpb    (r3),$'9
+       bgt     1f
+       jsr     r5,cvnum; geta
+       br      do
+1:
+       mov     $uids,r0
+       jsr     r5,fopen; ubuf
+       bec     1f
+       jsr     r5,mesg; <Can't open /etc/uids\n\0>; .even
+       sys     exit
+1:
+       mov     r3,r2
+2:
+       jsr     r5,getc; ubuf
+       bcc     3f
+who:
+       jsr     r5,mesg; <Who?\n\0>; .even
+       sys     exit
+3:
+       cmp     r0,$':
+       beq     3f
+       cmpb    (r2)+,r0
+       beq     2b
+2:
+       jsr     r5,getc; ubuf
+       bcs     who
+       cmp     r0,$'\n
+       bne     2b
+       br      1b
+3:
+       tstb    (r2)
+       bne     2b
+3:
+       jsr     r5,getc; ubuf
+       cmpb    r0,$':
+       bne     3b
+       jsr     r5,cvnum; getc
+do:
+       sub     $2,r4
+       mov     r1,0f+2
+       tst     (r5)+
+1:
+       mov     (r5)+,0f
+       sys     chown; 0:..; 0
+       bec     2f
+       mov     0b,r0
+       mov     r0,0f
+       clr     0f+2
+3:
+       tstb    (r0)+
+       beq     3f
+       inc     0f+2
+       br      3b
+3:
+       mov     $1,r0
+       sys     write; 0:..; ..
+       jsr     r5,mesg; <?\n\0>; .even
+2:
+       dec     r4
+       bgt     1b
+       sys     exit
+
+cvnum:
+       clr     r1
+1:
+       jsr     r5,*(r5); ubuf
+       bcs     1f
+       sub     $'0,r0
+       cmp     r0,$9.
+       bhi     1f
+       mpy     $10.,r1
+       add     r0,r1
+       br      1b
+1:
+       tst     (r5)+
+       rts     r5
+
+geta:
+       movb    (r3)+,r0
+       tst     (r5)+
+       rts     r5
+
+uids:  </etc/passwd\0>
+
+       .bss
+ubuf:  .=.+518.
diff --git a/usr/source/s4/getchr.s b/usr/source/s4/getchr.s
new file mode 100644 (file)
index 0000000..02faec6
--- /dev/null
@@ -0,0 +1,32 @@
+/ getchar() -- get a character from input file fin
+
+.globl _getchar
+.comm  _errno,2
+.comm  _fin,518.
+
+_getchar:
+       mov     r5,-(sp)
+       mov     sp,r5
+       dec     _fin+2
+       bge     1f
+       mov     $_fin+6,_fin+4
+       mov     _fin,r0
+       sys     read; _fin+6; 512.
+       bes     badret
+       tst     r0
+       beq     badret
+       dec     r0
+       mov     r0,_fin+2
+1:
+       clr     r0
+       bisb    *_fin+4,r0
+       inc     _fin+4
+       mov     (sp)+,r5
+       rts     pc
+
+badret:
+       mov     r0,_errno
+       clr     r0
+       clr     _fin+2
+       mov     (sp)+,r5
+       rts     pc
diff --git a/usr/sys/filsys.h b/usr/sys/filsys.h
new file mode 100644 (file)
index 0000000..a602b2b
--- /dev/null
@@ -0,0 +1,14 @@
+struct filsys
+{
+       int     s_isize;
+       int     s_fsize;
+       int     s_nfree;
+       int     s_free[100];
+       int     s_ninode;
+       int     s_inode[100];
+       char    s_flock;
+       char    s_ilock;
+       char    s_fmod;
+       char    s_ronly;
+       int     s_time[2];
+};