#include "stringlist.h" #include "parser_typen.h" #include // erzeugt eine neue Stringliste und gibt einen Pointer auf das erste (und einzige) Listenelement zurueck */ struct stringlisten_eintrag *newstringlist(const char *initial_text) { struct stringlisten_eintrag *temp; // Speicher fuer die neue Liste und den Text allozieren temp=(struct stringlisten_eintrag*) malloc(sizeof(struct stringlisten_eintrag)); allokierter_speicher+=sizeof(struct stringlisten_eintrag); temp->text=(char *) malloc(strlen(initial_text)+1); allokierter_speicher+=strlen(initial_text)+1; // den Text in die Liste kopieren strcpy(temp->text,initial_text); // Am Anfang war die Erde wuest und leer, und es gab weder Vorgaenger noch Nachgaenger temp->next=NULL; temp->previous=NULL; return temp; } // fuegt hinter dem Listenelement 'stelle' ein neues Listenelement ein struct stringlisten_eintrag *stringlist_einfuegen(struct stringlisten_eintrag *einfuege_stelle,const char *text) { struct stringlisten_eintrag *temp; // Speicher fuer das neue Listenelement und den Text allozieren temp=(struct stringlisten_eintrag*) malloc(sizeof(struct stringlisten_eintrag)); allokierter_speicher+=sizeof(struct stringlisten_eintrag); temp->text=(char *) malloc(strlen(text)+1); allokierter_speicher+=strlen(text)+1; // die next- nzw. previous-Pointer der angrenzenden Elemente anpassen if (einfuege_stelle->next) { (einfuege_stelle->next)->previous=temp; } temp->next=einfuege_stelle->next; einfuege_stelle->next=temp; temp->previous=einfuege_stelle; // den Text kopieren strcpy(temp->text,text); return(temp); } // Fuegt hinter dem Ende der Stringlist den Text ein struct stringlisten_eintrag *stringlist_append(struct stringlisten_eintrag *slist,const char *text) { struct stringlisten_eintrag *temp=slist; while (temp->next) { temp=temp->next; } return(stringlist_einfuegen(temp,text)); } // gibt die Stringliste ab dem first_element aus void stringlist_ausgabe(struct stringlisten_eintrag *first_element) { struct stringlisten_eintrag *temp=first_element; while (temp) { printf ("%s",temp->text); temp=temp->next; } } // gibt den von der Stringliste belegten Speicher wieder frei void stringlist_freigeben(struct stringlisten_eintrag *first_element) { struct stringlisten_eintrag *temp=first_element; struct stringlisten_eintrag *temp2; while (temp) { if (temp->text) { freigegebener_speicher+=strlen(temp->text)+1; free(temp->text); } freigegebener_speicher+=sizeof(struct stringlisten_eintrag); temp2=temp->next; free(temp); temp=temp2; } }