]> git.sur5r.net Git - cc65/commitdiff
Renamed the config file to info file and changed the handling when the
authorcuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sat, 9 Aug 2003 08:28:44 +0000 (08:28 +0000)
committercuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sat, 9 Aug 2003 08:28:44 +0000 (08:28 +0000)
disassembler is invoked.

git-svn-id: svn://svn.cc65.org/cc65/trunk@2255 b7a2c559-68d2-44c3-8de9-860c34a00d81

src/da65/config.c [deleted file]
src/da65/config.h [deleted file]
src/da65/infofile.c [new file with mode: 0644]
src/da65/infofile.h [new file with mode: 0644]
src/da65/main.c
src/da65/make/gcc.mak
src/da65/make/watcom.mak
src/da65/scanner.c
src/da65/scanner.h

diff --git a/src/da65/config.c b/src/da65/config.c
deleted file mode 100644 (file)
index f6fefab..0000000
+++ /dev/null
@@ -1,432 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                config.c                                  */
-/*                                                                           */
-/*                Disassembler configuration file handling                  */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000     Ullrich von Bassewitz                                        */
-/*              Wacholderweg 14                                              */
-/*              D-70597 Stuttgart                                            */
-/* EMail:       uz@musoftware.de                                             */
-/*                                                                           */
-/*                                                                           */
-/* 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.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <string.h>
-#if defined(_MSC_VER)
-/* Microsoft compiler */
-#  include <io.h>
-#else
-/* Anyone else */
-#  include <unistd.h>
-#endif
-
-/* common */
-#include "xmalloc.h"
-
-/* da65 */
-#include "attrtab.h"
-#include "error.h"
-#include "global.h"
-#include "scanner.h"
-#include "config.h"
-
-
-
-/*****************************************************************************/
-/*                                          Code                                    */
-/*****************************************************************************/
-
-
-
-static void GlobalSection (void)
-/* Parse a global section */
-{
-    static const IdentTok GlobalDefs[] = {
-               {   "INPUTNAME",        CFGTOK_INPUTNAME        },
-       {   "OUTPUTNAME",       CFGTOK_OUTPUTNAME       },
-       {   "PAGELENGTH",       CFGTOK_PAGELENGTH       },
-       {   "STARTADDR",        CFGTOK_STARTADDR        },
-    };
-
-    /* Skip the token */
-    CfgNextTok ();
-
-    /* Expect the opening curly brace */
-    CfgConsumeLCurly ();
-
-    /* Look for section tokens */
-    while (CfgTok != CFGTOK_RCURLY) {
-
-       /* Convert to special token */
-               CfgSpecialToken (GlobalDefs, ENTRY_COUNT (GlobalDefs), "Global directive");
-
-       /* Look at the token */
-       switch (CfgTok) {
-
-           case CFGTOK_INPUTNAME:
-               CfgNextTok ();
-               CfgAssureStr ();
-               if (InFile) {
-                   CfgError ("Input file name already given");
-               }
-               InFile = xstrdup (CfgSVal);
-               CfgNextTok ();
-               break;
-
-           case CFGTOK_OUTPUTNAME:
-               CfgNextTok ();
-               CfgAssureStr ();
-               if (OutFile) {
-                   CfgError ("Output file name already given");
-               }
-               OutFile = xstrdup (CfgSVal);
-               CfgNextTok ();
-               break;
-
-           case CFGTOK_PAGELENGTH:
-               CfgNextTok ();
-               CfgAssureInt ();
-               if (CfgIVal != -1) {
-                   CfgRangeCheck (MIN_PAGE_LEN, MAX_PAGE_LEN);
-               }
-               PageLength = CfgIVal;
-               CfgNextTok ();
-               break;
-
-           case CFGTOK_STARTADDR:
-               CfgNextTok ();
-               CfgAssureInt ();
-               CfgRangeCheck (0x0000, 0xFFFF);
-               StartAddr = CfgIVal;
-               CfgNextTok ();
-               break;
-
-       }
-
-       /* Directive is followed by a semicolon */
-       CfgConsumeSemi ();
-
-    }
-
-    /* Consume the closing brace */
-    CfgConsumeRCurly ();
-}
-
-
-
-static void RangeSection (void)
-/* Parse a range section */
-{
-    static const IdentTok RangeDefs[] = {
-               {   "START",            CFGTOK_START    },
-       {   "END",              CFGTOK_END      },
-       {   "TYPE",             CFGTOK_TYPE     },
-    };
-
-    static const IdentTok TypeDefs[] = {
-       {   "CODE",             CFGTOK_CODE     },
-       {   "BYTETABLE",        CFGTOK_BYTETAB  },
-       {   "WORDTABLE",        CFGTOK_WORDTAB  },
-       {   "DWORDTABLE",       CFGTOK_DWORDTAB },
-       {   "ADDRTABLE",        CFGTOK_ADDRTAB  },
-       {   "RTSTABLE",         CFGTOK_RTSTAB   },
-       {   "TEXTTABLE",        CFGTOK_TEXTTAB  },
-    };
-
-
-    /* Which values did we get? */
-    enum {
-       tNone   = 0x00,
-       tStart  = 0x01,
-       tEnd    = 0x02,
-       tType   = 0x04,
-       tAll    = 0x07
-    } Needed = tNone;
-
-    /* Locals - initialize to avoid gcc warnings */
-    unsigned Start     = 0;
-    unsigned End       = 0;
-    unsigned char Type = 0;
-
-    /* Skip the token */
-    CfgNextTok ();
-
-    /* Expect the opening curly brace */
-    CfgConsumeLCurly ();
-
-    /* Look for section tokens */
-    while (CfgTok != CFGTOK_RCURLY) {
-
-       /* Convert to special token */
-               CfgSpecialToken (RangeDefs, ENTRY_COUNT (RangeDefs), "Range directive");
-
-       /* Look at the token */
-       switch (CfgTok) {
-
-           case CFGTOK_START:
-               CfgNextTok ();
-               CfgAssureInt ();
-               CfgRangeCheck (0x0000, 0xFFFF);
-               Start = CfgIVal;
-               Needed |= tStart;
-               CfgNextTok ();
-               break;
-
-           case CFGTOK_END:
-               CfgNextTok ();
-               CfgAssureInt ();
-               CfgRangeCheck (0x0000, 0xFFFF);
-               End = CfgIVal;
-               Needed |= tEnd;
-               CfgNextTok ();
-               break;
-
-           case CFGTOK_TYPE:
-               CfgNextTok ();
-               CfgSpecialToken (TypeDefs, ENTRY_COUNT (TypeDefs), "Type");
-               switch (CfgTok) {
-                   case CFGTOK_CODE:           Type = atCode;          break;
-                   case CFGTOK_BYTETAB:        Type = atByteTab;       break;
-                   case CFGTOK_WORDTAB:        Type = atWordTab;       break;
-                   case CFGTOK_DWORDTAB:       Type = atDWordTab;      break;
-                   case CFGTOK_ADDRTAB:        Type = atAddrTab;       break;
-                           case CFGTOK_RTSTAB:         Type = atRtsTab;        break;
-                   case CFGTOK_TEXTTAB:        Type = atTextTab;       break;
-               }
-               Needed |= tType;
-               CfgNextTok ();
-               break;
-       }
-
-       /* Directive is followed by a semicolon */
-       CfgConsumeSemi ();
-
-    }
-
-    /* Did we get all required values? */
-    if (Needed != tAll) {
-       CfgError ("Required values missing from this section");
-    }
-
-    /* Start must be less than end */
-    if (Start > End) {
-       CfgError ("Start value must not be greater than end value");
-    }
-
-    /* Set the range */
-    MarkRange (Start, End, Type);
-
-    /* Consume the closing brace */
-    CfgConsumeRCurly ();
-}
-
-
-
-static void LabelSection (void)
-/* Parse a label section */
-{
-    static const IdentTok LabelDefs[] = {
-               {   "NAME",     CFGTOK_NAME     },
-       {   "ADDR",     CFGTOK_ADDR     },
-               {   "SIZE",     CFGTOK_SIZE     },
-    };
-
-    /* Locals - initialize to avoid gcc warnings */
-    char* Name = 0;
-    long Value = -1;
-    long Size  = -1;
-
-    /* Skip the token */
-    CfgNextTok ();
-
-    /* Expect the opening curly brace */
-    CfgConsumeLCurly ();
-
-    /* Look for section tokens */
-    while (CfgTok != CFGTOK_RCURLY) {
-
-       /* Convert to special token */
-               CfgSpecialToken (LabelDefs, ENTRY_COUNT (LabelDefs), "Label directive");
-
-       /* Look at the token */
-       switch (CfgTok) {
-
-           case CFGTOK_NAME:
-               CfgNextTok ();
-               if (Name) {
-                   CfgError ("Name already given");
-               }
-               CfgAssureStr ();
-               if (CfgSVal[0] == '\0') {
-                   CfgError ("Name may not be empty");
-               }
-               Name = xstrdup (CfgSVal);
-               CfgNextTok ();
-               break;
-
-           case CFGTOK_ADDR:
-               CfgNextTok ();
-               if (Value >= 0) {
-                   CfgError ("Value already given");
-               }
-               CfgAssureInt ();
-               CfgRangeCheck (0, 0xFFFF);
-               Value = CfgIVal;
-               CfgNextTok ();
-               break;
-
-           case CFGTOK_SIZE:
-               CfgNextTok ();
-               if (Size >= 0) {
-                   CfgError ("Size already given");
-               }
-               CfgAssureInt ();
-               CfgRangeCheck (1, 0x10000);
-               Size = CfgIVal;
-               CfgNextTok ();
-               break;
-
-       }
-
-       /* Directive is followed by a semicolon */
-       CfgConsumeSemi ();
-    }
-
-    /* Did we get the necessary data */
-    if (Name == 0) {
-       CfgError ("Label name is missing");
-    }
-    if (Value < 0) {
-       CfgError ("Label value is missing");
-    }
-    if (Size < 0) {
-       /* Use default */
-       Size = 1;
-    }
-    if (Value + Size > 0x10000) {
-       CfgError ("Invalid size (address out of range)");
-    }
-    if (HaveLabel ((unsigned) Value)) {
-       CfgError ("Label for address $%04lX already defined", Value);
-    }
-
-    /* Define the label */
-    AddLabel ((unsigned) Value, atExtLabel, Name);
-
-    /* Define dependent labels if necessary */
-    if (Size > 1) {
-       unsigned Offs;
-
-       /* Allocate memory for the dependent label names */
-       unsigned NameLen = strlen (Name);
-       char*    DepName = xmalloc (NameLen + 7);
-       char*    DepOffs = DepName + NameLen + 1;
-
-       /* Copy the original name into the buffer */
-       memcpy (DepName, Name, NameLen);
-       DepName[NameLen] = '+';
-
-       /* Define the labels */
-       for (Offs = 1; Offs < (unsigned) Size; ++Offs) {
-           sprintf (DepOffs, "%u", Offs);
-           AddLabel ((unsigned) Value+Offs, atDepLabel, DepName);
-       }
-
-       /* Free the name buffer */
-       xfree (DepName);
-    }
-
-    /* Delete the dynamically allocated memory for Name */
-    xfree (Name);
-
-    /* Consume the closing brace */
-    CfgConsumeRCurly ();
-}
-
-
-
-static void CfgParse (void)
-/* Parse the config file */
-{
-    static const IdentTok Globals[] = {
-       {   "GLOBAL",   CFGTOK_GLOBAL   },
-       {   "RANGE",    CFGTOK_RANGE    },
-       {   "LABEL",    CFGTOK_LABEL    },
-    };
-
-    while (CfgTok != CFGTOK_EOF) {
-
-       /* Convert an identifier into a token */
-       CfgSpecialToken (Globals, ENTRY_COUNT (Globals), "Config directive");
-
-       /* Check the token */
-       switch (CfgTok) {
-
-           case CFGTOK_GLOBAL:
-               GlobalSection ();
-               break;
-
-           case CFGTOK_RANGE:
-               RangeSection ();
-               break;
-
-           case CFGTOK_LABEL:
-               LabelSection ();
-               break;
-
-       }
-
-       /* Semicolon expected */
-       CfgConsumeSemi ();
-    }
-}
-
-
-
-void CfgRead (void)
-/* Read the configuration if a configuration file exists */
-{
-    /* Check if we have a config file given */
-    if (!CfgAvail() || access (CfgGetName(), 0) != 0) {
-       /* No name given or file not found */
-       return;
-    }
-
-    /* Open the config file */
-    CfgOpenInput ();
-
-    /* Parse the config file */
-    CfgParse ();
-
-    /* Close the file */
-    CfgCloseInput ();
-}
-
-
-
-
-
-
diff --git a/src/da65/config.h b/src/da65/config.h
deleted file mode 100644 (file)
index 3822792..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                config.h                                  */
-/*                                                                           */
-/*                Disassembler configuration file handling                  */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000     Ullrich von Bassewitz                                        */
-/*              Wacholderweg 14                                              */
-/*              D-70597 Stuttgart                                            */
-/* EMail:       uz@musoftware.de                                             */
-/*                                                                           */
-/*                                                                           */
-/* 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 CONFIG_H
-#define CONFIG_H
-
-
-
-/*****************************************************************************/
-/*                                          Code                                    */
-/*****************************************************************************/
-
-
-
-void CfgRead (void);                                    
-/* Read the configuration if a configuration file exists */
-
-
-
-/* End of config.h */
-#endif
-
-
-
diff --git a/src/da65/infofile.c b/src/da65/infofile.c
new file mode 100644 (file)
index 0000000..c9e0863
--- /dev/null
@@ -0,0 +1,429 @@
+/*****************************************************************************/
+/*                                                                           */
+/*                                infofile.h                                 */
+/*                                                                           */
+/*                      Disassembler info file handling                      */
+/*                                                                           */
+/*                                                                           */
+/*                                                                           */
+/* (C) 2000-2003 Ullrich von Bassewitz                                       */
+/*               Römerstrasse 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.                                                          */
+/*                                                                           */
+/*****************************************************************************/
+
+
+
+#include <stdio.h>
+#include <string.h>
+#if defined(_MSC_VER)
+/* Microsoft compiler */
+#  include <io.h>
+#else
+/* Anyone else */
+#  include <unistd.h>
+#endif
+
+/* common */
+#include "xmalloc.h"
+
+/* da65 */
+#include "attrtab.h"
+#include "error.h"
+#include "global.h"
+#include "infofile.h"
+#include "scanner.h"
+
+
+
+/*****************************************************************************/
+/*                                          Code                                    */
+/*****************************************************************************/
+
+
+
+static void GlobalSection (void)
+/* Parse a global section */
+{
+    static const IdentTok GlobalDefs[] = {
+               {   "INPUTNAME",        INFOTOK_INPUTNAME       },
+       {   "OUTPUTNAME",       INFOTOK_OUTPUTNAME      },
+       {   "PAGELENGTH",       INFOTOK_PAGELENGTH      },
+       {   "STARTADDR",        INFOTOK_STARTADDR       },
+    };
+
+    /* Skip the token */
+    InfoNextTok ();
+
+    /* Expect the opening curly brace */
+    InfoConsumeLCurly ();
+
+    /* Look for section tokens */
+    while (InfoTok != INFOTOK_RCURLY) {
+
+       /* Convert to special token */
+               InfoSpecialToken (GlobalDefs, ENTRY_COUNT (GlobalDefs), "Global directive");
+
+       /* Look at the token */
+       switch (InfoTok) {
+
+           case INFOTOK_INPUTNAME:
+               InfoNextTok ();
+               InfoAssureStr ();
+               if (InFile) {
+                   InfoError ("Input file name already given");
+               }
+               InFile = xstrdup (InfoSVal);
+               InfoNextTok ();
+               break;
+
+           case INFOTOK_OUTPUTNAME:
+               InfoNextTok ();
+               InfoAssureStr ();
+               if (OutFile) {
+                   InfoError ("Output file name already given");
+               }
+               OutFile = xstrdup (InfoSVal);
+               InfoNextTok ();
+               break;
+
+           case INFOTOK_PAGELENGTH:
+               InfoNextTok ();
+               InfoAssureInt ();
+               if (InfoIVal != -1) {
+                   InfoRangeCheck (MIN_PAGE_LEN, MAX_PAGE_LEN);
+               }
+               PageLength = InfoIVal;
+               InfoNextTok ();
+               break;
+
+           case INFOTOK_STARTADDR:
+               InfoNextTok ();
+               InfoAssureInt ();
+               InfoRangeCheck (0x0000, 0xFFFF);
+               StartAddr = InfoIVal;
+               InfoNextTok ();
+               break;
+
+       }
+
+       /* Directive is followed by a semicolon */
+       InfoConsumeSemi ();
+
+    }
+
+    /* Consume the closing brace */
+    InfoConsumeRCurly ();
+}
+
+
+
+static void RangeSection (void)
+/* Parse a range section */
+{
+    static const IdentTok RangeDefs[] = {
+               {   "START",            INFOTOK_START   },
+       {   "END",              INFOTOK_END     },
+       {   "TYPE",             INFOTOK_TYPE    },
+    };
+
+    static const IdentTok TypeDefs[] = {
+       {   "CODE",             INFOTOK_CODE     },
+       {   "BYTETABLE",        INFOTOK_BYTETAB  },
+       {   "WORDTABLE",        INFOTOK_WORDTAB  },
+       {   "DWORDTABLE",       INFOTOK_DWORDTAB },
+       {   "ADDRTABLE",        INFOTOK_ADDRTAB  },
+       {   "RTSTABLE",         INFOTOK_RTSTAB   },
+       {   "TEXTTABLE",        INFOTOK_TEXTTAB  },
+    };
+
+
+    /* Which values did we get? */
+    enum {
+       tNone   = 0x00,
+       tStart  = 0x01,
+       tEnd    = 0x02,
+       tType   = 0x04,
+       tAll    = 0x07
+    } Needed = tNone;
+
+    /* Locals - initialize to avoid gcc warnings */
+    unsigned Start     = 0;
+    unsigned End       = 0;
+    unsigned char Type = 0;
+
+    /* Skip the token */
+    InfoNextTok ();
+
+    /* Expect the opening curly brace */
+    InfoConsumeLCurly ();
+
+    /* Look for section tokens */
+    while (InfoTok != INFOTOK_RCURLY) {
+
+       /* Convert to special token */
+               InfoSpecialToken (RangeDefs, ENTRY_COUNT (RangeDefs), "Range directive");
+
+       /* Look at the token */
+       switch (InfoTok) {
+
+           case INFOTOK_START:
+               InfoNextTok ();
+               InfoAssureInt ();
+               InfoRangeCheck (0x0000, 0xFFFF);
+               Start = InfoIVal;
+               Needed |= tStart;
+               InfoNextTok ();
+               break;
+
+           case INFOTOK_END:
+               InfoNextTok ();
+               InfoAssureInt ();
+               InfoRangeCheck (0x0000, 0xFFFF);
+               End = InfoIVal;
+               Needed |= tEnd;
+               InfoNextTok ();
+               break;
+
+           case INFOTOK_TYPE:
+               InfoNextTok ();
+               InfoSpecialToken (TypeDefs, ENTRY_COUNT (TypeDefs), "Type");
+               switch (InfoTok) {
+                   case INFOTOK_CODE:          Type = atCode;          break;
+                   case INFOTOK_BYTETAB:       Type = atByteTab;       break;
+                   case INFOTOK_WORDTAB:       Type = atWordTab;       break;
+                   case INFOTOK_DWORDTAB:      Type = atDWordTab;      break;
+                   case INFOTOK_ADDRTAB:       Type = atAddrTab;       break;
+                           case INFOTOK_RTSTAB:        Type = atRtsTab;        break;
+                   case INFOTOK_TEXTTAB:       Type = atTextTab;       break;
+               }
+               Needed |= tType;
+               InfoNextTok ();
+               break;
+       }
+
+       /* Directive is followed by a semicolon */
+       InfoConsumeSemi ();
+
+    }
+
+    /* Did we get all required values? */
+    if (Needed != tAll) {
+       InfoError ("Required values missing from this section");
+    }
+
+    /* Start must be less than end */
+    if (Start > End) {
+       InfoError ("Start value must not be greater than end value");
+    }
+
+    /* Set the range */
+    MarkRange (Start, End, Type);
+
+    /* Consume the closing brace */
+    InfoConsumeRCurly ();
+}
+
+
+
+static void LabelSection (void)
+/* Parse a label section */
+{
+    static const IdentTok LabelDefs[] = {
+               {   "NAME",     INFOTOK_NAME    },
+       {   "ADDR",     INFOTOK_ADDR    },
+               {   "SIZE",     INFOTOK_SIZE    },
+    };
+
+    /* Locals - initialize to avoid gcc warnings */
+    char* Name = 0;
+    long Value = -1;
+    long Size  = -1;
+
+    /* Skip the token */
+    InfoNextTok ();
+
+    /* Expect the opening curly brace */
+    InfoConsumeLCurly ();
+
+    /* Look for section tokens */
+    while (InfoTok != INFOTOK_RCURLY) {
+
+       /* Convert to special token */
+               InfoSpecialToken (LabelDefs, ENTRY_COUNT (LabelDefs), "Label directive");
+
+       /* Look at the token */
+       switch (InfoTok) {
+
+           case INFOTOK_NAME:
+               InfoNextTok ();
+               if (Name) {
+                   InfoError ("Name already given");
+               }
+               InfoAssureStr ();
+               if (InfoSVal[0] == '\0') {
+                   InfoError ("Name may not be empty");
+               }
+               Name = xstrdup (InfoSVal);
+               InfoNextTok ();
+               break;
+
+           case INFOTOK_ADDR:
+               InfoNextTok ();
+               if (Value >= 0) {
+                   InfoError ("Value already given");
+               }
+               InfoAssureInt ();
+               InfoRangeCheck (0, 0xFFFF);
+               Value = InfoIVal;
+               InfoNextTok ();
+               break;
+
+           case INFOTOK_SIZE:
+               InfoNextTok ();
+               if (Size >= 0) {
+                   InfoError ("Size already given");
+               }
+               InfoAssureInt ();
+               InfoRangeCheck (1, 0x10000);
+               Size = InfoIVal;
+               InfoNextTok ();
+               break;
+
+       }
+
+       /* Directive is followed by a semicolon */
+       InfoConsumeSemi ();
+    }
+
+    /* Did we get the necessary data */
+    if (Name == 0) {
+       InfoError ("Label name is missing");
+    }
+    if (Value < 0) {
+       InfoError ("Label value is missing");
+    }
+    if (Size < 0) {
+       /* Use default */
+       Size = 1;
+    }
+    if (Value + Size > 0x10000) {
+       InfoError ("Invalid size (address out of range)");
+    }
+    if (HaveLabel ((unsigned) Value)) {
+       InfoError ("Label for address $%04lX already defined", Value);
+    }
+
+    /* Define the label */
+    AddLabel ((unsigned) Value, atExtLabel, Name);
+
+    /* Define dependent labels if necessary */
+    if (Size > 1) {
+       unsigned Offs;
+
+       /* Allocate memory for the dependent label names */
+       unsigned NameLen = strlen (Name);
+       char*    DepName = xmalloc (NameLen + 7);
+       char*    DepOffs = DepName + NameLen + 1;
+
+       /* Copy the original name into the buffer */
+       memcpy (DepName, Name, NameLen);
+       DepName[NameLen] = '+';
+
+       /* Define the labels */
+       for (Offs = 1; Offs < (unsigned) Size; ++Offs) {
+           sprintf (DepOffs, "%u", Offs);
+           AddLabel ((unsigned) Value+Offs, atDepLabel, DepName);
+       }
+
+       /* Free the name buffer */
+       xfree (DepName);
+    }
+
+    /* Delete the dynamically allocated memory for Name */
+    xfree (Name);
+
+    /* Consume the closing brace */
+    InfoConsumeRCurly ();
+}
+
+
+
+static void InfoParse (void)
+/* Parse the config file */
+{
+    static const IdentTok Globals[] = {
+       {   "GLOBAL",   INFOTOK_GLOBAL  },
+       {   "RANGE",    INFOTOK_RANGE   },
+       {   "LABEL",    INFOTOK_LABEL   },
+    };
+
+    while (InfoTok != INFOTOK_EOF) {
+
+       /* Convert an identifier into a token */
+       InfoSpecialToken (Globals, ENTRY_COUNT (Globals), "Config directive");
+
+       /* Check the token */
+       switch (InfoTok) {
+
+           case INFOTOK_GLOBAL:
+               GlobalSection ();
+               break;
+
+           case INFOTOK_RANGE:
+               RangeSection ();
+               break;
+
+           case INFOTOK_LABEL:
+               LabelSection ();
+               break;
+
+       }
+
+       /* Semicolon expected */
+       InfoConsumeSemi ();
+    }
+}
+
+
+
+void ReadInfoFile (void)
+/* Read the info file */
+{
+    /* Check if we have a info file given */
+    if (InfoAvail()) {
+        /* Open the config file */
+        InfoOpenInput ();
+
+        /* Parse the config file */
+        InfoParse ();
+
+        /* Close the file */
+        InfoCloseInput ();
+    }
+}
+
+
+
+
+
+
diff --git a/src/da65/infofile.h b/src/da65/infofile.h
new file mode 100644 (file)
index 0000000..a39a02d
--- /dev/null
@@ -0,0 +1,56 @@
+/*****************************************************************************/
+/*                                                                           */
+/*                                infofile.h                                 */
+/*                                                                           */
+/*                      Disassembler info file handling                      */
+/*                                                                           */
+/*                                                                           */
+/*                                                                           */
+/* (C) 2000-2003 Ullrich von Bassewitz                                       */
+/*               Römerstrasse 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 INFOFILE_H
+#define INFOFILE_H
+
+
+
+/*****************************************************************************/
+/*                                          Code                                    */
+/*****************************************************************************/
+
+
+
+void ReadInfoFile (void);
+/* Read the info file */
+
+
+
+/* End of infofile.h */
+#endif
+
+
+
index 0a9e0bcd9942ebcdf6853204e00b4bcb9d2ec2e9..ea8dea6272689231f886c45e59643741092f234a 100644 (file)
 /* da65 */
 #include "attrtab.h"
 #include "code.h"
