home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1998 September / VPR9809B.ISO / APUPDATE / VC / Tx300d / TX300D.LZH / CONTEXT.CI < prev    next >
Text File  |  1996-03-22  |  1KB  |  78 lines

  1.  
  2. //1.00F CONTEXT -> CONTEXTTX
  3. // MAXCONTEXTTX    最大コンテキスト数(#define)
  4. // CONTEXTTX    コンテキストタイプ(#define or typedef)
  5.  
  6. static CONTEXTTX tcontext[MAXCONTEXTTX];
  7. static BYTE tfcontext[MAXCONTEXTTX];
  8. static int ncontext = 0;
  9.  
  10. static void contextInit(void)
  11. {
  12.     ncontext = 0;
  13. }
  14.  
  15. static CONTEXTTX *contextNew(void)
  16. {
  17.     int i = ncontext;
  18.     
  19.     if (ncontext >= MAXCONTEXTTX) return NULL;
  20.     if (tfcontext[i]) {
  21.         for (i = 0;i < MAXCONTEXTTX;i++) {
  22.             if (!tfcontext[i]) break;
  23.         }
  24.     }
  25.     //
  26.     ncontext++;
  27.     tfcontext[i] = 1;
  28.     memset(tcontext + i,0,sizeof(CONTEXTTX));
  29.     return tcontext + i++;
  30. }
  31.  
  32. static BOOL contextCheck(CONTEXTTX *context)
  33. {
  34.     long d = (LPBYTE)context - (LPBYTE)tcontext;
  35.     
  36.     if (
  37.         (0 <= d && d < sizeof(CONTEXTTX) * MAXCONTEXTTX) &&
  38.         (d % sizeof(CONTEXTTX) == 0) &&
  39.         tfcontext[context - tcontext] == 1
  40.     ) {
  41.         return TRUE;
  42.     }
  43. #ifndef __NOTX__
  44.     attention("%s:無効なハンドルが渡されました",__FILE__);
  45. #endif
  46.     return FALSE;
  47. }
  48.  
  49. static BOOL contextDelete(CONTEXTTX *context)
  50. {
  51.     if (!contextCheck(context)) return FALSE;
  52.     tfcontext[context - tcontext] = 0;
  53.     ncontext--;
  54.     return TRUE;
  55. }
  56.  
  57. static int contextGetCount(void)
  58. {
  59.     return ncontext;
  60. }
  61.  
  62. static CONTEXTTX *contextRead(int icontext)
  63. {
  64.     if (0 <= icontext && icontext < ncontext) {
  65.         int i;
  66.         int j = 0;
  67.         
  68.         for (i = 0;;i++) {
  69.             if (tfcontext[i]) {
  70.                 if (j == icontext) return tcontext + i;
  71.                 j++;
  72.             }
  73.         }
  74.     }
  75.     return NULL;
  76. }
  77.  
  78.