1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
#include <stdio.h> /*stderr*/
#include "cmdarg.h" /*cmdarg*/
#include "defs.h" /*VERSION_...*/
static const char *argv0;
/* LIT(A) -> "10" */
#define LIT_(s) #s
#define LIT(s) LIT_(s)
static void
showUsage(void)
{
printf("modemu version " LIT(VERSION_MAJOR) "." LIT(VERSION_MINOR) "\n");
printf("usage: %s [-c comm_prog] [-d pty_master] [-e ATxxx]"
" [-h] [-s] [-]\n", argv0);
}
void
cmdargParse(const char **argv)
{
argv0 = argv[0];
for (argv++; *argv != NULL; argv++) {
if ((*argv)[0] == '-') {
switch ((*argv)[1]) {
case 'c': /* -c <commx args>*/
cmdarg.ttymode = CA_COMMX;
cmdarg.commx = *++argv;
if (cmdarg.commx == NULL) goto FEWARG;
break;
case 'd': /* -d <pty_device>*/
cmdarg.ttymode = CA_DEVGIVEN;
cmdarg.dev = *++argv;
if (cmdarg.dev == NULL) goto FEWARG;
break;
case 'e': /* -e <atcommands>*/
cmdarg.atcmd = *++argv;
if (cmdarg.atcmd == NULL) goto FEWARG;
break;
case 'h': /* -h */
showUsage();
exit(0);
case 's': /* -s */
cmdarg.ttymode = CA_SHOWDEV;
break;
case '\0': /* - */
cmdarg.ttymode = CA_STDINOUT;
break;
default:
fprintf(stderr, "Unknown option -%c.\n", (*argv)[1]);
showUsage();
exit(1);
}
} else {
fprintf(stderr, "Error in command line.\n");
showUsage();
exit(1);
}
}
return;
FEWARG:
fprintf(stderr, "'-%c' requires an argument.\n", (*--argv)[1]);
exit(1);
}
|