|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T p
Length: 2147 (0x863)
Types: TextFile
Names: »parse.c«
└─⟦87ddcff64⟧ Bits:30001253 CPHDIST85 Tape, 1985 Autumn Conference Copenhagen
└─⟦this⟧ »cph85dist/rman/daemon/parse.c«
#ifndef lint
static char *RCSid = "$Header: parse.c,v 1.3 85/08/04 16:35:30 broome Exp $";
#endif
/*
* $Log: parse.c,v $
* Revision 1.3 85/08/04 16:35:30 broome
* Cleaned up a little, added comma as delimiter so that config file can
* be more freely formatted.
*
* Revision 1.2 85/07/06 16:56:04 broome
*
* Revision 1.1 85/06/25 11:23:41 broome
* Initial revision
*/
#define iswhite(c) (c==' '||c=='\t'||c=='\n'||c=='\r'||c=='\0'||c==',')
/*
* Turn a line buffer into a pointer to a set
* of strings, just like ``argv[]'', and return argc.
*/
parse (buf, array)
char *buf;
char ***array;
{
char **argv;
char *s;
char word[132];
int argc = 0;
int i = 0, j;
argv = *array;
if (argv != (char **) 0) { /* have to free up space taken by old array */
do
free (argv[i]); /* free up each element */
while (argv[i++] != (char *) 0);
free (argv); /* and then free argv itslef */
}
/*
* Count and null-terminate each word.
*/
for (s = buf; *s; s++)
if (!iswhite (*s) && iswhite(*(s+1))) /* the end of each word */
argc++;
else if (iswhite (*s))
*s = '\0';
/*
* Now malloc up space for the strings plus the null at the end.
*/
if ((argv = (char **) malloc ((argc+1) * sizeof(char *))) == (char **) 0) {
perror ("parse: cannot malloc space for argv[]");
exit (1);
}
/*
* And copy the contents in.
*/
i = 0;
for (s = buf, j = 0; j < argc; s++) {
if (!iswhite (*s) && iswhite(*(s+1))) { /* the end of each word */
word[i++] = *s;
word[i] = '\0';
if ((argv[j] = (char *)malloc (i+1)) == (char *) 0) {
perror ("parse: cannot malloc mem for word");
exit (1);
}
strcpy (argv[j++], word);
i = 0;
} else if (!iswhite (*s))
word[i++] = *s;
}
argv[j] = (char *) 0; /* and a null at the end of it all */
*array = argv;
return (argc);
}