view ffstools/tiffs-wrappers/mokoffs.c @ 118:9aeabcbe6a3d
fc-tmsh: scw and scr accept keyword arguments
author |
Mychaela Falconia <falcon@freecalypso.org> |
date |
Sat, 18 Feb 2017 07:49:29 +0000 (2017-02-18) |
parents |
e7502631a0f9 |
children |
|
line source
/*
* mokoffs is a wrapper around tiffs: we pass the user's command along,
* together with any options, but insert the 64x7 FFS organization argument
* automatically.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>
#include <unistd.h>
extern char tiffs_prog_pathname[];
char *imgfile;
char *aopt, *ropt;
int fflag;
char **passon_argv;
int passon_argc;
int output_argc;
char **output_argv;
main(argc, argv)
char **argv;
{
extern int optind;
extern char *optarg;
int c;
char **sp, **dp;
while ((c = getopt(argc, argv, "+a:fr:")) != EOF)
switch (c) {
case 'a':
aopt = optarg;
continue;
case 'f':
fflag++;
continue;
case 'r':
ropt = optarg;
continue;
default:
usage: fprintf(stderr,
"usage: %s [global-options] <imgfile> <op> ...\n",
argv[0]);
exit(1);
}
if (argc - optind < 2)
goto usage;
imgfile = argv[optind++];
passon_argv = argv + optind;
passon_argc = argc - optind;
output_argc = passon_argc + 3;
if (fflag)
output_argc++;
if (aopt)
output_argc += 2;
if (ropt)
output_argc += 2;
output_argv = malloc(sizeof(char *) * (output_argc + 1));
if (!output_argv) {
perror("malloc for tiffs argument list");
exit(1);
}
dp = output_argv;
*dp++ = "tiffs";
if (fflag)
*dp++ = "-o0x380000";
if (aopt) {
*dp++ = "-a";
*dp++ = aopt;
}
if (ropt) {
*dp++ = "-r";
*dp++ = ropt;
}
*dp++ = imgfile;
*dp++ = "64x7";
for (sp = passon_argv; *sp; sp++)
*dp++ = *sp;
*dp = 0;
execvp(tiffs_prog_pathname, output_argv);
perror(tiffs_prog_pathname);
exit(1);
}