Cleaned up option processing. Added code to use getopt(3) but never

got it working (it's #ifdef'd out).  Expanded flexibility of
-t option (now accepts any case, and looks at only first three
characters); so "-t lkd202-25" works as expected...
This commit is contained in:
ddouthitt
2001-09-27 20:51:16 +00:00
parent 8cef4f9af6
commit 2ed349c691
+46 -39
View File
@@ -105,17 +105,17 @@ MtxOrb_set_type (char * str) {
c = str[0];
if (c == 'l') {
if (strcmp(str, "lcd") == 0) {
if (strncasecmp(str, "lcd", 3) == 0) {
return MTXORB_LCD;
} else if (strcmp(str, "lkd") == 0) {
} else if (strncasecmp(str, "lkd", 3) == 0) {
return MTXORB_LKD;
} else {
fprintf (stderr, "MtxOrb_init: unknwon display type %s; must be one of lcd, lkd, vfd, or vkd\n", str);
}
} else if (c == 'v') {
if (strcmp (str, "vfd") == 0) {
if (strncasecmp (str, "vfd", 3) == 0) {
return MTXORB_VFD;
} else if (strcmp (str, "vkd") == 0) {
} else if (strncasecmp (str, "vkd", 3) == 0) {
return MTXORB_VKD;
} else {
fprintf (stderr, "MtxOrb_init: unknwon display type %s; must be one of lcd, lkd, vfd, or vkd\n", str);
@@ -195,7 +195,9 @@ MtxOrb_init (lcd_logical_driver * driver, char *args)
int contrast = DEFAULT_CONTRAST;
char device[256] = DEFAULT_DEVICE;
int speed = DEFAULT_SPEED;
MtxOrb_type = MTXORB_LKD ; // Assume it's an LCD w/keypad
char c;
MtxOrb_type = MTXORB_LKD; // Assume it's an LCD w/keypad
MtxOrb = driver;
@@ -210,69 +212,74 @@ MtxOrb_init (lcd_logical_driver * driver, char *args)
}
*/
#ifdef USE_GETOPT
while ((c = getopt(argc, argv, "d:c:s:ht:")) > 0) {
switch(c) {
case 'd':
strncpy(device, optarg, sizeof(device));
break;
case 's':
speed = MtxOrb_get_speed(optarg);
break;
case 'c':
contrast = MtxOrb_set_contrast(optarg);
break;
case 'h':
MtxOrb_usage();
return -1;
case 't':
MtxOrb_set_type(optarg);
default:
MtxOrb_usage();
return -1;
}
}
#else
for (i = 0; i < argc; i++) {
char *p;
p = argv[i];
//printf("Arg(%i): %s\n", i, argv[i]);
if (0 == strcmp (argv[i], "-d") || 0 == strcmp (argv[i], "--device")) {
if (strcmp (p, "-d") == 0) {
if (i + 1 > argc) {
fprintf (stderr, "MtxOrb_init: %s requires an argument\n", argv[i]);
return -1;
}
strcpy (device, argv[++i]);
} else if (0 == strcmp (argv[i], "-c") || 0 == strcmp (argv[i], "--contrast")) {
} else if (strcmp (argv[i], "-c") == 0) {
if (i + 1 > argc) {
fprintf (stderr, "MtxOrb_init: %s requires an argument\n", argv[i]);
return -1;
}
tmp = atoi (argv[++i]);
if ((tmp < 0) || (tmp > 255)) {
fprintf (stderr, "MtxOrb_init: %s argument must between 0 and 255. Ussing default value.\n", argv[i]);
} else
contrast = tmp;
contrast = MtxOrb_set_contrast (argv[++i]);
} else if (0 == strcmp (argv[i], "-s") || 0 == strcmp (argv[i], "--speed")) {
if (i + 1 > argc) {
fprintf (stderr, "MtxOrb_init: %s requires an argument\n", argv[i]);
return -1;
}
tmp = atoi (argv[++i]);
if (tmp == 1200)
speed = B1200;
else if (tmp == 2400)
speed = B2400;
else if (tmp == 9600)
speed = B9600;
else if (tmp == 19200)
speed = B19200;
else {
fprintf (stderr, "MtxOrb_init: %s argument must be 1200, 2400, 9600 or 19200. Ussing default value.\n", argv[i]);
}
speed = MtxOrb_get_speed (argv[++i]);
} else if (0 == strcmp (argv[i], "-h") || 0 == strcmp (argv[i], "--help")) {
printf ("LCDproc Matrix-Orbital LCD driver\n" "\t-d\t--device\tSelect the output device to use [/dev/lcd]\n"
// "\t-t\t--type\t\tSelect the LCD type (size) [20x4]\n"
"\t-c\t--contrast\tSet the initial contrast [140]\n" "\t-s\t--speed\t\tSet the communication speed [19200]\n" "\t-h\t--help\t\tShow this help information\n" "\t-t\t--type\t\tdisplay type: lcd, lkd, vfd, vkd\n");
MtxOrb_usage();
return -1;
} else if (0 == strcmp (argv[i], "-t") || 0 == strcmp (argv[i], "--type")) {
if (i + 1 > argc) {
fprintf (stderr, "MtxOrb_init: %s requires an argument\n", argv[i]);
return -1;
}
i++;
if ( 0 == strcmp (argv[i], "lcd") ) {
MtxOrb_type = MTXORB_LCD;
} else if ( 0 == strcmp (argv[i], "lkd") ) {
MtxOrb_type = MTXORB_LKD;
} else if ( 0 == strcmp (argv[i], "vfd") ) {
MtxOrb_type = MTXORB_VFD;
} else if ( 0 == strcmp (argv[i], "vkd") ) {
MtxOrb_type = MTXORB_VKD;
} else {
fprintf (stderr, "MtxOrb_init: unknwon display type %s\n", argv[i]);
return(-1);
}
MtxOrb_type = MtxOrb_set_type(argv[i]);
} else {
printf ("Invalid parameter: %s\n", argv[i]);
}
}
#endif
// Set up io port correctly, and open it...
fd = open (device, O_RDWR | O_NOCTTY | O_NDELAY);