/* * Copyright (C) IBM Corporation. 2007 * Author: Doug Maxey * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ /* definitions */ %option array %{ #include "prom_parse.h" #undef LEXDEBUG #ifdef LEXDEBUG #define dbg(a) dbgprint((a)) #else #define dbg(a) do {} while (0) #endif /* LEXDEBUG */ #define upval(d) \ dbg(#d); \ yylval.str[0] = 0; \ strcat(yylval.str, yytext); \ yylloc.first_column = yylloc.last_column; \ yylloc.last_column += yyleng; \ return d void dbgprint(const char *item) { fprintf(stderr, "%s: \"%s\" len=%d ", item, yytext, yyleng);} %} %option noyywrap %option never-interactive %option nounput %option noinput VDEVICE vdevice VDEVINST gscsi VDEVDEV dev VDEVRAW rawio /* CHOSEN uses only boot related paths. */ CHOSEN bootpath|bootargs|iscsi-bootargs|nas-bootdevice BUSNAME ata|i2c|ide|pci|sata|scsi|usb|lhea BOOTDEV cdrom|disk|ethernet|iscsi-(disk[0-9]|toe)|sd HEX4 [[:xdigit:]]{1,4} HEX16 [[:xdigit:]]{5,16} IPV4 [0-9]{1,3}(\.[0-9]{1,3}){3} IQN iqn\.[-[:alnum:]:.]{1,219} OBPQUAL bootp|ipv6|iscsi|dhcpv6 OBPPARM blksize|bootp-retries|chapid|chappw|ciaddr|dhcp|filename|giaddr|ichapid|ichappw|ilun|iname|iport|isid|isns|itname|siaddr|slp|subnet-mask|tftp-retries FILENAME \\[-[:alnum:]\\\.]{1,} %% /* rules */ {CHOSEN} { upval(CHOSEN); } {VDEVICE} { upval(VDEVICE); } {VDEVINST} { upval(VDEVINST); } {VDEVDEV} { upval(VDEVDEV); } {VDEVRAW} { upval(VDEVRAW); } {OBPQUAL} { upval(OBPQUAL); } {BUSNAME} { upval(BUSNAME); } {IPV4} { upval(IPV4); } {IQN} { upval(IQN); } {BOOTDEV} { upval(BOOTDEV); } {OBPPARM} { upval(OBPPARM); } {HEX4} { upval(HEX4); } {HEX16} { upval(HEX16); } {FILENAME} { upval(FILENAME); } [ \t\n]+ { /* eat all whitespace. */ yylloc.first_column = yylloc.last_column; yylloc.last_column += yyleng; } . { /* any other single char. */ dbg("??"); yylloc.first_column = yylloc.last_column; yylloc.last_column += yyleng; return *yytext; } <> yyterminate(); %% /* user code */