mirror of
https://github.com/cc65/cc65.git
synced 2025-01-12 02:30:44 +00:00
small demo of system vectors interception
git-svn-id: svn://svn.cc65.org/cc65/trunk@2338 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
parent
4afe11d314
commit
247b3953bd
8
samples/geos/appvector-demo.grc
Normal file
8
samples/geos/appvector-demo.grc
Normal file
@ -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."
|
||||
}
|
71
samples/geos/vector-demo.c
Normal file
71
samples/geos/vector-demo.c
Normal file
@ -0,0 +1,71 @@
|
||||
|
||||
#include <geos.h>
|
||||
#include <conio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
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 <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;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user