aboutsummaryrefslogtreecommitdiffstats
path: root/stringlists.c
diff options
context:
space:
mode:
authorfishsoupisgood <github@madingley.org>2019-05-27 02:41:51 +0100
committerfishsoupisgood <github@madingley.org>2019-05-27 02:41:51 +0100
commit333b605b2afd472b823aeda0adf0e8b1ea9843c0 (patch)
treebc8f581317897e2e53f278f1716b4471fcdccd4f /stringlists.c
downloadasl-master.tar.gz
asl-master.tar.bz2
asl-master.zip
initial commit from asl-1.41r8.tar.gzHEADmaster
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