char * objfname; // Object filename pointer
char * firstfname; // First source filename
char * cmdlnexec; // Executable name, pointer to ARGV[0]
+char searchpatha[512] = { 0 }; // Buffer to hold searchpath when specified
char * searchpath = NULL; // Search path for include files
char defname[] = "noname.o"; // Default output filename
int optim_flags[OPT_COUNT]; // Specific optimisations on/off matrix
" -o file Output file name\n"
" +o[value] Turn a specific optimisation on\n"
" Available optimisation values and default settings:\n"
- " o0: Absolute long addresses to word (on)\n"
- " o1: move.l #x,dn/an to moveq (on)\n"
- " o2: Word branches to short (on)\n"
- " o3: Outer displacement 0(an) to (an) (off)\n"
- " o4: lea size(An),An to addq #size,An (off)\n"
- " o5: 68020+ Absolute long base/outer displacement to word (off)\n"
- " o6: Null branches to NOP (off)\n"
- " o7: clr.l Dx to moveq #0,Dx (off)\n"
- " o8: adda.w/l #x,Dy to addq.w/l #x,Dy (off)\n"
- " o9: adda.w/l #x,Dy to lea x(Dy),Dy (off)\n"
- " op: Enforce PC relative (off)\n"
+ " o0: Absolute long addresses to word (on)\n"
+ " o1: move.l #x,dn/an to moveq (on)\n"
+ " o2: Word branches to short (on)\n"
+ " o3: Outer displacement 0(an) to (an) (off)\n"
+ " o4: lea size(An),An to addq #size,An (off)\n"
+ " o5: 68020+ Absolute long base/outer disp. to word (off)\n"
+ " o6: Null branches to NOP (off)\n"
+ " o7: clr.l Dx to moveq #0,Dx (off)\n"
+ " o8: adda.w/l #x,Dy to addq.w/l #x,Dy (off)\n"
+ " o9: adda.w/l #x,Dy to lea x(Dy),Dy (off)\n"
+ " op: Enforce PC relative (off)\n"
" ~o[value] Turn a specific optimisation off\n"
" +oall Turn all optimisations on\n"
" ~oall Turn all optimisations off\n"
int fd; // File descriptor
char fnbuf[FNSIZ]; // Filename buffer
int i; // Iterator
+ int current_path_index = 0; // Iterator for search paths
errcnt = 0; // Initialize error count
listing = 0; // Initialize listing level
glob_flag = 0; // Initialize .globl flag
optim_warn_flag = 0; // Initialize short branch flag
debug = 0; // Initialize debug flag
- searchpath = NULL; // Initialize search path
objfname = NULL; // Initialize object filename
list_fname = NULL; // Initialize listing filename
err_fname = NULL; // Initialize error filename
case 'i': // Set directory search path
case 'I':
{
- searchpath = argv[argno] + 2;
+ strcat(searchpatha, argv[argno] + 2);
+ strcat(searchpatha, ";");
+ searchpath = searchpatha;
// Check to see if include paths actually exist
- if (strlen(searchpath) > 0)
- {
- DIR * test = opendir(searchpath);
+ char current_path[256];
- if (test == NULL)
+ for(i=current_path_index; nthpath("RMACPATH", i, current_path)!=0; i++)
+ {
+ if (strlen(current_path) > 0)
{
- printf("Invalid include path: %s\n", searchpath);
- errcnt++;
- return errcnt;
- }
+ DIR * test = opendir(current_path);
+
+ if (test == NULL)
+ {
+ printf("Invalid include path: %s\n", current_path);
+ errcnt++;
+ return errcnt;
+ }
- closedir(test);
+ closedir(test);
+ }
}
+ current_path_index = i - 1;
break;
}
case 'l': // Produce listing file