home *** CD-ROM | disk | FTP | other *** search
/ Computer Club Elmshorn Atari PD / CCE_PD.iso / pc / 0600 / CCE_0678.ZIP / CCE_0678.PD / E_GEM135 / SOURCE / COOKIE.C < prev    next >
C/C++ Source or Header  |  1994-01-03  |  2KB  |  127 lines

  1.  
  2. #include <string.h>
  3. #include "e_gem.h"
  4.  
  5. static     long *get_cookiejar(void);
  6.  
  7. void create_cookie (COOKIE *cookie, long id, long value)
  8. {
  9.     *((long *) cookie)++ = id;
  10.     *((long *) cookie)++ = value;
  11. }
  12.  
  13. boolean    new_cookie (COOKIE *entry)
  14. {
  15.     reg long *cookiejar = get_cookiejar();
  16.     reg int  act_row = 0;
  17.     
  18.     if (cookiejar)
  19.     {        
  20.         while (*cookiejar)
  21.         {
  22.             cookiejar+=2;
  23.             act_row++;
  24.         }
  25.         
  26.         if (act_row < cookiejar[1])
  27.         {
  28.             cookiejar[2] = cookiejar[0];
  29.             cookiejar[3] = cookiejar[1];
  30.             
  31.             *cookiejar++ = *((long *) entry)++;
  32.             *cookiejar++ = *((long *) entry)++;
  33.             return(TRUE);
  34.         }
  35.     }
  36.     return(FALSE);
  37. }
  38.  
  39. boolean    get_cookie (long cookie, long *value)
  40. {
  41.     reg long *cookiejar = get_cookiejar();
  42.     
  43.     if (cookiejar)
  44.     {
  45.         while (*cookiejar)
  46.         {
  47.             if (*cookiejar==cookie)
  48.             {
  49.                 if (value)
  50.                     *value = *++cookiejar;
  51.                 return(TRUE);
  52.             }
  53.             cookiejar += 2;
  54.         }
  55.     }
  56.     return(FALSE);
  57. }
  58.  
  59. void remove_cookie (long cookie_id)
  60. {
  61.     reg long *cookiejar = get_cookiejar();
  62.     
  63.     if (cookiejar)
  64.     {    
  65.         while (*cookiejar && *cookiejar!=cookie_id)
  66.             cookiejar += 2;
  67.         
  68.         if (*cookiejar)
  69.         {
  70.             do
  71.             {
  72.                 *cookiejar++ = cookiejar[2];
  73.                 *cookiejar++ = cookiejar[2];
  74.             } while (*cookiejar);
  75.         }
  76.     }
  77. }
  78.  
  79. void move_cookiejar (long *dest, long size)
  80. {
  81.     reg long old_stack,*cookiejar,*dest_cop;
  82.     
  83.     old_stack = Super (NULL);
  84.     cookiejar = *((long **) 0x5a0l);
  85.  
  86.     if (cookiejar)
  87.     {
  88.         dest_cop = dest;
  89.         
  90.         do
  91.         {
  92.             *dest++ = *cookiejar++;
  93.             *dest++ = *cookiejar++;
  94.         } while (*cookiejar);
  95.         
  96.         *dest++ = *cookiejar;
  97.         *dest    = size;
  98.         
  99.         cookiejar = (long *) 0x5a0l;
  100.         *cookiejar = (long) dest_cop;
  101.     }
  102.     Super ((void *) old_stack);
  103. }
  104.  
  105. long cookie_size()
  106. {
  107.     reg long *cookiejar = get_cookiejar();
  108.     
  109.     if (cookiejar)
  110.     {
  111.         while (*cookiejar)
  112.             cookiejar+=2;
  113.         return(*++cookiejar);
  114.     }
  115.     return(0);
  116. }
  117.  
  118. long *get_cookiejar()
  119. {
  120.     reg long old_stack,*jar;
  121.     
  122.     old_stack = Super (NULL);
  123.     jar = *((long **) 0x5a0l);
  124.     Super ((void *) old_stack);
  125.     return (jar);
  126. }
  127.