* as/z80/assym.c (mlookup): ignore case when looking up mnemonics
authorMaartenBrock <MaartenBrock@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Wed, 9 Aug 2006 12:30:18 +0000 (12:30 +0000)
committerMaartenBrock <MaartenBrock@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Wed, 9 Aug 2006 12:30:18 +0000 (12:30 +0000)
* as/z80/Makefile.in: added strcmpi.c
* as/z80/z80adr.c: added upper case registers and lower case conditionals
* support/Util/strcmpi.ch: added with intention to remove from mcs51/hc08

git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@4327 4a8a32a2-be11-0410-ad9d-d568d2c75423

ChangeLog
as/z80/Makefile.in
as/z80/assym.c
as/z80/z80adr.c
support/Util/strcmpi.c [new file with mode: 0644]
support/Util/strcmpi.h [new file with mode: 0644]

index b4f927259f170ae2cbc4d1c1538a6150fa0ee593..6e8f568cb5a133c7878df60d1ea0f7fb13b49bff 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2006-08-09 Maarten Brock <sourceforge.brock AT dse.nl>
+
+       * as/z80/assym.c (mlookup): ignore case when looking up mnemonics
+       * as/z80/Makefile.in: added strcmpi.c
+       * as/z80/z80adr.c: added upper case registers and lower case conditionals
+       * support/Util/strcmpi.ch: added with intention to remove from mcs51/hc08
+
 2006-08-08 Maarten Brock <sourceforge.brock AT dse.nl>
 
        * device/lib/gbz80/asm_strings.s,
index a7fc197353b08c3d34c4e66ebc22f84800e1ffff..f0295161ce11ca19b24640f9599eb156b5e19a28 100644 (file)
@@ -9,19 +9,19 @@ OBJDIR        = obj/$(EXT)
 
 SDC    = .
 
-SLIBSRC        = NewAlloc.c
+SLIBSRC        = NewAlloc.c strcmpi.c
 
 SRC    = asdata.c asexpr.c aslex.c aslist.c asmain.c asout.c \
          assubr.c assym.c z80adr.c z80ext.c z80mch.c z80pst.c
 
 OBJS   = $(SRC:%.c=$(OBJDIR)/%.o)
-SLIBOBJS       = $(SLIBSRC:%.c=$(OBJDIR)/%.o) 
+SLIBOBJS       = $(SLIBSRC:%.c=$(OBJDIR)/%.o)
 
 BINS   = $(BUILDDIR)/as$(EXT)$(EXEEXT)
 
 CFLAGS += $(CPPFLAGS) $(OPTS) -I. -DINDEXLIB -DMLH_MAP -DUNIX -DSDK
 CFLAGS += -funsigned-char
-CFLAGS += -I$(SLIB) 
+CFLAGS += -I$(SLIB)
 
 LDFLAGS += -lm $(EXTRALIBS)
 
index 04cbc7da501abfc14679ee70123e6b43bccec494..77e0c2682d9feca0b91df3804b6284e23f971dff 100644 (file)
@@ -14,6 +14,7 @@
 #include <string.h>
 #include <stdlib.h>
 #include "asm.h"
+#include "strcmpi.h"
 
 /*)Module      assym.c
  *
@@ -181,7 +182,7 @@ char *id;
        h = hash(id);
        mp = mnehash[h];
        while (mp) {
-               if (symeq(id, mp->m_id))
+               if (as_strcmpi(id, mp->m_id) == 0)      /* JLH: case insensitive */
                        return (mp);
                mp = mp->m_mp;
        }
@@ -382,7 +383,7 @@ register char *p1, *p2;
  *     side effects:
  *             none
  */
+
 int
 hash(p)
 register char *p;
