Bell 32V development
authorTom London <tbl@research.uucp>
Wed, 29 Nov 1978 04:52:05 +0000 (23:52 -0500)
committerTom London <tbl@research.uucp>
Wed, 29 Nov 1978 04:52:05 +0000 (23:52 -0500)
Work on file usr/src/libc/sys/reset.s
Work on file usr/src/libc/gen/rin.c
Work on file usr/src/libc/sys/sbrk.s
Work on file usr/src/libc/sys/setgid.s

Co-Authored-By: John Reiser <jfr@research.uucp>
Synthesized-from: 32v

usr/src/libc/gen/rin.c [new file with mode: 0755]
usr/src/libc/sys/reset.s [new file with mode: 0755]
usr/src/libc/sys/sbrk.s [new file with mode: 0755]
usr/src/libc/sys/setgid.s [new file with mode: 0755]

diff --git a/usr/src/libc/gen/rin.c b/usr/src/libc/gen/rin.c
new file mode 100755 (executable)
index 0000000..1f12da3
--- /dev/null
@@ -0,0 +1,35 @@
+#include <stdio.h>
+
+rin()
+{
+       double d;
+       register n, c, f;
+
+       d = 0.;
+       f = 0;
+       n = 0;
+loop:
+       c = getchar();
+       if(c == EOF)
+               exit();
+       if(c == '-') {
+               f++;
+               goto loop;
+       }
+       if(c == '.') {
+               n++;
+               goto loop;
+       }
+       if(isdigit(c)) {
+               if(n)
+                       n++;
+               d = d*10.+c-'0';
+               goto loop;
+       }
+       if(f)
+               d = -d;
+       for(f=1; f<n; f++)
+               d /= 10.;
+       n = d;
+       return(n);
+}
diff --git a/usr/src/libc/sys/reset.s b/usr/src/libc/sys/reset.s
new file mode 100755 (executable)
index 0000000..acfce11
--- /dev/null
@@ -0,0 +1,45 @@
+# C library -- reset, setexit
+
+#      reset(x)
+# will generate a "return" from
+# the last call to
+#      setexit()
+# by restoring r6 - r12, ap, fp
+# and doing a return.
+# The returned value is x; on the original
+# call the returned value is 0.
+#
+# useful for going back to the main loop
+# after a horrible error in a lowlevel
+# routine.
+
+.globl _setexit
+.globl _reset
+
+       .align  1
+_setexit:
+       .word   0x0000
+       movab   setsav,r0
+       movq    r6,(r0)+
+       movq    r8,(r0)+
+       movq    r10,(r0)+
+       movq    8(fp),(r0)+             # ap, fp
+       movab   4(ap),(r0)+             # sp
+       movl    16(fp),(r0)             # pc
+       clrl    r0
+       ret
+
+       .align  1
+_reset:
+       .word   0x0000
+       movl    4(ap),r0        # returned value
+       movab   setsav,r1
+       movq    (r1)+,r6
+       movq    (r1)+,r8
+       movq    (r1)+,r10
+       movq    (r1)+,r12
+       movl    (r1)+,sp
+       jmp     *(r1)
+
+       .data
+setsav:        .space  10*4
diff --git a/usr/src/libc/sys/sbrk.s b/usr/src/libc/sys/sbrk.s
new file mode 100755 (executable)
index 0000000..3b79e16
--- /dev/null
@@ -0,0 +1,42 @@
+#old = sbrk(increment);
+#
+#sbrk gets increment more core, and returns a pointer
+#      to the beginning of the new core area
+#
+       .set    break,17
+.globl _sbrk
+.globl _end
+.globl  cerror
+
+       .align  1
+_sbrk:
+       .word   0x0000
+       addl3   nd,4(ap),-(sp)
+       pushl   $1
+       movl    ap,r3
+       movl    sp,ap
+       chmk    $break
+       bcc     noerr1
+       jmp     cerror
+noerr1:
+       movl    nd,r0
+       addl2   4(r3),nd
+       ret
+
+.globl _brk
+# brk(value)
+# as described in man2.
+# returns 0 for ok, -1 for error.
+
+_brk:
+       .word   0x0000
+       chmk    $break
+       bcc     noerr2
+       jmp     cerror
+noerr2:
+       movl    4(ap),nd
+       clrl    r0
+       ret
+
+       .data
+nd:    .long   _end
diff --git a/usr/src/libc/sys/setgid.s b/usr/src/libc/sys/setgid.s
new file mode 100755 (executable)
index 0000000..9e8e749
--- /dev/null
@@ -0,0 +1,16 @@
+# C library -- setgid
+
+# error = setgid(uid);
+
+       .set    setgid,46
+.globl _setgid
+.globl  cerror
+
+_setgid:
+       .word   0x0000
+       chmk    $setgid
+       bcc     noerror
+       jmp     cerror
+noerror:
+       clrl    r0
+       ret