+/ 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]