home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / C / MAXONC3_6OF8.DMS / in.adf / LIBSRC.LHA / LIBSRC / signal.asm < prev    next >
Encoding:
Assembly Source File  |  1994-04-15  |  1.2 KB  |  72 lines

  1.  
  2. * Maxon C++
  3. * Library-Modul "signal"
  4. * Jens Gelhar 06.07.92
  5.  
  6.     xdef    _abort,abort_
  7.     xdef    _raise,raise__i
  8.     xdef    _signal,signal__iPFvip
  9.  
  10.     xref    abort__STANDARD,userbreak_handler
  11.  
  12. _abort:
  13. abort_:
  14.     move.l d0,-(a7)
  15.     pea 1.w
  16.     bsr.b _raise
  17.     addq.l #4,a7
  18.     move.l (a7)+,d0
  19.     rts
  20.  
  21. _raise:
  22. raise__i:
  23.     move.l a0,-(a7)
  24.     move.l 4+4(a7),d0       ; Signalnummer
  25.     cmp.l #6,d0
  26.     bhs.b rsErr
  27.     asl.w #2,d0
  28.     lea handlers(pc,d0.w),a0
  29.     move.l (a0),d0
  30.     beq.b rsRet
  31.     move.l d0,a0
  32.     addq.l #1,d0
  33.     beq.b rsErr
  34.     move.l 4+4(a7),-(a7)
  35.     jsr (a0)
  36.     addq.l #4,a7
  37.     moveq #0,d0
  38.     bra.b rsRet
  39. rsErr:    moveq #-1,d0
  40. rsRet:    move.l (a7)+,a0
  41.     rts
  42.  
  43. _signal:
  44. signal__iPFvip:    ; Argumente, int, funptr
  45.     movem.l d1/a0,-(a7)
  46.     movem.l 8+4(a7),d0/d1;          Signalnummer/Handler
  47.     cmp.l #6,d0
  48.     bhs.b fail
  49.     cmp.l #-1,d1
  50.     beq.b fail
  51.     cmp.l #1,d1
  52.     bne.b sg1
  53.     ; Default-Handler:
  54.     moveq #0,d1                     ; "ignore"
  55.     cmp.w #1,d0
  56.     bne.b sg1
  57.     move.l #abort__STANDARD,d1       ; außer bei "abort"
  58. sg1:    asl.w #2,d0
  59.     lea handlers(pc,d0.w),a0
  60.     move.l (a0),d0                  ; alten Handler holen
  61.     move.l d1,(a0)                  ; neuen setzen
  62.     bra.b sgret
  63. fail:    moveq #-1,d0
  64. sgret:    movem.l (a7)+,d1/a0
  65.     rts
  66.  
  67. handlers:    dc.l 0
  68.     dc.l abort__STANDARD
  69.     dc.l 0,0,0,0
  70.  
  71.     end
  72.