home *** CD-ROM | disk | FTP | other *** search
/ Dream 52 / Amiga_Dream_52.iso / Linux / Enlightenment / enl14.tgz / enl14.tar / enl14 / lists.c < prev    next >
C/C++ Source or Header  |  1997-11-06  |  3KB  |  183 lines

  1. #include "enl.h"
  2.  
  3. void *FindItem(char *name, int type)
  4. {
  5.    List *ptr;
  6.    
  7.    ptr=lists.next;
  8.    while(ptr)
  9.      {
  10.     if ((ptr->type==type)&&(!strcmp(name,ptr->name)))
  11.            return ptr->item;
  12.     ptr=ptr->next;
  13.      }
  14.    return NULL;
  15. }
  16.  
  17. void AddItem(void *item, char *name, int type)
  18. {
  19.    List *ptr;
  20.  
  21.    ptr=Emalloc(sizeof(List));
  22.    if (!ptr) return;
  23.    ptr->item=item;
  24.    ptr->name=duplicate(name);
  25.    ptr->type=type;
  26.    ptr->next=lists.next;
  27.    lists.next=ptr;
  28. }
  29.  
  30. void *DelItem(char *name, int type)
  31. {
  32.    List *ptr,*pptr;
  33.    void *p;
  34.    
  35.    pptr=NULL;
  36.    ptr=lists.next;
  37.    while(ptr)
  38.      {
  39.     if ((ptr->type==type)&&(!strcmp(name,ptr->name)))
  40.       {
  41.          if (pptr)
  42.            pptr->next=ptr->next;
  43.          else
  44.            lists.next=ptr->next;
  45.          p=ptr->item;
  46.          Efree(ptr->name);
  47.          Efree(ptr);
  48.          return p;
  49.       }
  50.     pptr=ptr;
  51.     ptr=ptr->next;
  52.      }
  53.    return NULL;
  54. }
  55.  
  56. char **ListItems(int *num, int type)
  57. {
  58.    List *ptr;
  59.    int i,len;
  60.    char **list;
  61.    
  62.    i=0;len=0;
  63.    list=NULL;
  64.    ptr=lists.next;
  65.    if (type!=LIST_TYPE_ANY) 
  66.      {
  67.     while(ptr) 
  68.       {
  69.          if (ptr->type==type) len++;
  70.          ptr=ptr->next;
  71.       }
  72.      }
  73.    else
  74.      {     
  75.     while(ptr) 
  76.       {
  77.          len++;
  78.          ptr=ptr->next;
  79.       }
  80.      }
  81.    list=Emalloc(len*sizeof(char *));
  82.    if (!list) 
  83.      {
  84.     *num=0;
  85.     return NULL;
  86.      }
  87.    ptr=lists.next;
  88.    if (type!=LIST_TYPE_ANY) 
  89.      {
  90.     while(ptr) 
  91.       {
  92.          if (ptr->type==type)
  93.            {
  94.           list[i]=duplicate(ptr->name);
  95.           i++;
  96.            }
  97.          ptr=ptr->next;
  98.       }
  99.      }
  100.    else
  101.      {
  102.     while(ptr) 
  103.       {
  104.          list[i]=duplicate(ptr->name);
  105.          i++;
  106.          ptr=ptr->next;
  107.       }
  108.      }
  109.    *num=len;
  110.    return list;
  111. }
  112.  
  113. void *FindWindowID(Window win, int type, int *type_ret)
  114. {
  115.    List *ptr;
  116.    
  117.    if (!type_ret) return NULL;
  118.    ptr=lists.next;
  119.    while(ptr)
  120.      {
  121.     if (type!=LIST_TYPE_ANY)
  122.       {
  123.          switch (ptr->type)
  124.            {
  125.         case LIST_TYPE_ROOT:
  126.           break;
  127.         case LIST_TYPE_IMAGECLASS:
  128.           break;
  129.         case LIST_TYPE_BUTTON:
  130.           if ((((Button *)ptr->item)->X.win==win)&&(type==ptr->type))
  131.             return ptr->item;
  132.           break;
  133.         case LIST_TYPE_STRIP:
  134.           break;
  135.         case LIST_TYPE_SLIDERCLASS:
  136.           break;
  137.         case LIST_TYPE_SLIDER:
  138.           if ((((Slider *)ptr->item)->knobX.win==win)&&(type==ptr->type))
  139.             return ptr->item;
  140.           break;
  141.         default:
  142.           break;
  143.            }
  144.       }
  145.     else
  146.       {
  147.          if (ptr->type==type)
  148.            {
  149.           switch (ptr->type)
  150.             {
  151.              case LIST_TYPE_ROOT:
  152.                break;
  153.              case LIST_TYPE_IMAGECLASS:
  154.                break;
  155.              case LIST_TYPE_BUTTON:
  156.                if (((Button *)ptr->item)->X.win==win)
  157.              {
  158.                 *type_ret=ptr->type;
  159.                 return ptr->item;
  160.              }
  161.                break;
  162.              case LIST_TYPE_STRIP:
  163.                break;
  164.              case LIST_TYPE_SLIDERCLASS:
  165.                break;
  166.              case LIST_TYPE_SLIDER:
  167.                if (((Slider *)ptr->item)->knobX.win==win)
  168.              {
  169.                 *type_ret=ptr->type;
  170.                 return ptr->item;
  171.              }
  172.                break;
  173.              default:
  174.                break;
  175.             }
  176.            }
  177.       }
  178.     ptr=ptr->next;
  179.      }
  180.    *type_ret=LIST_TYPE_ANY;
  181.    return NULL;
  182. }
  183.