#include "global.h"
#include "cmds.h"
#include "image.h"
linebuffer_t *line;
struct tagMtd mtd;
char image[MAXPATHLEN];
int imgfd;
size_t imgsiz;
u_char fillCh = 0x0;
void
Usage()
{
printf( " -= FWMAKER =- Firmware maker software ver.%s\n"
" (C)`25 ELWIX by Michael Pounov <misho@elwix.org> \n"
"==================================================\n"
" Syntax: fwmaker [-options] <image> [command [args]]\n\n"
"\t-i\t\t\tPrompt command\n"
"\t-C <byte>\t\tFill empty bytes [default=0x0]\n"
"\t-d <0xmask>\t\tDebug mode\n"
"\t-v\t\t\tVerbose, more -v more verbosity\n"
"\t-h\t\t\tHelp, this screen\n", "0.1");
}
static void
prepareCli()
{
cli_addCommand(line, "image", 1, cmd_Image, "image command", "image management");
cli_addCommand(line, "mtd", 1, cmd_Mtd, "mtd command", "mtd partition");
cli_addCommand(line, "show", 1, cmd_Show, "show command", "shows parameters");
cli_addCommand(line, "fill_byte", 2, cmd_FillCh, "fill_byte command",
"fill image empty areas with byte");
}
int
main(int argc, char **argv)
{
int ch, imode = 0, ret = 0;
char **args, cmdline[BUFSIZ] = { 0 };
while ((ch = getopt(argc, argv, "hvid:C:")) != -1)
switch (ch) {
case 'C':
fillCh = (u_char) strtol(optarg, NULL, 0);
break;
case 'i':
imode = 42;
break;
case 'd':
e_Debug = strtol(optarg, NULL, 0);
break;
case 'v':
e_incVerbose;
break;
case 'h':
default:
Usage();
return 1;
}
argc -= optind;
argv += optind;
if (!argc) {
printf("Error:: image not found!\n");
return 1;
} else {
strlcpy(image, *argv, sizeof image);
argc--;
argv++;
imageOpen(0);
}
openlog("fwmaker", LOG_PID | LOG_PERROR, LOG_USER);
if (imode) {
if (!argc) {
printf("Error:: missing command line ...\n");
imageClose();
return 1;
} else
args = argv;
while (*args) {
strlcat(cmdline, *args++, sizeof cmdline);
strlcat(cmdline, " ", sizeof cmdline);
}
EVERBOSE(2, "imode: cmdline=%s", cmdline);
}
line = cliInit(STDIN_FILENO, STDOUT_FILENO, "fwmaker");
if (!line) {
ELIBERR(cli);
imageClose();
return 2;
} else
EDEBUG(ELWIX_DEBUG_IO, "CLI init");
prepareCli();
if (imode)
ret = cliRun(line, cmdline, 0);
else
ret = cliLoop(line, NULL, -1);
cliEnd(line);
imageClose();
EDEBUG(ELWIX_DEBUG_IO, "CLI end");
EDBGS(ELWIX_DEBUG_MEMORY)
mpool_dump(NULL, NULL);
closelog();
return ret;
}
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>