index d47b8eba4c105f1b820d7e088c7a50753d85e5b9..58594b01d5824f2ec8cf4f5495a501fed7df10c2 100644 (file)
@@ -203,12 +203,21 @@ struct    adsym   R8[] = {
     { "h",     H|0400 },
     { "l",     L|0400 },
     { "a",     A|0400 },
+    { "B",     B|0400 },
+    { "C",     C|0400 },
+    { "D",     D|0400 },
+    { "E",     E|0400 },
+    { "H",     H|0400 },
+    { "L",     L|0400 },
+    { "A",     A|0400 },
     { "",      000 }
 };
 
 struct adsym   R8X[] = {
     { "i",     I|0400 },
     { "r",     R|0400 },
+    { "I",     I|0400 },
+    { "R",     R|0400 },
     { "",      000 }
 };
 
@@ -217,22 +226,34 @@ struct    adsym   R16[] = {
     { "de",    DE|0400 },
     { "hl",    HL|0400 },
     { "sp",    SP|0400 },
+    { "BC",    BC|0400 },
+    { "DE",    DE|0400 },
+    { "HL",    HL|0400 },
+    { "SP",    SP|0400 },
 #ifndef GAMEBOY
     { "ix",    IX|0400 },
     { "iy",    IY|0400 },
+    { "IX",    IX|0400 },
+    { "IY",    IY|0400 },
 #else /* GAMEBOY */
     { "hl-",   HLD|0400 },
     { "hl+",   HLI|0400 },
     { "hld",   HLD|0400 },
     { "hli",   HLI|0400 },
+    { "HL-",   HLD|0400 },
+    { "HL+",   HLI|0400 },
+    { "HLD",   HLD|0400 },
+    { "HLI",   HLI|0400 },
 #endif /* GAMEBOY */
     { "",      000 }
 };
 
 struct adsym   R16X[] = {
     { "af",    AF|0400 },
+    { "AF",     AF|0400 },
 #ifndef GAMEBOY
     { "af'",   AF|0400 },
+    { "AF'",   AF|0400 },
 #endif /* GAMEBOY */
     { "",      000 }
 };
@@ -246,11 +267,19 @@ struct    adsym   CND[] = {
     { "Z",     Z |0400 },
     { "NC",    NC|0400 },
     { "C",     CS|0400 },
+    { "nz",    NZ|0400 },
+    { "z",     Z |0400 },
+    { "nc",    NC|0400 },
+    { "c",     CS|0400 },
 #ifndef GAMEBOY
     { "PO",    PO|0400 },
     { "PE",    PE|0400 },
     { "P",     P |0400 },
     { "M",     M |0400 },
+    { "po",    PO|0400 },
+    { "pe",    PE|0400 },
+    { "p",     P |0400 },
+    { "m",     M |0400 },
 #endif /* GAMEBOY */
     { "",      000 }
 };
diff --git a/support/Util/strcmpi.c b/support/Util/strcmpi.c
new file mode 100644 (file)
index 0000000..c812ef0
--- /dev/null
@@ -0,0 +1,35 @@
+/* strcmpi.c */\r
+\r
+/*\r
+ * Compare two strings ignoring case.\r
+ *\r
+ * Taken from GLIBC 2.2.5. Original code is copyrighted "Free\r
+ * Software Foundation" and published under the GNU Lesser General\r
+ * Public License.\r
+ * \r
+ */\r
+\r
+#include <ctype.h>\r
+#include "strcmpi.h"\r
+\r
+int as_strcmpi (const char *s1, const char *s2)\r
+{\r
+  const unsigned char *p1 = (const unsigned char *) s1;\r
+  const unsigned char *p2 = (const unsigned char *) s2;\r
+  unsigned char c1, c2;\r
+\r
+  if (p1 == p2)\r
+    return 0;\r
+\r
+  do\r
+    {\r
+      c1 = tolower (*p1++);\r
+      c2 = tolower (*p2++);\r
+      if (c1 == '\0')\r
+       break;\r
+    }\r
+  while (c1 == c2);\r
+  \r
+  return c1 - c2;\r
+}\r
+\r
diff --git a/support/Util/strcmpi.h b/support/Util/strcmpi.h
new file mode 100644 (file)
index 0000000..b284f48
--- /dev/null
@@ -0,0 +1,3 @@
+/* strcmpi.h */\r
+\r
+int as_strcmpi (const char *s1, const char *s2);\r