%{ #include #include #include #include #include "config-parser.h" Scheme_t schemelist[MAX_SCHEMES]; int schemecount = 0; char schemes[10][32]; int nrschemes = 0; int count; int lcount; #define DEBUG 0 %} %union { long lval; char cval[255]; } %token TOK_CASE 1000 %token TOK_ESAC 1001 %token TOK_INFO 1002 %token TOK_ESSID 1003 %token TOK_NWID 1004 %token TOK_MODE 1005 %token TOK_FREQ 1006 %token TOK_CHANNEL 1007 %token TOK_SENS 1008 %token TOK_RATE 1009 %token TOK_KEY 1010 %token TOK_RTS 1011 %token TOK_FRAG 1012 %token TOK_IWCONFIG 1013 %token TOK_IWSPY 1014 %token TOK_IWPRIV 1015 %token TOK_IN 1016 %token TOK_EQUALS 1017 %token TOK_COLON 1018 %token TOK_WILDCARD 1019 %token TOK_SECTEND 1020 %token TOK_BRACE 1021 %token TOK_QUOTES 1022 %token TOK_TEXTVAL 1023 %token TOK_CASEVAL 1024 %token TOK_PIPE 1025 %token TOK_KEYVAL 1026 %% statement_list: statement | statement_list statement ; statement: assignment | case_statement ; case_statement: TOK_CASE TOK_TEXTVAL TOK_IN caselist TOK_ESAC; { esac_line = $5; } caselist: case_section | caselist case_section ; case_section: case_val_list TOK_BRACE value_list TOK_SECTEND { schemelist[schemecount].scheme_start = sectionstart; schemelist[schemecount].scheme_end = $4; //strncpy(schemelist[schemecount].Scheme, $1, 32); schemelist[schemecount].lines[L_Scheme]=sectionstart; schemelist[schemecount].lines[L_Socket]=sectionstart; schemelist[schemecount].lines[L_Instance]=sectionstart; schemelist[schemecount].lines[L_HWAddress]=sectionstart; for (count=0; count0) memcpy(&schemelist[schemecount+count], &schemelist[schemecount], sizeof(Scheme_t)); strncpy(schemelist[schemecount+count].Scheme, strtok(schemes[count] ,","), 32); strncpy(schemelist[schemecount+count].Socket, strtok(NULL ,","), 32); strncpy(schemelist[schemecount+count].Instance, strtok(NULL ,","), 32); strncpy(schemelist[schemecount+count].HWAddress, strtok(NULL ,","), 32); if (count>0) { schemelist[schemecount+count].parent_scheme_end = schemelist[schemecount].scheme_end; for (lcount=0; lcount