home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 5 Edit / 05-Edit.zip / jove414s.zip / list.c < prev    next >
C/C++ Source or Header  |  1991-07-06  |  2KB  |  105 lines

  1. #include "jove.h"
  2. #include "list.h"
  3.  
  4. extern char    *emalloc();
  5.  
  6. private List *
  7. list_new()
  8. {
  9.     List    *new;
  10.  
  11.     new = (List *) emalloc(sizeof (List));
  12.     new->car = NIL;
  13.     return new;
  14. }
  15.  
  16. /* push an object to the beginning of list */
  17.  
  18. Element *
  19. list_push(list, element)
  20. /* register */ List    **list;
  21. Element    *element;
  22. {
  23.     List    *new;
  24.  
  25.     new = list_new();
  26.     new->cdr = *list;
  27.     new->car = element;
  28.     *list = new;
  29.     return element;
  30. }
  31.  
  32. Element *
  33. list_pop(list)
  34. List    **list;
  35. {
  36.     List    *cell;
  37.     Element    *element;
  38.  
  39.     if (*list == NIL)
  40.         return NIL;
  41.     cell = *list;
  42.     element = cell->car;
  43.     free((char *) cell);
  44.     *list = (*list)->cdr;
  45.  
  46.     return element;
  47. }
  48.  
  49. #ifdef    NEVER
  50. Element *
  51. list_remove(list_head, element)
  52. List    **list_head;
  53. Element    *element;
  54. {
  55.     /* register */ List    *cp = *list_head,
  56.             *prev = NIL;
  57.  
  58.     while (cp != NIL) {
  59.         if (cp->car == element)
  60.             break;
  61.         prev = cp;
  62.         cp = cp->cdr;
  63.     }
  64.     if (cp == NIL)
  65.         return NIL;
  66.     if (prev == NIL)
  67.         *list_head = (*list_head)->cdr;
  68.     else
  69.         prev->cdr = cp->cdr;
  70.  
  71.     return element;
  72. }
  73.  
  74. Element *
  75. list_append(list, element)
  76. List    **list;
  77. Element    *element;
  78. {
  79.     List    *new, *lp;
  80.  
  81.     lp = *list;
  82.     if (lp == NIL)
  83.         return list_push(list, element);
  84.  
  85.     while (lp->cdr != NIL)
  86.         lp = lp->cdr;
  87.     new = list_new();
  88.     lp->cdr = new;
  89.     new->car = element;
  90.  
  91.     return element;
  92. }
  93.  
  94. Element *
  95. list_find(list, element)
  96. List    *list;
  97. Element    *element;
  98. {
  99.     while (list != NIL)
  100.         if (list->car == element)
  101.             return element;
  102.     return NIL;
  103. }
  104. #endif    /* NEVER */
  105.