home *** CD-ROM | disk | FTP | other *** search
- #include <stdio.h>
- #include <fcntl.h>
- #include <ctype.h>
- #include <stdlib.h>
-
- extern char *uargv[20]; /* max number of arguments */
- extern int uargc;
- char bstring[160], line[80]; /* a single arg wouldn't exceed 80, would it? */
- int i, j, w;
-
-
- pars(xargc,xargv)
- int xargc;
- char *xargv[];
- {
- strcpy(bstring,xargv[0]); /* calling program name */
- for (i = 1; i < xargc; i++)
- { if (i < xargc)
- strcat(bstring," ");
- if (strchr(xargv[i],' ')) /* if contains space, a quoted string */
- { strcat(bstring,"\"");
- strcat(bstring,xargv[i]);
- strcat(bstring,"\"");
- }
- else
- strcat(bstring,xargv[i]);
- }
- j = w = 0;
- for (i = 0; i <= strlen(bstring); i++)
- switch (tolower(bstring[i]))
- {
- case ' ': /* space, comma, semicolon */
- case ',':
- case ';':
- movarg();
- if (bstring[i+1] == ' ') /* , or ; followed by space */
- i++;
- break;
-
- case '\"': /* quoted string */
- i++;
- while (bstring[i] != '\"')
- line[w++] = bstring[i++];
- movarg();
- if (bstring[i+1] == ' ')
- i++; /* move past trailing space */
- break;
-
- case '\'': /* quoted string */
- i++;
- while (bstring[i] != '\'')
- line[w++] = bstring[i++];
- movarg();
- if (bstring[i+1] == ' ')
- i++; /* move past trailing space */
- break;
-
- case '/': /* slash option */
- if (w > 0)
- movarg();
- line[w++] = '/'; /* all trailing chrs included */
- break;
-
- case '-': /* hyphen option */
- if (w == 0)
- line[w++] = '/';
- else
- line[w++] = '-'; /* within arg - pass through */
- break;
-
- case '\0': /* end of string */
- if (w > 0)
- movarg();
- break;
-
- default: /* nothing in particular */
- line[w++] = tolower(bstring[i]);
- }
- uargc = j;
-
- /* This block is included in "demo.exe":
- printf("bstring= (%s)\n",bstring);
- printf("uargc= %d\n",uargc);
- for (i = 0; i < uargc; i++)
- printf("uargv[%d]= (%s)\n",i,uargv[i]);
- */
- }
-
-
- movarg()
- { line[w] = '\0';
- uargv[j] = malloc(strlen(line)+1);
- strcpy(uargv[j++],line);
- w = 0;
- }
-