|
|
1.1 misho 1: #include "global.h"
2: #include "cmds.h"
3: #include "image.h"
4:
5:
6: linebuffer_t *line;
7: struct tagMtd mtd;
8: char image[MAXPATHLEN];
9: int imgfd;
10: size_t imgsiz;
1.2 ! misho 11: u_char fillCh = 0x0;
1.1 misho 12:
13:
14: void
15: Usage()
16: {
17: printf( " -= FWMAKER =- Firmware maker software ver.%s\n"
18: " (C)`25 ELWIX by Michael Pounov <misho@elwix.org> \n"
19: "==================================================\n"
1.2 ! misho 20: " Syntax: fwmaker [-options] <image> [command [args]]\n\n"
1.1 misho 21: "\t-i\t\t\tPrompt command\n"
1.2 ! misho 22: "\t-C <byte>\t\tFill empty bytes [default=0x0]\n"
1.1 misho 23: "\t-d <0xmask>\t\tDebug mode\n"
24: "\t-v\t\t\tVerbose, more -v more verbosity\n"
25: "\t-h\t\t\tHelp, this screen\n", "0.1");
26: }
27:
28: static void
29: prepareCli()
30: {
31: cli_addCommand(line, "image", 1, cmd_Image, "image command", "image management");
32: cli_addCommand(line, "mtd", 1, cmd_Mtd, "mtd command", "mtd partition");
33: cli_addCommand(line, "show", 1, cmd_Show, "show command", "shows parameters");
1.2 ! misho 34:
! 35: cli_addCommand(line, "fill_byte", 2, cmd_FillCh, "fill_byte command",
! 36: "fill image empty areas with byte");
1.1 misho 37: }
38:
39: int
40: main(int argc, char **argv)
41: {
42: int ch, imode = 0, ret = 0;
43: char **args, cmdline[BUFSIZ] = { 0 };
44:
1.2 ! misho 45: while ((ch = getopt(argc, argv, "hvid:C:")) != -1)
1.1 misho 46: switch (ch) {
1.2 ! misho 47: case 'C':
! 48: fillCh = (u_char) strtol(optarg, NULL, 0);
! 49: break;
1.1 misho 50: case 'i':
51: imode = 42;
52: break;
53: case 'd':
54: e_Debug = strtol(optarg, NULL, 0);
55: break;
56: case 'v':
57: e_incVerbose;
58: break;
59: case 'h':
60: default:
61: Usage();
62: return 1;
63: }
64: argc -= optind;
65: argv += optind;
66: if (!argc) {
67: printf("Error:: image not found!\n");
68: return 1;
69: } else {
70: strlcpy(image, *argv, sizeof image);
71: argc--;
72: argv++;
73:
74: imageOpen(0);
75: }
76:
77: openlog("fwmaker", LOG_PID | LOG_PERROR, LOG_USER);
78:
79: if (imode) {
80: if (!argc) {
81: printf("Error:: missing command line ...\n");
82: imageClose();
83: return 1;
84: } else
85: args = argv;
86: while (*args) {
87: strlcat(cmdline, *args++, sizeof cmdline);
88: strlcat(cmdline, " ", sizeof cmdline);
89: }
90: EVERBOSE(2, "imode: cmdline=%s", cmdline);
91: }
92:
93: line = cliInit(STDIN_FILENO, STDOUT_FILENO, "fwmaker");
94: if (!line) {
95: ELIBERR(cli);
96: imageClose();
97: return 2;
98: } else
99: EDEBUG(ELWIX_DEBUG_IO, "CLI init");
100:
101: prepareCli();
102:
103: if (imode)
104: ret = cliRun(line, cmdline, 0);
105: else
106: ret = cliLoop(line, NULL, -1);
107:
108: cliEnd(line);
109: imageClose();
110: EDEBUG(ELWIX_DEBUG_IO, "CLI end");
111: EDBGS(ELWIX_DEBUG_MEMORY)
112: mpool_dump(NULL, NULL);
113: closelog();
114: return ret;
115: }