]> git.draconx.ca Git - liblbx.git/commitdiff
tools: Move progname handling into a common source file.
authorNick Bowler <nbowler@draconx.ca>
Wed, 5 Jun 2013 03:26:04 +0000 (23:26 -0400)
committerNick Bowler <nbowler@draconx.ca>
Fri, 14 Jun 2013 20:32:55 +0000 (16:32 -0400)
Less code duplication is nice.

Makefile.am
src/lbximg.c
src/lbxtool.c
src/tools.c [new file with mode: 0644]
src/tools.h

index 9c16381a1984877917ca805205cbbbeefab90c34..55fa7e390f9d55e26ebc05870cd9b17d6a6fbdd5 100644 (file)
@@ -33,11 +33,11 @@ if BUILD_LBXGUI
 bin_PROGRAMS += lbxgui
 endif
 
-lbxtool_SOURCES = src/lbxtool.c
+lbxtool_SOURCES = src/lbxtool.c src/tools.c
 lbxtool_LDADD = liblbx.la libgnu.la
 $(lbxtool_OBJECTS): $(gnulib_headers)
 
-lbximg_SOURCES = src/lbximg.c
+lbximg_SOURCES = src/lbximg.c src/tools.c
 lbximg_LDADD = liblbx.la libgnu.la $(LIBPNG_LIBS)
 $(lbximg_OBJECTS): $(gnulib_headers)
 
index af59f5fbaf718a776270fab68352df8f811e08d5..581a33ac0b3153353caaff20d183ff2cc623e3e3 100644 (file)
@@ -1,7 +1,7 @@
 /*
  *  2ooM: The Master of Orion II Reverse Engineering Project
  *  Simple command-line tool to convert an LBX image to a set of PNGs.
- *  Copyright (C) 2006-2010 Nick Bowler
+ *  Copyright © 2006-2011, 2013 Nick Bowler
  *
  *  This program is free software: you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -50,11 +50,6 @@ static void printhelp(void)
        puts("For now, see the man page for detailed help.");
 }
 
-static const char *progname;
-#define errmsg(fmt, ...) (\
-       fprintf(stderr, "%s: " fmt, progname, __VA_ARGS__)\
-)
-
 enum {
        MODE_NONE,
        MODE_DECODE,
@@ -394,7 +389,7 @@ int main(int argc, char **argv)
                { 0 }
        };
 
-       progname = "lbximg"; /* argv[0]; */
+       tool_init("lbximg", argc, argv);
        while ((opt = getopt_long(argc, argv, sopts, lopts, NULL)) != -1) {
                switch(opt) {
                case 'i':
@@ -428,7 +423,7 @@ int main(int argc, char **argv)
                        }
                        break;
                case 'V':
-                       puts(VERSION_BOILERPLATE("lbximg"));
+                       tool_version();
                        return EXIT_SUCCESS;
                case 'U':
                        printusage();
index b20766648537ec419934e9431db34b4e54854547..1c32ef47758b0d8df68d75d4e7aca4c0c2941913 100644 (file)
@@ -1,7 +1,7 @@
 /*
  *  2ooM: The Master of Orion II Reverse Engineering Project
  *  Simple command-line tool to extract LBX archive files.
- *  Copyright (C) 2006-2010 Nick Bowler
+ *  Copyright © 2006-2011, 2013 Nick Bowler
  *
  *  This program is free software: you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -39,11 +39,6 @@ static void printhelp(void)
        puts("For now, see the man page for detailed help.");
 }
 
-static const char *progname;
-#define errmsg(fmt, ...) (\
-       fprintf(stderr, "%s: " fmt, progname, __VA_ARGS__)\
-)
-
 enum {
        MODE_NONE,
        MODE_LIST,
@@ -200,7 +195,7 @@ int main(int argc, char **argv)
                { 0 }
        };
 
-       progname = "lbxtool"; /* argv[0]; */
+       tool_init("lbxtool", argc, argv);
        while ((opt = getopt_long(argc, argv, sopts, lopts, NULL)) != -1) {
                switch(opt) {
                case 'l':
@@ -219,7 +214,7 @@ int main(int argc, char **argv)
                        verbose = 1;
                        break;
                case 'V':
-                       puts(VERSION_BOILERPLATE("lbxtool"));
+                       tool_version();
                        return EXIT_SUCCESS;
                case 'U':
                        printusage();
@@ -250,7 +245,7 @@ int main(int argc, char **argv)
                rc = extract(lbx, verbose, &argv[optind]);
                break;
        default:
-               fprintf(stderr, "%s: you must specify a mode.\n", progname);
+               errmsg("you must specify a mode.\n", 0);
        }
 
        lbx_close(lbx);
diff --git a/src/tools.c b/src/tools.c
new file mode 100644 (file)
index 0000000..b80e521
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ * 2ooM: The Master of Orion II Reverse Engineering Project
+ * Helper functions for liblbx command-line applications.
+ * Copyright © 2013 Nick Bowler
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+#include <stdio.h>
+#include <assert.h>
+
+#include "tools.h"
+
+static const char *progname, *argv0;
+
+void tool_init(const char *name, int argc, char **argv)
+{
+       progname = name;
+       argv0 = argv[0] ? argv[0] : progname;
+}
+
+void tool_version(void)
+{
+       assert(argv0 != NULL);
+       printf("%s (%s) %s\n", progname, PACKAGE_NAME, PACKAGE_VERSION);
+       printf("Copyright (C) 2013 Nick Bowler.\n");
+       puts("License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.");
+       puts("This is free software: you are free to change and redistribute it.");
+       puts("There is NO WARRANTY, to the extent permitted by law.");
+}
+
+const char *tool_invocation(void)
+{
+       assert(argv0 != NULL);
+       return argv0;
+}
index 3b496cde1a78be60cf996bb8b8bd3085d268db1e..315d9654fbe5ddbcc368833a834284f18e769dee 100644 (file)
@@ -1,14 +1,32 @@
+/*
+ * 2ooM: The Master of Orion II Reverse Engineering Project
+ * Helper functions for liblbx command-line applications.
+ * Copyright © 2013 Nick Bowler
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
 #ifndef TOOLS_H_
 #define TOOLS_H_
 
-#include <config.h>
+void tool_init(const char *name, int argc, char **argv);
+void tool_version(void);
+
+const char *tool_invocation(void);
 
-#define VERSION_BOILERPLATE(name)\
-name " (2ooM liblbx) " PACKAGE_VERSION "\n"\
-"Copyright (C) 2006-2010 Nick Bowler.\n"\
-"License GPLv3+: GNU GPL version 3 or later "\
-"<http:/""/gnu.org/licenses/gpl.html>\n"\
-"This is free software: you are free to change and redistribute it.\n"\
-"There is NO WARRANTY, to the extent permitted by law."
+#define errmsg(fmt, ...) (\
+       fprintf(stderr, "%s: " fmt, tool_invocation(), __VA_ARGS__)\
+)
 
 #endif