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
--- /dev/null
+/ 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.
--- /dev/null
+/ 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
--- /dev/null
+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];
+};