Fix TARGET_IS_PIC error
[fw/sdcc] / src / SDCCmain.c
index 2f53bd37c5b3d9ec9f0dc2eba32ce84cf50de141..62fb47392b3baf01a8e9f653e72e9d2ddcc92e83 100644 (file)
@@ -1,5 +1,5 @@
 /*-------------------------------------------------------------------------
 /*-------------------------------------------------------------------------
-  SDCCmain.c - main file               
+  SDCCmain.c - main file
 
              Written By -  Sandeep Dutta . sandeep.dutta@usa.net (1999)
 
 
              Written By -  Sandeep Dutta . sandeep.dutta@usa.net (1999)
 
@@ -7,25 +7,25 @@
    under the terms of the GNU General Public License as published by the
    Free Software Foundation; either version 2, or (at your option) any
    later version.
    under the terms of the GNU General Public License as published by the
    Free Software Foundation; either version 2, or (at your option) any
    later version.
-   
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-   
+
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-   
+
    In other words, you are welcome to use, share and improve this program.
    You are forbidden to forbid anyone else to use, share and improve
    In other words, you are welcome to use, share and improve this program.
    You are forbidden to forbid anyone else to use, share and improve
-   what you give them.   Help stamp out software-hoarding!  
+   what you give them.   Help stamp out software-hoarding!
 -------------------------------------------------------------------------*/
 
 -------------------------------------------------------------------------*/
 
-#define USE_SYSTEM_SYSTEM_CALLS
-
 #include "common.h"
 #include <ctype.h>
 #include "common.h"
 #include <ctype.h>
+#include "newalloc.h"
+#include "SDCCerr.h"
 
 #if NATIVE_WIN32
 #include <process.h>
 
 #if NATIVE_WIN32
 #include <process.h>
 
 #else
 // No unistd.h in Borland C++
 
 #else
 // No unistd.h in Borland C++
-extern int access(const char *, int);
+extern int access (const char *, int);
 #define X_OK 1
 
 #endif
 
 //REMOVE ME!!!
 #define X_OK 1
 
 #endif
 
 //REMOVE ME!!!
-extern int yyparse();
-
-FILE  *srcFile         ;/* source file          */
-FILE  *cdbFile = NULL  ;/* debugger information output file */
-char  *fullSrcFileName ;/* full name for the source file */
-char  *srcFileName     ;/* source file name with the .c stripped */
-char  *moduleName      ;/* module name is srcFilename stripped of any path */
-const char *preArgv[128]          ;/* pre-processor arguments  */
-int   currRegBank = 0 ;
-struct optimize optimize ;
-struct options  options ;
-char *VersionString = SDCC_VERSION_STR /*"Version 2.1.8a"*/;
+extern int yyparse ();
+
+FILE *srcFile;                 /* source file          */
+FILE *cdbFile = NULL;          /* debugger information output file */
+char *fullSrcFileName;         /* full name for the source file */
+char *srcFileName;             /* source file name with the .c stripped */
+char *moduleName;              /* module name is srcFilename stripped of any path */
+const char *preArgv[128];      /* pre-processor arguments  */
+int currRegBank = 0;
+struct optimize optimize;
+struct options options;
+char *VersionString = SDCC_VERSION_STR /*"Version 2.1.8a" */ ;
 short preProcOnly = 0;
 short noAssemble = 0;
 char *linkOptions[128];
 const char *asmOptions[128];
 short preProcOnly = 0;
 short noAssemble = 0;
 char *linkOptions[128];
 const char *asmOptions[128];
-char *libFiles[128] ;
+char *libFiles[128];
 int nlibFiles = 0;
 int nlibFiles = 0;
-char *libPaths[128] ;
+char *libPaths[128];
 int nlibPaths = 0;
 char *relFiles[128];
 int nrelFiles = 0;
 bool verboseExec = FALSE;
 int nlibPaths = 0;
 char *relFiles[128];
 int nrelFiles = 0;
 bool verboseExec = FALSE;
-char    *preOutName;
+char *preOutName;
+
+// In MSC VC6 default search path for exe's to path for this
+
+char DefaultExePath[128];
 
 /* Far functions, far data */
 #define OPTION_LARGE_MODEL "-model-large"
 
 /* Far functions, far data */
 #define OPTION_LARGE_MODEL "-model-large"
@@ -78,6 +82,7 @@ char    *preOutName;
 #define OPTION_SMALL_MODEL "-model-small"
 #define OPTION_FLAT24_MODEL "-model-flat24"
 #define OPTION_STACK_AUTO  "-stack-auto"
 #define OPTION_SMALL_MODEL "-model-small"
 #define OPTION_FLAT24_MODEL "-model-flat24"
 #define OPTION_STACK_AUTO  "-stack-auto"
+#define OPTION_STACK_8BIT "-stack-8bit"
 #define OPTION_STACK_10BIT "-stack-10bit"
 #define OPTION_XSTACK      "-xstack"
 #define OPTION_GENERIC     "-generic"
 #define OPTION_STACK_10BIT "-stack-10bit"
 #define OPTION_XSTACK      "-xstack"
 #define OPTION_GENERIC     "-generic"
@@ -115,7 +120,7 @@ char    *preOutName;
 #define OPTION_NOPEEP      "-no-peep"
 #define OPTION_ASMPEEP     "-peep-asm"
 #define OPTION_DEBUG       "-debug"
 #define OPTION_NOPEEP      "-no-peep"
 #define OPTION_ASMPEEP     "-peep-asm"
 #define OPTION_DEBUG       "-debug"
-#define OPTION_NODEBUG    "-nodebug"
+#define OPTION_NODEBUG     "-nodebug"
 #define OPTION_VERSION     "-version"
 #define OPTION_STKAFTRDATA "-stack-after-data"
 #define OPTION_PREPROC_ONLY "-preprocessonly"
 #define OPTION_VERSION     "-version"
 #define OPTION_STKAFTRDATA "-stack-after-data"
 #define OPTION_PREPROC_ONLY "-preprocessonly"
@@ -126,38 +131,40 @@ char    *preOutName;
 #define OPTION_NOSTDLIB     "-nostdlib"
 #define OPTION_NOSTDINC     "-nostdinc"
 #define OPTION_VERBOSE      "-verbose"
 #define OPTION_NOSTDLIB     "-nostdlib"
 #define OPTION_NOSTDINC     "-nostdinc"
 #define OPTION_VERBOSE      "-verbose"
-#define OPTION_ANSIINT     "-ansiint"
-static const char *_preCmd[] = {
-    "sdcpp", "-Wall", "-lang-c++", "-DSDCC=1", 
-    "$l", "-I" SDCC_INCLUDE_DIR, "$1", "$2", NULL
+#define OPTION_ANSIINT      "-ansiint"
+static const char *_preCmd[] =
+{
+  "sdcpp", "-Wall", "-lang-c++", "-DSDCC=1",
+  "$l", "$1", "$2", NULL
 };
 
 PORT *port;
 
 };
 
 PORT *port;
 
-static PORT *_ports[] = {
+static PORT *_ports[] =
+{
 #if !OPT_DISABLE_MCS51
 #if !OPT_DISABLE_MCS51
-   &mcs51_port,
+  &mcs51_port,
 #endif
 #if !OPT_DISABLE_GBZ80
 #endif
 #if !OPT_DISABLE_GBZ80
-    &gbz80_port,
+  &gbz80_port,
 #endif
 #if !OPT_DISABLE_Z80
 #endif
 #if !OPT_DISABLE_Z80
-    &z80_port,
+  &z80_port,
 #endif
 #if !OPT_DISABLE_AVR
 #endif
 #if !OPT_DISABLE_AVR
-    &avr_port,
+  &avr_port,
 #endif
 #if !OPT_DISABLE_DS390
 #endif
 #if !OPT_DISABLE_DS390
-    &ds390_port,
+  &ds390_port,
 #endif
 #if !OPT_DISABLE_PIC
 #endif
 #if !OPT_DISABLE_PIC
-    &pic14_port,
+  &pic_port,
 #endif
 #if !OPT_DISABLE_I186
 #endif
 #if !OPT_DISABLE_I186
-   &i186_port,
+  &i186_port,
 #endif
 #if !OPT_DISABLE_TLCS900H
 #endif
 #if !OPT_DISABLE_TLCS900H
-   &tlcs900h_port,
+  &tlcs900h_port,
 #endif
 };
 
 #endif
 };
 
