From 5749c5e97a8b984720cef75f328944270874d713 Mon Sep 17 00:00:00 2001 From: Nick Bowler Date: Tue, 4 Jun 2013 23:26:04 -0400 Subject: [PATCH] tools: Move progname handling into a common source file. Less code duplication is nice. --- Makefile.am | 4 ++-- src/lbximg.c | 11 +++-------- src/lbxtool.c | 13 ++++--------- src/tools.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ src/tools.h | 34 ++++++++++++++++++++++++++-------- 5 files changed, 83 insertions(+), 27 deletions(-) create mode 100644 src/tools.c diff --git a/Makefile.am b/Makefile.am index 9c16381..55fa7e3 100644 --- a/Makefile.am +++ b/Makefile.am @@ -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) diff --git a/src/lbximg.c b/src/lbximg.c index af59f5f..581a33a 100644 --- a/src/lbximg.c +++ b/src/lbximg.c @@ -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(); diff --git a/src/lbxtool.c b/src/lbxtool.c index b207666..1c32ef4 100644 --- a/src/lbxtool.c +++ b/src/lbxtool.c @@ -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 index 0000000..b80e521 --- /dev/null +++ b/src/tools.c @@ -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 . + */ + +#include +#include +#include + +#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 ."); + 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; +} diff --git a/src/tools.h b/src/tools.h index 3b496cd..315d965 100644 --- a/src/tools.h +++ b/src/tools.h @@ -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 . + */ + #ifndef TOOLS_H_ #define TOOLS_H_ -#include +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 "\ -"\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 -- 2.43.0