2003-08-15 23:07:20 +00:00
|
|
|
|
|
|
|
#include <geos.h>
|
|
|
|
#include <conio.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
|
|
|
|
unsigned char x,y;
|
|
|
|
|
2003-08-15 23:17:11 +00:00
|
|
|
void_func oldMouseVector, oldKeyVector;
|
2003-08-15 23:07:20 +00:00
|
|
|
|
|
|
|
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
|
2003-08-15 23:17:11 +00:00
|
|
|
oldMouseVector = mouseVector;
|
|
|
|
mouseVector = foo1;
|
|
|
|
oldKeyVector = keyVector;
|
|
|
|
keyVector = foo2;
|
2003-08-15 23:07:20 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void remove_hooks(void) {
|
2003-08-15 23:17:11 +00:00
|
|
|
mouseVector = oldMouseVector;
|
|
|
|
keyVector = oldKeyVector;
|
2003-08-15 23:07:20 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
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 <stdlib.h> 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;
|
|
|
|
}
|