list.c 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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. */
  35. l_add(header,string) list_head *header ; char *string ; {
  36. register list_elem *new;
  37. /* NOSTRICT */
  38. new= (list_elem *)getcore(sizeof *new);
  39. l_content(*new)= string ;
  40. /* NOSTRICT */
  41. l_next(*new)= (list_elem *)0 ;
  42. if ( !header->ca_first ) {
  43. header->ca_first= new ;
  44. } else {
  45. header->ca_last->ca_next= new ;
  46. }
  47. header->ca_last= new ;
  48. }
  49. l_clear(header) list_head *header ; {
  50. register list_elem *old, *next;
  51. for ( old=header->ca_first ; old ; old= next ) {
  52. next= old->ca_next ;
  53. freecore((char *)old) ;
  54. }
  55. header->ca_first= (list_elem *) 0 ;
  56. header->ca_last = (list_elem *) 0 ;
  57. }
  58. l_throw(header) list_head *header ; {
  59. register list_elem *old, *next;
  60. for ( old=header->ca_first ; old ; old= next ) {
  61. throws(l_content(*old)) ;
  62. next= old->ca_next ;
  63. freecore((char *)old) ;
  64. }
  65. header->ca_first= (list_elem *) 0 ;
  66. header->ca_last = (list_elem *) 0 ;
  67. }