#include "adltypes.h" #if AMIGA #include #define MINUTES_PER_DAY (60 * 24) #define TICKS_PER_MINUTE (60 * TICKS_PER_SECOND) int32 mytime() { struct DateStamp ds; long retval; DateStamp( &ds ); retval = MINUTES_PER_DAY * ds.ds_Days + ds.ds_Minute; retval = TICKS_PER_MINUTE * retval + ds.ds_Tick; return retval; } checkbreak( rout ) int (*rout)(); { if( SetSignal( 0L, 0L ) & SIGBREAKF_CTRL_C ) { /* We were signalled - call the routine */ (*rout)(); /* Reset the signal */ (void)SetSignal( 0L, SIGBREAKF_CTRL_C ); } } #endif #if MSDOS #include #undef time int32 mytime( ) { int32 temp[ 3 ]; /* Buffer */ time( (char *)temp, 0 ); /* Get a bcd version of time of day */ return temp[ 0 ]; /* And pretend that it fits in one long */ } checkbreak( rout ) int (*rout)(); { /* No convenient way of doing this from C under MS-DOS. Sigh. */ union REGS reglist; reglist.h.ah = 0x0b; /* Check keyboard status */ int86( 0x21, ®list, ®list ); /* If the keyboard buffer contained CTRL-C, the program MIGHT exit */ } #endif #if UNIX #include static int (*_break_rout)(); static _do_break() { /* This routine is the one which actually gets called when signalled */ signal( SIGINT, SIG_IGN ); /* Ignore this signal until ready */ (*_break_rout)(); /* Call the routine */ signal( SIGINT, _do_break ); /* Ready */ } checkbreak( rout ) int (*rout)(); { if( _break_rout == (int (*)())0 ) signal( SIGINT, _do_break ); _break_rout = rout; } #endif /*** EOF mytime.c ***/