/* * (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands. * * This product is part of the Amsterdam Compiler Kit. * * Permission to use, sell, duplicate or disclose this software must be * obtained in writing. Requests for such permissions may be sent to * * Dr. Andrew S. Tanenbaum * Wiskundig Seminarium * Vrije Universiteit * Postbox 7161 * 1007 MC Amsterdam * The Netherlands * */ #include "ack.h" #include "list.h" /* List handling, operations allowed: adding strings to the list, throwing away whole lists, linearize a list. Routines: l_add(header,string) Add an element to a list. header List header, list_head * string String pointer, char * the string is NOT copied l_clear(header) Delete an whole list. header List header, list_head * */ l_add(header,string) list_head *header ; char *string ; { register list_elem *new; /* NOSTRICT */ new= (list_elem *)getcore(sizeof *new); l_content(*new)= string ; /* NOSTRICT */ l_next(*new)= (list_elem *)0 ; if ( !header->ca_first ) { header->ca_first= new ; } else { header->ca_last->ca_next= new ; } header->ca_last= new ; } l_clear(header) list_head *header ; { register list_elem *old, *next; for ( old=header->ca_first ; old ; old= next ) { next= old->ca_next ; freecore((char *)old) ; } header->ca_first= (list_elem *) 0 ; header->ca_last = (list_elem *) 0 ; } l_throw(header) list_head *header ; { register list_elem *old, *next; for ( old=header->ca_first ; old ; old= next ) { throws(l_content(*old)) ; next= old->ca_next ; freecore((char *)old) ; } header->ca_first= (list_elem *) 0 ; header->ca_last = (list_elem *) 0 ; }