@@ -166,915 +173,967 @@ static PORT *_ports[] = {
 /**
    remove me - TSD a hack to force sdcc to generate gpasm format .asm files.
  */
 /**
    remove me - TSD a hack to force sdcc to generate gpasm format .asm files.
  */
-extern void             pic14glue();
+extern void picglue ();
 
 /** Sets the port to the one given by the command line option.
 
 /** Sets the port to the one given by the command line option.
-    @param             The name minus the option (eg 'mcs51')
-    @return            0 on success.
+    @param    The name minus the option (eg 'mcs51')
+    @return     0 on success.
 */
 */
-static int _setPort(const char *name)
+static void
+_setPort (const char *name)
 {
 {
-    int i;
-    for (i=0; i<NUM_PORTS; i++) {
-       if (!strcmp(_ports[i]->target, name)) {
-           port = _ports[i];
-           return 0;
+  int i;
+  for (i = 0; i < NUM_PORTS; i++)
+    {
+      if (!strcmp (_ports[i]->target, name))
+       {
+         port = _ports[i];
+         return;
        }
     }
        }
     }
-    /* Error - didnt find */
-    werror(E_UNKNOWN_TARGET,name);
-    exit(1);
+  /* Error - didnt find */
+  werror (E_UNKNOWN_TARGET, name);
+  exit (1);
 }
 
 }
 
-static void _validatePorts(void)
+static void
+_validatePorts (void)
 {
 {
-    int i;
-    for (i=0; i<NUM_PORTS; i++) {
-       if (_ports[i]->magic != PORT_MAGIC) {
-           printf("Error: port %s is incomplete.\n", _ports[i]->target);
-           wassert(0);
+  int i;
+  for (i = 0; i < NUM_PORTS; i++)
+    {
+      if (_ports[i]->magic != PORT_MAGIC)
+       {
+         printf ("Error: port %s is incomplete.\n", _ports[i]->target);
+         wassert (0);
        }
     }
 }
 
        }
     }
 }
 
-#ifdef USE_SYSTEM_SYSTEM_CALLS
-void buildCmdLine(char *into, const char **cmds, 
-                         const char *p1, const char *p2, 
-                         const char *p3, const char **list)
+void
+buildCmdLine (char *into, const char **cmds,
+             const char *p1, const char *p2,
+             const char *p3, const char **list)
 {
 {
-    const char *p, *from;
+  const char *p, *from;
 
 
-    *into = '\0';
+  *into = '\0';
 
 
-    while (*cmds) {
+  while (*cmds)
+    {
 
 
-       from = *cmds;
-       cmds++;
+      from = *cmds;
+      cmds++;
 
 
-       //printf ("%s\n", from);
-       /* See if it has a '$' anywhere - if not, just copy */
-       if ((p = strchr(from, '$'))) {
-           strncat(into, from, p - from);
-           /* seperate it */
-           strcat(into, " ");
-           from = p+2;
-           p++;
-           switch (*p) {
-           case '1':
-               if (p1)
-                   strcat(into, p1);
-               break;
-           case '2':
-               if (p2)
-                   strcat(into, p2);
-               break;
-           case '3':
-               if (p3)
-                   strcat(into, p3);
-               break;
-           case 'l': {
-               const char **tmp = list;
-               if (tmp) {
-                   while (*tmp) {
-                       //printf ("list: %s\n", *tmp);
-                       strcat(into, *tmp);
-                       strcat(into, " ");
-                       tmp++;
-                   }
-               }
-               break;
-           }
-           default:
-               assert(0);
-           }
-       }
-       strcat(into, from); // this include the ".asm" from "$1.asm"
-       strcat(into, " ");
-    }
-}
-#else
-void buildCmdLine(char *into, char **args, const char **cmds, 
-                         const char *p1, const char *p2, 
-                         const char *p3, const char **list)
-{
-    const char *p, *from;
-
-    while (*cmds) {
-       *args = into;
-       args++;
-
-       from = *cmds;
-       cmds++;
-       *into = '\0';
-
-       /* See if it has a '$' anywhere - if not, just copy */
-       if ((p = strchr(from, '$'))) {
-           strncpy(into, from, p - from);
-           /* NULL terminate it */
-           into[p-from] = '\0';
-           from = p+2;
-           p++;
-           switch (*p) {
+      /* See if it has a '$' anywhere - if not, just copy */
+      if ((p = strchr (from, '$')))
+       {
+         strncat (into, from, p - from);
+         /* seperate it */
+         strcat (into, " ");
+         from = p + 2;
+         p++;
+         switch (*p)
+           {
            case '1':
            case '1':
-               if (p1)
-                   strcat(into, p1);
-               break;
+             if (p1)
+               strcat (into, p1);
+             break;
            case '2':
            case '2':
-               if (p2)
-                   strcat(into, p2);
-               break;
+             if (p2)
+               strcat (into, p2);
+             break;
            case '3':
            case '3':
-               if (p3)
-                   strcat(into, p3);
-               break;
-           case 'l': {
+             if (p3)
+               strcat (into, p3);
+             break;
+           case 'l':
+             {
                const char **tmp = list;
                const char **tmp = list;
-               if (tmp) {
-                   while (*tmp) {
-                       strcpy(into, *tmp);
-                       into += strlen(into)+1;
-                       *args = into;
-                       args++;
+               if (tmp)
+                 {
+                   while (*tmp)
+                     {
+                       strcat (into, *tmp);
+                       strcat (into, " ");
                        tmp++;
                        tmp++;
-                   }
-               }
+                     }
+                 }
                break;
                break;
-           }
+             }
            default:
            default:
-               assert(0);
+             assert (0);
            }
        }
            }
        }
-       strcat(into, from);
-       if (strlen(into) == 0)
-           args--;
-       into += strlen(into)+1;
+      strcat (into, from);     // this includes the ".asm" from "$1.asm"
+
+      strcat (into, " ");
     }
     }
-    *args = NULL;
 }
 }
-#endif
 
 /*-----------------------------------------------------------------*/
 
 /*-----------------------------------------------------------------*/
-/* printVersionInfo - prints the version info                     */
+/* printVersionInfo - prints the version info        */
 /*-----------------------------------------------------------------*/
 /*-----------------------------------------------------------------*/
-void   printVersionInfo ()
+void
+printVersionInfo ()
 {
 {
-    int i;
-    
-    fprintf (stderr,
-            "SDCC : ");
-    for (i=0; i<NUM_PORTS; i++)
-       fprintf(stderr, "%s%s", i==0 ? "" : "/", _ports[i]->target);
-    fprintf(stderr, " %s"
+  int i;
+
+  fprintf (stderr,
+          "SDCC : ");
+  for (i = 0; i < NUM_PORTS; i++)
+    fprintf (stderr, "%s%s", i == 0 ? "" : "/", _ports[i]->target);
+
+  fprintf (stderr, " %s"
 #ifdef SDCC_SUB_VERSION_STR
 #ifdef SDCC_SUB_VERSION_STR
-           "/" SDCC_SUB_VERSION_STR
+          "/" SDCC_SUB_VERSION_STR
 #endif
 #endif
-           " ` "
 #ifdef __CYGWIN32__
 #ifdef __CYGWIN32__
-               " (CYGWIN32)\n"
+          " (CYGWIN32)\n"
+#else
+#ifdef __DJGPP__
+          " (DJGPP) \n"
 #else
 #else
-# ifdef __DJGPP__
-               " (DJGPP) \n"
-# else
-               " (UNIX) \n"
-# endif
+#if defined(_MSC_VER)
+          " (WIN32) \n"
+#else
+          " (UNIX) \n"
+#endif
+#endif
 #endif
 
 #endif
 
-           , VersionString
-           );
+          ,VersionString
+    );
 }
 
 /*-----------------------------------------------------------------*/
 }
 
 /*-----------------------------------------------------------------*/
-/* printUsage - prints command line syntax                        */
+/* printUsage - prints command line syntax         */
 /*-----------------------------------------------------------------*/
 /*-----------------------------------------------------------------*/
-void   printUsage ()
+void
+printUsage ()
 {
 {
-       printVersionInfo ();
-       fprintf (stderr,
-                "Usage : [options] filename\n"
-                "Options :-\n"
-                "\t-m<proc>             -     Target processor <proc>.  Default %s\n"
-                "\t                           Try --version for supported values of <proc>\n"
-                "\t--model-large        -     Large Model\n"
-                "\t--model-small        -     Small Model (default)\n"
-                "\t--stack-auto         -     Stack automatic variables\n"
-                "\t--xstack             -     Use external stack\n"
-                "\t--xram-loc <nnnn>    -     External Ram start location\n"
-                "\t--xstack-loc <nnnn>  -     Xternal Stack Location\n"
-                "\t--code-loc <nnnn>    -     Code Segment Location\n"
-                "\t--stack-loc <nnnn>   -     Stack pointer initial value\n"
-                "\t--data-loc <nnnn>    -     Direct data start location\n"
-                "\t--idata-loc <nnnn>   -     Indirect data start location\n"
-                "\t--iram-size <nnnn>   -     Internal Ram size\n"
-                "\t--nojtbound          -     Don't generate boundary check for jump tables\n"
-                "\t--generic            -     All unqualified ptrs converted to '_generic'\n"
-                "PreProcessor Options :-\n"
-                "\t-Dmacro             -       Define Macro\n"          
-                "\t-Ipath              -       Include \"*.h\" path\n"
-                "Note: this is NOT a complete list of options see docs for details\n",
-                _ports[0]->target
-                );             
-       exit (0);
+  printVersionInfo ();
+  fprintf (stderr,
+          "Usage : [options] filename\n"
+          "Options :-\n"
+       "\t-m<proc>             -     Target processor <proc>.  Default %s\n"
+          "\t                           Try --version for supported values of <proc>\n"
+          "\t--model-large        -     Large Model\n"
+          "\t--model-small        -     Small Model (default)\n"
+          "\t--stack-auto         -     Stack automatic variables\n"
+          "\t--xstack             -     Use external stack\n"
+          "\t--xram-loc <nnnn>    -     External Ram start location\n"
+          "\t--xstack-loc <nnnn>  -     Xternal Stack Location\n"
+          "\t--code-loc <nnnn>    -     Code Segment Location\n"
+          "\t--stack-loc <nnnn>   -     Stack pointer initial value\n"
+          "\t--data-loc <nnnn>    -     Direct data start location\n"
+          "\t--idata-loc <nnnn>   -     Indirect data start location\n"
+          "\t--iram-size <nnnn>   -     Internal Ram size\n"
+          "\t--nojtbound          -     Don't generate boundary check for jump tables\n"
+          "\t--generic            -     All unqualified ptrs converted to '_generic'\n"
+          "PreProcessor Options :-\n"
+          "\t-Dmacro   - Define Macro\n"
+          "\t-Ipath    - Include \"*.h\" path\n"
+      "Note: this is NOT a complete list of options see docs for details\n",
+          _ports[0]->target
+    );
+  exit (0);
 }
 
 /*-----------------------------------------------------------------*/
 /* parseWithComma - separates string with comma                    */
 /*-----------------------------------------------------------------*/
 }
 
 /*-----------------------------------------------------------------*/
 /* parseWithComma - separates string with comma                    */
 /*-----------------------------------------------------------------*/
-void parseWithComma (char **dest,char *src)
+void
+parseWithComma (char **dest, char *src)
 {
 {
-    int i = 0;
-    
-    strtok(src,"\n \t");
-    /* skip the initial white spaces */
-    while (isspace(*src)) src++;
-    dest[i++] = src;
-    while (*src) {
-       if (*src == ',') {
-           *src = '\0';
-           src++;
-           if (*src)
-               dest[i++] = src;
-           continue ;
+  int i = 0;
+
+  strtok (src, "\n \t");
+  /* skip the initial white spaces */
+  while (isspace (*src))
+    src++;
+  dest[i++] = src;
+  while (*src)
+    {
+      if (*src == ',')
+       {
+         *src = '\0';
+         src++;
+         if (*src)
+           dest[i++] = src;
+         continue;
        }
        }
-       src++;
+      src++;
     }
 }
 
 /*-----------------------------------------------------------------*/
 /* setDefaultOptions - sets the default options                    */
 /*-----------------------------------------------------------------*/
     }
 }
 
 /*-----------------------------------------------------------------*/
 /* setDefaultOptions - sets the default options                    */
 /*-----------------------------------------------------------------*/
-static void setDefaultOptions()
+static void
+setDefaultOptions ()
 {
 {
-    int i ;
-
-    for ( i = 0 ; i < 128 ; i++)
-       preArgv[i] = asmOptions [i] =
-           linkOptions[i] = relFiles[i] = libFiles[i] =
-           libPaths[i] = NULL ;
-
-    /* first the options part */
-    options.stack_loc = 0; /* stack pointer initialised to 0 */
-    options.xstack_loc= 0; /* xternal stack starts at 0 */
-    options.code_loc  = 0; /* code starts at 0 */
-    options.data_loc  = 0x0030; /* data starts at 0x0030 */
-    options.xdata_loc = 0;
-    options.idata_loc = 0x80;
-    options.genericPtr = 1;   /* default on */
-    options.nopeep    = 0;
-    options.model = port->general.default_model;
-    options.nostdlib=0;
-    options.nostdinc=0;
-    options.verbose=0;
-
-    /* now for the optimizations */
-    /* turn on the everything */
-    optimize.global_cse = 1;    
-    optimize.label1 = 1;
-    optimize.label2 = 1;
-    optimize.label3 = 1;
-    optimize.label4 = 1;    
-    optimize.loopInvariant = 1;
-    optimize.loopInduction = 1;
-
-    port->setDefaultOptions();
+  int i;
+
+  for (i = 0; i < 128; i++)
+    preArgv[i] = asmOptions[i] =
+      linkOptions[i] = relFiles[i] = libFiles[i] =
+      libPaths[i] = NULL;
+
+  /* first the options part */
+  options.stack_loc = 0;       /* stack pointer initialised to 0 */
+  options.xstack_loc = 0;      /* xternal stack starts at 0 */
+  options.code_loc = 0;                /* code starts at 0 */
+  options.data_loc = 0x0030;   /* data starts at 0x0030 */
+  options.xdata_loc = 0;
+  options.idata_loc = 0x80;
+  options.genericPtr = 1;      /* default on */
+  options.nopeep = 0;
+  options.model = port->general.default_model;
+  options.nostdlib = 0;
+  options.nostdinc = 0;
+  options.verbose = 0;
+
+  options.stack10bit=0;
+
+  /* now for the optimizations */
+  /* turn on the everything */
+  optimize.global_cse = 1;
+  optimize.label1 = 1;
+  optimize.label2 = 1;
+  optimize.label3 = 1;
+  optimize.label4 = 1;
+  optimize.loopInvariant = 1;
+  optimize.loopInduction = 1;
+
+  /* now for the ports */
+  port->setDefaultOptions ();
 }
 
 /*-----------------------------------------------------------------*/
 /* processFile - determines the type of file from the extension    */
 /*-----------------------------------------------------------------*/
 }
 
 /*-----------------------------------------------------------------*/
 /* processFile - determines the type of file from the extension    */
 /*-----------------------------------------------------------------*/
-static void processFile (char *s)
+static void
+processFile (char *s)
 {
 {
-    char *fext = NULL;
-    
-    /* get the file extension */
-    fext = s + strlen(s);
-    while ((fext != s) && *fext != '.') fext--;
-    
-    /* now if no '.' then we don't know what the file type is
-       so give a warning and return */
-    if (fext == s) {
-       werror(W_UNKNOWN_FEXT,s);
-       return ;
+  char *fext = NULL;
+
+  /* get the file extension */
+  fext = s + strlen (s);
+  while ((fext != s) && *fext != '.')
+    fext--;
+
+  /* now if no '.' then we don't know what the file type is
+     so give a warning and return */
+  if (fext == s)
+    {
+      werror (W_UNKNOWN_FEXT, s);
+      return;
     }
 
     }
 
-    /* otherwise depending on the file type */
-    if (strcmp(fext,".c") == 0 || strcmp(fext,".C") == 0 || options.c1mode) {
-       /* source file name : not if we already have a 
-          source file */
-       if (srcFileName) {
-           werror(W_TOO_MANY_SRC,s);
-           return ;
+  /* otherwise depending on the file type */
+  if (strcmp (fext, ".c") == 0 || strcmp (fext, ".C") == 0 || options.c1mode)
+    {
+      /* source file name : not if we already have a
+         source file */
+      if (srcFileName)
+       {
+         werror (W_TOO_MANY_SRC, s);
+         return;
        }
 
        }
 
-       /* the only source file */       
-       if (!(srcFile = fopen((fullSrcFileName = s),"r"))) {
-           werror(E_FILE_OPEN_ERR,s);
-           exit (1);
+      /* the only source file */
+      if (!(srcFile = fopen ((fullSrcFileName = s), "r")))
+       {
+         werror (E_FILE_OPEN_ERR, s);
+         exit (1);
        }
        }
-       
-       /* copy the file name into the buffer */
-       strcpy(buffer,s);
-       
-       /* get rid of the "." */
-       strtok(buffer,".");
-       ALLOC(srcFileName,strlen(buffer)+1);
-       strcpy(srcFileName,buffer);
-
-       /* get rid of any path information 
-          for the module name; do this by going
-          backwards till we get to either '/' or '\' or ':'
-          or start of buffer */
-       fext = buffer + strlen(buffer);
-       while (fext != buffer && 
-              *(fext -1) != '\\'  &&
-              *(fext-1) != '/'   &&
-              *(fext-1) != ':')
-           fext--;
-       ALLOC(moduleName,strlen(fext)+1);
-       strcpy(moduleName,fext);
-       
-       return ;
+
+      /* copy the file name into the buffer */
+      strcpy (buffer, s);
+
+      /* get rid of the "." */
+      strtok (buffer, ".");
+      srcFileName = Safe_calloc (1, strlen (buffer) + 1);
+      strcpy (srcFileName, buffer);
+
+      /* get rid of any path information
+         for the module name; do this by going
+         backwards till we get to either '/' or '\' or ':'
+         or start of buffer */
+      fext = buffer + strlen (buffer);
+      while (fext != buffer &&
+            *(fext - 1) != '\\' &&
+            *(fext - 1) != '/' &&
+            *(fext - 1) != ':')
+       fext--;
+      moduleName = Safe_calloc (1, strlen (fext) + 1);
+      strcpy (moduleName, fext);
+
+      return;
     }
 
     }
 
-    /* if the extention is type .rel or .r or .REL or .R 
-       addtional object file will be passed to the linker */
-    if (strcmp(fext,".r") == 0 || strcmp(fext,".rel") == 0 ||
-       strcmp(fext,".R") == 0 || strcmp(fext,".REL") == 0 ||
-       strcmp(fext, port->linker.rel_ext) == 0)
-       {
-       relFiles[nrelFiles++] = s;
-       return ;
+  /* if the extention is type .rel or .r or .REL or .R
+     addtional object file will be passed to the linker */
+  if (strcmp (fext, ".r") == 0 || strcmp (fext, ".rel") == 0 ||
+      strcmp (fext, ".R") == 0 || strcmp (fext, ".REL") == 0 ||
+      strcmp (fext, port->linker.rel_ext) == 0)
+    {
+      relFiles[nrelFiles++] = s;
+      return;
     }
 
     }
 
-    /* if .lib or .LIB */
-    if (strcmp(fext,".lib") == 0 || strcmp(fext,".LIB") == 0) {
-       libFiles[nlibFiles++] = s;
-       return;
+  /* if .lib or .LIB */
+  if (strcmp (fext, ".lib") == 0 || strcmp (fext, ".LIB") == 0)
+    {
+      libFiles[nlibFiles++] = s;
+      return;
     }
 
     }
 
-    werror(W_UNKNOWN_FEXT,s);
-  
+  werror (W_UNKNOWN_FEXT, s);
+
 }
 
 }
 
-static void _processC1Arg(char *s)
+static void
+_processC1Arg (char *s)
 {
 {
-    if (srcFileName) {
-       if (options.out_name) {
-           werror(W_TOO_MANY_SRC,s);
-           return;
+  if (srcFileName)
+    {
+      if (options.out_name)
+       {
+         werror (W_TOO_MANY_SRC, s);
+         return;
        }
        }
-       options.out_name = strdup(s);
+      options.out_name = strdup (s);
     }
     }
-    else {
-       processFile(s);
+  else
+    {
+      processFile (s);
     }
 }
 
     }
 }
 
-static void _addToList(const char **list, const char *str)
+static void
+_addToList (const char **list, const char *str)
 {
 {
-    /* This is the bad way to do things :) */
-    while (*list)
-       list++;
-    *list = strdup(str);
-    if (!*list) {
-       werror(E_OUT_OF_MEM,__FILE__, 0);
-       exit (1);
+  /* This is the bad way to do things :) */
+  while (*list)
+    list++;
+  *list = strdup (str);
+  if (!*list)
+    {
+      werror (E_OUT_OF_MEM, __FILE__, 0);
+      exit (1);
     }
     }
-    *(++list) = NULL;
+  *(++list) = NULL;
 }
 
 }
 
-static void _setModel(int model, const char *sz)
+static void
+_setModel (int model, const char *sz)
 {
 {
-    if (port->general.supported_models & model)
-       options.model = model;
-    else
-       werror(W_UNSUPPORTED_MODEL, sz, port->target);
+  if (port->general.supported_models & model)
+    options.model = model;
+  else
+    werror (W_UNSUPPORTED_MODEL, sz, port->target);
 }
 
 /*-----------------------------------------------------------------*/
 /* parseCmdLine - parses the command line and sets the options     */
 /*-----------------------------------------------------------------*/
 }
 
 /*-----------------------------------------------------------------*/
 /* parseCmdLine - parses the command line and sets the options     */
 /*-----------------------------------------------------------------*/
-int   parseCmdLine ( int argc, char **argv )
+int
+parseCmdLine (int argc, char **argv)
 {
 {
-    int i ;      
-    char cdbfnbuf[50];
-
-    /* go thru all whole command line  */
-    for ( i = 1; i < argc; i++ ) {
-       if ( i >= argc )
-           break ;
-
-       /* options */
-       if (argv[i][0] == '-' && argv[i][1] == '-') {
-           
-           if (strcmp(&argv[i][1],OPTION_HELP) == 0) {
-               printUsage();
-                exit(0);
-           }       
-
-           if (strcmp(&argv[i][1],OPTION_XREGS) == 0) {
-               options.regExtend = 1;
-                continue;
+  int i;
+  char cdbfnbuf[50];
+
+  /* go thru all whole command line */
+  for (i = 1; i < argc; i++)
+    {
+      if (i >= argc)
+       break;
+
+      /* options */
+      if (argv[i][0] == '-' && argv[i][1] == '-')
+       {
+
+         if (strcmp (&argv[i][1], OPTION_HELP) == 0)
+           {
+             printUsage ();
+             exit (0);
            }
 
            }
 
-           if (strcmp(&argv[i][1],OPTION_LARGE_MODEL) == 0) {
-               _setModel(MODEL_LARGE, argv[i]);
-                continue;
+         if (strcmp (&argv[i][1], OPTION_XREGS) == 0)
+           {
+             options.regExtend = 1;
+             continue;
            }
 
            }
 
-           if (strcmp(&argv[i][1],OPTION_MEDIUM_MODEL) == 0) {
-               _setModel(MODEL_MEDIUM, argv[i]);
-                continue;
+         if (strcmp (&argv[i][1], OPTION_LARGE_MODEL) == 0)
+           {
+             _setModel (MODEL_LARGE, argv[i]);
+             continue;
            }
            }
-           
-           if (strcmp(&argv[i][1],OPTION_SMALL_MODEL) == 0) {
-               _setModel(MODEL_SMALL, argv[i]);
-                continue;
+
+         if (strcmp (&argv[i][1], OPTION_MEDIUM_MODEL) == 0)
+           {
+             _setModel (MODEL_MEDIUM, argv[i]);
+             continue;
            }
            }
-           
-           if (strcmp(&argv[i][1],OPTION_FLAT24_MODEL) == 0) {
-               _setModel(MODEL_FLAT24, argv[i]);
-                continue;
+
+         if (strcmp (&argv[i][1], OPTION_SMALL_MODEL) == 0)
+           {
+             _setModel (MODEL_SMALL, argv[i]);
+             continue;
            }
            }
-           
-           if (strcmp(&argv[i][1],OPTION_STACK_10BIT) == 0) {
-               options.stack10bit = 1;
-               continue;
+
+         if (strcmp (&argv[i][1], OPTION_FLAT24_MODEL) == 0)
+           {
+             _setModel (MODEL_FLAT24, argv[i]);
+             continue;
            }
 
            }
 
-           if (strcmp(&argv[i][1],OPTION_STACK_AUTO) == 0) {
-               options.stackAuto = 1;
-                continue;
+         if (strcmp (&argv[i][1], OPTION_STACK_10BIT) == 0)
+           {
+             options.stack10bit = 1;
+             continue;
            }
 
            }
 
-           if (strcmp(&argv[i][1],OPTION_DUMP_RAW) == 0) {
-               options.dump_raw = 1;
-                continue;
+         if (strcmp (&argv[i][1], OPTION_STACK_8BIT) == 0)
+           {
+             options.stack10bit = 0;
+             continue;
+           }
+
+         if (strcmp (&argv[i][1], OPTION_STACK_AUTO) == 0)
+           {
+             options.stackAuto = 1;
+             continue;
+           }
+
+         if (strcmp (&argv[i][1], OPTION_DUMP_RAW) == 0)
+           {
+             options.dump_raw = 1;
+             continue;
            }
 
            }
 
-           if (strcmp(&argv[i][1],OPTION_CYCLOMATIC) == 0) {
-               options.cyclomatic = 1;
-                continue;
+         if (strcmp (&argv[i][1], OPTION_CYCLOMATIC) == 0)
+           {
+             options.cyclomatic = 1;
+             continue;
            }
            }
-           
-           if (strcmp(&argv[i][1],OPTION_DUMP_GCSE) == 0) {
-               options.dump_gcse = 1;
-                continue;
+
+         if (strcmp (&argv[i][1], OPTION_DUMP_GCSE) == 0)
+           {
+             options.dump_gcse = 1;
+             continue;
            }
            }
-           
-           if (strcmp(&argv[i][1],OPTION_DUMP_LOOP) == 0) {
-               options.dump_loop = 1;
-                continue;
+
+         if (strcmp (&argv[i][1], OPTION_DUMP_LOOP) == 0)
+           {
+             options.dump_loop = 1;
+             continue;
            }
 
            }
 
-           if (strcmp(&argv[i][1],OPTION_DUMP_KILL) == 0) {
-               options.dump_kill = 1;
-                continue;
+         if (strcmp (&argv[i][1], OPTION_DUMP_KILL) == 0)
+           {
+             options.dump_kill = 1;
+             continue;
            }
 
            }
 
-           if (strcmp(&argv[i][1],OPTION_INTLONG_RENT) == 0) {
-               options.intlong_rent = 1;
-                continue;
+         if (strcmp (&argv[i][1], OPTION_INTLONG_RENT) == 0)
+           {
+             options.intlong_rent = 1;
+             continue;
            }
 
            }
 
-           if (strcmp(&argv[i][1],OPTION_FLOAT_RENT) == 0) {
-               options.float_rent = 1;
-                continue;
+         if (strcmp (&argv[i][1], OPTION_FLOAT_RENT) == 0)
+           {
+             options.float_rent = 1;
+             continue;
            }
 
            }
 
-           if (strcmp(&argv[i][1],OPTION_DUMP_RANGE) == 0) {
-               options.dump_range = 1;
-                continue;
+         if (strcmp (&argv[i][1], OPTION_DUMP_RANGE) == 0)
+           {
+             options.dump_range = 1;
+             continue;
            }
 
            }
 
-           if (strcmp(&argv[i][1],OPTION_DUMP_PACK) == 0) {
-               options.dump_pack = 1;
-                continue;
+         if (strcmp (&argv[i][1], OPTION_DUMP_PACK) == 0)
+           {
+             options.dump_pack = 1;
+             continue;
            }
 
            }
 
-           if (strcmp(&argv[i][1],OPTION_DUMP_RASSGN) == 0) {
-               options.dump_rassgn = 1;
-                continue;
+         if (strcmp (&argv[i][1], OPTION_DUMP_RASSGN) == 0)
+           {
+             options.dump_rassgn = 1;
+             continue;
            }
 
            }
 
-           if (strcmp(&argv[i][1],OPTION_OUT_FMT_IHX) == 0) {
-               options.out_fmt = 0;
-                continue;
+         if (strcmp (&argv[i][1], OPTION_OUT_FMT_IHX) == 0)
+           {
+             options.out_fmt = 0;
+             continue;
            }
 
            }
 
-           if (strcmp(&argv[i][1],OPTION_OUT_FMT_S19) == 0) {
-               options.out_fmt = 1;
-                continue;
+         if (strcmp (&argv[i][1], OPTION_OUT_FMT_S19) == 0)
+           {
+             options.out_fmt = 1;
+             continue;
            }
 
            }
 
-           if (strcmp(&argv[i][1],OPTION_NOOVERLAY) == 0) {
-               options.noOverlay = 1;
-                continue;
+         if (strcmp (&argv[i][1], OPTION_NOOVERLAY) == 0)
+           {
+             options.noOverlay = 1;
+             continue;
            }
 
            }
 
-           if (strcmp(&argv[i][1],OPTION_STKAFTRDATA) == 0) {
-               options.stackOnData = 1;
-                continue;
+         if (strcmp (&argv[i][1], OPTION_STKAFTRDATA) == 0)
+           {
+             options.stackOnData = 1;
+             continue;
            }
 
            }
 
-           if (strcmp(&argv[i][1],OPTION_PREPROC_ONLY) == 0) {
-               preProcOnly = 1;
-                continue;
+         if (strcmp (&argv[i][1], OPTION_PREPROC_ONLY) == 0)
+           {
+             preProcOnly = 1;
+             continue;
            }
 
            }
 
-           if (strcmp(&argv[i][1],OPTION_C1_MODE) == 0) {
-               options.c1mode = 1;
-                continue;
+         if (strcmp (&argv[i][1], OPTION_C1_MODE) == 0)
+           {
+             options.c1mode = 1;
+             continue;
            }
 
            }
 
-           
-           if (strcmp(&argv[i][1],OPTION_DUMP_ALL) == 0) {
-               options.dump_rassgn = 
-                options.dump_pack   =
-                options.dump_range  = 
-                options.dump_kill   = 
-                options.dump_loop   = 
-                options.dump_gcse   = 
-                options.dump_raw    = 1;
-                continue;
+
+         if (strcmp (&argv[i][1], OPTION_DUMP_ALL) == 0)
+           {
+             options.dump_rassgn =
+               options.dump_pack =
+               options.dump_range =
+               options.dump_kill =
+               options.dump_loop =
+               options.dump_gcse =
+               options.dump_raw = 1;
+             continue;
            }
 
            }
 
-           if (strcmp(&argv[i][1],OPTION_COMP_ONLY) == 0) {
-               options.cc_only = 1;
-                continue;
+         if (strcmp (&argv[i][1], OPTION_COMP_ONLY) == 0)
+           {
+             options.cc_only = 1;
+             continue;
            }
            }
-   
-           if (strcmp(&argv[i][1],OPTION_GENERIC) == 0) {
-               options.genericPtr = 1;
-                continue;
+
+         if (strcmp (&argv[i][1], OPTION_GENERIC) == 0)
+           {
+             options.genericPtr = 1;
+             continue;
            }
            }
-           
-           if (strcmp(&argv[i][1],OPTION_NOPEEP) == 0) {
-               options.nopeep = 1;
-                continue;
+
+         if (strcmp (&argv[i][1], OPTION_NOPEEP) == 0)
+           {
+             options.nopeep = 1;
+             continue;
            }
 
            }
 
-           if (strcmp(&argv[i][1],OPTION_ASMPEEP) == 0) {
-               options.asmpeep = 1;
-                continue;
+         if (strcmp (&argv[i][1], OPTION_ASMPEEP) == 0)
+           {
+             options.asmpeep = 1;
+             continue;
            }
 
            }
 
-           if (strcmp(&argv[i][1],OPTION_DEBUG) == 0) {
-               options.debug = 1;              
-                continue;
+         if (strcmp (&argv[i][1], OPTION_DEBUG) == 0)
+           {
+             options.debug = 1;
+             continue;
            }
 
            }
 
-           if (strcmp(&argv[i][1],OPTION_NODEBUG) == 0) {
-               options.nodebug = 1;            
-                continue;
+         if (strcmp (&argv[i][1], OPTION_NODEBUG) == 0)
+           {
+             options.nodebug = 1;
+             continue;
            }
 
            }
 
-           if (strcmp(&argv[i][1],OPTION_NOREGPARMS) == 0) {
-               options.noregparms = 1;         
-                continue;
+         if (strcmp (&argv[i][1], OPTION_NOREGPARMS) == 0)
+           {
+             options.noregparms = 1;
+             continue;
            }
            }
-           
-           if (strcmp(&argv[i][1],OPTION_PEEP_FILE) == 0) {
-               if (argv[i][1+strlen(OPTION_PEEP_FILE)]) 
-                   options.peep_file = 
-                       &argv[i][1+strlen(OPTION_PEEP_FILE)];
-               else
-                   options.peep_file = argv[++i];
-               continue ;
+
+         if (strcmp (&argv[i][1], OPTION_PEEP_FILE) == 0)
+           {
+             if (argv[i][1 + strlen (OPTION_PEEP_FILE)])
+               options.peep_file =
+                 &argv[i][1 + strlen (OPTION_PEEP_FILE)];
+             else
+               options.peep_file = argv[++i];
+             continue;
            }
 
            }
 
-           if (strcmp(&argv[i][1],OPTION_LIB_PATH) == 0) {
-               if (argv[i][1+strlen(OPTION_LIB_PATH)]) 
-                   libPaths[nlibPaths++] = 
-                       &argv[i][1+strlen(OPTION_PEEP_FILE)];
-               else
-                   libPaths[nlibPaths++] = argv[++i];
-               continue ;
+         if (strcmp (&argv[i][1], OPTION_LIB_PATH) == 0)
+           {
+             if (argv[i][1 + strlen (OPTION_LIB_PATH)])
+               libPaths[nlibPaths++] =
+                 &argv[i][1 + strlen (OPTION_PEEP_FILE)];
+             else
+               libPaths[nlibPaths++] = argv[++i];
+             continue;
            }
 
            }
 
-           if (strcmp(&argv[i][1],OPTION_XSTACK_LOC) == 0) {
-               
-               if (argv[i][1+strlen(OPTION_XSTACK_LOC)])
-                   options.xstack_loc = 
-                       (int) floatFromVal(constVal(&argv[i][1+strlen(OPTION_XSTACK_LOC)]));
-                   else
-                       options.xstack_loc = 
-                           (int) floatFromVal(constVal(argv[++i]));
-               continue ;
+         if (strcmp (&argv[i][1], OPTION_XSTACK_LOC) == 0)
+           {
+
+             if (argv[i][1 + strlen (OPTION_XSTACK_LOC)])
+               options.xstack_loc =
+                 (int) floatFromVal (constVal (&argv[i][1 + strlen (OPTION_XSTACK_LOC)]));
+             else
+               options.xstack_loc =
+                 (int) floatFromVal (constVal (argv[++i]));
+             continue;
            }
 
            }
 
-           if (strcmp(&argv[i][1],OPTION_XSTACK) == 0) {
-               options.useXstack = 1;
-                continue;
+         if (strcmp (&argv[i][1], OPTION_XSTACK) == 0)
+           {
+             options.useXstack = 1;
+             continue;
            }
 
            }
 
-           if (strcmp(&argv[i][1],OPTION_MAINRETURN) == 0) {
-               options.mainreturn = 1;
-                continue;
+         if (strcmp (&argv[i][1], OPTION_MAINRETURN) == 0)
+           {
+             options.mainreturn = 1;
+             continue;
            }
 
            }
 
-           if (strcmp(&argv[i][1],OPTION_CALLEE_SAVES) == 0) {
-               if (argv[i][1+strlen(OPTION_CALLEE_SAVES)])
-                   parseWithComma(options.calleeSaves
-                                  ,&argv[i][1+strlen(OPTION_CALLEE_SAVES)]);
-               else
-                   parseWithComma(options.calleeSaves,argv[++i]);
-                continue;
+         if (strcmp (&argv[i][1], OPTION_CALLEE_SAVES) == 0)
+           {
+             if (argv[i][1 + strlen (OPTION_CALLEE_SAVES)])
+               parseWithComma (options.calleeSaves
+                               ,&argv[i][1 + strlen (OPTION_CALLEE_SAVES)]);
+             else
+               parseWithComma (options.calleeSaves, argv[++i]);
+             continue;
            }
            }
-           
-           if (strcmp(&argv[i][1],OPTION_STACK_LOC) == 0) {
-               
-               if (argv[i][1+strlen(OPTION_STACK_LOC)])
-                   options.stack_loc = 
-                       (int) floatFromVal(constVal(&argv[i][1+strlen(OPTION_STACK_LOC)]));
-                   else
-                       options.stack_loc = 
-                           (int) floatFromVal(constVal(argv[++i]));
-               continue;
+
+         if (strcmp (&argv[i][1], OPTION_STACK_LOC) == 0)
+           {
+
+             if (argv[i][1 + strlen (OPTION_STACK_LOC)])
+               options.stack_loc =
+                 (int) floatFromVal (constVal (&argv[i][1 + strlen (OPTION_STACK_LOC)]));
+             else
+               options.stack_loc =
+                 (int) floatFromVal (constVal (argv[++i]));
+             continue;
+           }
+
+         if (strcmp (&argv[i][1], OPTION_XRAM_LOC) == 0)
+           {
+
+             if (argv[i][1 + strlen (OPTION_XRAM_LOC)])
+               options.xdata_loc =
+                 (unsigned int) floatFromVal (constVal (&argv[i][1 + strlen (OPTION_XRAM_LOC)]));
+             else
+               options.xdata_loc =
+                 (unsigned int) floatFromVal (constVal (argv[++i]));
+             continue;
            }
 
            }
 
-           if (strcmp(&argv[i][1],OPTION_XRAM_LOC) == 0) {
-               
-               if (argv[i][1+strlen(OPTION_XRAM_LOC)])
-                   options.xdata_loc = 
-                       (unsigned int) floatFromVal(constVal(&argv[i][1+strlen(OPTION_XRAM_LOC)]));
-                   else
-                       options.xdata_loc = 
-                           (unsigned int) floatFromVal(constVal(argv[++i]));
-               continue;
+         if (strcmp (&argv[i][1], OPTION_IRAM_SIZE) == 0)
+           {
+
+             if (argv[i][1 + strlen (OPTION_IRAM_SIZE)])
+               options.iram_size =
+                 (int) floatFromVal (constVal (&argv[i][1 + strlen (OPTION_IRAM_SIZE)]));
+             else
+               options.iram_size =
+                 (int) floatFromVal (constVal (argv[++i]));
+             continue;
            }
 
            }
 
-           if (strcmp(&argv[i][1],OPTION_IRAM_SIZE) == 0) {
-               
-               if (argv[i][1+strlen(OPTION_IRAM_SIZE)])
-                   options.iram_size = 
-                       (int) floatFromVal(constVal(&argv[i][1+strlen(OPTION_IRAM_SIZE)]));
-                   else
-                       options.iram_size = 
-                           (int) floatFromVal(constVal(argv[++i]));
-               continue;
+         if (strcmp (&argv[i][1], OPTION_VERSION) == 0)
+           {
+             printVersionInfo ();
+             exit (0);
+             continue;
            }
 
            }
 
-           if (strcmp(&argv[i][1],OPTION_VERSION) == 0) {              
-               printVersionInfo();
-               exit(0);
-               continue;
+         if (strcmp (&argv[i][1], OPTION_DATA_LOC) == 0)
+           {
+
+             if (argv[i][1 + strlen (OPTION_DATA_LOC)])
+               options.data_loc =
+                 (int) floatFromVal (constVal (&argv[i][1 + strlen (OPTION_DATA_LOC)]));
+             else
+               options.data_loc =
+                 (int) floatFromVal (constVal (argv[++i]));
+             continue;
            }
 
            }
 
-           if (strcmp(&argv[i][1],OPTION_DATA_LOC) == 0) {
-               
-               if (argv[i][1+strlen(OPTION_DATA_LOC)])
-                   options.data_loc = 
-                       (int) floatFromVal(constVal(&argv[i][1+strlen(OPTION_DATA_LOC)]));
-                   else
-                       options.data_loc = 
-                           (int) floatFromVal(constVal(argv[++i]));
-               continue;
+         if (strcmp (&argv[i][1], OPTION_IDATA_LOC) == 0)
+           {
+
+             if (argv[i][1 + strlen (OPTION_IDATA_LOC)])
+               options.idata_loc =
+                 (int) floatFromVal (constVal (&argv[i][1 + strlen (OPTION_IDATA_LOC)]));
+             else
+               options.idata_loc =
+                 (int) floatFromVal (constVal (argv[++i]));
+             continue;
            }
 
            }
 
-           if (strcmp(&argv[i][1],OPTION_IDATA_LOC) == 0) {
-               
-               if (argv[i][1+strlen(OPTION_IDATA_LOC)])
-                   options.idata_loc = 
-                       (int) floatFromVal(constVal(&argv[i][1+strlen(OPTION_IDATA_LOC)]));
-                   else
-                       options.idata_loc = 
-                           (int) floatFromVal(constVal(argv[++i]));
-               continue;
+         if (strcmp (&argv[i][1], OPTION_CODE_LOC) == 0)
+           {
+
+             if (argv[i][1 + strlen (OPTION_CODE_LOC)])
+               options.code_loc =
+                 (int) floatFromVal (constVal (&argv[i][1 + strlen (OPTION_CODE_LOC)]));
+             else
+               options.code_loc =
+                 (int) floatFromVal (constVal (argv[++i]));
+             continue;
            }
 
            }
 
-           if (strcmp(&argv[i][1],OPTION_CODE_LOC) == 0) {
-               
-               if (argv[i][1+strlen(OPTION_CODE_LOC)])
-                   options.code_loc = 
-                       (int) floatFromVal(constVal(&argv[i][1+strlen(OPTION_CODE_LOC)]));
-                   else
-                       options.code_loc = 
-                           (int) floatFromVal(constVal(argv[++i]));
-               continue;
+
+         if (strcmp (&argv[i][1], OPTION_NO_JTBOUND) == 0)
+           {
+             optimize.noJTabBoundary = 1;
+             continue;
            }
 
            }
 
-           
-           if (strcmp(&argv[i][1],OPTION_NO_JTBOUND) == 0) {
-               optimize.noJTabBoundary = 1;
-                continue;
+         if (strcmp (&argv[i][1], OPTION_NO_GCSE) == 0)
+           {
+             optimize.global_cse = 0;
+             continue;
            }
            }
-           if (strcmp(&argv[i][1],OPTION_NO_GCSE) == 0) {
-               optimize.global_cse = 0;
-                continue;
+
+         if (strcmp (&argv[i][1], OPTION_NO_LOOP_INV) == 0)
+           {
+             optimize.loopInvariant = 0;
+             continue;
            }
 
            }
 
-           if (strcmp(&argv[i][1],OPTION_NO_LOOP_INV) == 0) {
-               optimize.loopInvariant = 0;
-                continue;
+         if (strcmp (&argv[i][1], OPTION_NO_LOOP_IND) == 0)
+           {
+             optimize.loopInduction = 0;
+             continue;
            }
 
            }
 
-           if (strcmp(&argv[i][1],OPTION_NO_LOOP_IND) == 0) {
-               optimize.loopInduction = 0;
-                continue;
+         if (strcmp (&argv[i][1], OPTION_NO_LOOPREV) == 0)
+           {
+             optimize.noLoopReverse = 1;
+             continue;
            }
 
            }
 
-           if (strcmp(&argv[i][1],OPTION_NO_LOOPREV) == 0) {
-               optimize.noLoopReverse = 1;
-                continue;
+         if (strcmp (&argv[i][1], OPTION_NOSTDLIB) == 0)
+           {
+             options.nostdlib = 1;
+             continue;
            }
 
            }
 
-           if (strcmp(&argv[i][1],OPTION_NOSTDLIB) == 0) {
-               options.nostdlib=1;
-               continue;
+         if (strcmp (&argv[i][1], OPTION_NOSTDINC) == 0)
+           {
+             options.nostdinc = 1;
+             continue;
            }
 
            }
 
-           if (strcmp(&argv[i][1],OPTION_NOSTDINC) == 0) {
-               options.nostdinc=1;
-               continue;
+         if (strcmp (&argv[i][1], OPTION_VERBOSE) == 0)
+           {
+             options.verbose = 1;
+             continue;
            }
 
            }
 
-           if (strcmp(&argv[i][1],OPTION_VERBOSE) == 0) {
-               options.verbose=1;
-               continue;
+         if (strcmp (&argv[i][1], OPTION_ANSIINT) == 0)
+           {
+             options.ANSIint = 1;
+             continue;
            }
            }
-           
-           if (strcmp(&argv[i][1],OPTION_ANSIINT) == 0) {
-               options.ANSIint=1;
-               continue;
-           }       
 
 
-           if (!port->parseOption(&argc, argv, &i))
+         if (!port->parseOption (&argc, argv, &i))
            {
            {
-               werror(W_UNKNOWN_OPTION,argv[i]);
+             werror (W_UNKNOWN_OPTION, argv[i]);
            }
            }
-           else
+         else
            {
            {
-               continue;
+             continue;
            }
            }
-       }      
-
-       /* these are undocumented options */
-       /* if preceded by '/' then turn off certain optmizations, used
-          for debugging only these are also the legacy options from
-          version 1.xx will be removed gradually.
-          It may be an absolute filename.
-       */
-       if ( *argv[i] == '/' && strlen(argv[i]) < 3) {
-           switch (argv[i][1]) {
-               
+       }
+
+      /* these are undocumented options */
+      /* if preceded by '/' then turn off certain optmizations, used
+         for debugging only these are also the legacy options from
+         version 1.xx will be removed gradually.
+         It may be an absolute filename.
+       */
+      if (*argv[i] == '/' && strlen (argv[i]) < 3)
+       {
+         switch (argv[i][1])
+           {
+
            case 'p':
            case 'p':
-               optimize.ptrArithmetic=0;
-               break;
+             optimize.ptrArithmetic = 0;
+             break;
 
            case 'L':
 
            case 'L':
-               switch (argv[i][2]) {
+             switch (argv[i][2])
+               {
                case '\0':
                case '\0':
-                   optimize.label1 = 
-                       optimize.label2 =
-                       optimize.label3 = 
-                       optimize.label4 = 0 ;
-                   break;
+                 optimize.label1 =
+                   optimize.label2 =
+                   optimize.label3 =
+                   optimize.label4 = 0;
+                 break;
                case '1':
                case '1':
-                   optimize.label1 = 0;
-                   break;
+                 optimize.label1 = 0;
+                 break;
                case '2':
                case '2':
-                   optimize.label2 = 0;
-                   break;
+                 optimize.label2 = 0;
+                 break;
                case '3':
                case '3':
-                   optimize.label3 = 0;
-                   break;
+                 optimize.label3 = 0;
+                 break;
                case '4':
                case '4':
-                   optimize.label4 = 0;
-                   break;
+                 optimize.label4 = 0;
+                 break;
                }
                }
-               break;
-               
-           case 'l' :
-               switch (argv[i][2]) {               
-               case 'i' :
-                   optimize.loopInvariant = 0;
-                   break;
-               case 'n' :
-                   optimize.loopInduction = 0;
-                   break;
+             break;
+
+           case 'l':
+             switch (argv[i][2])
+               {
+               case 'i':
+                 optimize.loopInvariant = 0;
+                 break;
+               case 'n':
+                 optimize.loopInduction = 0;
+                 break;
 
 
                }
 
 
                }
-               break ;
-           case 'g' :
-               optimize.global_cse = 0;
-               break;
+             break;
+           case 'g':
+             optimize.global_cse = 0;
+             break;
 
            }
 
            }
-           continue ;
+         continue;
        }
 
        }
 
-       /* if preceded by  '-' then option */
-       if ( *argv[i] == '-' ) {
-           switch (argv[i][1]) {
-           case 'h'    :
-               printUsage();
-               exit(0);
-               break;
-               
+      /* if preceded by  '-' then option */
+      if (*argv[i] == '-')
+       {
+         switch (argv[i][1])
+           {
+           case 'h':
+             printUsage ();
+             exit (0);
+             break;
+
            case 'E':
            case 'E':
-               preProcOnly = 1;
-               break;
+             preProcOnly = 1;
+             break;
 
            case 'm':
 
            case 'm':
-               /* Used to select the port */
-               if (_setPort(argv[i] + 2)) {
-                   werror(W_UNSUPP_OPTION,"-m","Unrecognised processor");
-               }
-               break;
-           
-           case 'a'    : 
-               werror(W_UNSUPP_OPTION,"-a","use --stack-auto instead");
-               break ;
-               
-           case 'g'    :
-               werror(W_UNSUPP_OPTION,"-g","use --generic instead");
-               break;
-                               
-           case 'X'    :       /* use external stack           */
-               werror(W_UNSUPP_OPTION,"-X","use --xstack-loc instead");
-               break ;
-               
-           case 'x'    :
-               werror(W_UNSUPP_OPTION,"-x","use --xstack instead");
-               break;
-               
-           case 'p'    :       /* stack pointer intial value */
-           case 'P'    :
-               werror(W_UNSUPP_OPTION,"-p","use --stack-loc instead");
-               break ;
-                               
-           case 'i'    :
-               werror(W_UNSUPP_OPTION,"-i","use --idata-loc instead");
-               break ;
-               
-           case 'r'    :
-               werror(W_UNSUPP_OPTION,"-r","use --xdata-loc instead");
-               break ;
-               
-           case 's'    :
-               werror(W_UNSUPP_OPTION,"-s","use --code-loc instead");
-               break ;         
-                               
-           case 'c':      
-               options.cc_only = 1;
-               break;  
+             /* Used to select the port */
+             _setPort (argv[i] + 2);
+             break;
+
+           case 'a':
+             werror (W_UNSUPP_OPTION, "-a", "use --stack-auto instead");
+             break;
+
+           case 'g':
+             werror (W_UNSUPP_OPTION, "-g", "use --generic instead");
+             break;
+
+           case 'X':           /* use external stack   */
+             werror (W_UNSUPP_OPTION, "-X", "use --xstack-loc instead");
+             break;
+
+           case 'x':
+             werror (W_UNSUPP_OPTION, "-x", "use --xstack instead");
+             break;
+
+           case 'p':           /* stack pointer intial value */
+           case 'P':
+             werror (W_UNSUPP_OPTION, "-p", "use --stack-loc instead");
+             break;
+
+           case 'i':
+             werror (W_UNSUPP_OPTION, "-i", "use --idata-loc instead");
+             break;
+
+           case 'r':
+             werror (W_UNSUPP_OPTION, "-r", "use --xdata-loc instead");
+             break;
+
+           case 's':
+             werror (W_UNSUPP_OPTION, "-s", "use --code-loc instead");
+             break;
+
+           case 'c':
+             options.cc_only = 1;
+             break;
 
            case 'Y':
 
            case 'Y':
-               werror(W_UNSUPP_OPTION,"-Y","use -I instead");
-               break;
-               
-           case 'L' :
-               if (argv[i][2])
-                   libPaths[nlibPaths++] = &argv[i][2];
-               else
-                   libPaths[nlibPaths++] = argv[++i];
-               break;
-               
+             werror (W_UNSUPP_OPTION, "-Y", "use -I instead");
+             break;
+
+           case 'L':
+             if (argv[i][2])
+               libPaths[nlibPaths++] = &argv[i][2];
+             else
+               libPaths[nlibPaths++] = argv[++i];
+             break;
+
            case 'W':
            case 'W':
-               /* linker options */
-               if (argv[i][2] == 'l') {
-                   if (argv[i][3])
-                       parseWithComma(linkOptions,&argv[i][3]);
-                   else
-                       parseWithComma(linkOptions,argv[++i]);
-               } else {
-                   /* assembler options */
-                   if (argv[i][2] == 'a') {
-                       if (argv[i][3])
-                           parseWithComma((char **)asmOptions,&argv[i][3]);
-                       else
-                           parseWithComma((char **)asmOptions,argv[++i]);
-                       
-                   } else {
-                       werror(W_UNKNOWN_OPTION,argv[i]);                      
+             /* linker options */
+             if (argv[i][2] == 'l')
+               {
+                 if (argv[i][3])
+                   parseWithComma (linkOptions, &argv[i][3]);
+                 else
+                   parseWithComma (linkOptions, argv[++i]);
+               }
+             else
+               {
+                 /* assembler options */
+                 if (argv[i][2] == 'a')
+                   {
+                     if (argv[i][3])
+                       parseWithComma ((char **) asmOptions, &argv[i][3]);
+                     else
+                       parseWithComma ((char **) asmOptions, argv[++i]);
+
+                   }
+                 else
+                   {
+                     werror (W_UNKNOWN_OPTION, argv[i]);
                    }
                }
                    }
                }
-               break;
+             break;
            case 'S':
            case 'S':
-               noAssemble = 1;
-               break;
+             noAssemble = 1;
+             break;
 
            case 'V':
              verboseExec = TRUE;
              break;
 
            case 'v':
 
            case 'V':
              verboseExec = TRUE;
              break;
 
            case 'v':
-               printVersionInfo();
-               exit(0);
-               break;
+             printVersionInfo ();
+             exit (0);
+             break;
 
 
-               /* preprocessor options */              
+             /* preprocessor options */
            case 'M':
              {
            case 'M':
              {
-               preProcOnly=1;
-               _addToList(preArgv, "-M");
+               preProcOnly = 1;
+               _addToList (preArgv, "-M");
                break;
              }
            case 'C':
              {
                break;
              }
            case 'C':
              {
-               _addToList(preArgv, "-C");
+               _addToList (preArgv, "-C");
                break;
              }
            case 'd':
                break;
              }
            case 'd':
@@ -1082,526 +1141,502 @@ int   parseCmdLine ( int argc, char **argv )
            case 'I':
            case 'A':
            case 'U':
            case 'I':
            case 'A':
            case 'U':
-               {
-                   char sOpt = argv[i][1] ;
-                   char *rest ;
-                   
-                   if ( argv[i][2] == ' ' || argv[i][2] == '\0') {
-                       i++ ;
-                       rest = argv[i] ;
-                   }
-                   else
-                       rest = &argv[i][2] ;
-                   
-                   if ( argv[i][1] == 'Y' )
-                       argv[i][1] = 'I';
-
-                   sprintf(buffer, "-%c%s", sOpt, rest);
-                   _addToList(preArgv, buffer);
-               }
-               break ;
+             {
+               char sOpt = argv[i][1];
+               char *rest;
+
+               if (argv[i][2] == ' ' || argv[i][2] == '\0')
+                 {
+                   i++;
+                   rest = argv[i];
+                 }
+               else
+                 rest = &argv[i][2];
+
+               if (argv[i][1] == 'Y')
+                 argv[i][1] = 'I';
+
+               sprintf (buffer, "-%c%s", sOpt, rest);
+               _addToList (preArgv, buffer);
+             }
+             break;
 
            default:
 
            default:
-               if (!port->parseOption(&argc, argv, &i))
-                   werror(W_UNKNOWN_OPTION,argv[i]);
+             if (!port->parseOption (&argc, argv, &i))
+               werror (W_UNKNOWN_OPTION, argv[i]);
            }
            }
-           continue ;
+         continue;
        }
 
        }
 
-       if (!port->parseOption(&argc, argv, &i)) {
-           /* no option must be a filename */
-           if (options.c1mode)
-               _processC1Arg(argv[i]);
-           else
-               processFile(argv[i]);
+      if (!port->parseOption (&argc, argv, &i))
+       {
+         /* no option must be a filename */
+         if (options.c1mode)
+           _processC1Arg (argv[i]);
+         else
+           processFile (argv[i]);
        }
        }
-    }  
-
-    /* set up external stack location if not explicitly specified */
-    if ( !options.xstack_loc )
-       options.xstack_loc = options.xdata_loc ;
-
-    /* if debug option is set the open the cdbFile */
-    if (!options.nodebug && srcFileName) {
-       sprintf(cdbfnbuf,"%s.cdb",srcFileName);
-       if ((cdbFile = fopen(cdbfnbuf,"w")) == NULL)
-           werror(E_FILE_OPEN_ERR,cdbfnbuf);
-       else {
-           /* add a module record */
-           fprintf(cdbFile,"M:%s\n",moduleName);
+    }
+
+  /* set up external stack location if not explicitly specified */
+  if (!options.xstack_loc)
+    options.xstack_loc = options.xdata_loc;
+
+  /* if debug option is set the open the cdbFile */
+  if (!options.nodebug && srcFileName)
+    {
+      sprintf (cdbfnbuf, "%s.cdb", srcFileName);
+      if ((cdbFile = fopen (cdbfnbuf, "w")) == NULL)
+       werror (E_FILE_OPEN_ERR, cdbfnbuf);
+      else
+       {
+         /* add a module record */
+         fprintf (cdbFile, "M:%s\n", moduleName);
        }
     }
        }
     }
-    return 0;
+  return 0;
 }
 
 /*-----------------------------------------------------------------*/
 /* my_system - will call a program with arguments                  */
 /*-----------------------------------------------------------------*/
 
 }
 
 /*-----------------------------------------------------------------*/
 /* my_system - will call a program with arguments                  */
 /*-----------------------------------------------------------------*/
 
-#ifdef USE_SYSTEM_SYSTEM_CALLS
-int my_system (const char *cmd)
-{    
-#if NATIVE_WIN32
-  /* Mung slashes into backslashes to keep WIndoze happy. */
-  {
-    char *r;
-    r = cmd;
-    
-    while (*r)
-      {
-       if (*r == '/')
-         {
-           *r = '\\';
-         }
-       r++;
-      }
-  }
-#endif
 
 
-    //printf ("my_system(%s)\n",cmd);
-    if (verboseExec) {
-      printf ("+ %s\n", cmd);
-    }
-    return (system(cmd));
-}
-#else
-#if defined(_MSC_VER)
 
 
-char *try_dir[]= {NULL};                       // TODO : Fill in some default search list
 
 
-#else
+//char *try_dir[]= {SRCDIR "/bin",PREFIX "/bin", NULL};
+char *try_dir[] =
+{NULL, NULL};                  /* First entry may be overwritten, so use two. */
 
 
-char *try_dir[]= {SRCDIR "/bin",PREFIX "/bin", NULL};
 
 
-#endif
+int
+my_system (const char *cmd)
+{
+  int argsStart, e, i = 0;
+  char *cmdLine = NULL;
 
 
-int my_system (const char *cmd, char **cmd_argv)
-{    
-    char *dir, *got= NULL; int i= 0;
+  argsStart = strstr (cmd, " ") - cmd;
 
 
-    while (!got && try_dir[i])
+  // try to find the command in predefined path's
+  while (try_dir[i])
     {
     {
-        dir= (char*)malloc(strlen(try_dir[i])+strlen(cmd)+10);
-        strcpy(dir, try_dir[i]);
-        strcat(dir, "/");
-        strcat(dir, cmd);
+      cmdLine = (char *) Safe_malloc (strlen (try_dir[i]) + strlen (cmd) + 10);
+      strcpy (cmdLine, try_dir[i]);    // the path
+
+      strcat (cmdLine, DIR_SEPARATOR_STRING);
+      strncat (cmdLine, cmd, argsStart);       // the command
 
 #if NATIVE_WIN32
 
 #if NATIVE_WIN32
-        strcat(dir, ".exe");
+      strcat (cmdLine, ".exe");
+#endif
 
 
-        /* Mung slashes into backslashes to keep WIndoze happy. */
+      if (access (cmdLine, X_OK) == 0)
        {
        {
-           char *r;
-           r = dir;
-           
-           while (*r)
-               {
-                   if (*r == '/')
-                       {
-                           *r = '\\';
-                       }
-                   r++;
-               }
+         // the arguments
+         strcat (cmdLine, cmd + argsStart);
+         break;
        }
        }
-#endif
-
-        if (access(dir, X_OK) == 0)
-        {
-            got= strdup(dir);
-        }
-        free(dir);
-        i++;
+      free (cmdLine);
+      cmdLine = NULL;
+      i++;
     }
 
     }
 
-    if (verboseExec) {
-       char **pCmd = cmd_argv;
-       printf ("+ ");
-       while (*pCmd) {
-           printf("%s ", *pCmd);
-           pCmd++;
-       }
-       printf("\n");
+  if (verboseExec)
+    {
+      printf ("+ %s\n", cmdLine ? cmdLine : cmd);
     }
 
     }
 
-    if (got)
-               {
-      i= spawnv(P_WAIT,got,cmd_argv) == -1;
-               free(got) ;
-               }
-    else
-      i= spawnvp(P_WAIT,cmd,cmd_argv) == -1;
-    if (i) {
-       perror("Cannot exec process ");
-       return -1;
+  if (cmdLine)
+    {
+      // command found in predefined path
+      e = system (cmdLine);
+      free (cmdLine);
     }
     }
-    
-    return 0;
+  else
+    {
+      // trust on $PATH
+      e = system (cmd);
+    }
+  return e;
 }
 }
-#endif
+
 
 /*-----------------------------------------------------------------*/
 /* linkEdit : - calls the linkage editor  with options             */
 /*-----------------------------------------------------------------*/
 
 /*-----------------------------------------------------------------*/
 /* linkEdit : - calls the linkage editor  with options             */
 /*-----------------------------------------------------------------*/
-static void linkEdit (char **envp)
+static void
+linkEdit (char **envp)
 {
 {
-    FILE *lnkfile ;
-#ifndef USE_SYSTEM_SYSTEM_CALLS
-    char *argv[128];
-#endif
-    char *segName, *c;
+  FILE *lnkfile;
+  char *segName, *c;
 
 
-    int i;
-    if (!srcFileName)
-       srcFileName = "temp";
+  int i;
+  if (!srcFileName)
+    srcFileName = "temp";
 
 
-    /* first we need to create the <filename>.lnk file */
-    sprintf(buffer,"%s.lnk",srcFileName);
-    if (!(lnkfile = fopen(buffer,"w"))) {
-       werror(E_FILE_OPEN_ERR,buffer);
-       exit(1);
+  /* first we need to create the <filename>.lnk file */
+  sprintf (buffer, "%s.lnk", srcFileName);
+  if (!(lnkfile = fopen (buffer, "w")))
+    {
+      werror (E_FILE_OPEN_ERR, buffer);
+      exit (1);
     }
 
     }
 
-    /* now write the options */
-    fprintf(lnkfile,"-mux%c\n", (options.out_fmt ? 's' : 'i'));
+  /* now write the options */
+  fprintf (lnkfile, "-mux%c\n", (options.out_fmt ? 's' : 'i'));
 
 
-    /* if iram size specified */
-    if (options.iram_size)
-       fprintf(lnkfile,"-a 0x%04x\n",options.iram_size);
-    
-    /*if (options.debug) */
-    fprintf(lnkfile,"-z\n");
+  /* if iram size specified */
+  if (options.iram_size)
+    fprintf (lnkfile, "-a 0x%04x\n", options.iram_size);
+
+  /*if (options.debug) */
+  fprintf (lnkfile, "-z\n");
 
 #define WRITE_SEG_LOC(N, L) \
     segName = strdup(N); \
     c = strtok(segName, " \t"); \
     fprintf (lnkfile,"-b %s = 0x%04x\n", c, L); \
 
 #define WRITE_SEG_LOC(N, L) \
     segName = strdup(N); \
     c = strtok(segName, " \t"); \
     fprintf (lnkfile,"-b %s = 0x%04x\n", c, L); \
-    if (segName) { free(segName); } 
-    
-    /* code segment start */
-    WRITE_SEG_LOC(CODE_NAME, options.code_loc);
-    
-     /* data segment start */
-     WRITE_SEG_LOC(DATA_NAME, options.data_loc);
-                 
-    /* xdata start */
-    WRITE_SEG_LOC(XDATA_NAME, options. xdata_loc);
-
-    /* indirect data */
-    WRITE_SEG_LOC(IDATA_NAME, options.idata_loc);
-
-    /* bit segment start */
-    WRITE_SEG_LOC(BIT_NAME, 0);
-    
-    /* add the extra linker options */
-    for (i=0; linkOptions[i] ; i++)
-       fprintf(lnkfile,"%s\n",linkOptions[i]);
-
-    /* other library paths if specified */
-    for (i = 0 ; i < nlibPaths ; i++ )
-       fprintf (lnkfile,"-k %s\n",libPaths[i]);
-
-    /* standard library path */
-    if (!options.nostdlib) {
-      if (IS_DS390_PORT) {
-       c="ds390";
-      } else {
-       switch(options.model)
-         {
-         case MODEL_SMALL:
-           c = "small";
-           break;
-         case MODEL_LARGE:
-           c = "large";
-           break;
-         case MODEL_FLAT24:
-           c = "flat24";
-           break;
-         default:
-           werror(W_UNKNOWN_MODEL, __FILE__, __LINE__);
-           c = "unknown";
-           break;
-         }
-      }
-      fprintf (lnkfile,"-k %s/%s\n",SDCC_LIB_DIR/*STD_LIB_PATH*/,c);
-      
+    if (segName) { free(segName); }
+
+  /* code segment start */
+  WRITE_SEG_LOC (CODE_NAME, options.code_loc);
+
+  /* data segment start */
+  WRITE_SEG_LOC (DATA_NAME, options.data_loc);
+
+  /* xdata start */
+  WRITE_SEG_LOC (XDATA_NAME, options.xdata_loc);
+
+  /* indirect data */
+  WRITE_SEG_LOC (IDATA_NAME, options.idata_loc);
+
+  /* bit segment start */
+  WRITE_SEG_LOC (BIT_NAME, 0);
+
+  /* add the extra linker options */
+  for (i = 0; linkOptions[i]; i++)
+    fprintf (lnkfile, "%s\n", linkOptions[i]);
+
+  /* other library paths if specified */
+  for (i = 0; i < nlibPaths; i++)
+    fprintf (lnkfile, "-k %s\n", libPaths[i]);
+
+  /* standard library path */
+  if (!options.nostdlib)
+    {
+      if (TARGET_IS_DS390)
+       {
+         c = "ds390";
+       }
+      else
+       {
+         switch (options.model)
+           {
+           case MODEL_SMALL:
+             c = "small";
+             break;
+           case MODEL_LARGE:
+             c = "large";
+             break;
+           case MODEL_FLAT24:
+             c = "flat24";
+             break;
+           default:
+             werror (W_UNKNOWN_MODEL, __FILE__, __LINE__);
+             c = "unknown";
+             break;
+           }
+       }
+      fprintf (lnkfile, "-k %s/%s\n", SDCC_LIB_DIR /*STD_LIB_PATH */ , c);
+
       /* standard library files */
       /* standard library files */
-      if (strcmp(port->target, "ds390")==0) {
-       fprintf (lnkfile,"-l %s\n",STD_DS390_LIB);
-      }
-      fprintf (lnkfile,"-l %s\n",STD_LIB);
-      fprintf (lnkfile,"-l %s\n",STD_INT_LIB);
-      fprintf (lnkfile,"-l %s\n",STD_LONG_LIB);
-      fprintf (lnkfile,"-l %s\n",STD_FP_LIB);
+      if (strcmp (port->target, "ds390") == 0)
+       {
+         fprintf (lnkfile, "-l %s\n", STD_DS390_LIB);
+       }
+      fprintf (lnkfile, "-l %s\n", STD_LIB);
+      fprintf (lnkfile, "-l %s\n", STD_INT_LIB);
+      fprintf (lnkfile, "-l %s\n", STD_LONG_LIB);
+      fprintf (lnkfile, "-l %s\n", STD_FP_LIB);
     }
 
     }
 
-    /* additional libraries if any */
-    for (i = 0 ; i < nlibFiles; i++)
-       fprintf (lnkfile,"-l %s\n",libFiles[i]);
+  /* additional libraries if any */
+  for (i = 0; i < nlibFiles; i++)
+    fprintf (lnkfile, "-l %s\n", libFiles[i]);
 
 
-    /* put in the object files */
-    if (strcmp(srcFileName,"temp"))
-       fprintf (lnkfile,"%s ",srcFileName);
+  /* put in the object files */
+  if (strcmp (srcFileName, "temp"))
+    fprintf (lnkfile, "%s ", srcFileName);
 
 
-    for (i = 0 ; i < nrelFiles ; i++ )
-       fprintf (lnkfile,"%s\n",relFiles[i]);
+  for (i = 0; i < nrelFiles; i++)
+    fprintf (lnkfile, "%s\n", relFiles[i]);
 
 
-    fprintf (lnkfile,"\n-e\n");
-    fclose(lnkfile);
+  fprintf (lnkfile, "\n-e\n");
+  fclose (lnkfile);
 
 
-    if (options.verbose)
-      printf ("sdcc: Calling linker...\n");
+  if (options.verbose)
+    printf ("sdcc: Calling linker...\n");
 
 
-#ifdef USE_SYSTEM_SYSTEM_CALLS
-    buildCmdLine(buffer, port->linker.cmd, srcFileName, NULL, NULL, NULL);
-    // ignore linker errors for now, not tested
-    my_system(buffer);
-#else
-    buildCmdLine(buffer, argv, port->linker.cmd, srcFileName, NULL, NULL, NULL);
-    if (my_system(argv[0], argv)) {
-       perror("Cannot exec linker");
-       exit(1);
+  buildCmdLine (buffer, port->linker.cmd, srcFileName, NULL, NULL, NULL);
+  if (my_system (buffer))
+    {
+      exit (1);
     }
 
     }
 
-#endif
-
-    if (strcmp(srcFileName,"temp") == 0) {
-       /* rename "temp.cdb" to "firstRelFile.cdb" */
-       char *f = strtok(strdup(relFiles[0]),".");
-       f = strcat(f,".cdb");
-       rename("temp.cdb",f);       
-       srcFileName = NULL;
+  if (strcmp (srcFileName, "temp") == 0)
+    {
+      /* rename "temp.cdb" to "firstRelFile.cdb" */
+      char *f = strtok (strdup (relFiles[0]), ".");
+      f = strcat (f, ".cdb");
+      rename ("temp.cdb", f);
+      srcFileName = NULL;
     }
 }
 
 /*-----------------------------------------------------------------*/
 /* assemble - spawns the assembler with arguments                  */
 /*-----------------------------------------------------------------*/
     }
 }
 
 /*-----------------------------------------------------------------*/
 /* assemble - spawns the assembler with arguments                  */
 /*-----------------------------------------------------------------*/
-static void assemble (char **envp)
+static void
+assemble (char **envp)
 {
 {
-#ifdef USE_SYSTEM_SYSTEM_CALLS
-    buildCmdLine(buffer, port->assembler.cmd, srcFileName, NULL, NULL, asmOptions);
-    if (my_system(buffer)) {
-      fprintf (stderr, "sdcc: aborted while assembling, look above for messages (if any :)\n");
-      exit(1);
-    }
-#else
-    char *argv[128];  /* assembler arguments */
-
-    buildCmdLine(buffer, argv, port->assembler.cmd, srcFileName, NULL, NULL, asmOptions);
-
-    if (my_system(argv[0], argv)) {
-       perror("Cannot exec assembler");
-       exit(1);
+  buildCmdLine (buffer, port->assembler.cmd, srcFileName, NULL, NULL, asmOptions);
+  if (my_system (buffer))
+    {
+      /* either system() or the assembler itself has reported an error
+         perror ("Cannot exec assembler");
+       */
+      exit (1);
     }
     }
-#endif
 }
 
 
 
 /*-----------------------------------------------------------------*/
 }
 
 
 
 /*-----------------------------------------------------------------*/
-/* preProcess - spawns the preprocessor with arguments            */
+/* preProcess - spawns the preprocessor with arguments       */
 /*-----------------------------------------------------------------*/
 /*-----------------------------------------------------------------*/
-static int preProcess (char **envp)
+static int
+preProcess (char **envp)
 {
 {
-#ifndef USE_SYSTEM_SYSTEM_CALLS
-    char *argv[128];
-#endif
-    char procDef[128];
-
-    preOutName = NULL;
-
-    if (!options.c1mode) {
-       /* if using external stack define the macro */
-       if ( options.useXstack )
-           _addToList(preArgv, "-DSDCC_USE_XSTACK");
-       
-       /* set the macro for stack autos        */
-       if ( options.stackAuto )
-           _addToList(preArgv, "-DSDCC_STACK_AUTO");
-           
-       /* set the macro for stack autos        */
-       if ( options.stack10bit )
-           _addToList(preArgv, "-DSDCC_STACK_TENBIT"); 
-    
-       /* set the macro for large model        */
-       switch(options.model)
-           {
-           case MODEL_LARGE:
-               _addToList(preArgv, "-DSDCC_MODEL_LARGE");
-               break;
-           case MODEL_SMALL:
-               _addToList(preArgv, "-DSDCC_MODEL_SMALL");
-               break;
-           case MODEL_COMPACT:
-               _addToList(preArgv, "-DSDCC_MODEL_COMPACT");
-               break;
-           case MODEL_MEDIUM:
-               _addToList(preArgv, "-DSDCC_MODEL_MEDIUM");
-               break;
-           case MODEL_FLAT24:
-               _addToList(preArgv, "-DSDCC_MODEL_FLAT24");
-               break;
-           default:
-               werror(W_UNKNOWN_MODEL, __FILE__, __LINE__);
-               break;
-           }       
-           
-    
-       /* add port (processor information to processor */
-       sprintf(procDef,"-DSDCC_%s",port->target);
-       _addToList(preArgv,procDef);
-
-       if (!preProcOnly)
-           preOutName = strdup(tmpnam(NULL));
-
-       if (options.verbose)
-         printf ("sdcc: Calling preprocessor...\n");
-
-#ifdef USE_SYSTEM_SYSTEM_CALLS
-       buildCmdLine(buffer, _preCmd, fullSrcFileName, 
-                     preOutName, srcFileName, preArgv);
-       my_system(buffer);
-#else
-       buildCmdLine(buffer, argv, _preCmd, fullSrcFileName, 
-                     preOutName, srcFileName, preArgv);
+  char procDef[128];
+
+  preOutName = NULL;
+
+  if (!options.c1mode)
+    {
+      /* if using external stack define the macro */
+      if (options.useXstack)
+       _addToList (preArgv, "-DSDCC_USE_XSTACK");
+
+      /* set the macro for stack autos  */
+      if (options.stackAuto)
+       _addToList (preArgv, "-DSDCC_STACK_AUTO");
 
 
-       if (my_system(argv[0], argv)) {
-           unlink (preOutName);
-           perror("Cannot exec Preprocessor");
-           exit(1);
+      /* set the macro for stack autos  */
+      if (options.stack10bit)
+       _addToList (preArgv, "-DSDCC_STACK_TENBIT");
+
+      /* set the macro for large model  */
+      switch (options.model)
+       {
+       case MODEL_LARGE:
+         _addToList (preArgv, "-DSDCC_MODEL_LARGE");
+         break;
+       case MODEL_SMALL:
+         _addToList (preArgv, "-DSDCC_MODEL_SMALL");
+         break;
+       case MODEL_COMPACT:
+         _addToList (preArgv, "-DSDCC_MODEL_COMPACT");
+         break;
+       case MODEL_MEDIUM:
+         _addToList (preArgv, "-DSDCC_MODEL_MEDIUM");
+         break;
+       case MODEL_FLAT24:
+         _addToList (preArgv, "-DSDCC_MODEL_FLAT24");
+         break;
+       default:
+         werror (W_UNKNOWN_MODEL, __FILE__, __LINE__);
+         break;
        }
 
        }
 
-#endif
-       if (preProcOnly)
-           exit(0);
+      /* standard include path */
+      if (!options.nostdinc) {
+       _addToList (preArgv, "-I" SDCC_INCLUDE_DIR);
+      }
+
+      /* add port (processor information to processor */
+      sprintf (procDef, "-DSDCC_%s", port->target);
+      _addToList (preArgv, procDef);
+      sprintf (procDef, "-D__%s", port->target);
+      _addToList (preArgv, procDef);
+
+      if (!preProcOnly)
+       preOutName = strdup (tmpnam (NULL));
+
+      if (options.verbose)
+       printf ("sdcc: Calling preprocessor...\n");
+
+      buildCmdLine (buffer, _preCmd, fullSrcFileName,
+                   preOutName, srcFileName, preArgv);
+      if (my_system (buffer))
+       {
+         exit (1);
+       }
+
+      if (preProcOnly)
+       exit (0);
     }
     }
-    else {
-       preOutName = fullSrcFileName;
+  else
+    {
+      preOutName = fullSrcFileName;
     }
 
     }
 
-    yyin = fopen(preOutName, "r");
-    if (yyin == NULL) {
-       perror("Preproc file not found\n");
-       exit(1);
+  yyin = fopen (preOutName, "r");
+  if (yyin == NULL)
+    {
+      perror ("Preproc file not found\n");
+      exit (1);
     }
     }
-    
-    return 0;
+
+  return 0;
 }
 
 }
 
-static void _findPort(int argc, char **argv)
+static void
+_findPort (int argc, char **argv)
 {
 {
-    _validatePorts();
+  _validatePorts ();
 
 
-    argc--;
-    while (argc) {
-       if (!strncmp(*argv, "-m", 2)) {
-           _setPort(*argv + 2);
-           return;
+  argc--;
+  while (argc)
+    {
+      if (!strncmp (*argv, "-m", 2))
+       {
+         _setPort (*argv + 2);
+         return;
        }
        }
-       argv++;
-       argc--;
+      argv++;
+      argc--;
     }
     }
-    /* Use the first in the list */
-    port = _ports[0];
+  /* Use the first in the list */
+  port = _ports[0];
 }
 
 }
 
-/* 
+/*
  * main routine
  * initialises and calls the parser
  */
 
  * main routine
  * initialises and calls the parser
  */
 
-int main ( int argc, char **argv , char **envp)
+int
+main (int argc, char **argv, char **envp)
 {
 {
-    /* turn all optimizations off by default */
-    memset(&optimize,0,sizeof(struct optimize));
+  /* turn all optimizations off by default */
+  memset (&optimize, 0, sizeof (struct optimize));
 
 
-    /*printVersionInfo ();*/
+  /*printVersionInfo (); */
 
 
-    _findPort(argc, argv);
-    /* Initalise the port. */
-    if (port->init)
-       port->init();
+  if (NUM_PORTS==0) {
+    fprintf (stderr, "Build error: no ports are enabled.\n");
+    exit (1);
+  }
 
 
-    setDefaultOptions();
-    parseCmdLine(argc,argv);
+  _findPort (argc, argv);
+  /* Initalise the port. */
+  if (port->init)
+    port->init ();
 
 
-    initMem();
+  // Create a default exe search path from the path to the sdcc command
 
 
-    port->finaliseOptions();
 
 
-    /* if no input then printUsage & exit */
-    if ((!options.c1mode && !srcFileName && !nrelFiles) || (options.c1mode && !srcFileName && !options.out_name)) {
-       printUsage();
-       exit(0);
+
+  if (strchr (argv[0], DIR_SEPARATOR_CHAR))
+    {
+      strcpy (DefaultExePath, argv[0]);
+      *(strrchr (DefaultExePath, DIR_SEPARATOR_CHAR)) = 0;
+      try_dir[0] = DefaultExePath;
+    }
+
+
+  setDefaultOptions ();
+  parseCmdLine (argc, argv);
+
+  initMem ();
+
+  port->finaliseOptions ();
+
+  /* if no input then printUsage & exit */
+  if ((!options.c1mode && !srcFileName && !nrelFiles) || (options.c1mode && !srcFileName && !options.out_name))
+    {
+      printUsage ();
+      exit (0);
     }
     }
-       
-    if (srcFileName) {
-       preProcess(envp) ;
 
 
-       initSymt();
-       initiCode();
-       initCSupport ();
-       initPeepHole();
+  if (srcFileName)
+    {
+      preProcess (envp);
+
+      initSymt ();
+      initiCode ();
+      initCSupport ();
+      initPeepHole ();
 
 
-       if (options.verbose)
-         printf ("sdcc: Generating code...\n");
+      if (options.verbose)
+       printf ("sdcc: Generating code...\n");
 
 
-       yyparse();
+      yyparse ();
 
 
-       if (!fatalError) 
+      if (!fatalError)
        {
        {
-/* TSD PIC port hack - if the PIC port option is enabled
-   and SDCC is used to generate PIC code, then we will
-   generate .asm files in gpasm's format instead of SDCC's
-   assembler's format
-*/
-#if !OPT_DISABLE_PIC
-         if(IS_PIC_PORT)
-           pic14glue();
+         if (TARGET_IS_PIC) {
+           /* TSD PIC port hack - if the PIC port option is enabled
+              and SDCC is used to generate PIC code, then we will
+              generate .asm files in gpasm's format instead of SDCC's
+              assembler's format
+           */
+           picglue ();
+         }
          else
          else
-#endif
-           glue();
-           if (fatalError)
+           glue ();
+         if (fatalError)
            {
            {
-               return 1;
+             return 1;
            }
            }
-           if (!options.c1mode)
+         if (!options.c1mode)
            {
            {
-               if (options.verbose)
-                 printf ("sdcc: Calling assembler...\n");
-
-               assemble(envp);
+             if (options.verbose)
+               printf ("sdcc: Calling assembler...\n");
+             assemble (envp);
            }
        }
            }
        }
-       else 
+      else
        {
        {
-           return 1;
-        }
-       
+         return 1;
+       }
+
     }
     }
-    
-    if (cdbFile)
-       fclose(cdbFile);
-
-    if (!options.cc_only && 
-       !fatalError      &&
-       !noAssemble      &&
-       !options.c1mode  &&
-       (srcFileName || nrelFiles)) {
-       if (port->linker.do_link)
-           port->linker.do_link();
-       else
-         linkEdit (envp);
+
+  if (cdbFile)
+    fclose (cdbFile);
+
+  if (!options.cc_only &&
+      !fatalError &&
+      !noAssemble &&
+      !options.c1mode &&
+      (srcFileName || nrelFiles))
+    {
+      if (port->linker.do_link)
+       port->linker.do_link ();
+      else
+       linkEdit (envp);
     }
 
     }
 
-    if (yyin && yyin != stdin)
-       fclose(yyin);
+  if (yyin && yyin != stdin)
+    fclose (yyin);
 
 
-    if (preOutName && !options.c1mode) {
-        unlink(preOutName);
-        free(preOutName);
+  if (preOutName && !options.c1mode)
+    {
+      unlink (preOutName);
+      free (preOutName);
     }
 
     }
 
-    return 0;
-    
+  return 0;
+
 }
 }