]> git.sur5r.net Git - cc65/commitdiff
New module strstack
authorcuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sun, 7 Mar 2004 22:09:06 +0000 (22:09 +0000)
committercuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sun, 7 Mar 2004 22:09:06 +0000 (22:09 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@2904 b7a2c559-68d2-44c3-8de9-860c34a00d81

src/common/intstack.c
src/common/intstack.h
src/common/make/gcc.mak
src/common/make/watcom.mak
src/common/strstack.c [new file with mode: 0644]
src/common/strstack.h [new file with mode: 0644]

index 00077f7767843d9e56d128549ac71b98ffd3a6cf..ecb43030a78dd1428d67b8c5782886a5b26eb93d 100644 (file)
@@ -63,11 +63,11 @@ void IS_Set (IntStack* S, long Val)
 
 
 
-long IS_Pop (IntStack* S)
-/* Pop a value from an int stack */
+void IS_Drop (IntStack* S)
+/* Drop a value from an int stack */
 {
     CHECK (S->Count > 1);
-    return S->Stack[--S->Count];
+    --S->Count;
 }
 
 
index 732b3814227ee8ad59a6afce9fc39d9e2a6f6704..a03be9b2c681c2538e1278526d2c661909f5b479 100644 (file)
@@ -91,8 +91,8 @@ long IS_Get (const IntStack* S);
 void IS_Set (IntStack* S, long Val);
 /* Set the value on top of an int stack */
 
-long IS_Pop (IntStack* S);
-/* Pop a value from an int stack */
+void IS_Drop (IntStack* S);
+/* Drop a value from an int stack */
 
 void IS_Push (IntStack* S, long Val);
 /* Push a value onto an int stack */
index 594764bce0b129912e3559dc29aad875e3177266..073532ce994b5cc44e9e6b5991be4de740224be3 100644 (file)
@@ -34,6 +34,7 @@ OBJS =        abend.o         \
         shift.o         \
        strbuf.o        \
         strpool.o       \
+        strstack.o      \
        strutil.o       \
        target.o        \
        tgttrans.o      \
index ce2e9d4402ec3f9072d65ca9f1a95eda26bfafac..9a271f7da124516b2d182bbbf8d2f21ec131b676 100644 (file)
@@ -79,6 +79,7 @@ OBJS =        abend.obj       \
         shift.obj       \
        strbuf.obj      \
         strpool.obj     \
+        strstack.obj    \
        strutil.obj     \
        target.obj      \
        tgttrans.obj    \
diff --git a/src/common/strstack.c b/src/common/strstack.c
new file mode 100644 (file)
index 0000000..c316399
--- /dev/null
@@ -0,0 +1,85 @@
+/*****************************************************************************/
+/*                                                                           */
+/*                                strstack.c                                 */
+/*                                                                           */
+/*                  String stack used for program settings                   */
+/*                                                                           */
+/*                                                                           */
+/*                                                                           */
+/* (C) 2004      Ullrich von Bassewitz                                       */
+/*               Römerstraße 52                                              */
+/*               D-70794 Filderstadt                                         */
+/* EMail:        uz@cc65.org                                                 */
+/*                                                                           */
+/*                                                                           */
+/* This software is provided 'as-is', without any expressed or implied       */
+/* warranty.  In no event will the authors be held liable for any damages    */
+/* arising from the use of this software.                                    */
+/*                                                                           */
+/* Permission is granted to anyone to use this software for any purpose,     */
+/* including commercial applications, and to alter it and redistribute it    */
+/* freely, subject to the following restrictions:                            */
+/*                                                                           */
+/* 1. The origin of this software must not be misrepresented; you must not   */
+/*    claim that you wrote the original software. If you use this software   */
+/*    in a product, an acknowledgment in the product documentation would be  */
+/*    appreciated but is not required.                                       */
+/* 2. Altered source versions must be plainly marked as such, and must not   */
+/*    be misrepresented as being the original software.                      */
+/* 3. This notice may not be removed or altered from any source              */
+/*    distribution.                                                          */
+/*                                                                           */
+/*****************************************************************************/
+
+
+                    
+/* common */
+#include "check.h"
+#include "strstack.h"
+#include "xmalloc.h"
+            
+
+
+/*****************************************************************************/
+/*                                   Code                                    */
+/*****************************************************************************/
+
+
+
+const char* SS_Get (const StrStack* S)
+/* Get the value on top of a string stack */
+{
+    CHECK (S->Count > 0);
+    return S->Stack[S->Count-1];
+}
+
+
+
+void SS_Set (StrStack* S, const char* Val)
+/* Set the value on top of a string stack */
+{
+    CHECK (S->Count > 0);
+    xfree (S->Stack[S->Count-1]);
+    S->Stack[S->Count-1] = xstrdup (Val);
+}
+
+
+
+void SS_Drop (StrStack* S)
+/* Drop a value from a string stack */
+{
+    CHECK (S->Count > 1);
+    xfree (S->Stack[--S->Count]);
+}
+
+
+
+void SS_Push (StrStack* S, const char* Val)
+/* Push a value onto a string stack */
+{
+    CHECK (S->Count < sizeof (S->Stack) / sizeof (S->Stack[0]));
+    S->Stack[S->Count++] = xstrdup (Val);
+}
+
+
+
diff --git a/src/common/strstack.h b/src/common/strstack.h
new file mode 100644 (file)
index 0000000..6331241
--- /dev/null
@@ -0,0 +1,106 @@
+/*****************************************************************************/
+/*                                                                           */
+/*                                strstack.h                                 */
+/*                                                                           */
+/*                  String stack used for program settings                   */
+/*                                                                           */
+/*                                                                           */
+/*                                                                           */
+/* (C) 2004      Ullrich von Bassewitz                                       */
+/*               Römerstraße 52                                              */
+/*               D-70794 Filderstadt                                         */
+/* EMail:        uz@cc65.org                                                 */
+/*                                                                           */
+/*                                                                           */
+/* This software is provided 'as-is', without any expressed or implied       */
+/* warranty.  In no event will the authors be held liable for any damages    */
+/* arising from the use of this software.                                    */
+/*                                                                           */
+/* Permission is granted to anyone to use this software for any purpose,     */
+/* including commercial applications, and to alter it and redistribute it    */
+/* freely, subject to the following restrictions:                            */
+/*                                                                           */
+/* 1. The origin of this software must not be misrepresented; you must not   */
+/*    claim that you wrote the original software. If you use this software   */
+/*    in a product, an acknowledgment in the product documentation would be  */
+/*    appreciated but is not required.                                       */
+/* 2. Altered source versions must be plainly marked as such, and must not   */
+/*    be misrepresented as being the original software.                      */
+/* 3. This notice may not be removed or altered from any source              */
+/*    distribution.                                                          */
+/*                                                                           */
+/*****************************************************************************/
+
+
+
+#ifndef STRSTACK_H
+#define STRSTACK_H
+
+
+
+#include "inline.h"
+
+
+
+/*****************************************************************************/
+/*                                   Data                                    */
+/*****************************************************************************/
+
+
+
+typedef struct StrStack StrStack;
+struct StrStack {
+    unsigned    Count;
+    char*       Stack[8];
+};
+
+/* Declare an empty string stack */
+#define STRSTACK()      { 0 };
+
+
+
+/*****************************************************************************/
+/*                                   Code                                    */
+/*****************************************************************************/
+
+
+
+#if defined(HAVE_INLINE)
+INLINE int SS_IsFull (const StrStack* S)
+/* Return true if there is no space left on the given string stack */
+{
+    return (S->Count >= sizeof (S->Stack) / sizeof (S->Stack[0]));
+}
+#else
+#  define SS_IsFull(S)  ((S)->Count >= sizeof ((S)->Stack) / sizeof ((S)->Stack[0]))
+#endif
+
+#if defined(HAVE_INLINE)
+INLINE unsigned SS_GetCount (const StrStack* S)
+/* Return the number of elements on the given string stack */
+{
+    return S->Count;
+}
+#else
+#  define SS_GetCount(S)        (S)->Count
+#endif
+
+const char* SS_Get (const StrStack* S);
+/* Get the value on top of a string stack */
+
+void SS_Set (StrStack* S, const char* Val);
+/* Set the value on top of a string stack */
+
+void SS_Drop (StrStack* S);
+/* Drop a value from a string stack */
+
+void SS_Push (StrStack* S, const char* Val);
+/* Push a value onto a string stack */
+
+
+
+/* End of strstack.h */
+#endif
+
+
+