list.c 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. /*
  2. * (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands.
  3. *
  4. * This product is part of the Amsterdam Compiler Kit.
  5. *
  6. * Permission to use, sell, duplicate or disclose this software must be
  7. * obtained in writing. Requests for such permissions may be sent to
  8. *
  9. * Dr. Andrew S. Tanenbaum
  10. * Wiskundig Seminarium
  11. * Vrije Universiteit
  12. * Postbox 7161
  13. * 1007 MC Amsterdam
  14. * The Netherlands
  15. *
  16. */
  17. #include "ack.h"
  18. #include "list.h"
  19. #ifndef NORCSID
  20. static char rcs_id[] = "$Header$" ;
  21. static char rcs_list[] = RCS_LIST ;
  22. #endif
  23. /* List handling, operations allowed:
  24. adding strings to the list,
  25. throwing away whole lists,
  26. linearize a list.
  27. Routines:
  28. l_add(header,string) Add an element to a list.
  29. header List header, list_head *
  30. string String pointer, char *
  31. the string is NOT copied
  32. l_clear(header) Delete an whole list.
  33. header List header, list_head *
  34. l_throw(header) Delete a list of strings.
  35. header List header, list_head *
  36. */
  37. l_add(header,string) list_head *header ; char *string ; {
  38. register list_elem *new;
  39. /* NOSTRICT */
  40. new= (list_elem *)getcore(sizeof *new);
  41. l_content(*new)= string ;
  42. /* NOSTRICT */
  43. l_next(*new)= (list_elem *)0 ;
  44. if ( !header->ca_first ) {
  45. header->ca_first= new ;
  46. } else {
  47. header->ca_last->ca_next= new ;
  48. }
  49. header->ca_last= new ;
  50. }
  51. l_clear(header) list_head *header ; {
  52. register list_elem *old, *next;
  53. for ( old=header->ca_first ; old ; old= next ) {
  54. next= old->ca_next ;
  55. freecore((char *)old) ;
  56. }
  57. header->ca_first= (list_elem *) 0 ;
  58. header->ca_last = (list_elem *) 0 ;
  59. }
  60. l_throw(header) list_head *header ; {
  61. register list_elem *old, *next;
  62. for ( old=header->ca_first ; old ; old= next ) {
  63. throws(l_content(*old)) ;
  64. next= old->ca_next ;
  65. freecore((char *)old) ;
  66. }
  67. header->ca_first= (list_elem *) 0 ;
  68. header->ca_last = (list_elem *) 0 ;
  69. }