File:  [ELWIX - Embedded LightWeight unIX -] / fwmaker / src / fwmaker.c
Revision 1.1: download - view: text, annotated - select for diffs - revision graph
Sun Jan 4 18:08:18 2026 UTC (13 days, 9 hours ago) by misho
Branches: MAIN
CVS tags: HEAD
Initial revision

#include "global.h"
#include "cmds.h"
#include "image.h"


linebuffer_t *line;
struct tagMtd mtd;
char image[MAXPATHLEN];
int imgfd;
size_t imgsiz;


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> [commands]\n\n"
		"\t-i\t\t\tPrompt command\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");
}

int
main(int argc, char **argv)
{
	int ch, imode = 0, ret = 0;
	char **args, cmdline[BUFSIZ] = { 0 };

	while ((ch = getopt(argc, argv, "hvid:")) != -1)
		switch (ch) {
			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>