home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Dream 52
/
Amiga_Dream_52.iso
/
Linux
/
Enlightenment
/
enl14.tgz
/
enl14.tar
/
enl14
/
lists.c
< prev
next >
Wrap
C/C++ Source or Header
|
1997-11-06
|
3KB
|
183 lines
#include "enl.h"
void *FindItem(char *name, int type)
{
List *ptr;
ptr=lists.next;
while(ptr)
{
if ((ptr->type==type)&&(!strcmp(name,ptr->name)))
return ptr->item;
ptr=ptr->next;
}
return NULL;
}
void AddItem(void *item, char *name, int type)
{
List *ptr;
ptr=Emalloc(sizeof(List));
if (!ptr) return;
ptr->item=item;
ptr->name=duplicate(name);
ptr->type=type;
ptr->next=lists.next;
lists.next=ptr;
}
void *DelItem(char *name, int type)
{
List *ptr,*pptr;
void *p;
pptr=NULL;
ptr=lists.next;
while(ptr)
{
if ((ptr->type==type)&&(!strcmp(name,ptr->name)))
{
if (pptr)
pptr->next=ptr->next;
else
lists.next=ptr->next;
p=ptr->item;
Efree(ptr->name);
Efree(ptr);
return p;
}
pptr=ptr;
ptr=ptr->next;
}
return NULL;
}
char **ListItems(int *num, int type)
{
List *ptr;
int i,len;
char **list;
i=0;len=0;
list=NULL;
ptr=lists.next;
if (type!=LIST_TYPE_ANY)
{
while(ptr)
{
if (ptr->type==type) len++;
ptr=ptr->next;
}
}
else
{
while(ptr)
{
len++;
ptr=ptr->next;
}
}
list=Emalloc(len*sizeof(char *));
if (!list)
{
*num=0;
return NULL;
}
ptr=lists.next;
if (type!=LIST_TYPE_ANY)
{
while(ptr)
{
if (ptr->type==type)
{
list[i]=duplicate(ptr->name);
i++;
}
ptr=ptr->next;
}
}
else
{
while(ptr)
{
list[i]=duplicate(ptr->name);
i++;
ptr=ptr->next;
}
}
*num=len;
return list;
}
void *FindWindowID(Window win, int type, int *type_ret)
{
List *ptr;
if (!type_ret) return NULL;
ptr=lists.next;
while(ptr)
{
if (type!=LIST_TYPE_ANY)
{
switch (ptr->type)
{
case LIST_TYPE_ROOT:
break;
case LIST_TYPE_IMAGECLASS:
break;
case LIST_TYPE_BUTTON:
if ((((Button *)ptr->item)->X.win==win)&&(type==ptr->type))
return ptr->item;
break;
case LIST_TYPE_STRIP:
break;
case LIST_TYPE_SLIDERCLASS:
break;
case LIST_TYPE_SLIDER:
if ((((Slider *)ptr->item)->knobX.win==win)&&(type==ptr->type))
return ptr->item;
break;
default:
break;
}
}
else
{
if (ptr->type==type)
{
switch (ptr->type)
{
case LIST_TYPE_ROOT:
break;
case LIST_TYPE_IMAGECLASS:
break;
case LIST_TYPE_BUTTON:
if (((Button *)ptr->item)->X.win==win)
{
*type_ret=ptr->type;
return ptr->item;
}
break;
case LIST_TYPE_STRIP:
break;
case LIST_TYPE_SLIDERCLASS:
break;
case LIST_TYPE_SLIDER:
if (((Slider *)ptr->item)->knobX.win==win)
{
*type_ret=ptr->type;
return ptr->item;
}
break;
default:
break;
}
}
}
ptr=ptr->next;
}
*type_ret=LIST_TYPE_ANY;
return NULL;
}