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
|
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <parse.h>
extern char *optarg;
extern int optind;
#ifdef ANSI_FUNC
int
main (int argc, char **argv)
#else
main(argc, argv)
int argc;
char **argv;
#endif
{
int c;
int i;
int lptr=0;
int lastd=0;
int nullvalues=0;
int whitespace=0;
int dtab[PARSE_TABLE_SIZE];
int ctab[PARSE_TABLE_SIZE];
char *s;
char tbuf[SZ_LINE];
char lbuf[SZ_LINE];
char *delims=" \n";
char *comchars="#\n";
/* we want the args in the same order in which they arrived, and
gnu getopt sometimes changes things without this */
putenv("POSIXLY_CORRECT=true");
/* process switch arguments */
while ((c = getopt(argc, argv, "c:d:nw")) != -1){
switch(c){
case 'c':
comchars=optarg;
break;
case 'd':
delims=optarg;
break;
case 'n':
nullvalues=1;
break;
case 'w':
whitespace=1;
break;
}
}
memset(dtab, 0, PARSE_TABLE_SIZE*sizeof(int));
for(s=delims; s && *s; s++){
if( (i=(int)*s) == '\\' ){
s++;
if( *s == 'n' ) i = '\n';
else if( *s == 't' ) i = '\t';
else if( *s == 'r' ) i = '\r';
else if( *s == 'f' ) i = '\014';
}
dtab[i] = 1;
}
memset(ctab, 0, PARSE_TABLE_SIZE*sizeof(int));
for(s=comchars; s && *s; s++){
if( (i=(int)*s) == '\\' ){
s++;
if( *s == 'n' ) i = '\n';
else if( *s == 't' ) i = '\t';
else if( *s == 'r' ) i = '\r';
else if( *s == 'f' ) i = '\014';
}
ctab[i] = 1;
}
i = 0;
while( fgets(lbuf, SZ_LINE, stdin) ){
lptr = 0;
fprintf(stdout, "#%d: %s", i++, lbuf);
while( ParseWord(dtab, ctab, nullvalues, whitespace,
lbuf, tbuf, SZ_LINE, &lptr, &lastd) )
fprintf(stdout, "%s\n", tbuf);
}
/* success */
return 0;
}
|