text: #include <geos.h>
  #include <conio.h>
  #include <stdlib.h>
  
  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 <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;
  }
  