//------------- // tsr_prep.h // (c) Victor A.Voilevitch, 1994-1996. //------------- #ifndef Ok #define Ok 1 #define Yes 1 #define No 0 #endif #ifndef __TSR_PREPARE__ #define __TSR_PREPARE__ #include #ifdef __cplusplus #define __ARGS ... #else #define __ARGS #endif #define __FULL_ARGS unsigned bp, unsigned di, unsigned si, \ unsigned ds, unsigned es, \ unsigned dx, unsigned cx, \ unsigned bx, unsigned out_ax, \ unsigned ip, unsigned cs, unsigned out_flags //--------------------------------------------------- // stack and heap limits // (for Borland C++ compiler, // for other compilers must be otherwise) //--------------------------------------------------- #define TSR_PREPARE() extern unsigned _heaplen = 1024; \ extern unsigned _stklen = 512; //--------------------------------------------------- // program ID (for INT 2F) //--------------------------------------------------- extern char PROGRAM_ID; //--------------------------------------------------- // program work function //--------------------------------------------------- typedef int (*FUNCTION)(void); extern FUNCTION WORK_FUNCTION; //--------------------------------------------------- // program unload function //--------------------------------------------------- void UNLOAD_FUNCTION(void); extern FUNCTION USER_UNLOAD_FUNCTION; const unsigned long WAIT_UNLOAD = CLK_TCK * 1; //--------------------------------------------------- // TSR interrrupt handler stack, // SS,SP values for handler's work //--------------------------------------------------- const STACK_LEN = 1024; extern unsigned char far TSR_stack[]; extern unsigned TSR_ss; extern unsigned TSR_sp; //--------------------------------------------------- // SS and SP of background program by enter into interrupt handler // PID of background program //--------------------------------------------------- extern unsigned old_ss, old_sp; extern unsigned old_PSP; //--------------------------------------------------- // DTA of tsr and background programs //--------------------------------------------------- extern char far * old_DTA; extern char far * TSR_DTA; //--------------------------------------------------- // MS DOS reenterable flag address //--------------------------------------------------- extern char far * inside_DOS; //--------------------------------------------------- // flags //--------------------------------------------------- extern char FLAG_TIMER_DONE; extern char FLAG_KEY_PRESSED; //------------------------ extern char FLAG_WORKING; extern char FLAG_UNLOADING; //------------------------ extern char FLAG_START; extern int FLAG_TO_UNLOAD; //------------------------ extern char FLAG_INSIDE_09; extern int FLAG_HOT_KEY_SCAN; extern int FLAG_HOT_KEY_SHIFT; //------------------------ extern char FLAG_INSIDE_1C; extern unsigned long DELTA_TIME; //------------------------ extern char FLAG_REPLACE_28; extern char FLAG_INSIDE_28; //------------------------ extern char FLAG_REPLACE_13; extern char FLAG_INSIDE_13; //--------------------------------------------------- // control keys status //--------------------------------------------------- enum KBD_STATUS { R_SHIFT = 0x01, // Right Shift pressed L_SHIFT = 0x02, // Left Shift pressed CTRL = 0x04, // Ctrl pressed ALT = 0x08, // Alt pressed L_CTRL = 0x0100, // Left Ctrl pressed L_ALT = 0x0200, // Left Alt pressed R_CTRL = 0x0400, // Right Ctrl pressed R_ALT = 0x0800 // Right Alt pressed }; //--------------------------------------------------- // interrupt handlers //--------------------------------------------------- extern void interrupt (*old_09)(__ARGS); void interrupt new_09 (__ARGS); extern void interrupt (*old_1C)(__ARGS); void interrupt new_1C (__ARGS); extern void interrupt (*old_28)(__ARGS); void interrupt new_28 (__ARGS); extern void interrupt (*old_13)(__ARGS); void interrupt new_13 (__FULL_ARGS); extern void interrupt (*old_2F)(__ARGS); extern "C" void interrupt NEW_2F (void); const OFFSET_DS = 19; // segment \ FLAG_TO_UNLOAD const OFFSET_FL = 25; // offset / const OFFSET_DS_SL = 36; // segment \ FLAG_UNLOADING const OFFSET_FL_SL = 42; // offset / const OFFSET_DS_AW = 53; // segment \ FLAG_UNLOADING const OFFSET_FL_AW = 62; // offset / for awake const OFFSET_28 = 68; // -- ¡¢  «(c) ISR 0x28 extern void interrupt (*old_24)(__ARGS); void interrupt new_24 (__FULL_ARGS); extern void interrupt (*old_23)(__ARGS); void interrupt new_23 (__FULL_ARGS); #endif