From 333b605b2afd472b823aeda0adf0e8b1ea9843c0 Mon Sep 17 00:00:00 2001 From: fishsoupisgood Date: Mon, 27 May 2019 02:41:51 +0100 Subject: initial commit from asl-1.41r8.tar.gz --- stringlists.c | 151 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 151 insertions(+) create mode 100644 stringlists.c (limited to 'stringlists.c') diff --git a/stringlists.c b/stringlists.c new file mode 100644 index 0000000..8b2092c --- /dev/null +++ b/stringlists.c @@ -0,0 +1,151 @@ +/* stringlists.c */ +/*****************************************************************************/ +/* AS-Portierung */ +/* */ +/* Implementation von String-Listen */ +/* */ +/* Historie: 5. 4.1996 Grundsteinlegung */ +/* */ +/*****************************************************************************/ + +#include "stdinc.h" +#include +#include "strutil.h" +#include "stringlists.h" + + void InitStringList(StringList *List) +BEGIN + *List=Nil; +END + + void ClearStringEntry(StringRecPtr *Elem) +BEGIN + free((*Elem)->Content); free(*Elem); *Elem=Nil; +END + + void ClearStringList(StringList *List) +BEGIN + StringRecPtr Hilf; + + while (*List!=Nil) + BEGIN + Hilf=(*List); *List=(*List)->Next; + ClearStringEntry(&Hilf); + END +END + + void AddStringListFirst(StringList *List, char *NewStr) +BEGIN + StringRecPtr Neu; + + Neu=(StringRecPtr) malloc(sizeof(StringRec)); + Neu->Content=strdup(NewStr); + Neu->Next=(*List); + *List=Neu; +END + + void AddStringListLast(StringList *List, char *NewStr) +BEGIN + StringRecPtr Neu,Lauf; + + Neu=(StringRecPtr) malloc(sizeof(StringRec)); + Neu->Content=strdup(NewStr); Neu->Next=Nil; + if (*List==Nil) *List=Neu; + else + BEGIN + Lauf=(*List); while (Lauf->Next!=Nil) Lauf=Lauf->Next; + Lauf->Next=Neu; + END +END + + void RemoveStringList(StringList *List, char *OldStr) +BEGIN + StringRecPtr Lauf,Hilf; + + if (*List==Nil) return; + if (strcmp((*List)->Content,OldStr)==0) + BEGIN + Hilf=(*List); *List=(*List)->Next; ClearStringEntry(&Hilf); + END + else + BEGIN + Lauf=(*List); + while ((Lauf->Next!=Nil) AND (strcmp(Lauf->Next->Content,OldStr)!=0)) Lauf=Lauf->Next; + if (Lauf->Next!=Nil) + BEGIN + Hilf=Lauf->Next; Lauf->Next=Hilf->Next; ClearStringEntry(&Hilf); + END + END +END + + char *GetStringListFirst(StringList List, StringRecPtr *Lauf) +BEGIN + static char *Dummy="",*tmp; + + *Lauf=List; + if (*Lauf==Nil) return Dummy; + else + BEGIN + tmp=(*Lauf)->Content; + *Lauf=(*Lauf)->Next; + return tmp; + END +END + + char *GetStringListNext(StringRecPtr *Lauf) +BEGIN + static char *Dummy="",*tmp; + + if (*Lauf==Nil) return Dummy; + else + BEGIN + tmp=(*Lauf)->Content; + *Lauf=(*Lauf)->Next; + return tmp; + END +END + + char *GetAndCutStringList(StringList *List) +BEGIN + StringRecPtr Hilf; + static String Result; + + if (*List==Nil) Result[0]='\0'; + else + BEGIN + Hilf=(*List); *List=(*List)->Next; + strmaxcpy(Result,Hilf->Content,255); + free(Hilf->Content); free(Hilf); + END + return Result; +END + + Boolean StringListEmpty(StringList List) +BEGIN + return (List==Nil); +END + + StringList DuplicateStringList(StringList Src) +BEGIN + StringRecPtr Lauf; + StringList Dest; + + InitStringList(&Dest); + if (Src!=Nil) + BEGIN + AddStringListLast(&Dest,GetStringListFirst(Src,&Lauf)); + while (Lauf!=Nil) + AddStringListLast(&Dest,GetStringListNext(&Lauf)); + END + return Dest; +END + + Boolean StringListPresent(StringList List, char *Search) +BEGIN + while ((List!=Nil) AND (strcmp(List->Content,Search)!=0)) List=List->Next; + return (List!=Nil); +END + + void stringlists_init(void) +BEGIN +END -- cgit v1.2.3