Research V6 development
authorKen Thompson <ken@research.uucp>
Wed, 14 May 1975 00:55:12 +0000 (19:55 -0500)
committerKen Thompson <ken@research.uucp>
Wed, 14 May 1975 00:55:12 +0000 (19:55 -0500)
Work on file usr/source/s5/signal.s
Work on file usr/source/s5/stime.s
Work on file usr/source/s5/setgid.s
Work on file usr/source/s5/unlink.s
Work on file usr/source/s5/times.s
Work on file usr/source/s5/write.s
Work on file usr/source/s5/umount.s
Work on file usr/source/s5/wait.s

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

usr/source/s5/setgid.s [new file with mode: 0644]
usr/source/s5/signal.s [new file with mode: 0644]
usr/source/s5/stime.s [new file with mode: 0644]
usr/source/s5/times.s [new file with mode: 0644]
usr/source/s5/umount.s [new file with mode: 0644]
usr/source/s5/unlink.s [new file with mode: 0644]
usr/source/s5/wait.s [new file with mode: 0644]
usr/source/s5/write.s [new file with mode: 0644]

diff --git a/usr/source/s5/setgid.s b/usr/source/s5/setgid.s
new file mode 100644 (file)
index 0000000..b183eb7
--- /dev/null
@@ -0,0 +1,18 @@
+/ C library -- setgid
+
+/ error = setgid(uid);
+
+setgid = 46.
+.globl _setgid, cerror
+
+_setgid:
+       mov     r5,-(sp)
+       mov     sp,r5
+       mov     4(r5),r0
+       sys     setgid
+       bec     1f
+       jmp     cerror
+1:
+       clr     r0
+       mov     (sp)+,r5
+       rts     pc
diff --git a/usr/source/s5/signal.s b/usr/source/s5/signal.s
new file mode 100644 (file)
index 0000000..4bf9e72
--- /dev/null
@@ -0,0 +1,86 @@
+/ C library -- signal
+
+/ signal(n, 0); /* default action on signal(n) */
+/ signal(n, odd); /* ignore signal(n) */
+/ signal(n, label); /* goto label on signal(n) */
+/ returns old label, only one level.
+
+rtt    = 6
+signal = 48.
+.globl _signal, cerror
+
+_signal:
+       mov     r5,-(sp)
+       mov     sp,r5
+       mov     4(r5),r1
+       cmp     r1,$NSIG
+       bhis    2f
+       mov     6(r5),r0
+       mov     r1,0f
+       asl     r1
+       mov     dvect(r1),-(sp)
+       mov     r0,dvect(r1)
+       mov     r0,0f+2
+       beq     1f
+       bit     $1,r0
+       bne     1f
+       asl     r1
+       asl     r1
+       add     $tvect,r1
+       mov     r1,0f+2
+1:
+       sys     0; 9f
+       bes     3f
+       bit     $1,r0
+       beq     1f
+       mov     r0,(sp)
+1:
+       mov     (sp)+,r0
+       mov     (sp)+,r5
+       rts     pc
+2:
+       mov     $22.,r0         / EINVAL
+       clr     -(sp)
+3:
+       tst     (sp)+
+       jmp     cerror
+
+NSIG = 0
+tvect:
+       mov r0,-(sp); mov dvect+[NSIG*2],r0; br 1f; NSIG=NSIG+1
+       mov r0,-(sp); mov dvect+[NSIG*2],r0; br 1f; NSIG=NSIG+1
+       mov r0,-(sp); mov dvect+[NSIG*2],r0; br 1f; NSIG=NSIG+1
+       mov r0,-(sp); mov dvect+[NSIG*2],r0; br 1f; NSIG=NSIG+1
+       mov r0,-(sp); mov dvect+[NSIG*2],r0; br 1f; NSIG=NSIG+1
+       mov r0,-(sp); mov dvect+[NSIG*2],r0; br 1f; NSIG=NSIG+1
+       mov r0,-(sp); mov dvect+[NSIG*2],r0; br 1f; NSIG=NSIG+1
+       mov r0,-(sp); mov dvect+[NSIG*2],r0; br 1f; NSIG=NSIG+1
+       mov r0,-(sp); mov dvect+[NSIG*2],r0; br 1f; NSIG=NSIG+1
+       mov r0,-(sp); mov dvect+[NSIG*2],r0; br 1f; NSIG=NSIG+1
+       mov r0,-(sp); mov dvect+[NSIG*2],r0; br 1f; NSIG=NSIG+1
+       mov r0,-(sp); mov dvect+[NSIG*2],r0; br 1f; NSIG=NSIG+1
+       mov r0,-(sp); mov dvect+[NSIG*2],r0; br 1f; NSIG=NSIG+1
+       mov r0,-(sp); mov dvect+[NSIG*2],r0; br 1f; NSIG=NSIG+1
+       mov r0,-(sp); mov dvect+[NSIG*2],r0; br 1f; NSIG=NSIG+1
+       mov r0,-(sp); mov dvect+[NSIG*2],r0; br 1f; NSIG=NSIG+1
+       mov r0,-(sp); mov dvect+[NSIG*2],r0; br 1f; NSIG=NSIG+1
+       mov r0,-(sp); mov dvect+[NSIG*2],r0; br 1f; NSIG=NSIG+1
+       mov r0,-(sp); mov dvect+[NSIG*2],r0; br 1f; NSIG=NSIG+1
+       mov r0,-(sp); mov dvect+[NSIG*2],r0; br 1f; NSIG=NSIG+1
+1:
+       mov     r1,-(sp)
+       mov     r2,-(sp)
+       mov     r3,-(sp)
+       mov     r4,-(sp)
+       jsr     pc,(r0)
+       mov     (sp)+,r4
+       mov     (sp)+,r3
+       mov     (sp)+,r2
+       mov     (sp)+,r1
+       mov     (sp)+,r0
+       rtt
+.data
+9:
+       sys     signal; 0:..; ..
+.bss
+dvect: .=.+[NSIG*2]
diff --git a/usr/source/s5/stime.s b/usr/source/s5/stime.s
new file mode 100644 (file)
index 0000000..21ce4a1
--- /dev/null
@@ -0,0 +1,15 @@
+.globl _stime, cerror
+
+_stime:
+       mov     r5,-(sp)
+       mov     sp,r5
+       mov     4(sp),r1
+       mov     (r1)+,r0
+       mov     (r1),r1
+       sys     stime
+       bec     1f
+       jmp     cerror
+1:
+       clr     r0
+       mov     (sp)+,r5
+       rts     pc
diff --git a/usr/source/s5/times.s b/usr/source/s5/times.s
new file mode 100644 (file)
index 0000000..c5fa234
--- /dev/null
@@ -0,0 +1,15 @@
+/ C library -- times
+
+.globl _times
+times  = 43.
+
+_times:
+       mov     r5,-(sp)
+       mov     sp,r5
+       mov     4(r5),0f
+       sys     0; 9f
+       mov     (sp)+,r5
+       rts     pc
+.data
+9:
+       sys     times; 0:..
diff --git a/usr/source/s5/umount.s b/usr/source/s5/umount.s
new file mode 100644 (file)
index 0000000..15a4b83
--- /dev/null
@@ -0,0 +1,22 @@
+/ C library -- umount/
+
+.globl _umount
+.globl cerror
+indir  = 0
+.comm  _errno,2
+
+_umount:
+       mov     r5,-(sp)
+       mov     sp,r5
+       mov     4(sp),0f
+       sys     indir; 9f
+       bec     1f
+       jmp     cerror
+1:
+       clr     r0
+       mov     (sp)+,r5
+       rts     pc
+
+.data
+9:
+       sys     umount; 0:..
diff --git a/usr/source/s5/unlink.s b/usr/source/s5/unlink.s
new file mode 100644 (file)
index 0000000..8a10946
--- /dev/null
@@ -0,0 +1,21 @@
+/ C library -- unlink
+
+/ error = unlink(string);
+/
+
+.globl _unlink, cerror
+
+_unlink:
+       mov     r5,-(sp)
+       mov     sp,r5
+       mov     4(r5),0f
+       sys     0; 9f
+       bec     1f
+       jmp     cerror
+1:
+       clr     r0
+       mov     (sp)+,r5
+       rts     pc
+.data
+9:
+       sys     unlink; 0:..
diff --git a/usr/source/s5/wait.s b/usr/source/s5/wait.s
new file mode 100644 (file)
index 0000000..201798d
--- /dev/null
@@ -0,0 +1,27 @@
+/ C library -- wait
+
+/ pid = wait();
+/   or,
+/ pid = wait(&status);
+/
+/ pid == -1 if error
+/ status indicates fate of process, if given
+
+.globl _wait, _nargs, cerror
+
+_wait:
+       mov     r5,-(sp)
+       mov     sp,r5
+       jsr     pc,_nargs
+       mov     r0,-(sp)
+       sys     wait
+       bec     1f
+       tst     (sp)+
+       jmp     cerror
+1:
+       tst     (sp)+
+       beq     2f
+       mov     r1,*4(r5)       / status return
+2:
+       mov     (sp)+,r5
+       rts     pc
diff --git a/usr/source/s5/write.s b/usr/source/s5/write.s
new file mode 100644 (file)
index 0000000..bb5f32e
--- /dev/null
@@ -0,0 +1,23 @@
+/ C library -- write
+
+/ nwritten = write(file, buffer, count);
+/
+/ nwritten == -1 means error
+
+.globl _write, cerror
+
+_write:
+       mov     r5,-(sp)
+       mov     sp,r5
+       mov     4(r5),r0
+       mov     6(r5),0f
+       mov     8(r5),0f+2
+       sys     0; 9f
+       bec     1f
+       jmp     cerror
+1:
+       mov     (sp)+,r5
+       rts     pc
+.data
+9:
+       sys     write; 0:..; ..