home *** CD-ROM | disk | FTP | other *** search
/ Piper's Pit BBS/FTP: ibm 0020 - 0029 / ibm0020-0029 / ibm0028.tar / ibm0028 / KAPA1.ZIP / EXAMPLE4.ZIP / TIMER.C < prev    next >
Encoding:
C/C++ Source or Header  |  1990-05-24  |  3.0 KB  |  104 lines

  1. /*********************************************************
  2.                         TIMER.C 
  3. **********************************************************/
  4.  
  5. /*********************************************************
  6. **     Copyright (c) MegaKnowledge 1990
  7. **********************************************************/
  8.    
  9. /*********************************************************
  10.  * THIS FILE CONTAINS AN EXAMPLE OF USING 'C' WITH KAPPA *
  11.  
  12.    See Also kappa.c kappa.def kappa.mak
  13.  *********************************************************/
  14.  
  15. #include "kappa.h"
  16. #include "timer.h"
  17.  
  18. TIMERTABLE TimerTable[TABLESIZE];
  19.  
  20. /*********************************************************
  21.                 TimerProc
  22.     MS-WINDOWS callback function for our timers. Calls the KAPPA function
  23. 'ApplyFunction' to evalute the user KAL function set by 'SetupTimer'.
  24.  *********************************************************/
  25. WORD FAR PASCAL TimerProc (HWND hWnd, WORD wMsg, int nEvent, DWORD dwTime)
  26. {
  27.   int i;
  28.   TIMERTABLE *pTmp;
  29.   LISTID     idList;
  30.  
  31.   for (i=0, pTmp = TimerTable; i<TABLESIZE; i++, pTmp++)
  32.     if (pTmp->nEvent == nEvent)
  33.       if (ApplyFunction (pTmp->idFunc, 0, NULLID) == ERROR)
  34.         {
  35.         PostKappaErrorMessage();
  36.         return ERROR;
  37.         }
  38.  
  39.   return TRUE;
  40. }
  41.  
  42. /*********************************************************
  43.       SetupTimer
  44.     This function is registerd to KAPPA in the file 'kappa.c'.
  45. It can be called from KAL with 2 arguments:
  46.     1. Name of a KAL function
  47.     2. Timer interval (in milliseconds, greater than 100)
  48. It returns the MS-WINDOWS timer event identifier to be use
  49. with 'DeleteTimer'.
  50.  *********************************************************/
  51. short SetupTimer (ARGLIST lpArgs)
  52. {
  53.   short      i;
  54.   TIMERTABLE *pTmp;
  55.   ATOMID     idFunc;
  56.   WORD       wInterval;
  57.   static FARPROC lpTimerProc = LPNULL;
  58.  
  59.   if (lpTimerProc == LPNULL)
  60.     lpTimerProc = MakeProcInstance ((FARPROC) TimerProc, hInstKappa);
  61.  
  62.   KappaGetArgAtom (lpArgs, 1, idFunc);
  63.   KappaGetArgInt  (lpArgs, 2, wInterval);
  64.  
  65.   if (wInterval < 100)
  66.     wInterval = 100;
  67.  
  68.   for (i=0, pTmp = TimerTable; i<TABLESIZE; i++, pTmp++)
  69.     if (pTmp->nEvent == NULL)
  70.       {
  71.       pTmp->idFunc = idFunc;
  72.       pTmp->nEvent = SetTimer (NULL, NULL, wInterval, lpTimerProc);
  73.       KappaReturnInt (pTmp->nEvent);
  74.       }
  75.    KappaReturnFalse;
  76. }
  77.  
  78. /*********************************************************
  79.       SetupTimer
  80.     This function is registerd to KAPPA in the file 'kappa.c'.
  81. It can be called from KAL with 1 arguments:
  82.     1. Timer event identifier as returned by 'SetupTimer'
  83.  *********************************************************/
  84. short DeleteTimer (ARGLIST lpArgs)
  85. {
  86.   short i;
  87.   TIMERTABLE *pTmp;
  88.   int nEvent;
  89.  
  90.   KappaGetArgInt (lpArgs, 1, nEvent);
  91.  
  92.   for (i=0, pTmp = TimerTable; i<TABLESIZE; i++, pTmp++)
  93.     if (pTmp->nEvent == nEvent)
  94.       {
  95.       SetTimer (NULL, nEvent, NULL, NULL);
  96.       pTmp->nEvent = NULL;
  97.       pTmp->idFunc = NULLID;
  98.       KappaReturnTrue;
  99.       }
  100.  
  101.   KappaReturnFalse;
  102. }
  103.  
  104.