home *** CD-ROM | disk | FTP | other *** search
-
- * Maxon C++
- * Library-Modul "signal"
- * Jens Gelhar 06.07.92
-
- xdef _abort,abort_
- xdef _raise,raise__i
- xdef _signal,signal__iPFvip
-
- xref abort__STANDARD,userbreak_handler
-
- _abort:
- abort_:
- move.l d0,-(a7)
- pea 1.w
- bsr.b _raise
- addq.l #4,a7
- move.l (a7)+,d0
- rts
-
- _raise:
- raise__i:
- move.l a0,-(a7)
- move.l 4+4(a7),d0 ; Signalnummer
- cmp.l #6,d0
- bhs.b rsErr
- asl.w #2,d0
- lea handlers(pc,d0.w),a0
- move.l (a0),d0
- beq.b rsRet
- move.l d0,a0
- addq.l #1,d0
- beq.b rsErr
- move.l 4+4(a7),-(a7)
- jsr (a0)
- addq.l #4,a7
- moveq #0,d0
- bra.b rsRet
- rsErr: moveq #-1,d0
- rsRet: move.l (a7)+,a0
- rts
-
- _signal:
- signal__iPFvip: ; Argumente, int, funptr
- movem.l d1/a0,-(a7)
- movem.l 8+4(a7),d0/d1; Signalnummer/Handler
- cmp.l #6,d0
- bhs.b fail
- cmp.l #-1,d1
- beq.b fail
- cmp.l #1,d1
- bne.b sg1
- ; Default-Handler:
- moveq #0,d1 ; "ignore"
- cmp.w #1,d0
- bne.b sg1
- move.l #abort__STANDARD,d1 ; außer bei "abort"
- sg1: asl.w #2,d0
- lea handlers(pc,d0.w),a0
- move.l (a0),d0 ; alten Handler holen
- move.l d1,(a0) ; neuen setzen
- bra.b sgret
- fail: moveq #-1,d0
- sgret: movem.l (a7)+,d1/a0
- rts
-
- handlers: dc.l 0
- dc.l abort__STANDARD
- dc.l 0,0,0,0
-
- end
-