]> git.sur5r.net Git - cc65/commitdiff
Added a separate include search path for binary includes. These aren't
authoruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Mon, 25 Jan 2010 20:33:01 +0000 (20:33 +0000)
committeruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Mon, 25 Jan 2010 20:33:01 +0000 (20:33 +0000)
searched any longer in the standard include path.

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

doc/ca65.sgml
src/ca65/incpath.c
src/ca65/incpath.h
src/ca65/main.c
src/ca65/pseudo.c
src/ca65/scanner.c

index edef9e433c04e412bd3f41fee17580088a183189..90f19b065e7a512be428be3367fa623127677216 100644 (file)
@@ -104,6 +104,7 @@ Short options:
 
 Long options:
   --auto-import                Mark unresolved symbols as import
+  --bin-include-dir dir Set a search path for binary includes
   --cpu type           Set cpu type
   --debug-info         Add debug info to object file
   --feature name       Set an emulation feature
@@ -123,13 +124,23 @@ Long options:
 ---------------------------------------------------------------------------
 </verb></tscreen>
 
-
+                                     
 <sect1>Command line options in detail<p>
 
 Here is a description of all the command line options:
 
 <descrip>
 
+  <label id="option--bin-include-dir">
+  <tag><tt>--bin-include-dir dir</tt></tag>
+
+  Name a directory which is searched for binary include files. The option
+  may be used more than once to specify more than one directory to search. The
+  current directory is always searched first before considering any
+  additional directories. See also the section about <ref id="search-paths"
+  name="search paths">.
+
+
   <label id="option--cpu">
   <tag><tt>--cpu type</tt></tag>
 
@@ -154,6 +165,7 @@ Here is a description of all the command line options:
   command for a list of emulation features.
 
 
+  <label id="option--forget-inc-paths">
   <tag><tt>--forget-inc-paths</tt></tag>
 
   Forget the builtin include paths. This is most useful when building
@@ -172,11 +184,13 @@ Here is a description of all the command line options:
   monitor.
 
 
+  <label id="option-h">
   <tag><tt>-h, --help</tt></tag>
 
   Print the short option summary shown above.
 
 
+  <label id="option-i">
   <tag><tt>-i, --ignore-case</tt></tag>
 
   This option makes the assembler case insensitive on identifiers and labels.
@@ -184,6 +198,7 @@ Here is a description of all the command line options:
   <tt><ref id=".CASE" name=".CASE"></tt> control command.
 
 
+  <label id="option-l">
   <tag><tt>-l, --listing</tt></tag>
 
   Generate an assembler listing. The listing file will always have the
@@ -191,6 +206,7 @@ Here is a description of all the command line options:
   may change in future versions.
 
 
+  <label id="option--list-bytes">
   <tag><tt>--list-bytes n</tt></tag>
 
   Set the maximum number of bytes printed in the listing for one line of
@@ -199,6 +215,7 @@ Here is a description of all the command line options:
   number of printed bytes.
 
 
+  <label id="option--macpack-dir">
   <tag><tt>--macpack-dir dir</tt></tag>
 
   This options allows to specify a directory containing macro files that are
@@ -209,12 +226,14 @@ Here is a description of all the command line options:
   when debugging the builtin macro packages.
 
 
+  <label id="option-mm">
   <tag><tt>-mm model, --memory-model model</tt></tag>
 
   Define the default memory model. Possible model specifiers are near, far and
   huge.
 
 
+  <label id="option-o">
   <tag><tt>-o name</tt></tag>
 
   The default output name is the name of the input file with the extension
@@ -223,12 +242,14 @@ Here is a description of all the command line options:
   the source file, or, if -o is given, the full path in this name is used.
 
 
+  <label id="option--pagelength">
   <tag><tt>--pagelength n</tt></tag>
 
   sets the length of a listing page in lines. See the <tt><ref
   id=".PAGELENGTH" name=".PAGELENGTH"></tt> directive for more information.
 
 
