]> git.sur5r.net Git - cc65/blobdiff - src/ld65/scanner.h
Add support for Atari XEX file format to LD65
[cc65] / src / ld65 / scanner.h
index 9f2efa4d8e28dc4dc5574fc28fcf54780091ed8d..783685951ddbd77ee34f97a1da9d93316a44becd 100644 (file)
@@ -1,15 +1,15 @@
 /*****************************************************************************/
 /*                                                                           */
-/*                                scanner.h                                 */
+/*                                 scanner.h                                 */
 /*                                                                           */
-/*             Configuration file scanner for the ld65 linker               */
+/*              Configuration file scanner for the ld65 linker               */
 /*                                                                           */
 /*                                                                           */
 /*                                                                           */
-/* (C) 1998-2005 Ullrich von Bassewitz                                       */
-/*               Römerstrasse 52                                             */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
+/* (C) 1998-2013, Ullrich von Bassewitz                                      */
+/*                Roemerstrasse 52                                           */
+/*                D-70794 Filderstadt                                        */
+/* EMail:         uz@cc65.org                                                */
 /*                                                                           */
 /*                                                                           */
 /* This software is provided 'as-is', without any expressed or implied       */
 
 
 
+/* common */
+#include "filepos.h"
+#include "strbuf.h"
+
+
+
 /*****************************************************************************/
-/*                                          Data                                    */
+/*                                   Data                                    */
 /*****************************************************************************/
 
 
 /* Config file tokens */
 typedef enum {
     CFGTOK_NONE,
-    CFGTOK_INTCON,
-    CFGTOK_STRCON,
-    CFGTOK_IDENT,
+    CFGTOK_INTCON,              /* Integer constant */
+    CFGTOK_STRCON,              /* String constant */
+    CFGTOK_IDENT,               /* Identifier */
+    CFGTOK_PLUS,
+    CFGTOK_MINUS,
+    CFGTOK_MUL,
+    CFGTOK_DIV,
+    CFGTOK_LPAR,
+    CFGTOK_RPAR,
     CFGTOK_LCURLY,
     CFGTOK_RCURLY,
     CFGTOK_SEMI,
@@ -72,6 +84,7 @@ typedef enum {
     CFGTOK_TYPE,
     CFGTOK_FILE,
     CFGTOK_DEFINE,
+    CFGTOK_BANK,
     CFGTOK_FILL,
     CFGTOK_FILLVAL,
     CFGTOK_EXPORT,
@@ -92,7 +105,9 @@ typedef enum {
     CFGTOK_RW,
     CFGTOK_BSS,
     CFGTOK_ZP,
+    CFGTOK_OVERWRITE,
 
+    CFGTOK_ATARIEXE,
     CFGTOK_O65,
     CFGTOK_BIN,
 
@@ -110,9 +125,15 @@ typedef enum {
     CFGTOK_CONDES,
     CFGTOK_STARTADDRESS,
 
+    CFGTOK_ADDRSIZE,
     CFGTOK_VALUE,
+
     CFGTOK_WEAK,
 
+    CFGTOK_ABS,
+    CFGTOK_FAR,
+    CFGTOK_LONG,
+
     CFGTOK_SEGMENT,
     CFGTOK_LABEL,
     CFGTOK_COUNT,
@@ -134,36 +155,40 @@ typedef enum {
 /* Mapping table entry, special identifier --> token */
 typedef struct IdentTok IdentTok;
 struct IdentTok {
-    const char*        Ident;          /* Identifier */
-    cfgtok_t   Tok;            /* Token for identifier */
+    const char* Ident;          /* Identifier */
+    cfgtok_t    Tok;            /* Token for identifier */
 };
-#define ENTRY_COUNT(s)         (sizeof (s) / sizeof (s [0]))
+#define ENTRY_COUNT(s)  (sizeof (s) / sizeof (s [0]))
 
 
 
 /* Current token and attributes */
-#define CFG_MAX_IDENT_LEN  255
-extern cfgtok_t                CfgTok;
-extern char                    CfgSVal [CFG_MAX_IDENT_LEN+1];
-extern unsigned long   CfgIVal;
+extern cfgtok_t         CfgTok;
+extern StrBuf           CfgSVal;
+extern unsigned long    CfgIVal;
 
-/* Error location */
-extern unsigned                CfgErrorLine;
-extern unsigned                CfgErrorCol;
+/* Error location. PLEASE NOTE: I'm abusing the FilePos structure to some
+** degree. It is used mostly to hold a file position, where the Name member
+** is an index into the source file table of an object file. As used in config
+** file processing, the Name member is a string pool index instead. This is
+** distinguished by the object file pointer being NULL or not in the structs
+** where this is relevant.
+*/
+extern FilePos          CfgErrorPos;
 
 
 
 /*****************************************************************************/
-/*                                          Code                                    */
+/*                                   Code                                    */
 /*****************************************************************************/
 
 
 
-void CfgWarning (const char* Format, ...) attribute((format(printf,1,2)));
+void CfgWarning (const FilePos* Pos, const char* Format, ...) attribute((format(printf,2,3)));
 /* Print a warning message adding file name and line number of the config file */
 
-void CfgError (const char* Format, ...) attribute((format(printf,1,2)));
-/* Print an error message adding file name and line number of the config file */
+void CfgError (const FilePos* Pos, const char* Format, ...) attribute((format(printf,2,3)));
+/* Print an error message adding file name and line number of a given file */
 
 void CfgNextTok (void);
 /* Read the next token from the input stream */
@@ -204,12 +229,6 @@ void CfgBoolToken (void);
 void CfgSetName (const char* Name);
 /* Set a name for a config file */
 
-const char* CfgGetName (void);
-/* Get the name of the config file */
-
-void CfgSetBuf (const char* Buf);
-/* Set a memory buffer for the config */
-
 int CfgAvail (void);
 /* Return true if we have a configuration available */
 
@@ -222,8 +241,5 @@ void CfgCloseInput (void);
 
 
 /* End of scanner.h */
-#endif
-
-
-
 
+#endif