]> Shamusworld >> Repos - rmac/blobdiff - direct.c
.incbin now uses the same directory sets as .include. Also some small cosmetic fixes.
[rmac] / direct.c
index 7010e4616980714d6fdd3242a63a047581c56330..dc9747ba9174fd05d3bf61d3a21955aa00ab5fc2 100644 (file)
--- a/direct.c
+++ b/direct.c
@@ -350,6 +350,8 @@ int d_incbin(void)
        int bytes = 0;
        long pos, size, bytesRead;
        char msg[256];
+       char buf1[256];
+       int i;
 
        // Check to see if we're in BSS, and, if so, throw an error
        if (scattr & SBSS)
@@ -364,12 +366,30 @@ int d_incbin(void)
                return ERROR;
        }
 
-       if ((fd = open(string[tok[1]],  _OPEN_INC)) < 0)
+       // Attempt to open the include file in the current directory, then (if that
+       // failed) try list of include files passed in the enviroment string or by
+       // the "-d" option.
+       if ((fd = open(string[tok[1]], _OPEN_INC)) < 0)
        {
-               errors("cannot open include binary file (%s)", string[tok[1]]);
-               return ERROR;
+               for (i = 0; nthpath("RMACPATH", i, buf1) != 0; i++)
+               {
+                       fd = strlen(buf1);
+
+                       if (fd > 0 && buf1[fd - 1] != SLASHCHAR)        // Append path char if necessary
+                               strcat(buf1, SLASHSTRING);
+
+                       strcat(buf1, string[tok[1]]);
+
+                       if ((fd = open(buf1, _OPEN_INC)) >= 0)
+                               goto allright;
+               }
+
+               return errors("cannot open: \"%s\"", string[tok[1]]);
        }
 
+allright:
+
+
        size = lseek(fd, 0L, SEEK_END);
        pos = lseek(fd, 0L, SEEK_SET);
        chcheck(size);
@@ -1590,28 +1610,30 @@ int d_gpumain(void)
        return error("What the hell? Do you think we adhere to the Goof standard?");
 }
 
+
 //
 // .opt - turn a specific (or all) optimisation on or off
 //
 int d_opt(void)
 {
-       char * tmpstr;
-
        while (*tok != EOL)
        {
                if (*tok == STRING)
                {
                        tok++;
-                       tmpstr = string[*tok++];
+                       char * tmpstr = string[*tok++];
 
                        if (ParseOptimization(tmpstr) != OK)
                        {
                                char temperr[256];
-                               sprintf(temperr, "unknown optimisation flag '%s'.", tmpstr);
+                               sprintf(temperr, "unknown optimisation flag '%s'", tmpstr);
                                return error(temperr);
                        }
                }
                else
-                       return error(".opt directive needs every switch enclosed inside quotation marks.");
+                       return error(".opt directive needs every switch enclosed inside quotation marks");
        }
-}
\ No newline at end of file
+
+       return OK;
+}
+