#include #include #include unsigned char x,y; void_func oldMouseVector, oldKeyVector; void foo1 (void) { // do something on mouse press/release gotoxy(x,y); ++x; cputc('A'); // call previous routine oldMouseVector(); } void foo2 (void) { // do something on key press/release gotoxy(x,y); ++y; cputc('B'); // call previous routine oldKeyVector(); } void hook_into_system(void) { // hook into system vectors - preserve old value oldMouseVector = mouseVector; mouseVector = foo1; oldKeyVector = keyVector; keyVector = foo2; } void remove_hooks(void) { mouseVector = oldMouseVector; keyVector = oldKeyVector; } int main(void) { x = 0; y = 0; /* To make cc65 do something for you before exiting you might register a function to be called using atexit call. #include then and write: */ atexit(&remove_hooks); clrscr(); cputsxy(0,1, CBOLDON "Just" COUTLINEON "a " CITALICON "string." CPLAINTEXT ); hook_into_system(); /* This program will loop forever though */ MainLoop(); /* If not using atexit() you have to remember about restoring system vectors right before exiting your application. Otherwise the system will most likely crash. remove_hooks(); */ return 0; }