Added dp8390 driver. Additional env_parse functions that take argc and argv.

This commit is contained in:
Philip Homburg
2005-08-05 09:53:08 +00:00
parent c9ab8cce43
commit db5a8bb2b8
16 changed files with 3917 additions and 4 deletions

View File

@@ -12,6 +12,21 @@ char *fmt; /* template to parse it with */
int field; /* field number of value to return */
long *param; /* address of parameter to get */
long min, max; /* minimum and maximum values for the parameter */
{
return env_parse_x(0, NULL, env, fmt, field, param, min, max);
}
/*=========================================================================*
* env_parse_x *
*=========================================================================*/
PUBLIC int env_parse_x(argc, argv, env, fmt, field, param, min, max)
int argc;
char *argv[];
char *env; /* environment variable to inspect */
char *fmt; /* template to parse it with */
int field; /* field number of value to return */
long *param; /* address of parameter to get */
long min, max; /* minimum and maximum values for the parameter */
{
/* Parse an environment variable setting, something like "DPETH0=300:3".
* Panic if the parsing fails. Return EP_UNSET if the environment variable
@@ -29,9 +44,27 @@ long min, max; /* minimum and maximum values for the parameter */
char value[EP_BUF_SIZE];
char PUNCT[] = ":,;.";
long newpar;
int s, i = 0, radix, r;
int s, i, radix, r, keylen;
if ((s=get_mon_param(env, value, sizeof(value))) != 0) {
keylen= strlen(env);
for (i= 0; i<argc; i++)
{
if (strncmp(argv[i], env, keylen) != 0)
continue;
if (strlen(argv[i]) <= keylen)
continue;
if (argv[i][keylen] != '=')
continue;
val= argv[i]+keylen+1;
if (strlen(val)+1 > EP_BUF_SIZE)
{
printf("WARNING: env_parse() failed: argument too long\n");
return(EP_EGETKENV);
}
strcpy(value, val);
}
if (i >= argc && (s=get_mon_param(env, value, sizeof(value))) != 0) {
if (s == ESRCH) return(EP_UNSET); /* only error allowed */
printf("WARNING: get_mon_param() failed in env_parse(): %d\n",s);
return(EP_EGETKENV);
@@ -40,6 +73,7 @@ long min, max; /* minimum and maximum values for the parameter */
if (strcmp(val, "off") == 0) return(EP_OFF);
if (strcmp(val, "on") == 0) return(EP_ON);
i = 0;
r = EP_ON;
for (;;) {
while (*val == ' ') val++; /* skip spaces */