--- /dev/null
+#ifndef SLIST_H\r
+#define SLIST_H\r
+\r
+/*\r
+ * SList.h\r
+ *\r
+ * SOFTWARE RIGHTS\r
+ *\r
+ * We reserve no LEGAL rights to SORCERER -- SORCERER is in the public\r
+ * domain. An individual or company may do whatever they wish with\r
+ * source code distributed with SORCERER or the code generated by\r
+ * SORCERER, including the incorporation of SORCERER, or its output, into\r
+ * commerical software.\r
+ *\r
+ * We encourage users to develop software with SORCERER. However, we do\r
+ * ask that credit is given to us for developing SORCERER. By "credit",\r
+ * we mean that if you incorporate our source code into one of your\r
+ * programs (commercial product, research project, or otherwise) that you\r
+ * acknowledge this fact somewhere in the documentation, research report,\r
+ * etc... If you like SORCERER and have developed a nice tool with the\r
+ * output, please mention that you developed it using SORCERER. In\r
+ * addition, we ask that this header remain intact in our source code.\r
+ * As long as these guidelines are kept, we expect to continue enhancing\r
+ * this system and expect to make other tools available as they are\r
+ * completed.\r
+ *\r
+ * SORCERER 1.00B\r
+ * Terence Parr\r
+ * AHPCRC, University of Minnesota\r
+ * 1992-1994\r
+ */\r
+\r
+#include "sorcerer.h"\r
+\r
+typedef struct _SList {\r
+ void *elem; /* pointer to any kind of element */\r
+ struct _SList *next;\r
+ } SList;\r
+\r
+#define newSList (SList *) calloc(1, sizeof(SList));\r
+\r
+#ifdef __USE_PROTOS\r
+extern void *slist_iterate(SList *list, SList **);\r
+extern void slist_add( SList **list, void *e );\r
+extern void slist_free(SList *list);\r
+#else\r
+extern void *slist_iterate();\r
+extern void slist_add();\r
+extern void slist_free();\r
+#endif\r
+\r
+#endif\r