]> git.sur5r.net Git - cc65/blobdiff - src/od65/main.c
Improved optimizations
[cc65] / src / od65 / main.c
index 25963086d18bd9abd7be8bace7694c6a428a9e90..6e4c413bf98e09f0ccb8afb3ed12481ba096c64e 100644 (file)
@@ -6,10 +6,10 @@
 /*                                                                           */
 /*                                                                           */
 /*                                                                           */
-/* (C) 2000      Ullrich von Bassewitz                                       */
+/* (C) 2000-2002 Ullrich von Bassewitz                                       */
 /*               Wacholderweg 14                                             */
 /*               D-70597 Stuttgart                                           */
-/* EMail:        uz@musoftware.de                                            */
+/* EMail:        uz@cc65.org                                                 */
 /*                                                                           */
 /*                                                                           */
 /* This software is provided 'as-is', without any expressed or implied       */
@@ -71,13 +71,24 @@ static void Usage (void)
 /* Print usage information and exit */
 {
     fprintf (stderr,
-            "Usage: %s [options] file\n"
+            "Usage: %s [options] file [options] [file]\n"
             "Short options:\n"
                     "  -h\t\t\tHelp (this text)\n"
+                    "  -H\t\t\tDump the object file header\n"
+                    "  -S\t\t\tDump segments sizes\n"
                     "  -V\t\t\tPrint the version number and exit\n"
             "\n"
             "Long options:\n"
+            "  --dump-all\t\tDump all object file information\n"
+            "  --dump-dbgsyms\tDump debug symbols\n"
+                    "  --dump-exports\tDump exported symbols\n"
+            "  --dump-files\t\tDump the source files\n"
             "  --dump-header\t\tDump the object file header\n"
+            "  --dump-imports\tDump imported symbols\n"
+            "  --dump-lineinfo\tDump line information\n"
+            "  --dump-options\tDump object file options\n"
+            "  --dump-segments\tDump the segments in the file\n"
+                    "  --dump-segsize\tDump segments sizes\n"
             "  --help\t\tHelp (this text)\n"
                     "  --version\t\tPrint the version number and exit\n",
             ProgName);
@@ -85,7 +96,44 @@ static void Usage (void)
 
 
 
-static void OptDumpHeader (const char* Opt, const char* Arg)
+static void OptDumpAll (const char* Opt attribute ((unused)),
+                       const char* Arg attribute ((unused)))
+/* Dump all object file information */
+{
+    What |= D_ALL;
+}
+
+
+
+static void OptDumpDbgSyms (const char* Opt attribute ((unused)),
+                           const char* Arg attribute ((unused)))
+/* Dump debug symbols contained in the object file */
+{
+    What |= D_DBGSYMS;
+}
+
+
+
+static void OptDumpExports (const char* Opt attribute ((unused)),
+                           const char* Arg attribute ((unused)))
+/* Dump the exported symbols */
+{
+    What |= D_EXPORTS;
+}
+
+
+
+static void OptDumpFiles (const char* Opt attribute ((unused)),
+                         const char* Arg attribute ((unused)))
+/* Dump the source files */
+{
+    What |= D_FILES;
+}
+
+
+
+static void OptDumpHeader (const char* Opt attribute ((unused)),
+                          const char* Arg attribute ((unused)))
 /* Dump the object file header */
 {
     What |= D_HEADER;
@@ -93,7 +141,53 @@ static void OptDumpHeader (const char* Opt, const char* Arg)
 
 
 
-static void OptHelp (const char* Opt, const char* Arg)
+static void OptDumpImports (const char* Opt attribute ((unused)),
+                           const char* Arg attribute ((unused)))
+/* Dump the imported symbols */
+{
+    What |= D_IMPORTS;
+}
+
+
+
+static void OptDumpLineInfo (const char* Opt attribute ((unused)),
+                            const char* Arg attribute ((unused)))
+/* Dump the line infos */
+{
+    What |= D_LINEINFO;
+}
+
+
+
+static void OptDumpOptions (const char* Opt attribute ((unused)),
+                           const char* Arg attribute ((unused)))
+/* Dump the object file options */
+{
+    What |= D_OPTIONS;
+}
+
+
+
+static void OptDumpSegments (const char* Opt attribute ((unused)),
+                            const char* Arg attribute ((unused)))
+/* Dump the segments in the object file */
+{
+    What |= D_SEGMENTS;
+}
+
+
+
+static void OptDumpSegSize (const char* Opt attribute ((unused)),
+                           const char* Arg attribute ((unused)))
+/* Dump the segments in the object file */
+{
+    What |= D_SEGSIZE;
+}
+
+
+
+static void OptHelp (const char* Opt attribute ((unused)),
+                    const char* Arg attribute ((unused)))
 /* Print usage information and exit */
 {
     Usage ();
@@ -102,11 +196,12 @@ static void OptHelp (const char* Opt, const char* Arg)
 
 
 
-static void OptVersion (const char* Opt, const char* Arg)
+static void OptVersion (const char* Opt attribute ((unused)),
+                       const char* Arg attribute ((unused)))
 /* Print the assembler version */
 {
     fprintf (stderr,
-                    "%s V%u.%u.%u - (C) Copyright 2000 Ullrich von Bassewitz\n",
+                    "%s V%u.%u.%u - (C) Copyright 2000-2002 Ullrich von Bassewitz\n",
                     ProgName, VER_MAJOR, VER_MINOR, VER_PATCH);
 }
 
@@ -120,7 +215,7 @@ static void DumpFile (const char* Name)
     /* Try to open the file */
     FILE* F = fopen (Name, "rb");
     if (F == 0) {
-       Warning ("Cannot open `%s': %s", Name, strerror (errno));
+       Error ("Cannot open `%s': %s", Name, strerror (errno));
     }
 
     /* Read the magic word */
@@ -144,9 +239,32 @@ static void DumpFile (const char* Name)
 
        /* Check what to dump */
        if (What & D_HEADER) {
-           DumpHeader (F, 0);
+           DumpObjHeader (F, 0);
        }
-
+       if (What & D_OPTIONS) {
+           DumpObjOptions (F, 0);
+       }
+       if (What & D_FILES) {
+           DumpObjFiles (F, 0);
+       }
+       if (What & D_SEGMENTS) {
+           DumpObjSegments (F, 0);
+       }
+       if (What & D_IMPORTS) {
+           DumpObjImports (F, 0);
+       }
+       if (What & D_EXPORTS) {
+           DumpObjExports (F, 0);
+       }
+       if (What & D_DBGSYMS) {
+           DumpObjDbgSyms (F, 0);
+       }
+       if (What & D_LINEINFO) {
+           DumpObjLineInfo (F, 0);
+       }
+       if (What & D_SEGSIZE) {
+                   DumpObjSegSize (F, 0);
+       }
     }
 
     /* Close the file */
@@ -160,39 +278,52 @@ int main (int argc, char* argv [])
 {
     /* Program long options */
     static const LongOpt OptTab[] = {
+               { "--dump-all",         0,      OptDumpAll              },
+       { "--dump-dbgsyms",     0,      OptDumpDbgSyms          },
+       { "--dump-exports",     0,      OptDumpExports          },
+       { "--dump-files",       0,      OptDumpFiles            },
        { "--dump-header",      0,      OptDumpHeader           },
-       { "--help",             0,      OptHelp                 },
-       { "--version",          0,      OptVersion              },
+       { "--dump-imports",     0,      OptDumpImports          },
+        { "--dump-lineinfo",    0,      OptDumpLineInfo         },
+       { "--dump-options",     0,      OptDumpOptions          },
+       { "--dump-segments",    0,      OptDumpSegments         },
+               { "--dump-segsize",     0,      OptDumpSegSize          },
+       { "--help",             0,      OptHelp                 },
+       { "--version",          0,      OptVersion              },
     };
 
-    int I;
+    unsigned I;
 
     /* Initialize the cmdline module */
-    InitCmdLine (argc, argv, "od65");
+    InitCmdLine (&argc, &argv, "od65");
 
     /* Check the parameters */
     I = 1;
-    while (I < argc) {
+    while (I < ArgCount) {
 
                /* Get the argument */
-               const char* Arg = argv [I];
+               const char* Arg = ArgVec[I];
 
                /* Check for an option */
                if (Arg [0] == '-') {
                    switch (Arg [1]) {
 
-               case '-':
-                   LongOption (&I, OptTab, sizeof(OptTab)/sizeof(OptTab[0]));
-                   break;
+               case '-':
+                   LongOption (&I, OptTab, sizeof(OptTab)/sizeof(OptTab[0]));
+                   break;
 
-               case 'h':
-                   OptHelp (Arg, 0);
-                   break;
+               case 'h':
+                   OptHelp (Arg, 0);
+                   break;
 
-               case 'H':
+               case 'H':
                    OptDumpHeader (Arg, 0);
                    break;
 
+               case 'S':
+                   OptDumpSegSize (Arg, 0);
+                   break;
+
                        case 'V':
                    OptVersion (Arg, 0);
                            break;