/*
* 2ooM: The Master of Orion II Reverse Engineering Project
* Simple command-line tool to convert an LBX image to other formats.
- * Copyright © 2006-2011, 2013-2014 Nick Bowler
+ * Copyright © 2006-2011, 2013-2014, 2021 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
#include <getopt.h>
#include <errno.h>
+#include "help.h"
+
#include "tools.h"
#include "image.h"
#include "error.h"
static char *outname = "out";
static int usepalette = 1;
-enum {
- OPT_PREFIX = UCHAR_MAX+1,
-};
+#include "imgopts.h"
+static const char sopts[] = SOPT_STRING;
+static const struct option lopts[] = { LOPTS_INITIALIZER, {0} };
-static void printusage(void)
+static void print_usage(FILE *f)
{
- puts("usage: lbximg [-i|-d] [-v] [-p palette_file] [-O override_file]"
- " [-f path]");
- puts(" [-F format] [frameno ...]");
+ const char *progname = tool_invocation();
+
+ fprintf(f, "Usage: %s [options] [-i|-d] [frame ...]\n", progname);
+ if (f != stdout)
+ fprintf(f, "Try %s --help for more information.\n", progname);
}
-static void printhelp(void)
+static void print_help(void)
{
- printusage();
- puts("For now, see the man page for detailed help.");
+ const struct option *opt;
+
+ print_usage(stdout);
+
+ putchar('\n');
+ puts("Options:");
+ for (opt = lopts; opt->name; opt++) {
+ struct lopt_help help;
+ int w;
+
+ if (!lopt_get_help(opt, &help))
+ continue;
+
+ help_print_option(opt, help.arg, help.desc, 20);
+ }
+ putchar('\n');
+
+ puts("For more information, see the lbximg(1) man page.");
+ putchar('\n');
+
+ printf("Report bugs to <%s>.\n", PACKAGE_BUGREPORT);
}
enum {
return 0;
}
-int output(unsigned int frameno, const struct img_format *fmt,
- unsigned char *pixels, unsigned char *pixel_mask,
- unsigned int width, unsigned int height,
- struct lbx_colour palette[static 256])
+static int output(unsigned int frameno, const struct img_format *fmt,
+ unsigned char *pixels, unsigned char *pixel_mask,
+ unsigned int width, unsigned int height,
+ struct lbx_colour *palette)
{
char name[strlen(outname) + sizeof ".65535.png"];
FILE *of;
return 0;
}
-static int loadoverride(FILE *f, struct lbx_colour palette[static 256])
+static int loadoverride(FILE *f, struct lbx_colour *palette)
{
struct lbx_image *img;
int rc, ret = 0;
assert(fmt >= 0 && fmt < sizeof formats / sizeof formats[0]);
npixels = img->width;
- if (img->height && npixels >= SIZE_MAX / img->height) {
+ if (img->height && npixels >= (size_t)-1 / img->height) {
tool_err(-1, "image too large");
goto err;
}
FILE *palf = NULL, *overf = NULL;
struct lbx_image *img;
- static const char sopts[] = "idnvF:f:p:O:VH";
- static const struct option lopts[] = {
- { "identify", 0, NULL, 'i' },
- { "decode", 0, NULL, 'd' },
- { "verbose", 0, NULL, 'v' },
- { "file", 1, NULL, 'f' },
- { "format", 1, NULL, 'F' },
- { "palette", 1, NULL, 'p' },
- { "override", 1, NULL, 'O' },
- { "no-palette", 0, NULL, 'n' },
-
- { "output-prefix", 1, NULL, OPT_PREFIX },
-
- { "version", 0, NULL, 'V' },
- { "usage", 0, NULL, 'U' },
- { "help", 0, NULL, 'H' },
-
- { 0 }
- };
-
tool_init("lbximg", argc, argv);
while ((opt = getopt_long(argc, argv, sopts, lopts, NULL)) != -1) {
switch(opt) {
case 'O':
ovr_palette = optarg;
break;
- case OPT_PREFIX:
+ case LOPT_OUTPUT_PREFIX:
outname = optarg;
break;
case 'V':
tool_version();
return EXIT_SUCCESS;
- case 'U':
- printusage();
- return EXIT_SUCCESS;
case 'H':
- printhelp();
+ print_help();
return EXIT_SUCCESS;
default:
return EXIT_FAILURE;