From: izydorst Date: Fri, 15 Aug 2003 23:07:20 +0000 (+0000) Subject: small demo of system vectors interception X-Git-Tag: V2.12.0~1399 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=247b3953bdee6ba3a5aa28dcf55f943a71f16635;p=cc65 small demo of system vectors interception git-svn-id: svn://svn.cc65.org/cc65/trunk@2338 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- diff --git a/samples/geos/appvector-demo.grc b/samples/geos/appvector-demo.grc new file mode 100644 index 000000000..57547fb28 --- /dev/null +++ b/samples/geos/appvector-demo.grc @@ -0,0 +1,8 @@ + +; this is resource file for yesno.c, a GEOS application example + +HEADER APPLICATION "vectordemo" "VectorDemo" "V1.0" { +dostype USR +author "Maciej Witkowiak" +info "This is C prog compiled with cc65 and GEOSLib." +} diff --git a/samples/geos/vector-demo.c b/samples/geos/vector-demo.c new file mode 100644 index 000000000..a558e1f2a --- /dev/null +++ b/samples/geos/vector-demo.c @@ -0,0 +1,71 @@ + +#include +#include +#include + +unsigned char x,y; + +void (*oldMouseVector)(); +void (*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 = (void (*)())mouseVector; + mouseVector = (int)foo1; + oldKeyVector = (void (*)())keyVector; + keyVector = (int)foo2; +} + +void remove_hooks(void) { + mouseVector = (int)oldMouseVector; + keyVector = (int)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; +}