]> 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 65258d04c304d8e45960d03b560a7327085585b9..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-2000 Ullrich von Bassewitz                                       */
-/*               Wacholderweg 14                                             */
-/*               D-70597 Stuttgart                                           */
-/* EMail:        uz@musoftware.de                                            */
+/* (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       */
 
 
 
-#ifndef SCANNER_H      
+#ifndef SCANNER_H
 #define SCANNER_H
 
 
 
+/* 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,24 +84,30 @@ typedef enum {
     CFGTOK_TYPE,
     CFGTOK_FILE,
     CFGTOK_DEFINE,
+    CFGTOK_BANK,
     CFGTOK_FILL,
     CFGTOK_FILLVAL,
     CFGTOK_EXPORT,
     CFGTOK_IMPORT,
     CFGTOK_OS,
+    CFGTOK_ID,
+    CFGTOK_VERSION,
     CFGTOK_FORMAT,
 
     CFGTOK_LOAD,
     CFGTOK_RUN,
     CFGTOK_ALIGN,
+    CFGTOK_ALIGN_LOAD,
     CFGTOK_OFFSET,
+    CFGTOK_OPTIONAL,
 
     CFGTOK_RO,
     CFGTOK_RW,
     CFGTOK_BSS,
     CFGTOK_ZP,
-    CFGTOK_WPROT,
+    CFGTOK_OVERWRITE,
 
+    CFGTOK_ATARIEXE,
     CFGTOK_O65,
     CFGTOK_BIN,
 
@@ -101,8 +119,21 @@ typedef enum {
 
     CFGTOK_LUNIX,
     CFGTOK_OSA65,
+    CFGTOK_CC65,
+    CFGTOK_OPENCBM,
 
     CFGTOK_CONDES,
+    CFGTOK_STARTADDRESS,
+
+    CFGTOK_ADDRSIZE,
+    CFGTOK_VALUE,
+
+    CFGTOK_WEAK,
+
+    CFGTOK_ABS,
+    CFGTOK_FAR,
+    CFGTOK_LONG,
+
     CFGTOK_SEGMENT,
     CFGTOK_LABEL,
     CFGTOK_COUNT,
@@ -110,9 +141,12 @@ typedef enum {
 
     CFGTOK_CONSTRUCTOR,
     CFGTOK_DESTRUCTOR,
+    CFGTOK_INTERRUPTOR,
 
     CFGTOK_DECREASING,
-    CFGTOK_INCREASING
+    CFGTOK_INCREASING,
+
+    CFGTOK_DEFAULT
 
 } cfgtok_t;
 
@@ -120,37 +154,41 @@ typedef enum {
 
 /* Mapping table entry, special identifier --> token */
 typedef struct IdentTok IdentTok;
-struct IdentTok_ {
-    const char*        Ident;          /* Identifier */
-    cfgtok_t   Tok;            /* Token for identifier */
+struct IdentTok {
+    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 */
@@ -191,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 */
 
@@ -209,8 +241,5 @@ void CfgCloseInput (void);
 
 
 /* End of scanner.h */
-#endif
-
-
-
 
+#endif