-#include "config.h"
 #include "data.h"
 #include "error.h"
 #include "global.h"
+#include "infofile.h"
 #include "opctable.h"
 #include "output.h"
 #include "scanner.h"
@@ -74,6 +74,7 @@ static void Usage (void)
             "Short options:\n"
                     "  -g\t\t\tAdd debug info to object file\n"
                     "  -h\t\t\tHelp (this text)\n"
+             "  -i name\t\tSpecify an info file\n"
                     "  -o name\t\tName the output file\n"
                     "  -v\t\t\tIncrease verbosity\n"
                     "  -F\t\t\tAdd formfeeds to the output\n"
@@ -85,6 +86,7 @@ static void Usage (void)
                     "  --debug-info\t\tAdd debug info to object file\n"
             "  --formfeeds\t\tAdd formfeeds to the output\n"
             "  --help\t\tHelp (this text)\n"
+             "  --info name\t\tSpecify an info file\n"
                     "  --pagelength n\tSet the page length for the listing\n"
                     "  --start-addr addr\tSet the start/load address\n"
                     "  --verbose\t\tIncrease verbosity\n"
@@ -159,6 +161,14 @@ static void OptHelp (const char* Opt attribute ((unused)),
 
 
 
+static void OptInfo (const char* Opt attribute ((unused)), const char* Arg)
+/* Handle the --info option */
+{
+    InfoSetName (Arg);
+}
+
+
+
 static void OptPageLength (const char* Opt attribute ((unused)), const char* Arg)
 /* Handle the --pagelength option */
 {
@@ -222,7 +232,7 @@ static void OneOpcode (unsigned RemainingBytes)
     if (GetStyleAttr (PC) == atDefault) {
        if (D->Size > RemainingBytes) {
            MarkAddr (PC, atIllegal);
-               } else if (D->Flags & flIllegal) {  
+               } else if (D->Flags & flIllegal) {
            MarkAddr (PC, atIllegal);
        } else {
            unsigned I;
@@ -320,6 +330,7 @@ int main (int argc, char* argv [])
                { "--debug-info",       0,      OptDebugInfo            },
        { "--formfeeds",        0,      OptFormFeeds            },
        { "--help",             0,      OptHelp                 },
+               { "--info",             1,      OptInfo                 },
        { "--pagelength",       1,      OptPageLength           },
        { "--start-addr",       1,      OptStartAddr            },
        { "--verbose",          0,      OptVerbose              },
@@ -354,6 +365,10 @@ int main (int argc, char* argv [])
                    OptHelp (Arg, 0);
                    break;
 
+                       case 'i':
+                           OptInfo (Arg, GetArg (&I, 2));
+                           break;
+
                        case 'o':
                            OutFile = GetArg (&I, 2);
                            break;
@@ -395,13 +410,8 @@ int main (int argc, char* argv [])
        AbEnd ("No input file");
     }
 
-    /* Make the config file name from the input file if none was given */
-    if (!CfgAvail ()) {
-       CfgSetName (MakeFilename (InFile, CfgExt));
-    }
-
     /* Try to read the configuration file */
-    CfgRead ();
+    ReadInfoFile ();
 
     /* Make the output file name from the input file name if none was given */
     if (OutFile == 0) {
index 9f98eee83b3c37ce550d7f490b2ec58767d8ba3d..d2d38a8a1bb1bb93656b1d51411f968582ffb928 100644 (file)
@@ -12,11 +12,11 @@ LDFLAGS=
 
 OBJS =         attrtab.o       \
        code.o          \
-       config.o        \
        data.o          \
        error.o         \
        global.o        \
        handler.o       \
+       infofile.o      \
        main.o          \
         opc6502.o       \
         opc65816.o      \
index cab12ff5104cf69dde240b601b2ee125e8dd21d5..3468706c670486169ac17f4825e373ec4f12080e 100644 (file)
@@ -45,14 +45,18 @@ CFLAGS  += -i=..\common
 
 OBJS =         attrtab.obj     \
        code.obj        \
-       config.obj      \
        cpu.obj         \
        data.obj        \
        error.obj       \
        global.obj      \
        handler.obj     \
+       infofile.obj    \
        main.obj        \
-       opctable.obj    \
+        opc6502.obj     \
+        opc65816.obj    \
+        opc65c02.obj    \
+        opc65sc02.obj   \
+       opctable.obj    \
        output.obj      \
        scanner.obj
 
index eca7ef692743a441007b5968485d66d29de5ba86..6d1315fafc6940b628784ca809e3280a19d55b51 100644 (file)
@@ -6,10 +6,10 @@
 /*                                                                           */
 /*                                                                           */
 /*                                                                           */
-/* (C) 2000      Ullrich von Bassewitz                                       */
-/*               Wacholderweg 14                                             */
-/*               D-70597 Stuttgart                                           */
-/* EMail:        uz@musoftware.de                                            */
+/* (C) 2000-2003 Ullrich von Bassewitz                                       */
+/*               Römerstrasse 52                                             */
+/*               D-70794 Filderstadt                                         */
+/* EMail:        uz@cc65.org                                                 */
 /*                                                                           */
 /*                                                                           */
 /* This software is provided 'as-is', without any expressed or implied       */
@@ -37,7 +37,6 @@
 #include <stdio.h>
 #include <string.h>
 #include <errno.h>
-#include <ctype.h>
 
 /* common */
 #include "chartype.h"
 
 
 /* Current token and attributes */
-unsigned        CfgTok;
-char                   CfgSVal [CFG_MAX_IDENT_LEN+1];
-long            CfgIVal;
+unsigned        InfoTok;
+char                   InfoSVal [CFG_MAX_IDENT_LEN+1];
+long            InfoIVal;
 
 /* Error location */
-unsigned               CfgErrorLine;
-unsigned               CfgErrorCol;
+unsigned               InfoErrorLine;
+unsigned               InfoErrorCol;
 
 /* Input sources for the configuration */
-static const char*             CfgFile         = 0;
-static const char*      CfgBuf                 = 0;
+static const char*             InfoFile        = 0;
 
 /* Other input stuff */
 static int                     C               = ' ';
@@ -83,7 +81,7 @@ static FILE*                  InputFile       = 0;
 
 
 
-void CfgWarning (const char* Format, ...)
+void InfoWarning (const char* Format, ...)
 /* Print a warning message adding file name and line number of the config file */
 {
     char Buf [512];
@@ -93,12 +91,12 @@ void CfgWarning (const char* Format, ...)
     xvsprintf (Buf, sizeof (Buf), Format, ap);
     va_end (ap);
 
-    Warning ("%s(%u): %s", CfgFile, CfgErrorLine, Buf);
+    Warning ("%s(%u): %s", InfoFile, InfoErrorLine, Buf);
 }
 
 
 
-void CfgError (const char* Format, ...)
+void InfoError (const char* Format, ...)
 /* Print an error message adding file name and line number of the config file */
 {
     char Buf [512];
@@ -108,7 +106,7 @@ void CfgError (const char* Format, ...)
     xvsprintf (Buf, sizeof (Buf), Format, ap);
     va_end (ap);
 
-    Error ("%s(%u): %s", CfgFile, CfgErrorLine, Buf);
+    Error ("%s(%u): %s", InfoFile, InfoErrorLine, Buf);
 }
 
 
@@ -122,18 +120,8 @@ void CfgError (const char* Format, ...)
 static void NextChar (void)
 /* Read the next character from the input file */
 {
-    if (CfgBuf) {
-       /* Read from buffer */
-       C = (unsigned char)(*CfgBuf);
-       if (C == 0) {
-           C = EOF;
-       } else {
-           ++CfgBuf;
-       }
-    } else {
-       /* Read from the file */
-       C = getc (InputFile);
-    }
+    /* Read from the file */
+    C = getc (InputFile);
 
     /* Count columns */
     if (C != EOF) {
@@ -152,7 +140,7 @@ static void NextChar (void)
 static unsigned DigitVal (int C)
 /* Return the value for a numeric digit */
 {
-    if (isdigit (C)) {
+    if (IsDigit (C)) {
        return C - '0';
     } else {
        return toupper (C) - 'A' + 10;
@@ -161,7 +149,7 @@ static unsigned DigitVal (int C)
 
 
 
-void CfgNextTok (void)
+void InfoNextTok (void)
 /* Read the next token from the input stream */
 {
     unsigned I;
@@ -169,13 +157,13 @@ void CfgNextTok (void)
 
 Again:
     /* Skip whitespace */
-    while (isspace (C)) {
+    while (IsSpace (C)) {
        NextChar ();
     }
 
     /* Remember the current position */
-    CfgErrorLine = InputLine;
-    CfgErrorCol  = InputCol;
+    InfoErrorLine = InputLine;
+    InfoErrorCol  = InputCol;
 
     /* Identifier? */
     if (C == '_' || IsAlpha (C)) {
@@ -184,38 +172,38 @@ Again:
        I = 0;
        while (C == '_' || IsAlNum (C)) {
            if (I < CFG_MAX_IDENT_LEN) {
-               CfgSVal [I++] = C;
+               InfoSVal [I++] = C;
            }
            NextChar ();
        }
-       CfgSVal [I] = '\0';
-       CfgTok = CFGTOK_IDENT;
+       InfoSVal [I] = '\0';
+       InfoTok = INFOTOK_IDENT;
        return;
     }
 
     /* Hex number? */
     if (C == '$') {
        NextChar ();
-       if (!isxdigit (C)) {
-           CfgError ("Hex digit expected");
+       if (!IsXDigit (C)) {
+           InfoError ("Hex digit expected");
        }
-       CfgIVal = 0;
-       while (isxdigit (C)) {
-                   CfgIVal = CfgIVal * 16 + DigitVal (C);
+       InfoIVal = 0;
+       while (IsXDigit (C)) {
+                   InfoIVal = InfoIVal * 16 + DigitVal (C);
            NextChar ();
        }
-       CfgTok = CFGTOK_INTCON;
+       InfoTok = INFOTOK_INTCON;
        return;
     }
 
     /* Decimal number? */
-    if (isdigit (C)) {
-       CfgIVal = 0;
-       while (isdigit (C)) {
-                   CfgIVal = CfgIVal * 10 + DigitVal (C);
+    if (IsDigit (C)) {
+       InfoIVal = 0;
+       while (IsDigit (C)) {
+                   InfoIVal = InfoIVal * 10 + DigitVal (C);
            NextChar ();
        }
-       CfgTok = CFGTOK_INTCON;
+       InfoTok = INFOTOK_INTCON;
        return;
     }
 
@@ -224,37 +212,37 @@ Again:
 
        case '{':
            NextChar ();
-           CfgTok = CFGTOK_LCURLY;
+           InfoTok = INFOTOK_LCURLY;
            break;
 
        case '}':
            NextChar ();
-           CfgTok = CFGTOK_RCURLY;
+           InfoTok = INFOTOK_RCURLY;
            break;
 
        case ';':
            NextChar ();
-           CfgTok = CFGTOK_SEMI;
+           InfoTok = INFOTOK_SEMI;
            break;
 
        case '.':
            NextChar ();
-           CfgTok = CFGTOK_DOT;
+           InfoTok = INFOTOK_DOT;
            break;
 
        case ',':
            NextChar ();
-           CfgTok = CFGTOK_COMMA;
+           InfoTok = INFOTOK_COMMA;
            break;
 
        case '=':
            NextChar ();
-           CfgTok = CFGTOK_EQ;
+           InfoTok = INFOTOK_EQ;
            break;
 
         case ':':
            NextChar ();
-           CfgTok = CFGTOK_COLON;
+           InfoTok = INFOTOK_COLON;
            break;
 
         case '\"':
@@ -262,16 +250,16 @@ Again:
            I = 0;
            while (C != '\"') {
                if (C == EOF || C == '\n') {
-                   CfgError ("Unterminated string");
+                   InfoError ("Unterminated string");
                }
                if (I < CFG_MAX_IDENT_LEN) {
-                   CfgSVal [I++] = C;
+                   InfoSVal [I++] = C;
                }
                NextChar ();
            }
                    NextChar ();
-           CfgSVal [I] = '\0';
-           CfgTok = CFGTOK_STRCON;
+           InfoSVal [I] = '\0';
+           InfoTok = INFOTOK_STRCON;
            break;
 
         case '#':
@@ -282,143 +270,143 @@ Again:
            if (C != EOF) {
                goto Again;
            }
-           CfgTok = CFGTOK_EOF;
+           InfoTok = INFOTOK_EOF;
            break;
 
         case EOF:
-           CfgTok = CFGTOK_EOF;
+           InfoTok = INFOTOK_EOF;
            break;
 
        default:
-           CfgError ("Invalid character `%c'", C);
+           InfoError ("Invalid character `%c'", C);
 
     }
 }
 
 
 
-void CfgConsume (unsigned T, const char* Msg)
+void InfoConsume (unsigned T, const char* Msg)
 /* Skip a token, print an error message if not found */
 {
-    if (CfgTok != T) {
-               CfgError (Msg);
+    if (InfoTok != T) {
+               InfoError (Msg);
     }
-    CfgNextTok ();
+    InfoNextTok ();
 }
 
 
 
-void CfgConsumeLCurly (void)
+void InfoConsumeLCurly (void)
 /* Consume a left curly brace */
 {
-    CfgConsume (CFGTOK_LCURLY, "`{' expected");
+    InfoConsume (INFOTOK_LCURLY, "`{' expected");
 }
 
 
 
-void CfgConsumeRCurly (void)
+void InfoConsumeRCurly (void)
 /* Consume a right curly brace */
 {
-    CfgConsume (CFGTOK_RCURLY, "`}' expected");
+    InfoConsume (INFOTOK_RCURLY, "`}' expected");
 }
 
 
 
-void CfgConsumeSemi (void)
+void InfoConsumeSemi (void)
 /* Consume a semicolon */
 {
-    CfgConsume (CFGTOK_SEMI, "`;' expected");
+    InfoConsume (INFOTOK_SEMI, "`;' expected");
 }
 
 
 
-void CfgConsumeColon (void)
+void InfoConsumeColon (void)
 /* Consume a colon */
 {
-    CfgConsume (CFGTOK_COLON, "`:' expected");
+    InfoConsume (INFOTOK_COLON, "`:' expected");
 }
 
 
 
-void CfgOptionalComma (void)
+void InfoOptionalComma (void)
 /* Consume a comma if there is one */
 {
-    if (CfgTok == CFGTOK_COMMA) {
-               CfgNextTok ();
+    if (InfoTok == INFOTOK_COMMA) {
+               InfoNextTok ();
     }
 }
 
 
 
-void CfgOptionalAssign (void)
+void InfoOptionalAssign (void)
 /* Consume an equal sign if there is one */
 {
-    if (CfgTok == CFGTOK_EQ) {
-               CfgNextTok ();
+    if (InfoTok == INFOTOK_EQ) {
+               InfoNextTok ();
     }
 }
 
 
 
-void CfgAssureInt (void)
+void InfoAssureInt (void)
 /* Make sure the next token is an integer */
 {
-    if (CfgTok != CFGTOK_INTCON) {
-               CfgError ("Integer constant expected");
+    if (InfoTok != INFOTOK_INTCON) {
+               InfoError ("Integer constant expected");
     }
 }
 
 
 
-void CfgAssureStr (void)
+void InfoAssureStr (void)
 /* Make sure the next token is a string constant */
 {
-    if (CfgTok != CFGTOK_STRCON) {
-               CfgError ("String constant expected");
+    if (InfoTok != INFOTOK_STRCON) {
+               InfoError ("String constant expected");
     }
 }
 
 
 
-void CfgAssureIdent (void)
+void InfoAssureIdent (void)
 /* Make sure the next token is an identifier */
 {
-    if (CfgTok != CFGTOK_IDENT) {
-               CfgError ("Identifier expected");
+    if (InfoTok != INFOTOK_IDENT) {
+               InfoError ("Identifier expected");
     }
 }
 
 
 
-void CfgRangeCheck (long Lo, long Hi)
-/* Check the range of CfgIVal */
+void InfoRangeCheck (long Lo, long Hi)
+/* Check the range of InfoIVal */
 {
-    if (CfgIVal < Lo || CfgIVal > Hi) {
-       CfgError ("Range error");
+    if (InfoIVal < Lo || InfoIVal > Hi) {
+       InfoError ("Range error");
     }
 }
 
 
 
-void CfgSpecialToken (const IdentTok* Table, unsigned Size, const char* Name)
+void InfoSpecialToken (const IdentTok* Table, unsigned Size, const char* Name)
 /* Map an identifier to one of the special tokens in the table */
 {
     unsigned I;
 
     /* We need an identifier */
-    if (CfgTok == CFGTOK_IDENT) {
+    if (InfoTok == INFOTOK_IDENT) {
 
        /* Make it upper case */
        I = 0;
-       while (CfgSVal [I]) {
-           CfgSVal [I] = toupper (CfgSVal [I]);
+       while (InfoSVal [I]) {
+           InfoSVal [I] = toupper (InfoSVal [I]);
            ++I;
        }
 
                /* Linear search */
        for (I = 0; I < Size; ++I) {
-           if (strcmp (CfgSVal, Table [I].Ident) == 0) {
-               CfgTok = Table [I].Tok;
+           if (strcmp (InfoSVal, Table [I].Ident) == 0) {
+               InfoTok = Table [I].Tok;
                return;
            }
        }
@@ -426,81 +414,66 @@ void CfgSpecialToken (const IdentTok* Table, unsigned Size, const char* Name)
     }
 
     /* Not found or no identifier */
-    CfgError ("%s expected", Name);
+    InfoError ("%s expected", Name);
 }
 
 
 
-void CfgBoolToken (void)
+void InfoBoolToken (void)
 /* Map an identifier or integer to a boolean token */
 {
     static const IdentTok Booleans [] = {
-               {   "YES",      CFGTOK_TRUE     },
-       {   "NO",       CFGTOK_FALSE    },
-        {   "TRUE",     CFGTOK_TRUE     },
-        {   "FALSE",    CFGTOK_FALSE    },
+               {   "YES",      INFOTOK_TRUE     },
+       {   "NO",       INFOTOK_FALSE    },
+        {   "TRUE",     INFOTOK_TRUE     },
+        {   "FALSE",    INFOTOK_FALSE    },
     };
 
     /* If we have an identifier, map it to a boolean token */
-    if (CfgTok == CFGTOK_IDENT) {
-       CfgSpecialToken (Booleans, ENTRY_COUNT (Booleans), "Boolean");
+    if (InfoTok == INFOTOK_IDENT) {
+       InfoSpecialToken (Booleans, ENTRY_COUNT (Booleans), "Boolean");
     } else {
        /* We expected an integer here */
-       if (CfgTok != CFGTOK_INTCON) {
-           CfgError ("Boolean value expected");
+       if (InfoTok != INFOTOK_INTCON) {
+           InfoError ("Boolean value expected");
        }
-       CfgTok = (CfgIVal == 0)? CFGTOK_FALSE : CFGTOK_TRUE;
+       InfoTok = (InfoIVal == 0)? INFOTOK_FALSE : INFOTOK_TRUE;
     }
 }
 
 
 
-void CfgSetName (const char* Name)
+void InfoSetName (const char* Name)
 /* Set a name for a config file */
 {
-    CfgFile = Name;
+    InfoFile = Name;
 }
 
 
 
-const char* CfgGetName (void)
+const char* InfoGetName (void)
 /* Get the name of the config file */
 {
-    return CfgFile? CfgFile : "";
-}
-
-
-
-void CfgSetBuf (const char* Buf)
-/* Set a memory buffer for the config */
-{
-    CfgBuf = Buf;
+    return InfoFile? InfoFile : "";
 }
 
 
 
-int CfgAvail (void)
-/* Return true if we have a configuration available */
+int InfoAvail ()
+/* Return true if we have an info file given */
 {
-    return CfgFile != 0 || CfgBuf != 0;
+    return (InfoFile != 0);
 }
 
 
 
-void CfgOpenInput (void)
-/* Open the input file if we have one */
+void InfoOpenInput (void)
+/* Open the input file */
 {
-    /* If we have a config name given, open the file, otherwise we will read
-     * from a buffer.
-     */
-    if (!CfgBuf) {
-
-       /* Open the file */
-       InputFile = fopen (CfgFile, "r");
-       if (InputFile == 0) {
-           Error ("Cannot open `%s': %s", CfgFile, strerror (errno));
-       }
-
+    /* Open the file */
+    InputFile = fopen (InfoFile, "r");
+    if (InputFile == 0) {
+        Error ("Cannot open `%s': %s", InfoFile, strerror (errno));
     }
 
     /* Initialize variables */
@@ -509,12 +482,12 @@ void CfgOpenInput (void)
     InputCol  = 0;
 
     /* Start the ball rolling ... */
-    CfgNextTok ();
+    InfoNextTok ();
 }
 
 
 
-void CfgCloseInput (void)
+void InfoCloseInput (void)
 /* Close the input file if we have one */
 {
     /* Close the input file if we had one */
index ec14e0973e0ec08e5da8bb8976b36aa9b735aada..529b0aa13978ee0e006ca12b45c3e0e164ae8b59 100644 (file)
@@ -6,10 +6,10 @@
 /*                                                                           */
 /*                                                                           */
 /*                                                                           */
-/* (C) 2000     Ullrich von Bassewitz                                        */
-/*              Wacholderweg 14                                              */
-/*              D-70597 Stuttgart                                            */
-/* EMail:       uz@musoftware.de                                             */
+/* (C) 2000-2003 Ullrich von Bassewitz                                       */
+/*               Römerstrasse 52                                             */
+/*               D-70794 Filderstadt                                         */
+/* EMail:        uz@cc65.org                                                 */
 /*                                                                           */
 /*                                                                           */
 /* This software is provided 'as-is', without any expressed or implied       */
 
 
 
-/* Config file tokens */
+/* Info file tokens */
 typedef enum token_t {
-    CFGTOK_NONE,
-    CFGTOK_INTCON,
-    CFGTOK_STRCON,
-    CFGTOK_IDENT,
-    CFGTOK_LCURLY,
-    CFGTOK_RCURLY,
-    CFGTOK_SEMI,
-    CFGTOK_COMMA,
-    CFGTOK_EQ,
-    CFGTOK_COLON,
-    CFGTOK_DOT,
-    CFGTOK_EOF,
+    INFOTOK_NONE,
+    INFOTOK_INTCON,
+    INFOTOK_STRCON,
+    INFOTOK_IDENT,
+    INFOTOK_LCURLY,
+    INFOTOK_RCURLY,
+    INFOTOK_SEMI,
+    INFOTOK_COMMA,
+    INFOTOK_EQ,
+    INFOTOK_COLON,
+    INFOTOK_DOT,
+    INFOTOK_EOF,
 
     /* Special tokens */
-    CFGTOK_GLOBAL,
-    CFGTOK_RANGE,
-    CFGTOK_LABEL,
+    INFOTOK_GLOBAL,
+    INFOTOK_RANGE,
+    INFOTOK_LABEL,
 
     /* Global section */
-    CFGTOK_INPUTNAME,
-    CFGTOK_OUTPUTNAME,
-    CFGTOK_PAGELENGTH,
-    CFGTOK_STARTADDR,
+    INFOTOK_INPUTNAME,
+    INFOTOK_OUTPUTNAME,
+    INFOTOK_PAGELENGTH,
+    INFOTOK_STARTADDR,
 
     /* Range section */
-    CFGTOK_START,
-    CFGTOK_END,
-    CFGTOK_TYPE,
-
-    CFGTOK_CODE,
-    CFGTOK_BYTETAB,
-    CFGTOK_WORDTAB,
-    CFGTOK_DWORDTAB,
-    CFGTOK_ADDRTAB,
-    CFGTOK_RTSTAB,
-    CFGTOK_TEXTTAB,
+    INFOTOK_START,
+    INFOTOK_END,
+    INFOTOK_TYPE,
+
+    INFOTOK_CODE,
+    INFOTOK_BYTETAB,
+    INFOTOK_WORDTAB,
+    INFOTOK_DWORDTAB,
+    INFOTOK_ADDRTAB,
+    INFOTOK_RTSTAB,
+    INFOTOK_TEXTTAB,
 
     /* Label section */
-    CFGTOK_NAME,
-    CFGTOK_ADDR,
-    CFGTOK_SIZE,
+    INFOTOK_NAME,
+    INFOTOK_ADDR,
+    INFOTOK_SIZE,
 
     /* */
-    CFGTOK_TRUE,
-    CFGTOK_FALSE
+    INFOTOK_TRUE,
+    INFOTOK_FALSE
 } token_t;
 
 
 /* Mapping table entry, special identifier --> token */
-typedef struct IdentTok_ IdentTok;
-struct IdentTok_ {
+typedef struct IdentTok IdentTok;
+struct IdentTok {
     const char*                Ident;          /* Identifier */
     token_t            Tok;            /* Token for identifier */
 };
@@ -106,13 +106,13 @@ struct IdentTok_ {
 
 /* Current token and attributes */
 #define CFG_MAX_IDENT_LEN  255
-extern unsigned                CfgTok;
-extern char                    CfgSVal [CFG_MAX_IDENT_LEN+1];
-extern long            CfgIVal;
+extern unsigned                InfoTok;
+extern char                    InfoSVal [CFG_MAX_IDENT_LEN+1];
+extern long            InfoIVal;
 
 /* Error location */
-extern unsigned                CfgErrorLine;
-extern unsigned                CfgErrorCol;
+extern unsigned                InfoErrorLine;
+extern unsigned                InfoErrorCol;
 
 
 
@@ -122,70 +122,67 @@ extern unsigned           CfgErrorCol;
 
 
 
-void CfgWarning (const char* Format, ...);
+void InfoWarning (const char* Format, ...);
 /* Print a warning message adding file name and line number of the config file */
 
-void CfgError (const char* Format, ...);
+void InfoError (const char* Format, ...);
 /* Print an error message adding file name and line number of the config file */
 
-void CfgNextTok (void);
+void InfoNextTok (void);
 /* Read the next token from the input stream */
 
-void CfgConsume (unsigned T, const char* Msg);
+void InfoConsume (unsigned T, const char* Msg);
 /* Skip a token, print an error message if not found */
 
-void CfgConsumeLCurly (void);
+void InfoConsumeLCurly (void);
 /* Consume a left curly brace */
 
-void CfgConsumeRCurly (void);
+void InfoConsumeRCurly (void);
 /* Consume a right curly brace */
 
-void CfgConsumeSemi (void);
+void InfoConsumeSemi (void);
 /* Consume a semicolon */
 
-void CfgConsumeColon (void);
+void InfoConsumeColon (void);
 /* Consume a colon */
 
-void CfgOptionalComma (void);
+void InfoOptionalComma (void);
 /* Consume a comma if there is one */
 
-void CfgOptionalAssign (void);
+void InfoOptionalAssign (void);
 /* Consume an equal sign if there is one */
 
-void CfgAssureInt (void);
+void InfoAssureInt (void);
 /* Make sure the next token is an integer */
 
-void CfgAssureStr (void);
+void InfoAssureStr (void);
 /* Make sure the next token is a string constant */
 
-void CfgAssureIdent (void);
+void InfoAssureIdent (void);
 /* Make sure the next token is an identifier */
 
-void CfgRangeCheck (long Lo, long Hi);
-/* Check the range of CfgIVal */
+void InfoRangeCheck (long Lo, long Hi);
+/* Check the range of InfoIVal */
 
-void CfgSpecialToken (const IdentTok* Table, unsigned Size, const char* Name);
+void InfoSpecialToken (const IdentTok* Table, unsigned Size, const char* Name);
 /* Map an identifier to one of the special tokens in the table */
 
-void CfgBoolToken (void);
+void InfoBoolToken (void);
 /* Map an identifier or integer to a boolean token */
 
-void CfgSetName (const char* Name);
+void InfoSetName (const char* Name);
 /* Set a name for a config file */
 
-const char* CfgGetName (void);
+const char* InfoGetName (void);
 /* Get the name of the config file */
 
-void CfgSetBuf (const char* Buf);
-/* Set a memory buffer for the config */
+int InfoAvail ();
+/* Return true if we have an info file given */
 
-int CfgAvail (void);
-/* Return true if we have a configuration available */
-
-void CfgOpenInput (void);
+void InfoOpenInput (void);
 /* Open the input file if we have one */
 
-void CfgCloseInput (void);
+void InfoCloseInput (void);
 /* Close the input file if we have one */