/****  Trapping a  68000 exception  ****/
/*     Compiled with Aztec C           */

#include <exec/execbase.h>

extern struct ExecBase *SysBase;

main()
{
/*** Inserting the trap handler ***/

extern APTR Trap;
APTR oldtrap;
USHORT digit1,digit2;
struct Task *ThisTask;

oldtrap=SysBase->ThisTask->tc_TrapCode;
SysBase->ThisTask->tc_TrapCode=&Trap;
SysBase->ThisTask->tc_TrapData=(APTR)0;

/*** Configure a "Division by zero" trap ***/

digit1 = 10; digit2 = 0;
digit1 = digit1/digit2;

if((ULONG)SysBase->ThisTask->tc_TrapData==0)
 printf("Haven't reached this point!");
else
 printf
 ("Exception recognized, since tc_TrapData = Trap-Nummer:%ld\n",
 SysBase->ThisTask->tc_TrapData);

/*** Remove trap handler ***/

SysBase->ThisTask->tc_TrapCode=oldtrap;

}

/*** Trap-Handler ***/
/** RUNS WITH AZTEC C ONLY **/
/** TAB before opcode necessary! **/

#asm

_Trap move.l a0,-(sp)
      move.l 4,a0         ;SysBase
      move.l 276(a0),a0   ;SysBase->ThisTask
      move.l 4(sp),46(a0) ;Trap-Number after
                          ;SysBase->ThisTask->tc_TrapData
      move.l (sp),a0
      add.l  #8,sp
      rte

#endasm

