static char *rcsid = "$Header: /f/osi/others/quipu/uips/xd/RCS/conf_read.y,v 7.2 91/02/22 09:32:44 mrose Interim $";
* $Header: /f/osi/others/quipu/uips/xd/RCS/conf_read.y,v 7.2 91/02/22 09:32:44 mrose Interim $
* Revision 7.2 91/02/22 09:32:44 mrose
* Revision 7.1 90/10/17 11:50:23 mrose
* Revision 7.0 90/06/12 13:12:18 mrose
* *** empty log message ***
* Revision 1.5 90/04/26 10:22:36 emsrssn
* Revision 1.4 90/04/25 17:28:06 emsrssn
* Revision 1.3 90/04/19 13:54:07 emsrssn
* keyboard accelerator now activates button highlight.
* search types available is dependent on current position
* to prevent unreasonable searches.
* the help popup changes automatically depending on the
* buttons remain a fixed size when the application is
* command line options are now handled properly
* "reads" are now sorted to show mail address at top etc.
* Revision 1.2 90/03/16 11:32:01 emsrdsm
* *** empty log message ***
* Revision 1.1 90/03/09 16:49:53 emsrdsm
* Revision 1.1 90/03/09 12:14:12 emsrdsm
* Revision 1.1 90/03/09 11:43:15 emsrdsm
extern filt_struct *make_item_filter();
extern filt_struct *link_filters();
extern filt_struct *make_parent_filter();
extern put_symbol_value();
extern char **file_names;
extern table_entry symtab;
%token NUMBER NAME DEFAULT STRING OID AND OR NOT APPROX EQUAL ITEM
%type <filt> filter filter_list assertion filter_item
%type <symbol> filt_type match
%token <symbol> NOT AND OR APPROX EQUAL SUBSTRING
%token <symbol> '"' ':' '(' ')'
%token <strval> STRING OID
%type <strval> name default
type_spec : name filter {make_type($1, $2);}
name : NAME ':' STRING {(void) strcpy($$, $3);}
default : DEFAULT ':' STRING {(void) strcpy($$, $3);}
| {(void) strcpy($$, "\0");}
assertion : '(' filt_type filter filter filter_list ')' {$$ = make_parent_filter($2, $3, $4, $5);}
| '(' NOT filter ')' {$$ = make_parent_filter($2, $3, (filt_struct *) 0,(filt_struct *) 0);}
filter_list : filter filter_list {$$ = link_filters($1, $2);}
| {$$ = (filt_struct *) 0;}
filter : filter_item {$$ = $1;}
filter_item : '(' OID match STRING ')' {$$ = make_item_filter($2, $3, $4);}
match : APPROX {$$ = $1;}
filt_type : AND {$$ = $1;}
while(iswspace(c = getc(file)))
while (getc(file) != '\n');
while ((c = getc(file)) != '"')
(void) strcpy(yylval.strval, lexeme);
while (!iswspace((c = getc(file))) && !issymbol(c))
put_symbol_value(symtab, lexeme+1, (char *) 0);
(void) strcpy(yylval.strval, lexeme);
(void) strcpy(yylval.strval, lexeme);
if((lexeme[count] = getc(file)) == '=') {
if((lexeme[count] = getc(file)) == '=') {
yylval.symbol = SUBSTRING;
while(!iswspace(c = getc(file)) && c != '\0' && !issymbol(c))
(void) fseek(file,(long) -1, 1);
if(!strcmp(lexeme, "default") || !strcmp(lexeme, "DEFAULT"))
(void) strcpy(yylval.strval, lexeme);
if(!strcmp(lexeme, "name") || !strcmp(lexeme, "NAME"))
(void) strcpy(yylval.strval, lexeme);
while (isdigit(lexeme[count]) || lexeme[count] == '.') count++;
if (lexeme[count] == '\0') {
(void) strcpy(yylval.strval, lexeme);
(void) strcpy(yylval.strval, lexeme);
(void) strcpy(yylval.strval, lexeme);
(void) fprintf(stderr, "%s: ", str);
(void) fprintf(stderr, "Parse error in -\n");