+  <label id="option-s">
   <tag><tt>-s, --smart-mode</tt></tag>
 
   In smart mode (enabled by -s or the <tt><ref id=".SMART" name=".SMART"></tt>
@@ -254,6 +275,7 @@ Here is a description of all the command line options:
   compiler, see there for a list.
 
 
+  <label id="option-v">
   <tag><tt>-v, --verbose</tt></tag>
 
   Increase the assembler verbosity. Usually only needed for debugging
@@ -261,6 +283,7 @@ Here is a description of all the command line options:
   verbose output.
 
 
+  <label id="option-D">
   <tag><tt>-D</tt></tag>
 
   This option allows you to define symbols on the command line. Without a
@@ -270,6 +293,7 @@ Here is a description of all the command line options:
   you may have to quote the expression.
 
 
+  <label id="option-I">
   <tag><tt>-I dir, --include-dir dir</tt></tag>
 
   Name a directory which is searched for include files. The option may be
@@ -279,6 +303,7 @@ Here is a description of all the command line options:
   name="search paths">.
 
 
+  <label id="option-U">
   <tag><tt>-U, --auto-import</tt></tag>
 
   Mark symbols that are not defined in the sources as imported symbols. This
@@ -290,6 +315,7 @@ Here is a description of all the command line options:
   which is not always true for assembler programmers.
 
 
+  <label id="option-V">
   <tag><tt>-V, --version</tt></tag>
 
   Print the version number of the assembler. If you send any suggestions
@@ -311,7 +337,7 @@ Here is a description of all the command line options:
 
 <sect>Search paths<label id="search-paths"><p>
 
-Include files are searched in the following places:
+Normal include files are searched in the following places:
 
 <enum>
 <item>The current directory.
@@ -320,7 +346,16 @@ Include files are searched in the following places:
 <item>The value of the environment variable <tt/CA65_INC/ if it is defined.
 <item>A subdirectory named <tt/asminc/ of the directory defined in the
       environment variable <tt/CC65_HOME/, if it is defined.
-<item>Any directory added with the <tt/-I/ option on the command line.
+<item>Any directory added with the <tt/<ref id="option-I" name="-I">/ option
+on the command line.
+</enum>
+
+Binary include files are searched in the following places:
+
+<enum>
+<item>The current directory.
+<item>Any directory added with the <tt/<ref id="option--bin-include-dir"
+name="--bin-include-dir">/ option on the command line.
 </enum>
 
 
index d3fd72ea3e0478920d668f29192081cee3d087d0..def4102ced83c0636b3d783b5ac44083befcc1ba 100644 (file)
@@ -6,7 +6,7 @@
 /*                                                                           */
 /*                                                                           */
 /*                                                                           */
-/* (C) 2000-2009, Ullrich von Bassewitz                                      */
+/* (C) 2000-2010, Ullrich von Bassewitz                                      */
 /*                Roemerstrasse 52                                           */
 /*                D-70794 Filderstadt                                        */
 /* EMail:         uz@cc65.org                                                */
 
 
 
-/*****************************************************************************/
-/*                                  Data                                    */
-/*****************************************************************************/
-
-
-
-#define INC_STD         0x0001U
-
-
-
 /*****************************************************************************/
 /*                                          Code                                    */
 /*****************************************************************************/
 
 
 
-void AddIncludePath (const char* NewPath)
+void AddIncludePath (const char* NewPath, unsigned Where)
 /* Add a new include path to the existing one */
 {
-    AddSearchPath (NewPath, INC_STD);
+    AddSearchPath (NewPath, Where);
 }
 
 
 
-char* FindInclude (const char* Name)
+char* FindInclude (const char* Name, unsigned Where)
 /* Find an include file. Return a pointer to a malloced area that contains
  * the complete path, if found, return 0 otherwise.
  */
 {
     /* Search in the include directories */
-    return SearchFile (Name, INC_STD);
+    return SearchFile (Name, Where);
 }
 
 
@@ -79,7 +69,7 @@ char* FindInclude (const char* Name)
 void ForgetAllIncludePaths (void)
 /* Remove all include search paths. */
 {
-    ForgetAllSearchPaths (INC_STD);
+    ForgetAllSearchPaths (INC_STD | INC_BIN);
 }
 
 
@@ -88,7 +78,8 @@ void InitIncludePaths (void)
 /* Initialize the include path search list */
 {
     /* Add some standard paths to the include search path */
-    AddSearchPath ("", INC_STD);               /* Current directory */
+    AddSearchPath ("", INC_STD);               /* Current directory */
+    AddSearchPath ("", INC_BIN);
 
     /* Add some compiled in search paths if defined at compile time */
 #ifdef CA65_INC
index b4942ab4d2a256be924fe0787f60896dcab72601..82cd0d2e29f6a538eecc6421eff4fc5c6c5d95cc 100644 (file)
@@ -6,7 +6,7 @@
 /*                                                                           */
 /*                                                                           */
 /*                                                                           */
-/* (C) 2000-2009, Ullrich von Bassewitz                                      */
+/* (C) 2000-2010, Ullrich von Bassewitz                                      */
 /*                Roemerstrasse 52                                           */
 /*                D-70794 Filderstadt                                        */
 /* EMail:         uz@cc65.org                                                */
 
 
 
+/*****************************************************************************/
+/*                                  Data                                    */
+/*****************************************************************************/
+
+
+
+#define INC_STD         0x0001U         /* Add to standard include path */
+#define INC_BIN         0x0002U         /* Add to binary include path */
+
+
+
 /*****************************************************************************/
 /*                                          Code                                    */
 /*****************************************************************************/
 
 
 
-void AddIncludePath (const char* NewPath);
+void AddIncludePath (const char* NewPath, unsigned Where);
 /* Add a new include path to the existing one */
 
-char* FindInclude (const char* Name);
+char* FindInclude (const char* Name, unsigned Where);
 /* Find an include file. Return a pointer to a malloced area that contains
  * the complete path, if found, return 0 otherwise.
  */
index 63891bbf6b8dbe79613b879da17cc7fd21e849a0..2e4c6885202db9d90d6a6aba2f1a33f4a1e73960 100644 (file)
@@ -6,7 +6,7 @@
 /*                                                                           */
 /*                                                                           */
 /*                                                                           */
-/* (C) 1998-2009, Ullrich von Bassewitz                                      */
+/* (C) 1998-2010, Ullrich von Bassewitz                                      */
 /*                Roemerstrasse 52                                           */
 /*                D-70794 Filderstadt                                        */
 /* EMail:         uz@cc65.org                                                */
@@ -106,6 +106,7 @@ static void Usage (void)
             "\n"
             "Long options:\n"
             "  --auto-import\t\tMark unresolved symbols as import\n"
+            "  --bin-include-dir dir\tSet a search path for binary includes\n"
             "  --cpu type\t\tSet cpu type\n"
             "  --debug-info\t\tAdd debug info to object file\n"
             "  --feature name\tSet an emulation feature\n"
@@ -341,6 +342,14 @@ static void OptAutoImport (const char* Opt attribute ((unused)),
 
 
 
+static void OptBinIncludeDir (const char* Opt attribute ((unused)), const char* Arg)
+/* Add an include search path for binaries */
+{
+    AddIncludePath (Arg, INC_BIN);
+}
+
+
+
 static void OptCPU (const char* Opt attribute ((unused)), const char* Arg)
 /* Handle the --cpu option */
 {
@@ -408,7 +417,7 @@ static void OptIgnoreCase (const char* Opt attribute ((unused)),
 static void OptIncludeDir (const char* Opt attribute ((unused)), const char* Arg)
 /* Add an include search path */
 {
-    AddIncludePath (Arg);
+    AddIncludePath (Arg, INC_STD);
 }
 
 
@@ -785,6 +794,7 @@ int main (int argc, char* argv [])
     /* Program long options */
     static const LongOpt OptTab[] = {
         { "--auto-import",             0,      OptAutoImport           },
+        { "--bin-include-dir",  1,      OptBinIncludeDir        },
         { "--cpu",                     1,      OptCPU                  },
        { "--debug-info",       0,      OptDebugInfo            },
        { "--feature",          1,      OptFeature              },
index 64a292c5b29638ac7c6ebddad62bae6b73683a58..da34c85a0f289983b77cb5713d6209f3d4c7e98d 100644 (file)
@@ -6,7 +6,7 @@
 /*                                                                           */
 /*                                                                           */
 /*                                                                           */
-/* (C) 1998-2009, Ullrich von Bassewitz                                      */
+/* (C) 1998-2010, Ullrich von Bassewitz                                      */
 /*                Roemerstrasse 52                                           */
 /*                D-70794 Filderstadt                                        */
 /* EMail:         uz@cc65.org                                                */
@@ -1113,8 +1113,8 @@ static void DoIncBin (void)
     F = fopen (SB_GetConstBuf (&Name), "rb");
     if (F == 0) {
 
-               /* Search for the file in the include directories. */
-       char* PathName = FindInclude (SB_GetConstBuf (&Name));
+               /* Search for the file in the binary include directory */
+       char* PathName = FindInclude (SB_GetConstBuf (&Name), INC_BIN);
                if (PathName == 0 || (F = fopen (PathName, "r")) == 0) {
            /* Not found or cannot open, print an error and bail out */
                    ErrorSkip ("Cannot open include file `%m%p': %s", &Name, strerror (errno));
@@ -1135,18 +1135,18 @@ static void DoIncBin (void)
 
     /* If a count was not given, calculate it now */
     if (Count < 0) {
-       Count = Size - Start;
-       if (Count < 0) {
-           /* Nothing to read - flag this as a range error */
-           ErrorSkip ("Range error");
-           goto Done;
-       }
+       Count = Size - Start;
+       if (Count < 0) {
+           /* Nothing to read - flag this as a range error */
+           ErrorSkip ("Range error");
+           goto Done;
+       }
     } else {
-       /* Count was given, check if it is valid */
-       if (Start + Count > Size) {
-           ErrorSkip ("Range error");
-           goto Done;
-       }
+       /* Count was given, check if it is valid */
+       if (Start + Count > Size) {
+           ErrorSkip ("Range error");
+           goto Done;
+       }
     }
 
     /* Seek to the start position */
@@ -1155,12 +1155,12 @@ static void DoIncBin (void)
     /* Read chunks and insert them into the output */
     while (Count > 0) {
 
-       unsigned char Buf [1024];
+       unsigned char Buf [1024];
 
-       /* Calculate the number of bytes to read */
+       /* Calculate the number of bytes to read */
                size_t BytesToRead = (Count > (long)sizeof(Buf))? sizeof(Buf) : (size_t) Count;
 
-       /* Read chunk */
+       /* Read chunk */
        size_t BytesRead = fread (Buf, 1, BytesToRead, F);
        if (BytesToRead != BytesRead) {
            /* Some sort of error */
index c8ef023eb2d70ebb0e5913356f3b750fddd306c6..3e3c4777c87f95925372925db77224f5818f7f16 100644 (file)
@@ -6,10 +6,10 @@
 /*                                                                           */
 /*                                                                           */
 /*                                                                           */
-/* (C) 1998-2008 Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
+/* (C) 1998-2010, Ullrich von Bassewitz                                      */
+/*                Roemerstrasse 52                                           */
+/*                D-70794 Filderstadt                                        */
+/* EMail:         uz@cc65.org                                                */
 /*                                                                           */
 /*                                                                           */
 /* This software is provided 'as-is', without any expressed or implied       */
@@ -452,7 +452,7 @@ int NewInputFile (const char* Name)
                /* We are on include level. Search for the file in the include
         * directories.
         */
-       PathName = FindInclude (Name);
+       PathName = FindInclude (Name, INC_STD);
                if (PathName == 0 || (F = fopen (PathName, "r")) == 0) {
            /* Not found or cannot open, print an error and bail out */
            Error ("Cannot open include file `%s': %s", Name, strerror (errno));