aboutsummaryrefslogtreecommitdiffstats
path: root/stringlists.c
diff options
context:
space:
mode:
Diffstat (limited to 'stringlists.c')
-rw-r--r--stringlists.c151
1 files changed, 151 insertions, 0 deletions
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 <string.h>
+#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