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 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
|
#include "arguments.h"
#include "etc.h"
static void DeleteArgument(int * argc, char ** argv, int i)
{
(*argc)--;
for (; i < (*argc); i++)
argv[i] = argv[i + 1];
}
static int CheckArguments(int * argc, char ** argv, char * s)
{
int i, r = 0;
for (i = 1; i < *argc; i++) {
if (!StringCmp(s, argv[i])) {
DeleteArgument(argc, argv, i);
r = 1;
}
}
return (r);
}
static char * GetStringFromArguments(int * argc, char ** argv, char * s)
{
int i;
char * p = (char *)NULL;
for (i = 1; i < *argc; i++) {
if (!StringCmp(s, argv[i])) {
if (i == *argc - 1) {
DeleteArgument(argc, argv, i);
} else {
DeleteArgument(argc, argv, i);
p = argv[i];
DeleteArgument(argc, argv, i);
}
}
}
return (p);
}
int Arguments_Read(int * argc, char ** argv, Argument arguments[])
{
int i;
char * p;
void (*funcp)();
int n = 0;
for (i = 0; arguments[i].name != NULL; i++) {
if (arguments[i].flag == ARGUMENTS_NONE) {
/* None */
} else if (arguments[i].flag == ARGUMENTS_FUNCTION) {
if (CheckArguments(argc, argv, arguments[i].name)) {
funcp = (void (*)())(arguments[i].value);
(*funcp)();
n++;
}
} else if (arguments[i].flag == ARGUMENTS_FLAG) {
if ((p = GetStringFromArguments(argc,argv,arguments[i].name)) != NULL) {
if ( (!StringCmp(p, "off")) || (!StringCmp(p, "OFF")) ) {
*((short int *)(arguments[i].value)) = ARGUMENTS_FALSE;
n++;
} else if ( (!StringCmp(p, "on" )) || (!StringCmp(p, "ON" )) ) {
*((short int *)(arguments[i].value)) = ARGUMENTS_TRUE;
n++;
}
}
} else if (arguments[i].flag == ARGUMENTS_FLAG_ON) {
if (CheckArguments(argc, argv, arguments[i].name)) {
*((short int *)(arguments[i].value)) = ARGUMENTS_TRUE;
n++;
}
} else if (arguments[i].flag == ARGUMENTS_FLAG_OFF) {
if (CheckArguments(argc, argv, arguments[i].name)) {
*((short int *)(arguments[i].value)) = ARGUMENTS_FALSE;
n++;
}
} else if (arguments[i].flag == ARGUMENTS_INTEGER) {
if ((p=GetStringFromArguments(argc, argv, arguments[i].name)) != NULL) {
*((int *)(arguments[i].value)) = atoi(p);
n++;
}
} else if (arguments[i].flag == ARGUMENTS_STRING) {
if ((p=GetStringFromArguments(argc, argv, arguments[i].name)) != NULL) {
*((char **)(arguments[i].value)) = p;
n++;
}
}
}
while (*argc > 1) {
fprintf(stderr, "ERROR : Unknown Argument : %s\n", argv[1]);
DeleteArgument(argc, argv, 1);
}
return (n);
}
/*****************************************************************************/
/* End of Program. */
/*****************************************************************************/
|