home *** CD-ROM | disk | FTP | other *** search
/ BCI NET 2 / BCI NET 2.iso / archives / programming / e / amigae30a_fr.lha / AmigaE30f / Sources / Tools / TrapGuru / trapguru.e < prev   
Encoding:
Text File  |  1994-10-03  |  841 b   |  46 lines

  1. /* trapguru.m
  2.  
  3.    installe un gestionnaire dans votre structure de tache, pour attraper
  4.    les exceptions du processeur comme les division par zéro etc.
  5.    Quand un gestionnaire est invoqué, il enverra une exception E
  6.    "GURU" avec le numéro de l'alerte comme info.
  7.  
  8.    Je ne garantie pas qu'il est 100 fiable pour tous les CPU etc.
  9.  
  10. */
  11.  
  12.  
  13. OPT MODULE
  14.  
  15. MODULE 'exec/tasks'
  16.  
  17. EXPORT PROC trapguru()
  18.   DEF mytask:PTR TO tc
  19.   mytask:=FindTask(NIL)
  20.   mytask.trapcode:={tcode}
  21.   LEA store(PC),A0
  22.   MOVE.L A4,(A0)
  23. ENDPROC
  24.  
  25. tcode:
  26.   MOVE.L (A7)+,D0
  27.   LEA store(PC),A0
  28.   MOVE.L D0,4(A0)
  29.   MOVEQ #3,D1
  30.   CMP.L D1,D0
  31.   BGT.S noadjust
  32.   MOVE.L $4.W,A6
  33.   BTST #0,297(A6)
  34.   BNE.S noadjust
  35.   ADDQ.L #8,A7
  36. noadjust:
  37.   LEA continue(PC),A0
  38.   MOVE.L A0,2(A7)
  39.   RTE
  40. continue:
  41.   LEA store(PC),A0
  42.   MOVE.L (A0),A4
  43.   Throw("GURU",Long({store}+4))
  44. store:
  45.   LONG 0,0
  46.