/* * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. * See the copyright notice in the ACK home directory, in the file "Copyright". * */ #include #include #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_throw(header) Delete a list of strings. header List header, list_head * */ void l_add(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 ; } void l_clear(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 ; } void l_throw(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 ; }