home *** CD-ROM | disk | FTP | other *** search
/ MacTech 1 to 12 / MacTech-vol-1-12.toast / Source / MacTech® Magazine / Volume 06 - 1990 / 06.06 Jun 90 / ANSI Library Code / FCodeDispatchLib.c < prev    next >
Encoding:
C/C++ Source or Header  |  1990-01-17  |  1.2 KB  |  54 lines  |  [TEXT/KAHL]

  1. /***********************************************
  2.  *
  3.  *    FCodeDispatchLib.c
  4.  *
  5.  *    Library code and dispatch table for code resource library.
  6.  *    Written by David Burggraaf, 1990.
  7.  *
  8.  ***********************************************/
  9.  
  10. #include <math.h>
  11.  
  12. #define NOCODELIBDEF
  13. #include "CodeLib.h"
  14.  
  15. typedef void (*Function)(void);
  16.  
  17. long returnAddr, oldA4, returnStruct;
  18. int funcIndex;
  19. void dispatchErr(void);
  20. Function funcTable[FROUTINES+1];
  21.     
  22. void main(/*CodeLib routine*/void)
  23.     {
  24.     asm    {
  25.         move.l a4, a1;        /*    setup a4    */
  26.         move.l a0, a4;
  27.         move.l a1, oldA4;
  28.         };
  29.     funcTable[CLdispatchErr]=dispatchErr;
  30.     funcTable[CLsqrt]=(Function)sqrt;
  31.     asm    {
  32.         move.l (a7)+, returnAddr;        /*    save return address    */
  33.         move.l (a7)+, returnStruct;    /*    save return StructPtr    */
  34.         move.w (a7)+, a1;                /*    remove index    */
  35.         move.l returnStruct, -(a7);    /*    put return StructPtr    */
  36.         lea funcTable, a0;                /*    do jump to indexed subroutine    */
  37.         jsr ([0,a0,a1.w*4],0);
  38.         move.l (a7)+, returnStruct;    /*    get return structPtr    */
  39.         move.w a1, -(a7);                /*    restore stack and return    */
  40.         move.l    returnStruct, -(a7);
  41.         move.l returnAddr, -(a7);
  42.         move.l oldA4, a4;                /*    restore a4    */
  43.         }
  44. #ifdef MULTISEG
  45.     UnloadA4Seg(0L);
  46. #endif
  47.     }
  48.  
  49. void dispatchErr(void)
  50.     {
  51.     SysBeep(5);
  52.     }
  53.  
  54.