]> git.sur5r.net Git - cc65/blobdiff - src/cc65/main.c
Working on the new backend
[cc65] / src / cc65 / main.c
index 73f8382c9d2cd9740122f94095e660e3186879cc..6f3d0bbcfb009daf2802c8dba25aa046d455f8a3 100644 (file)
@@ -6,7 +6,7 @@
 /*                                                                           */
 /*                                                                           */
 /*                                                                           */
-/* (C) 2000      Ullrich von Bassewitz                                       */
+/* (C) 2000-2001 Ullrich von Bassewitz                                       */
 /*               Wacholderweg 14                                             */
 /*               D-70597 Stuttgart                                           */
 /* EMail:        uz@musoftware.de                                            */
@@ -58,7 +58,6 @@
 #include "incpath.h"
 #include "input.h"
 #include "macrotab.h"
-#include "optimize.h"
 #include "scanner.h"
 #include "segname.h"
 
@@ -97,7 +96,9 @@ static void Usage (void)
             "Long options:\n"
                     "  --ansi\t\tStrict ANSI mode\n"
             "  --bss-name seg\tSet the name of the BSS segment\n"
+                    "  --check-stack\t\tGenerate stack overflow checks\n"
                     "  --code-name seg\tSet the name of the CODE segment\n"
+            "  --codesize x\tAccept larger code by factor x\n"
                     "  --cpu type\t\tSet cpu type\n"
                     "  --data-name seg\tSet the name of the DATA segment\n"
                     "  --debug\t\tDebug mode\n"
@@ -239,7 +240,7 @@ static void DefineSym (const char* Def)
                 */
        char* Q;
        unsigned Len = strlen (Def)+1;
-       char* S = xmalloc (Len);
+       char* S = (char*) xmalloc (Len);
        memcpy (S, Def, Len);
        Q = S + (P - Def);
        *Q++ = '\0';
@@ -293,6 +294,14 @@ static void OptBssName (const char* Opt, const char* Arg)
 
 
 
+static void OptCheckStack (const char* Opt, const char* Arg)
+/* Handle the --check-stack option */
+{
+    CheckStack = 1;
+}
+
+
+
 static void OptCodeName (const char* Opt, const char* Arg)
 /* Handle the --code-name option */
 {
@@ -305,6 +314,19 @@ static void OptCodeName (const char* Opt, const char* Arg)
 
 
 
+static void OptCodeSize (const char* Opt, const char* Arg)
+/* Handle the --codesize option */
+{
+    /* Numeric argument expected */
+    if (sscanf (Arg, "%u", &CodeSizeFactor) != 1 ||
+       CodeSizeFactor < 100 ||
+               CodeSizeFactor > 1000) {
+       AbEnd ("Argument for %s is invalid", Opt);
+    }
+}
+
+
+
 static void OptCreateDep (const char* Opt, const char* Arg)
 /* Handle the --create-dep option */
 {
@@ -430,23 +452,25 @@ int main (int argc, char* argv[])
 {
     /* Program long options */
     static const LongOpt OptTab[] = {
-       { "--add-source",       0,      OptAddSource            },
-       { "--ansi",             0,      OptAnsi                 },
-       { "--bss-name",         1,      OptBssName              },
-       { "--code-name",        1,      OptCodeName             },
-       { "--create-dep",       0,      OptCreateDep            },
-        { "--cpu",                     1,      OptCPU                  },
-       { "--data-name",        1,      OptDataName             },
-               { "--debug",            0,      OptDebug                },
-       { "--debug-info",       0,      OptDebugInfo            },
-       { "--help",             0,      OptHelp                 },
+       { "--add-source",       0,      OptAddSource            },
+       { "--ansi",             0,      OptAnsi                 },
+       { "--bss-name",         1,      OptBssName              },
+               { "--check-stack",      0,      OptCheckStack           },
+       { "--code-name",        1,      OptCodeName             },
+       { "--codesize",         1,      OptCodeSize             },
+       { "--create-dep",       0,      OptCreateDep            },
+        { "--cpu",                     1,      OptCPU                  },
+       { "--data-name",        1,      OptDataName             },
+               { "--debug",            0,      OptDebug                },
+       { "--debug-info",       0,      OptDebugInfo            },
+       { "--help",             0,      OptHelp                 },
        { "--include-dir",      1,      OptIncludeDir           },
        { "--rodata-name",      1,      OptRodataName           },
-       { "--signed-chars",     0,      OptSignedChars          },
-               { "--static-locals",    0,      OptStaticLocals         },
-       { "--target",           1,      OptTarget               },
-       { "--verbose",          0,      OptVerbose              },
-       { "--version",          0,      OptVersion              },
+       { "--signed-chars",     0,      OptSignedChars          },
+               { "--static-locals",    0,      OptStaticLocals         },
+       { "--target",           1,      OptTarget               },
+       { "--verbose",          0,      OptVerbose              },
+       { "--version",          0,      OptVersion              },
     };
 
     int I;
@@ -463,7 +487,7 @@ int main (int argc, char* argv[])
 
     /* Parse the command line */
     I = 1;
-    while (I < ArgCount) {
+    while (I < (int)ArgCount) {
 
        const char* P;
 
@@ -543,11 +567,12 @@ int main (int argc, char* argv[])
                    P = Arg + 2;
                    while (*P) {
                        switch (*P++) {
-                           case 'f':
-                               sscanf (P, "%lx", (long*) &OptDisable);
+                           case 'f':
+                               sscanf (P, "%lx", (long*) &OptDisable);
                                break;
                            case 'i':
                                FavourSize = 0;
+                               CodeSizeFactor = 200;
                                break;
                            case 'r':
                                EnableRegVars = 1;
@@ -600,6 +625,9 @@ int main (int argc, char* argv[])
        OutputFile = MakeFilename (InputFile, ".s");
     }
 
+
+
+
     /* Go! */
     Compile ();
 
@@ -608,10 +636,12 @@ int main (int argc, char* argv[])
 
        FILE* F;
 
-       /* Optimize the output if requested */
-       if (Optimize) {
-           OptDoOpt ();
-       }
+#if 0
+       /* Optimize the output if requested */
+       if (Optimize) {
+           OptDoOpt ();
+       }
+#endif
 
        /* Open the file */
        F = fopen (OutputFile, "w");