rclex.c revision 38889
1226584Sdim/* A lexical scanner generated by flex */ 2226584Sdim 3226584Sdim/* Scanner skeleton version: 4226584Sdim * $Header: /home/daffy/u0/vern/flex/RCS/flex.skl,v 2.85 95/04/24 10:48:47 vern Exp $ 5226584Sdim */ 6226584Sdim 7226584Sdim#define FLEX_SCANNER 8226584Sdim#define YY_FLEX_MAJOR_VERSION 2 9226584Sdim#define YY_FLEX_MINOR_VERSION 5 10226584Sdim 11226584Sdim#include <stdio.h> 12226584Sdim 13226584Sdim 14226584Sdim/* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */ 15226584Sdim#ifdef c_plusplus 16263508Sdim#ifndef __cplusplus 17263508Sdim#define __cplusplus 18234353Sdim#endif 19226584Sdim#endif 20226584Sdim 21226584Sdim 22226584Sdim#ifdef __cplusplus 23226584Sdim 24263508Sdim#include <stdlib.h> 25234353Sdim#include <unistd.h> 26263508Sdim 27234353Sdim/* Use prototypes in function declarations. */ 28263508Sdim#define YY_USE_PROTOS 29263508Sdim 30263508Sdim/* The "const" storage-class-modifier is valid. */ 31263508Sdim#define YY_USE_CONST 32263508Sdim 33263508Sdim#else /* ! __cplusplus */ 34263508Sdim 35263508Sdim#if __STDC__ 36263508Sdim 37263508Sdim#define YY_USE_PROTOS 38263508Sdim#define YY_USE_CONST 39263508Sdim 40263508Sdim#endif /* __STDC__ */ 41263508Sdim#endif /* ! __cplusplus */ 42263508Sdim 43263508Sdim#ifdef __TURBOC__ 44263508Sdim #pragma warn -rch 45263508Sdim #pragma warn -use 46263508Sdim#include <io.h> 47263508Sdim#include <stdlib.h> 48263508Sdim#define YY_USE_CONST 49263508Sdim#define YY_USE_PROTOS 50263508Sdim#endif 51263508Sdim 52263508Sdim#ifdef YY_USE_CONST 53263508Sdim#define yyconst const 54263508Sdim#else 55263508Sdim#define yyconst 56263508Sdim#endif 57263508Sdim 58263508Sdim 59263508Sdim#ifdef YY_USE_PROTOS 60263508Sdim#define YY_PROTO(proto) proto 61263508Sdim#else 62263508Sdim#define YY_PROTO(proto) () 63263508Sdim#endif 64263508Sdim 65263508Sdim/* Returned upon end-of-file. */ 66263508Sdim#define YY_NULL 0 67263508Sdim 68263508Sdim/* Promotes a possibly negative, possibly signed char to an unsigned 69263508Sdim * integer for use as an array index. If the signed char is negative, 70263508Sdim * we want to instead treat it as an 8-bit unsigned char, hence the 71263508Sdim * double cast. 72263508Sdim */ 73263508Sdim#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) 74263508Sdim 75263508Sdim/* Enter a start condition. This macro really ought to take a parameter, 76263508Sdim * but we do it the disgusting crufty way forced on us by the ()-less 77263508Sdim * definition of BEGIN. 78263508Sdim */ 79263508Sdim#define BEGIN yy_start = 1 + 2 * 80263508Sdim 81263508Sdim/* Translate the current start state into a value that can be later handed 82263508Sdim * to BEGIN to return to the state. The YYSTATE alias is for lex 83263508Sdim * compatibility. 84263508Sdim */ 85263508Sdim#define YY_START ((yy_start - 1) / 2) 86263508Sdim#define YYSTATE YY_START 87263508Sdim 88263508Sdim/* Action number for EOF rule of a given start state. */ 89263508Sdim#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) 90263508Sdim 91263508Sdim/* Special action meaning "start processing a new file". */ 92263508Sdim#define YY_NEW_FILE yyrestart( yyin ) 93263508Sdim 94263508Sdim#define YY_END_OF_BUFFER_CHAR 0 95263508Sdim 96263508Sdim/* Size of default input buffer. */ 97263508Sdim#define YY_BUF_SIZE 16384 98263508Sdim 99263508Sdimtypedef struct yy_buffer_state *YY_BUFFER_STATE; 100234353Sdim 101226584Sdimextern int yyleng; 102226584Sdimextern FILE *yyin, *yyout; 103263508Sdim 104263508Sdim#define EOB_ACT_CONTINUE_SCAN 0 105263508Sdim#define EOB_ACT_END_OF_FILE 1 106263508Sdim#define EOB_ACT_LAST_MATCH 2 107263508Sdim 108234353Sdim/* The funky do-while in the following #define is used to turn the definition 109263508Sdim * int a single C statement (which needs a semi-colon terminator). This 110263508Sdim * avoids problems with code like: 111263508Sdim * 112263508Sdim * if ( condition_holds ) 113263508Sdim * yyless( 5 ); 114263508Sdim * else 115263508Sdim * do_something_else(); 116263508Sdim * 117263508Sdim * Prior to using the do-while the compiler would get upset at the 118226584Sdim * "else" because it interpreted the "if" statement as being all 119263508Sdim * done when it reached the ';' after the yyless() call. 120226584Sdim */ 121226584Sdim 122226584Sdim/* Return all but the first 'n' matched characters back to the input stream. */ 123226584Sdim 124226584Sdim#define yyless(n) \ 125226584Sdim do \ 126226584Sdim { \ 127226584Sdim /* Undo effects of setting up yytext. */ \ 128226584Sdim *yy_cp = yy_hold_char; \ 129226584Sdim yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \ 130226584Sdim YY_DO_BEFORE_ACTION; /* set up yytext again */ \ 131226584Sdim } \ 132249423Sdim while ( 0 ) 133249423Sdim 134249423Sdim#define unput(c) yyunput( c, yytext_ptr ) 135226584Sdim 136226584Sdim/* The following is because we cannot portably get our hands on size_t 137249423Sdim * (without autoconf's help, which isn't available because we want 138226584Sdim * flex-generated scanners to compile on their own). 139226584Sdim */ 140226584Sdimtypedef unsigned int yy_size_t; 141226584Sdim 142226584Sdim 143226584Sdimstruct yy_buffer_state 144226584Sdim { 145226584Sdim FILE *yy_input_file; 146249423Sdim 147249423Sdim char *yy_ch_buf; /* input buffer */ 148249423Sdim char *yy_buf_pos; /* current position in input buffer */ 149249423Sdim 150249423Sdim /* Size of input buffer in bytes, not including room for EOB 151249423Sdim * characters. 152249423Sdim */ 153249423Sdim yy_size_t yy_buf_size; 154226584Sdim 155234353Sdim /* Number of characters read into yy_ch_buf, not including EOB 156249423Sdim * characters. 157249423Sdim */ 158249423Sdim int yy_n_chars; 159263508Sdim 160263508Sdim /* Whether we "own" the buffer - i.e., we know we created it, 161234353Sdim * and can realloc() it to grow it, and should free() it to 162226584Sdim * delete it. 163226584Sdim */ 164226584Sdim int yy_is_our_buffer; 165226584Sdim 166226584Sdim /* Whether this is an "interactive" input source; if so, and 167226584Sdim * if we're using stdio for input, then we want to use getc() 168226584Sdim * instead of fread(), to make sure we stop fetching input after 169226584Sdim * each newline. 170226584Sdim */ 171263508Sdim int yy_is_interactive; 172263508Sdim 173263508Sdim /* Whether we're considered to be at the beginning of a line. 174263508Sdim * If so, '^' rules will be active on the next match, otherwise 175263508Sdim * not. 176263508Sdim */ 177263508Sdim int yy_at_bol; 178263508Sdim 179263508Sdim /* Whether to try to fill the input buffer when we reach the 180263508Sdim * end of it. 181263508Sdim */ 182263508Sdim int yy_fill_buffer; 183263508Sdim 184263508Sdim int yy_buffer_status; 185226584Sdim#define YY_BUFFER_NEW 0 186226584Sdim#define YY_BUFFER_NORMAL 1 187249423Sdim /* When an EOF's been seen but there's still some text to process 188249423Sdim * then we mark the buffer as YY_EOF_PENDING, to indicate that we 189226584Sdim * shouldn't try reading from the input source any more. We might 190249423Sdim * still have a bunch of tokens to match, though, because of 191249423Sdim * possible backing-up. 192226584Sdim * 193226584Sdim * When we actually see the EOF, we change the status to "new" 194226584Sdim * (via yyrestart()), so that the user can continue scanning by 195226584Sdim * just pointing yyin at a new input file. 196226584Sdim */ 197263508Sdim#define YY_BUFFER_EOF_PENDING 2 198226584Sdim }; 199263508Sdim 200263508Sdimstatic YY_BUFFER_STATE yy_current_buffer = 0; 201263508Sdim 202226584Sdim/* We provide macros for accessing buffer states in case in the 203226584Sdim * future we want to put the buffer states in a more general 204226584Sdim * "scanner state". 205226584Sdim */ 206234353Sdim#define YY_CURRENT_BUFFER yy_current_buffer 207234353Sdim 208226584Sdim 209226584Sdim/* yy_hold_char holds the character lost when yytext is formed. */ 210263508Sdimstatic char yy_hold_char; 211263508Sdim 212249423Sdimstatic int yy_n_chars; /* number of characters read into yy_ch_buf */ 213263508Sdim 214249423Sdim 215263508Sdimint yyleng; 216263508Sdim 217249423Sdim/* Points to current character in buffer. */ 218249423Sdimstatic char *yy_c_buf_p = (char *) 0; 219263508Sdimstatic int yy_init = 1; /* whether we need to initialize */ 220249423Sdimstatic int yy_start = 0; /* start state number */ 221249423Sdim 222249423Sdim/* Flag which is used to allow yywrap()'s to do buffer switches 223263508Sdim * instead of setting up a fresh yyin. A bit of a hack ... 224263508Sdim */ 225263508Sdimstatic int yy_did_buffer_switch_on_eof; 226249423Sdim 227249423Sdimvoid yyrestart YY_PROTO(( FILE *input_file )); 228249423Sdim 229249423Sdimvoid yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer )); 230263508Sdimvoid yy_load_buffer_state YY_PROTO(( void )); 231263508SdimYY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size )); 232263508Sdimvoid yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b )); 233263508Sdimvoid yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file )); 234263508Sdimvoid yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b )); 235263508Sdim#define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer ) 236263508Sdim 237263508SdimYY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size )); 238234353SdimYY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *str )); 239263508SdimYY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len )); 240263508Sdim 241263508Sdimstatic void *yy_flex_alloc YY_PROTO(( yy_size_t )); 242263508Sdimstatic void *yy_flex_realloc YY_PROTO(( void *, yy_size_t )); 243263508Sdimstatic void yy_flex_free YY_PROTO(( void * )); 244263508Sdim 245263508Sdim#define yy_new_buffer yy_create_buffer 246263508Sdim 247263508Sdim#define yy_set_interactive(is_interactive) \ 248263508Sdim { \ 249263508Sdim if ( ! yy_current_buffer ) \ 250263508Sdim yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \ 251263508Sdim yy_current_buffer->yy_is_interactive = is_interactive; \ 252263508Sdim } 253263508Sdim 254263508Sdim#define yy_set_bol(at_bol) \ 255263508Sdim { \ 256263508Sdim if ( ! yy_current_buffer ) \ 257263508Sdim yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \ 258263508Sdim yy_current_buffer->yy_at_bol = at_bol; \ 259263508Sdim } 260263508Sdim 261263508Sdim#define YY_AT_BOL() (yy_current_buffer->yy_at_bol) 262263508Sdim 263249423Sdimtypedef unsigned char YY_CHAR; 264249423SdimFILE *yyin = (FILE *) 0, *yyout = (FILE *) 0; 265249423Sdimtypedef int yy_state_type; 266249423Sdimextern char *yytext; 267263508Sdim#define yytext_ptr yytext 268263508Sdim 269263508Sdimstatic yy_state_type yy_get_previous_state YY_PROTO(( void )); 270263508Sdimstatic yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state )); 271263508Sdimstatic int yy_get_next_buffer YY_PROTO(( void )); 272263508Sdimstatic void yy_fatal_error YY_PROTO(( yyconst char msg[] )); 273263508Sdim 274263508Sdim/* Done after the current pattern has been matched and before the 275263508Sdim * corresponding action - sets up yytext. 276263508Sdim */ 277263508Sdim#define YY_DO_BEFORE_ACTION \ 278263508Sdim yytext_ptr = yy_bp; \ 279263508Sdim yyleng = (int) (yy_cp - yy_bp); \ 280263508Sdim yy_hold_char = *yy_cp; \ 281263508Sdim *yy_cp = '\0'; \ 282263508Sdim yy_c_buf_p = yy_cp; 283263508Sdim 284263508Sdim#define YY_NUM_RULES 86 285263508Sdim#define YY_END_OF_BUFFER 87 286263508Sdimstatic yyconst short int yy_accept[470] = 287263508Sdim { 0, 288263508Sdim 0, 0, 87, 85, 84, 83, 85, 78, 80, 82, 289263508Sdim 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 290263508Sdim 82, 82, 82, 82, 82, 82, 82, 2, 4, 84, 291263508Sdim 0, 81, 78, 80, 79, 82, 82, 82, 82, 82, 292263508Sdim 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 293263508Sdim 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 294263508Sdim 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 295263508Sdim 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 296263508Sdim 82, 82, 82, 81, 0, 82, 11, 82, 82, 82, 297263508Sdim 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 298263508Sdim 299263508Sdim 82, 82, 82, 82, 82, 3, 82, 82, 82, 82, 300263508Sdim 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 301263508Sdim 82, 82, 82, 82, 82, 82, 76, 82, 82, 82, 302263508Sdim 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 303263508Sdim 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 304263508Sdim 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 305263508Sdim 82, 82, 82, 82, 82, 82, 82, 41, 82, 82, 306263508Sdim 82, 53, 42, 82, 82, 82, 82, 82, 82, 82, 307263508Sdim 46, 82, 82, 82, 82, 82, 82, 71, 82, 82, 308263508Sdim 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 309226584Sdim 310226584Sdim 82, 82, 82, 7, 82, 82, 82, 38, 1, 82, 311226584Sdim 82, 82, 82, 82, 18, 82, 82, 25, 82, 82, 312263508Sdim 82, 82, 82, 82, 82, 82, 82, 82, 82, 70, 313263508Sdim 82, 82, 39, 40, 82, 82, 82, 82, 82, 30, 314263508Sdim 82, 82, 82, 82, 82, 82, 50, 82, 82, 82, 315263508Sdim 82, 82, 34, 82, 82, 9, 82, 82, 19, 82, 316263508Sdim 68, 82, 82, 82, 82, 82, 82, 12, 0, 82, 317263508Sdim 82, 82, 82, 82, 82, 82, 13, 82, 14, 82, 318263508Sdim 82, 82, 82, 65, 82, 82, 82, 52, 82, 72, 319234353Sdim 82, 82, 82, 82, 82, 82, 47, 82, 82, 82, 320263508Sdim 321234353Sdim 82, 82, 82, 82, 82, 82, 58, 82, 82, 36, 322226584Sdim 82, 82, 82, 82, 82, 82, 82, 82, 0, 82, 323226584Sdim 0, 77, 17, 82, 82, 51, 82, 10, 82, 82, 324226584Sdim 82, 82, 16, 82, 82, 82, 82, 82, 82, 82, 325263508Sdim 29, 82, 82, 82, 82, 82, 82, 82, 73, 82, 326226584Sdim 31, 82, 82, 82, 82, 82, 82, 45, 6, 82, 327226584Sdim 82, 82, 82, 77, 82, 23, 24, 82, 15, 82, 328234353Sdim 27, 82, 82, 66, 82, 28, 54, 43, 82, 82, 329249423Sdim 82, 48, 82, 69, 8, 82, 82, 82, 82, 82, 330234353Sdim 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 331234353Sdim 332226584Sdim 64, 82, 82, 82, 82, 56, 82, 82, 82, 82, 333234353Sdim 35, 49, 82, 82, 82, 82, 20, 82, 82, 82, 334249423Sdim 82, 82, 82, 82, 82, 74, 82, 82, 82, 32, 335249423Sdim 82, 82, 37, 82, 82, 82, 82, 82, 82, 75, 336249423Sdim 82, 67, 61, 82, 82, 82, 33, 59, 60, 5, 337249423Sdim 21, 82, 82, 82, 82, 55, 57, 82, 82, 82, 338249423Sdim 26, 63, 82, 82, 82, 62, 22, 44, 0 339249423Sdim } ; 340249423Sdim 341249423Sdimstatic yyconst int yy_ec[256] = 342249423Sdim { 0, 343249423Sdim 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 344249423Sdim 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 345249423Sdim 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 346249423Sdim 1, 2, 1, 5, 6, 1, 1, 1, 1, 1, 347249423Sdim 1, 1, 1, 7, 1, 1, 1, 8, 8, 8, 348234353Sdim 9, 8, 8, 8, 8, 8, 8, 1, 1, 1, 349249423Sdim 1, 1, 1, 1, 10, 11, 12, 13, 14, 15, 350234353Sdim 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 351249423Sdim 19, 26, 27, 28, 29, 30, 19, 31, 32, 19, 352249423Sdim 1, 1, 1, 1, 1, 1, 33, 33, 33, 33, 353234353Sdim 354249423Sdim 33, 33, 19, 19, 19, 19, 19, 19, 19, 19, 355249423Sdim 19, 19, 19, 19, 19, 19, 19, 19, 19, 33, 356249423Sdim 19, 19, 34, 1, 35, 1, 1, 1, 1, 1, 357249423Sdim 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 358249423Sdim 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 359249423Sdim 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 360249423Sdim 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 361249423Sdim 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 362249423Sdim 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 363249423Sdim 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 364249423Sdim 365249423Sdim 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 366249423Sdim 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 367249423Sdim 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 368249423Sdim 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 369249423Sdim 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 370249423Sdim 1, 1, 1, 1, 1 371249423Sdim } ; 372249423Sdim 373263508Sdimstatic yyconst int yy_meta[36] = 374234353Sdim { 0, 375234353Sdim 1, 2, 3, 2, 1, 4, 2, 5, 5, 5, 376234353Sdim 5, 5, 5, 5, 5, 1, 1, 1, 1, 1, 377234353Sdim 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 378234353Sdim 1, 1, 5, 1, 1 379234353Sdim } ; 380234353Sdim 381234353Sdimstatic yyconst short int yy_base[476] = 382249423Sdim { 0, 383234353Sdim 0, 0, 515, 516, 34, 516, 509, 0, 492, 25, 384234353Sdim 26, 45, 25, 28, 24, 486, 497, 49, 0, 40, 385234353Sdim 43, 486, 51, 66, 67, 482, 35, 516, 516, 81, 386234353Sdim 503, 84, 0, 486, 516, 0, 494, 477, 492, 475, 387234353Sdim 74, 474, 477, 475, 46, 489, 69, 484, 471, 481, 388263508Sdim 55, 477, 481, 466, 67, 469, 83, 83, 467, 477, 389263508Sdim 464, 478, 464, 459, 475, 470, 74, 453, 81, 457, 390263508Sdim 86, 76, 468, 467, 465, 452, 452, 458, 95, 461, 391249423Sdim 453, 447, 446, 106, 466, 456, 0, 451, 444, 449, 392249423Sdim 448, 443, 452, 435, 436, 449, 433, 448, 430, 426, 393249423Sdim 394249423Sdim 429, 430, 433, 441, 424, 0, 423, 436, 435, 420, 395249423Sdim 415, 417, 427, 419, 420, 424, 412, 428, 423, 410, 396249423Sdim 424, 405, 406, 407, 419, 409, 0, 402, 409, 416, 397249423Sdim 414, 410, 408, 415, 393, 399, 412, 406, 392, 401, 398249423Sdim 397, 391, 387, 388, 386, 392, 394, 103, 383, 387, 399249423Sdim 399, 388, 389, 396, 385, 377, 379, 376, 373, 376, 400249423Sdim 370, 374, 387, 368, 363, 98, 381, 0, 379, 367, 401249423Sdim 363, 0, 0, 362, 363, 360, 358, 375, 361, 356, 402249423Sdim 105, 373, 372, 351, 355, 355, 349, 0, 366, 352, 403249423Sdim 347, 346, 352, 346, 343, 356, 346, 354, 356, 352, 404249423Sdim 405249423Sdim 347, 344, 349, 0, 335, 344, 350, 0, 0, 334, 406249423Sdim 115, 334, 345, 119, 0, 345, 331, 0, 328, 326, 407234353Sdim 336, 325, 336, 328, 327, 320, 317, 313, 330, 0, 408234353Sdim 330, 331, 0, 0, 327, 322, 329, 314, 314, 0, 409234353Sdim 114, 305, 307, 318, 322, 318, 0, 321, 318, 107, 410234353Sdim 318, 318, 0, 306, 316, 0, 316, 308, 0, 294, 411263508Sdim 0, 298, 307, 294, 291, 304, 304, 0, 132, 137, 412263508Sdim 293, 287, 290, 300, 288, 290, 0, 293, 295, 295, 413263508Sdim 276, 292, 295, 0, 293, 278, 276, 0, 277, 0, 414249423Sdim 270, 283, 267, 285, 270, 281, 0, 280, 279, 271, 415249423Sdim 416249423Sdim 265, 277, 261, 257, 259, 257, 0, 274, 256, 0, 417249423Sdim 255, 254, 258, 248, 269, 268, 265, 258, 270, 143, 418249423Sdim 269, 149, 0, 259, 241, 0, 240, 0, 259, 238, 419249423Sdim 258, 239, 0, 250, 237, 250, 236, 231, 247, 246, 420249423Sdim 0, 249, 247, 247, 234, 227, 240, 225, 0, 222, 421249423Sdim 0, 223, 222, 239, 224, 237, 218, 227, 0, 216, 422249423Sdim 215, 222, 217, 235, 213, 0, 0, 209, 0, 226, 423249423Sdim 0, 209, 203, 0, 216, 0, 0, 0, 212, 206, 424249423Sdim 211, 0, 220, 0, 0, 215, 204, 199, 200, 199, 425249423Sdim 213, 199, 199, 197, 206, 208, 207, 199, 188, 194, 426234353Sdim 427234353Sdim 192, 188, 188, 190, 196, 0, 198, 182, 184, 182, 428234353Sdim 0, 0, 184, 181, 188, 176, 0, 177, 171, 172, 429249423Sdim 170, 183, 186, 181, 171, 0, 183, 171, 164, 0, 430249423Sdim 167, 175, 0, 164, 160, 155, 157, 156, 159, 0, 431249423Sdim 155, 0, 0, 160, 165, 156, 0, 0, 0, 0, 432249423Sdim 0, 141, 150, 141, 139, 0, 0, 128, 122, 126, 433249423Sdim 0, 0, 109, 91, 79, 0, 0, 0, 516, 156, 434249423Sdim 161, 65, 166, 171, 176 435249423Sdim } ; 436249423Sdim 437249423Sdimstatic yyconst short int yy_def[476] = 438249423Sdim { 0, 439249423Sdim 469, 1, 469, 469, 469, 469, 470, 471, 472, 473, 440249423Sdim 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 441249423Sdim 473, 473, 473, 473, 473, 473, 473, 469, 469, 469, 442249423Sdim 470, 469, 471, 472, 469, 473, 473, 473, 473, 473, 443249423Sdim 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 444249423Sdim 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 445249423Sdim 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 446249423Sdim 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 447263508Sdim 473, 473, 473, 469, 470, 473, 473, 473, 473, 473, 448263508Sdim 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 449263508Sdim 450263508Sdim 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 451 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 452 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 453 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 454 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 455 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 456 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 457 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 458 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 459 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 460 461 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 462 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 463 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 464 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 465 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 466 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 467 473, 473, 473, 473, 473, 473, 473, 473, 469, 474, 468 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 469 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 470 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 471 472 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473 473, 473, 473, 473, 473, 473, 473, 473, 475, 474, 474 475, 474, 473, 473, 473, 473, 473, 473, 473, 473, 475 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 476 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 477 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 478 473, 473, 473, 475, 473, 473, 473, 473, 473, 473, 479 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 480 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 481 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 482 483 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 484 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 485 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 486 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 487 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 488 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 489 473, 473, 473, 473, 473, 473, 473, 473, 0, 469, 490 469, 469, 469, 469, 469 491 } ; 492 493static yyconst short int yy_nxt[552] = 494 { 0, 495 4, 5, 6, 5, 7, 8, 4, 9, 9, 10, 496 11, 12, 13, 14, 15, 16, 17, 18, 19, 19, 497 20, 21, 22, 19, 23, 24, 25, 19, 26, 27, 498 19, 19, 19, 28, 29, 30, 37, 30, 50, 41, 499 52, 55, 51, 42, 81, 38, 43, 56, 82, 63, 500 53, 39, 83, 40, 44, 95, 67, 64, 54, 96, 501 59, 45, 60, 65, 103, 46, 68, 66, 47, 34, 502 61, 62, 48, 49, 70, 73, 71, 74, 76, 72, 503 77, 104, 30, 78, 30, 84, 90, 108, 85, 91, 504 98, 99, 111, 75, 79, 113, 123, 109, 126, 129, 505 506 124, 131, 132, 114, 139, 468, 112, 84, 127, 130, 507 85, 205, 225, 467, 206, 241, 269, 269, 242, 270, 508 140, 226, 243, 295, 227, 228, 141, 229, 207, 273, 509 304, 466, 274, 269, 269, 305, 319, 465, 321, 296, 510 321, 322, 36, 321, 321, 464, 321, 322, 36, 321, 511 321, 463, 321, 322, 36, 321, 31, 31, 462, 31, 512 31, 33, 33, 461, 33, 33, 36, 460, 459, 36, 513 36, 320, 320, 458, 320, 320, 321, 321, 457, 456, 514 321, 455, 454, 453, 452, 451, 450, 449, 448, 447, 515 446, 445, 444, 443, 442, 441, 440, 439, 438, 437, 516 517 436, 435, 434, 433, 432, 431, 430, 429, 428, 427, 518 426, 425, 424, 423, 422, 421, 420, 419, 418, 417, 519 416, 415, 414, 413, 412, 411, 410, 409, 408, 407, 520 406, 405, 404, 403, 402, 401, 400, 399, 398, 364, 521 397, 396, 395, 394, 393, 392, 391, 390, 389, 388, 522 387, 386, 385, 384, 383, 382, 381, 380, 379, 378, 523 377, 376, 375, 374, 373, 372, 371, 370, 369, 368, 524 367, 366, 365, 364, 364, 363, 362, 361, 360, 359, 525 358, 357, 356, 355, 354, 353, 352, 351, 350, 349, 526 348, 347, 346, 345, 344, 343, 342, 341, 340, 339, 527 528 338, 337, 336, 335, 334, 333, 332, 331, 330, 329, 529 328, 327, 326, 325, 324, 323, 318, 317, 316, 315, 530 314, 313, 312, 311, 310, 309, 308, 307, 306, 303, 531 302, 301, 300, 299, 298, 297, 294, 293, 292, 291, 532 290, 289, 288, 287, 286, 285, 284, 283, 282, 281, 533 280, 279, 278, 277, 276, 275, 272, 271, 268, 267, 534 266, 265, 264, 263, 262, 261, 260, 259, 258, 257, 535 256, 255, 254, 253, 252, 251, 250, 249, 248, 247, 536 246, 245, 244, 240, 239, 238, 237, 236, 235, 234, 537 233, 232, 231, 230, 224, 223, 222, 221, 220, 219, 538 539 218, 217, 216, 215, 214, 213, 212, 211, 210, 209, 540 208, 204, 203, 202, 201, 200, 199, 198, 197, 196, 541 195, 194, 193, 192, 191, 190, 189, 188, 187, 186, 542 185, 184, 183, 182, 181, 180, 179, 178, 177, 176, 543 175, 174, 173, 172, 171, 170, 169, 168, 167, 166, 544 165, 164, 163, 162, 161, 160, 159, 158, 157, 156, 545 155, 154, 153, 152, 151, 150, 149, 148, 147, 146, 546 32, 145, 144, 143, 142, 138, 137, 136, 135, 134, 547 133, 128, 125, 122, 121, 120, 119, 118, 117, 116, 548 115, 110, 107, 106, 105, 102, 101, 100, 97, 94, 549 550 93, 92, 89, 88, 87, 86, 35, 32, 80, 69, 551 58, 57, 35, 32, 469, 3, 469, 469, 469, 469, 552 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 553 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 554 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 555 469 556 } ; 557 558static yyconst short int yy_chk[552] = 559 { 0, 560 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 561 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 562 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 563 1, 1, 1, 1, 1, 5, 10, 5, 13, 11, 564 14, 15, 13, 11, 27, 10, 11, 15, 27, 20, 565 14, 10, 27, 10, 12, 45, 21, 20, 14, 45, 566 18, 12, 18, 20, 51, 12, 21, 20, 12, 472, 567 18, 18, 12, 12, 23, 24, 23, 24, 25, 23, 568 25, 51, 30, 25, 30, 32, 41, 55, 32, 41, 569 47, 47, 57, 24, 25, 58, 67, 55, 69, 71, 570 571 67, 72, 72, 58, 79, 465, 57, 84, 69, 71, 572 84, 148, 166, 464, 148, 181, 211, 211, 181, 211, 573 79, 166, 181, 241, 166, 166, 79, 166, 148, 214, 574 250, 463, 214, 269, 269, 250, 269, 460, 270, 241, 575 270, 270, 270, 270, 320, 459, 320, 320, 320, 320, 576 322, 458, 322, 322, 322, 322, 470, 470, 455, 470, 577 470, 471, 471, 454, 471, 471, 473, 453, 452, 473, 578 473, 474, 474, 446, 474, 474, 475, 475, 445, 444, 579 475, 441, 439, 438, 437, 436, 435, 434, 432, 431, 580 429, 428, 427, 425, 424, 423, 422, 421, 420, 419, 581 582 418, 416, 415, 414, 413, 410, 409, 408, 407, 405, 583 404, 403, 402, 401, 400, 399, 398, 397, 396, 395, 584 394, 393, 392, 391, 390, 389, 388, 387, 386, 383, 585 381, 380, 379, 375, 373, 372, 370, 368, 365, 364, 586 363, 362, 361, 360, 358, 357, 356, 355, 354, 353, 587 352, 350, 348, 347, 346, 345, 344, 343, 342, 340, 588 339, 338, 337, 336, 335, 334, 332, 331, 330, 329, 589 327, 325, 324, 321, 319, 318, 317, 316, 315, 314, 590 313, 312, 311, 309, 308, 306, 305, 304, 303, 302, 591 301, 300, 299, 298, 296, 295, 294, 293, 292, 291, 592 593 289, 287, 286, 285, 283, 282, 281, 280, 279, 278, 594 276, 275, 274, 273, 272, 271, 267, 266, 265, 264, 595 263, 262, 260, 258, 257, 255, 254, 252, 251, 249, 596 248, 246, 245, 244, 243, 242, 239, 238, 237, 236, 597 235, 232, 231, 229, 228, 227, 226, 225, 224, 223, 598 222, 221, 220, 219, 217, 216, 213, 212, 210, 207, 599 206, 205, 203, 202, 201, 200, 199, 198, 197, 196, 600 195, 194, 193, 192, 191, 190, 189, 187, 186, 185, 601 184, 183, 182, 180, 179, 178, 177, 176, 175, 174, 602 171, 170, 169, 167, 165, 164, 163, 162, 161, 160, 603 604 159, 158, 157, 156, 155, 154, 153, 152, 151, 150, 605 149, 147, 146, 145, 144, 143, 142, 141, 140, 139, 606 138, 137, 136, 135, 134, 133, 132, 131, 130, 129, 607 128, 126, 125, 124, 123, 122, 121, 120, 119, 118, 608 117, 116, 115, 114, 113, 112, 111, 110, 109, 108, 609 107, 105, 104, 103, 102, 101, 100, 99, 98, 97, 610 96, 95, 94, 93, 92, 91, 90, 89, 88, 86, 611 85, 83, 82, 81, 80, 78, 77, 76, 75, 74, 612 73, 70, 68, 66, 65, 64, 63, 62, 61, 60, 613 59, 56, 54, 53, 52, 50, 49, 48, 46, 44, 614 615 43, 42, 40, 39, 38, 37, 34, 31, 26, 22, 616 17, 16, 9, 7, 3, 469, 469, 469, 469, 469, 617 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 618 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 619 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 620 469 621 } ; 622 623static yy_state_type yy_last_accepting_state; 624static char *yy_last_accepting_cpos; 625 626/* The intent behind this definition is that it'll catch 627 * any uses of REJECT which flex missed. 628 */ 629#define REJECT reject_used_but_not_detected 630#define yymore() yymore_used_but_not_detected 631#define YY_MORE_ADJ 0 632char *yytext; 633#line 1 "/5g/ian/binutils/release/copy/binutils/rclex.l" 634#define INITIAL 0 635#line 2 "/5g/ian/binutils/release/copy/binutils/rclex.l" 636/* Copyright 1997, 1998 Free Software Foundation, Inc. 637 Written by Ian Lance Taylor, Cygnus Support. 638 639 This file is part of GNU Binutils. 640 641 This program is free software; you can redistribute it and/or modify 642 it under the terms of the GNU General Public License as published by 643 the Free Software Foundation; either version 2 of the License, or 644 (at your option) any later version. 645 646 This program is distributed in the hope that it will be useful, 647 but WITHOUT ANY WARRANTY; without even the implied warranty of 648 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 649 GNU General Public License for more details. 650 651 You should have received a copy of the GNU General Public License 652 along with this program; if not, write to the Free Software 653 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 654 02111-1307, USA. */ 655 656/* This is a lex input file which generates a lexer used by the 657 Windows rc file parser. It basically just recognized a bunch of 658 keywords. */ 659 660#include "bfd.h" 661#include "bucomm.h" 662#include "libiberty.h" 663#include "windres.h" 664#include "rcparse.h" 665 666#include <ctype.h> 667#include <assert.h> 668 669/* Whether we are in rcdata mode, in which we returns the lengths of 670 strings. */ 671 672static int rcdata_mode; 673 674/* List of allocated strings. */ 675 676struct alloc_string 677{ 678 struct alloc_string *next; 679 char *s; 680}; 681 682static struct alloc_string *strings; 683 684/* Local functions. */ 685 686static void cpp_line PARAMS ((const char *)); 687static char *handle_quotes PARAMS ((const char *, unsigned long *)); 688static char *get_string PARAMS ((int)); 689 690#line 691 "lex.yy.c" 691 692/* Macros after this point can all be overridden by user definitions in 693 * section 1. 694 */ 695 696#ifndef YY_SKIP_YYWRAP 697#ifdef __cplusplus 698extern "C" int yywrap YY_PROTO(( void )); 699#else 700extern int yywrap YY_PROTO(( void )); 701#endif 702#endif 703 704#ifndef YY_NO_UNPUT 705static void yyunput YY_PROTO(( int c, char *buf_ptr )); 706#endif 707 708#ifndef yytext_ptr 709static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int )); 710#endif 711 712#ifndef YY_NO_INPUT 713#ifdef __cplusplus 714static int yyinput YY_PROTO(( void )); 715#else 716static int input YY_PROTO(( void )); 717#endif 718#endif 719 720#if YY_STACK_USED 721static int yy_start_stack_ptr = 0; 722static int yy_start_stack_depth = 0; 723static int *yy_start_stack = 0; 724#ifndef YY_NO_PUSH_STATE 725static void yy_push_state YY_PROTO(( int new_state )); 726#endif 727#ifndef YY_NO_POP_STATE 728static void yy_pop_state YY_PROTO(( void )); 729#endif 730#ifndef YY_NO_TOP_STATE 731static int yy_top_state YY_PROTO(( void )); 732#endif 733 734#else 735#define YY_NO_PUSH_STATE 1 736#define YY_NO_POP_STATE 1 737#define YY_NO_TOP_STATE 1 738#endif 739 740#ifdef YY_MALLOC_DECL 741YY_MALLOC_DECL 742#else 743#if __STDC__ 744#ifndef __cplusplus 745#include <stdlib.h> 746#endif 747#else 748/* Just try to get by without declaring the routines. This will fail 749 * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int) 750 * or sizeof(void*) != sizeof(int). 751 */ 752#endif 753#endif 754 755/* Amount of stuff to slurp up with each read. */ 756#ifndef YY_READ_BUF_SIZE 757#define YY_READ_BUF_SIZE 8192 758#endif 759 760/* Copy whatever the last rule matched to the standard output. */ 761 762#ifndef ECHO 763/* This used to be an fputs(), but since the string might contain NUL's, 764 * we now use fwrite(). 765 */ 766#define ECHO (void) fwrite( yytext, yyleng, 1, yyout ) 767#endif 768 769/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, 770 * is returned in "result". 771 */ 772#ifndef YY_INPUT 773#define YY_INPUT(buf,result,max_size) \ 774 if ( yy_current_buffer->yy_is_interactive ) \ 775 { \ 776 int c = '*', n; \ 777 for ( n = 0; n < max_size && \ 778 (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ 779 buf[n] = (char) c; \ 780 if ( c == '\n' ) \ 781 buf[n++] = (char) c; \ 782 if ( c == EOF && ferror( yyin ) ) \ 783 YY_FATAL_ERROR( "input in flex scanner failed" ); \ 784 result = n; \ 785 } \ 786 else if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \ 787 && ferror( yyin ) ) \ 788 YY_FATAL_ERROR( "input in flex scanner failed" ); 789#endif 790 791/* No semi-colon after return; correct usage is to write "yyterminate();" - 792 * we don't want an extra ';' after the "return" because that will cause 793 * some compilers to complain about unreachable statements. 794 */ 795#ifndef yyterminate 796#define yyterminate() return YY_NULL 797#endif 798 799/* Number of entries by which start-condition stack grows. */ 800#ifndef YY_START_STACK_INCR 801#define YY_START_STACK_INCR 25 802#endif 803 804/* Report a fatal error. */ 805#ifndef YY_FATAL_ERROR 806#define YY_FATAL_ERROR(msg) yy_fatal_error( msg ) 807#endif 808 809/* Default declaration of generated scanner - a define so the user can 810 * easily add parameters. 811 */ 812#ifndef YY_DECL 813#define YY_DECL int yylex YY_PROTO(( void )) 814#endif 815 816/* Code executed at the beginning of each rule, after yytext and yyleng 817 * have been set up. 818 */ 819#ifndef YY_USER_ACTION 820#define YY_USER_ACTION 821#endif 822 823/* Code executed at the end of each rule. */ 824#ifndef YY_BREAK 825#define YY_BREAK break; 826#endif 827 828#define YY_RULE_SETUP \ 829 YY_USER_ACTION 830 831YY_DECL 832 { 833 register yy_state_type yy_current_state; 834 register char *yy_cp, *yy_bp; 835 register int yy_act; 836 837#line 58 "/5g/ian/binutils/release/copy/binutils/rclex.l" 838 839 840#line 841 "lex.yy.c" 841 842 if ( yy_init ) 843 { 844 yy_init = 0; 845 846#ifdef YY_USER_INIT 847 YY_USER_INIT; 848#endif 849 850 if ( ! yy_start ) 851 yy_start = 1; /* first start state */ 852 853 if ( ! yyin ) 854 yyin = stdin; 855 856 if ( ! yyout ) 857 yyout = stdout; 858 859 if ( ! yy_current_buffer ) 860 yy_current_buffer = 861 yy_create_buffer( yyin, YY_BUF_SIZE ); 862 863 yy_load_buffer_state(); 864 } 865 866 while ( 1 ) /* loops until end-of-file is reached */ 867 { 868 yy_cp = yy_c_buf_p; 869 870 /* Support of yytext. */ 871 *yy_cp = yy_hold_char; 872 873 /* yy_bp points to the position in yy_ch_buf of the start of 874 * the current run. 875 */ 876 yy_bp = yy_cp; 877 878 yy_current_state = yy_start; 879yy_match: 880 do 881 { 882 register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; 883 if ( yy_accept[yy_current_state] ) 884 { 885 yy_last_accepting_state = yy_current_state; 886 yy_last_accepting_cpos = yy_cp; 887 } 888 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) 889 { 890 yy_current_state = (int) yy_def[yy_current_state]; 891 if ( yy_current_state >= 470 ) 892 yy_c = yy_meta[(unsigned int) yy_c]; 893 } 894 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; 895 ++yy_cp; 896 } 897 while ( yy_base[yy_current_state] != 516 ); 898 899yy_find_action: 900 yy_act = yy_accept[yy_current_state]; 901 if ( yy_act == 0 ) 902 { /* have to back up */ 903 yy_cp = yy_last_accepting_cpos; 904 yy_current_state = yy_last_accepting_state; 905 yy_act = yy_accept[yy_current_state]; 906 } 907 908 YY_DO_BEFORE_ACTION; 909 910 911do_action: /* This label is used only to access EOF actions. */ 912 913 914 switch ( yy_act ) 915 { /* beginning of action switch */ 916 case 0: /* must back up */ 917 /* undo the effects of YY_DO_BEFORE_ACTION */ 918 *yy_cp = yy_hold_char; 919 yy_cp = yy_last_accepting_cpos; 920 yy_current_state = yy_last_accepting_state; 921 goto yy_find_action; 922 923case 1: 924YY_RULE_SETUP 925#line 60 "/5g/ian/binutils/release/copy/binutils/rclex.l" 926{ return BEG; } 927 YY_BREAK 928case 2: 929YY_RULE_SETUP 930#line 61 "/5g/ian/binutils/release/copy/binutils/rclex.l" 931{ return BEG; } 932 YY_BREAK 933case 3: 934YY_RULE_SETUP 935#line 62 "/5g/ian/binutils/release/copy/binutils/rclex.l" 936{ return END; } 937 YY_BREAK 938case 4: 939YY_RULE_SETUP 940#line 63 "/5g/ian/binutils/release/copy/binutils/rclex.l" 941{ return END; } 942 YY_BREAK 943case 5: 944YY_RULE_SETUP 945#line 64 "/5g/ian/binutils/release/copy/binutils/rclex.l" 946{ return ACCELERATORS; } 947 YY_BREAK 948case 6: 949YY_RULE_SETUP 950#line 65 "/5g/ian/binutils/release/copy/binutils/rclex.l" 951{ return VIRTKEY; } 952 YY_BREAK 953case 7: 954YY_RULE_SETUP 955#line 66 "/5g/ian/binutils/release/copy/binutils/rclex.l" 956{ return ASCII; } 957 YY_BREAK 958case 8: 959YY_RULE_SETUP 960#line 67 "/5g/ian/binutils/release/copy/binutils/rclex.l" 961{ return NOINVERT; } 962 YY_BREAK 963case 9: 964YY_RULE_SETUP 965#line 68 "/5g/ian/binutils/release/copy/binutils/rclex.l" 966{ return SHIFT; } 967 YY_BREAK 968case 10: 969YY_RULE_SETUP 970#line 69 "/5g/ian/binutils/release/copy/binutils/rclex.l" 971{ return CONTROL; } 972 YY_BREAK 973case 11: 974YY_RULE_SETUP 975#line 70 "/5g/ian/binutils/release/copy/binutils/rclex.l" 976{ return ALT; } 977 YY_BREAK 978case 12: 979YY_RULE_SETUP 980#line 71 "/5g/ian/binutils/release/copy/binutils/rclex.l" 981{ return BITMAP; } 982 YY_BREAK 983case 13: 984YY_RULE_SETUP 985#line 72 "/5g/ian/binutils/release/copy/binutils/rclex.l" 986{ return CURSOR; } 987 YY_BREAK 988case 14: 989YY_RULE_SETUP 990#line 73 "/5g/ian/binutils/release/copy/binutils/rclex.l" 991{ return DIALOG; } 992 YY_BREAK 993case 15: 994YY_RULE_SETUP 995#line 74 "/5g/ian/binutils/release/copy/binutils/rclex.l" 996{ return DIALOGEX; } 997 YY_BREAK 998case 16: 999YY_RULE_SETUP 1000#line 75 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1001{ return EXSTYLE; } 1002 YY_BREAK 1003case 17: 1004YY_RULE_SETUP 1005#line 76 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1006{ return CAPTION; } 1007 YY_BREAK 1008case 18: 1009YY_RULE_SETUP 1010#line 77 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1011{ return CLASS; } 1012 YY_BREAK 1013case 19: 1014YY_RULE_SETUP 1015#line 78 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1016{ return STYLE; } 1017 YY_BREAK 1018case 20: 1019YY_RULE_SETUP 1020#line 79 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1021{ return AUTO3STATE; } 1022 YY_BREAK 1023case 21: 1024YY_RULE_SETUP 1025#line 80 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1026{ return AUTOCHECKBOX; } 1027 YY_BREAK 1028case 22: 1029YY_RULE_SETUP 1030#line 81 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1031{ return AUTORADIOBUTTON; } 1032 YY_BREAK 1033case 23: 1034YY_RULE_SETUP 1035#line 82 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1036{ return CHECKBOX; } 1037 YY_BREAK 1038case 24: 1039YY_RULE_SETUP 1040#line 83 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1041{ return COMBOBOX; } 1042 YY_BREAK 1043case 25: 1044YY_RULE_SETUP 1045#line 84 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1046{ return CTEXT; } 1047 YY_BREAK 1048case 26: 1049YY_RULE_SETUP 1050#line 85 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1051{ return DEFPUSHBUTTON; } 1052 YY_BREAK 1053case 27: 1054YY_RULE_SETUP 1055#line 86 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1056{ return EDITTEXT; } 1057 YY_BREAK 1058case 28: 1059YY_RULE_SETUP 1060#line 87 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1061{ return GROUPBOX; } 1062 YY_BREAK 1063case 29: 1064YY_RULE_SETUP 1065#line 88 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1066{ return LISTBOX; } 1067 YY_BREAK 1068case 30: 1069YY_RULE_SETUP 1070#line 89 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1071{ return LTEXT; } 1072 YY_BREAK 1073case 31: 1074YY_RULE_SETUP 1075#line 90 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1076{ return PUSHBOX; } 1077 YY_BREAK 1078case 32: 1079YY_RULE_SETUP 1080#line 91 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1081{ return PUSHBUTTON; } 1082 YY_BREAK 1083case 33: 1084YY_RULE_SETUP 1085#line 92 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1086{ return RADIOBUTTON; } 1087 YY_BREAK 1088case 34: 1089YY_RULE_SETUP 1090#line 93 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1091{ return RTEXT; } 1092 YY_BREAK 1093case 35: 1094YY_RULE_SETUP 1095#line 94 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1096{ return SCROLLBAR; } 1097 YY_BREAK 1098case 36: 1099YY_RULE_SETUP 1100#line 95 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1101{ return STATE3; } 1102 YY_BREAK 1103case 37: 1104YY_RULE_SETUP 1105#line 96 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1106{ return USERBUTTON; } 1107 YY_BREAK 1108case 38: 1109YY_RULE_SETUP 1110#line 97 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1111{ return BEDIT; } 1112 YY_BREAK 1113case 39: 1114YY_RULE_SETUP 1115#line 98 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1116{ return HEDIT; } 1117 YY_BREAK 1118case 40: 1119YY_RULE_SETUP 1120#line 99 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1121{ return IEDIT; } 1122 YY_BREAK 1123case 41: 1124YY_RULE_SETUP 1125#line 100 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1126{ return FONT; } 1127 YY_BREAK 1128case 42: 1129YY_RULE_SETUP 1130#line 101 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1131{ return ICON; } 1132 YY_BREAK 1133case 43: 1134YY_RULE_SETUP 1135#line 102 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1136{ return LANGUAGE; } 1137 YY_BREAK 1138case 44: 1139YY_RULE_SETUP 1140#line 103 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1141{ return CHARACTERISTICS; } 1142 YY_BREAK 1143case 45: 1144YY_RULE_SETUP 1145#line 104 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1146{ return VERSIONK; } 1147 YY_BREAK 1148case 46: 1149YY_RULE_SETUP 1150#line 105 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1151{ return MENU; } 1152 YY_BREAK 1153case 47: 1154YY_RULE_SETUP 1155#line 106 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1156{ return MENUEX; } 1157 YY_BREAK 1158case 48: 1159YY_RULE_SETUP 1160#line 107 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1161{ return MENUITEM; } 1162 YY_BREAK 1163case 49: 1164YY_RULE_SETUP 1165#line 108 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1166{ return SEPARATOR; } 1167 YY_BREAK 1168case 50: 1169YY_RULE_SETUP 1170#line 109 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1171{ return POPUP; } 1172 YY_BREAK 1173case 51: 1174YY_RULE_SETUP 1175#line 110 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1176{ return CHECKED; } 1177 YY_BREAK 1178case 52: 1179YY_RULE_SETUP 1180#line 111 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1181{ return GRAYED; } 1182 YY_BREAK 1183case 53: 1184YY_RULE_SETUP 1185#line 112 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1186{ return HELP; } 1187 YY_BREAK 1188case 54: 1189YY_RULE_SETUP 1190#line 113 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1191{ return INACTIVE; } 1192 YY_BREAK 1193case 55: 1194YY_RULE_SETUP 1195#line 114 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1196{ return MENUBARBREAK; } 1197 YY_BREAK 1198case 56: 1199YY_RULE_SETUP 1200#line 115 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1201{ return MENUBREAK; } 1202 YY_BREAK 1203case 57: 1204YY_RULE_SETUP 1205#line 116 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1206{ return MESSAGETABLE; } 1207 YY_BREAK 1208case 58: 1209YY_RULE_SETUP 1210#line 117 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1211{ return RCDATA; } 1212 YY_BREAK 1213case 59: 1214YY_RULE_SETUP 1215#line 118 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1216{ return STRINGTABLE; } 1217 YY_BREAK 1218case 60: 1219YY_RULE_SETUP 1220#line 119 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1221{ return VERSIONINFO; } 1222 YY_BREAK 1223case 61: 1224YY_RULE_SETUP 1225#line 120 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1226{ return FILEVERSION; } 1227 YY_BREAK 1228case 62: 1229YY_RULE_SETUP 1230#line 121 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1231{ return PRODUCTVERSION; } 1232 YY_BREAK 1233case 63: 1234YY_RULE_SETUP 1235#line 122 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1236{ return FILEFLAGSMASK; } 1237 YY_BREAK 1238case 64: 1239YY_RULE_SETUP 1240#line 123 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1241{ return FILEFLAGS; } 1242 YY_BREAK 1243case 65: 1244YY_RULE_SETUP 1245#line 124 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1246{ return FILEOS; } 1247 YY_BREAK 1248case 66: 1249YY_RULE_SETUP 1250#line 125 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1251{ return FILETYPE; } 1252 YY_BREAK 1253case 67: 1254YY_RULE_SETUP 1255#line 126 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1256{ return FILESUBTYPE; } 1257 YY_BREAK 1258case 68: 1259YY_RULE_SETUP 1260#line 127 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1261{ return VALUE; } 1262 YY_BREAK 1263case 69: 1264YY_RULE_SETUP 1265#line 128 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1266{ return MOVEABLE; } 1267 YY_BREAK 1268case 70: 1269YY_RULE_SETUP 1270#line 129 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1271{ return FIXED; } 1272 YY_BREAK 1273case 71: 1274YY_RULE_SETUP 1275#line 130 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1276{ return PURE; } 1277 YY_BREAK 1278case 72: 1279YY_RULE_SETUP 1280#line 131 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1281{ return IMPURE; } 1282 YY_BREAK 1283case 73: 1284YY_RULE_SETUP 1285#line 132 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1286{ return PRELOAD; } 1287 YY_BREAK 1288case 74: 1289YY_RULE_SETUP 1290#line 133 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1291{ return LOADONCALL; } 1292 YY_BREAK 1293case 75: 1294YY_RULE_SETUP 1295#line 134 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1296{ return DISCARDABLE; } 1297 YY_BREAK 1298case 76: 1299YY_RULE_SETUP 1300#line 135 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1301{ return NOT; } 1302 YY_BREAK 1303case 77: 1304YY_RULE_SETUP 1305#line 137 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1306{ 1307 char *s, *send; 1308 1309 /* This is a hack to let us parse version 1310 information easily. */ 1311 1312 s = strchr (yytext, '"'); 1313 ++s; 1314 send = strchr (s, '"'); 1315 if (strncmp (s, "StringFileInfo", 1316 sizeof "StringFileInfo" - 1) == 0 1317 && s + sizeof "StringFileInfo" - 1 == send) 1318 return BLOCKSTRINGFILEINFO; 1319 else if (strncmp (s, "VarFileInfo", 1320 sizeof "VarFileInfo" - 1) == 0 1321 && s + sizeof "VarFileInfo" - 1 == send) 1322 return BLOCKVARFILEINFO; 1323 else 1324 { 1325 char *r; 1326 1327 r = get_string (send - s + 1); 1328 strncpy (r, s, send - s); 1329 r[send - s] = '\0'; 1330 yylval.s = r; 1331 return BLOCK; 1332 } 1333 } 1334 YY_BREAK 1335case 78: 1336YY_RULE_SETUP 1337#line 166 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1338{ 1339 cpp_line (yytext); 1340 } 1341 YY_BREAK 1342case 79: 1343YY_RULE_SETUP 1344#line 170 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1345{ 1346 yylval.i.val = strtoul (yytext, 0, 0); 1347 yylval.i.dword = 1; 1348 return NUMBER; 1349 } 1350 YY_BREAK 1351case 80: 1352YY_RULE_SETUP 1353#line 176 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1354{ 1355 yylval.i.val = strtoul (yytext, 0, 0); 1356 yylval.i.dword = 0; 1357 return NUMBER; 1358 } 1359 YY_BREAK 1360case 81: 1361YY_RULE_SETUP 1362#line 182 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1363{ 1364 char *s; 1365 unsigned long length; 1366 1367 s = handle_quotes (yytext, &length); 1368 if (! rcdata_mode) 1369 { 1370 yylval.s = s; 1371 return QUOTEDSTRING; 1372 } 1373 else 1374 { 1375 yylval.ss.length = length; 1376 yylval.ss.s = s; 1377 return SIZEDSTRING; 1378 } 1379 } 1380 YY_BREAK 1381case 82: 1382YY_RULE_SETUP 1383#line 200 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1384{ 1385 char *s; 1386 1387 /* I rejected comma in a string in order to 1388 handle VIRTKEY, CONTROL in an accelerator 1389 resource. This means that an unquoted 1390 file name can not contain a comma. I 1391 don't know what rc permits. */ 1392 1393 s = get_string (strlen (yytext) + 1); 1394 strcpy (s, yytext); 1395 yylval.s = s; 1396 return STRING; 1397 } 1398 YY_BREAK 1399case 83: 1400YY_RULE_SETUP 1401#line 215 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1402{ ++rc_lineno; } 1403 YY_BREAK 1404case 84: 1405YY_RULE_SETUP 1406#line 216 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1407{ /* ignore whitespace */ } 1408 YY_BREAK 1409case 85: 1410YY_RULE_SETUP 1411#line 217 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1412{ return *yytext; } 1413 YY_BREAK 1414case 86: 1415YY_RULE_SETUP 1416#line 219 "/5g/ian/binutils/release/copy/binutils/rclex.l" 1417ECHO; 1418 YY_BREAK 1419#line 1420 "lex.yy.c" 1420case YY_STATE_EOF(INITIAL): 1421 yyterminate(); 1422 1423 case YY_END_OF_BUFFER: 1424 { 1425 /* Amount of text matched not including the EOB char. */ 1426 int yy_amount_of_matched_text = (int) (yy_cp - yytext_ptr) - 1; 1427 1428 /* Undo the effects of YY_DO_BEFORE_ACTION. */ 1429 *yy_cp = yy_hold_char; 1430 1431 if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW ) 1432 { 1433 /* We're scanning a new file or input source. It's 1434 * possible that this happened because the user 1435 * just pointed yyin at a new source and called 1436 * yylex(). If so, then we have to assure 1437 * consistency between yy_current_buffer and our 1438 * globals. Here is the right place to do so, because 1439 * this is the first action (other than possibly a 1440 * back-up) that will match for the new input source. 1441 */ 1442 yy_n_chars = yy_current_buffer->yy_n_chars; 1443 yy_current_buffer->yy_input_file = yyin; 1444 yy_current_buffer->yy_buffer_status = YY_BUFFER_NORMAL; 1445 } 1446 1447 /* Note that here we test for yy_c_buf_p "<=" to the position 1448 * of the first EOB in the buffer, since yy_c_buf_p will 1449 * already have been incremented past the NUL character 1450 * (since all states make transitions on EOB to the 1451 * end-of-buffer state). Contrast this with the test 1452 * in input(). 1453 */ 1454 if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] ) 1455 { /* This was really a NUL. */ 1456 yy_state_type yy_next_state; 1457 1458 yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text; 1459 1460 yy_current_state = yy_get_previous_state(); 1461 1462 /* Okay, we're now positioned to make the NUL 1463 * transition. We couldn't have 1464 * yy_get_previous_state() go ahead and do it 1465 * for us because it doesn't know how to deal 1466 * with the possibility of jamming (and we don't 1467 * want to build jamming into it because then it 1468 * will run more slowly). 1469 */ 1470 1471 yy_next_state = yy_try_NUL_trans( yy_current_state ); 1472 1473 yy_bp = yytext_ptr + YY_MORE_ADJ; 1474 1475 if ( yy_next_state ) 1476 { 1477 /* Consume the NUL. */ 1478 yy_cp = ++yy_c_buf_p; 1479 yy_current_state = yy_next_state; 1480 goto yy_match; 1481 } 1482 1483 else 1484 { 1485 yy_cp = yy_c_buf_p; 1486 goto yy_find_action; 1487 } 1488 } 1489 1490 else switch ( yy_get_next_buffer() ) 1491 { 1492 case EOB_ACT_END_OF_FILE: 1493 { 1494 yy_did_buffer_switch_on_eof = 0; 1495 1496 if ( yywrap() ) 1497 { 1498 /* Note: because we've taken care in 1499 * yy_get_next_buffer() to have set up 1500 * yytext, we can now set up 1501 * yy_c_buf_p so that if some total 1502 * hoser (like flex itself) wants to 1503 * call the scanner after we return the 1504 * YY_NULL, it'll still work - another 1505 * YY_NULL will get returned. 1506 */ 1507 yy_c_buf_p = yytext_ptr + YY_MORE_ADJ; 1508 1509 yy_act = YY_STATE_EOF(YY_START); 1510 goto do_action; 1511 } 1512 1513 else 1514 { 1515 if ( ! yy_did_buffer_switch_on_eof ) 1516 YY_NEW_FILE; 1517 } 1518 break; 1519 } 1520 1521 case EOB_ACT_CONTINUE_SCAN: 1522 yy_c_buf_p = 1523 yytext_ptr + yy_amount_of_matched_text; 1524 1525 yy_current_state = yy_get_previous_state(); 1526 1527 yy_cp = yy_c_buf_p; 1528 yy_bp = yytext_ptr + YY_MORE_ADJ; 1529 goto yy_match; 1530 1531 case EOB_ACT_LAST_MATCH: 1532 yy_c_buf_p = 1533 &yy_current_buffer->yy_ch_buf[yy_n_chars]; 1534 1535 yy_current_state = yy_get_previous_state(); 1536 1537 yy_cp = yy_c_buf_p; 1538 yy_bp = yytext_ptr + YY_MORE_ADJ; 1539 goto yy_find_action; 1540 } 1541 break; 1542 } 1543 1544 default: 1545 YY_FATAL_ERROR( 1546 "fatal flex scanner internal error--no action found" ); 1547 } /* end of action switch */ 1548 } /* end of scanning one token */ 1549 } /* end of yylex */ 1550 1551 1552/* yy_get_next_buffer - try to read in a new buffer 1553 * 1554 * Returns a code representing an action: 1555 * EOB_ACT_LAST_MATCH - 1556 * EOB_ACT_CONTINUE_SCAN - continue scanning from current position 1557 * EOB_ACT_END_OF_FILE - end of file 1558 */ 1559 1560static int yy_get_next_buffer() 1561 { 1562 register char *dest = yy_current_buffer->yy_ch_buf; 1563 register char *source = yytext_ptr; 1564 register int number_to_move, i; 1565 int ret_val; 1566 1567 if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] ) 1568 YY_FATAL_ERROR( 1569 "fatal flex scanner internal error--end of buffer missed" ); 1570 1571 if ( yy_current_buffer->yy_fill_buffer == 0 ) 1572 { /* Don't try to fill the buffer, so this is an EOF. */ 1573 if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 ) 1574 { 1575 /* We matched a singled characater, the EOB, so 1576 * treat this as a final EOF. 1577 */ 1578 return EOB_ACT_END_OF_FILE; 1579 } 1580 1581 else 1582 { 1583 /* We matched some text prior to the EOB, first 1584 * process it. 1585 */ 1586 return EOB_ACT_LAST_MATCH; 1587 } 1588 } 1589 1590 /* Try to read more data. */ 1591 1592 /* First move last chars to start of buffer. */ 1593 number_to_move = (int) (yy_c_buf_p - yytext_ptr) - 1; 1594 1595 for ( i = 0; i < number_to_move; ++i ) 1596 *(dest++) = *(source++); 1597 1598 if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_EOF_PENDING ) 1599 /* don't do the read, it's not guaranteed to return an EOF, 1600 * just force an EOF 1601 */ 1602 yy_n_chars = 0; 1603 1604 else 1605 { 1606 int num_to_read = 1607 yy_current_buffer->yy_buf_size - number_to_move - 1; 1608 1609 while ( num_to_read <= 0 ) 1610 { /* Not enough room in the buffer - grow it. */ 1611#ifdef YY_USES_REJECT 1612 YY_FATAL_ERROR( 1613"input buffer overflow, can't enlarge buffer because scanner uses REJECT" ); 1614#else 1615 1616 /* just a shorter name for the current buffer */ 1617 YY_BUFFER_STATE b = yy_current_buffer; 1618 1619 int yy_c_buf_p_offset = 1620 (int) (yy_c_buf_p - b->yy_ch_buf); 1621 1622 if ( b->yy_is_our_buffer ) 1623 { 1624 int new_size = b->yy_buf_size * 2; 1625 1626 if ( new_size <= 0 ) 1627 b->yy_buf_size += b->yy_buf_size / 8; 1628 else 1629 b->yy_buf_size *= 2; 1630 1631 b->yy_ch_buf = (char *) 1632 /* Include room in for 2 EOB chars. */ 1633 yy_flex_realloc( (void *) b->yy_ch_buf, 1634 b->yy_buf_size + 2 ); 1635 } 1636 else 1637 /* Can't grow it, we don't own it. */ 1638 b->yy_ch_buf = 0; 1639 1640 if ( ! b->yy_ch_buf ) 1641 YY_FATAL_ERROR( 1642 "fatal error - scanner input buffer overflow" ); 1643 1644 yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset]; 1645 1646 num_to_read = yy_current_buffer->yy_buf_size - 1647 number_to_move - 1; 1648#endif 1649 } 1650 1651 if ( num_to_read > YY_READ_BUF_SIZE ) 1652 num_to_read = YY_READ_BUF_SIZE; 1653 1654 /* Read in more data. */ 1655 YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]), 1656 yy_n_chars, num_to_read ); 1657 } 1658 1659 if ( yy_n_chars == 0 ) 1660 { 1661 if ( number_to_move == YY_MORE_ADJ ) 1662 { 1663 ret_val = EOB_ACT_END_OF_FILE; 1664 yyrestart( yyin ); 1665 } 1666 1667 else 1668 { 1669 ret_val = EOB_ACT_LAST_MATCH; 1670 yy_current_buffer->yy_buffer_status = 1671 YY_BUFFER_EOF_PENDING; 1672 } 1673 } 1674 1675 else 1676 ret_val = EOB_ACT_CONTINUE_SCAN; 1677 1678 yy_n_chars += number_to_move; 1679 yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR; 1680 yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR; 1681 1682 yytext_ptr = &yy_current_buffer->yy_ch_buf[0]; 1683 1684 return ret_val; 1685 } 1686 1687 1688/* yy_get_previous_state - get the state just before the EOB char was reached */ 1689 1690static yy_state_type yy_get_previous_state() 1691 { 1692 register yy_state_type yy_current_state; 1693 register char *yy_cp; 1694 1695 yy_current_state = yy_start; 1696 1697 for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp ) 1698 { 1699 register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); 1700 if ( yy_accept[yy_current_state] ) 1701 { 1702 yy_last_accepting_state = yy_current_state; 1703 yy_last_accepting_cpos = yy_cp; 1704 } 1705 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) 1706 { 1707 yy_current_state = (int) yy_def[yy_current_state]; 1708 if ( yy_current_state >= 470 ) 1709 yy_c = yy_meta[(unsigned int) yy_c]; 1710 } 1711 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; 1712 } 1713 1714 return yy_current_state; 1715 } 1716 1717 1718/* yy_try_NUL_trans - try to make a transition on the NUL character 1719 * 1720 * synopsis 1721 * next_state = yy_try_NUL_trans( current_state ); 1722 */ 1723 1724#ifdef YY_USE_PROTOS 1725static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state ) 1726#else 1727static yy_state_type yy_try_NUL_trans( yy_current_state ) 1728yy_state_type yy_current_state; 1729#endif 1730 { 1731 register int yy_is_jam; 1732 register char *yy_cp = yy_c_buf_p; 1733 1734 register YY_CHAR yy_c = 1; 1735 if ( yy_accept[yy_current_state] ) 1736 { 1737 yy_last_accepting_state = yy_current_state; 1738 yy_last_accepting_cpos = yy_cp; 1739 } 1740 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) 1741 { 1742 yy_current_state = (int) yy_def[yy_current_state]; 1743 if ( yy_current_state >= 470 ) 1744 yy_c = yy_meta[(unsigned int) yy_c]; 1745 } 1746 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; 1747 yy_is_jam = (yy_current_state == 469); 1748 1749 return yy_is_jam ? 0 : yy_current_state; 1750 } 1751 1752 1753#ifndef YY_NO_UNPUT 1754#ifdef YY_USE_PROTOS 1755static void yyunput( int c, register char *yy_bp ) 1756#else 1757static void yyunput( c, yy_bp ) 1758int c; 1759register char *yy_bp; 1760#endif 1761 { 1762 register char *yy_cp = yy_c_buf_p; 1763 1764 /* undo effects of setting up yytext */ 1765 *yy_cp = yy_hold_char; 1766 1767 if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 ) 1768 { /* need to shift things up to make room */ 1769 /* +2 for EOB chars. */ 1770 register int number_to_move = yy_n_chars + 2; 1771 register char *dest = &yy_current_buffer->yy_ch_buf[ 1772 yy_current_buffer->yy_buf_size + 2]; 1773 register char *source = 1774 &yy_current_buffer->yy_ch_buf[number_to_move]; 1775 1776 while ( source > yy_current_buffer->yy_ch_buf ) 1777 *--dest = *--source; 1778 1779 yy_cp += (int) (dest - source); 1780 yy_bp += (int) (dest - source); 1781 yy_n_chars = yy_current_buffer->yy_buf_size; 1782 1783 if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 ) 1784 YY_FATAL_ERROR( "flex scanner push-back overflow" ); 1785 } 1786 1787 *--yy_cp = (char) c; 1788 1789 1790 yytext_ptr = yy_bp; 1791 yy_hold_char = *yy_cp; 1792 yy_c_buf_p = yy_cp; 1793 } 1794#endif /* ifndef YY_NO_UNPUT */ 1795 1796 1797#ifdef __cplusplus 1798static int yyinput() 1799#else 1800static int input() 1801#endif 1802 { 1803 int c; 1804 1805 *yy_c_buf_p = yy_hold_char; 1806 1807 if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR ) 1808 { 1809 /* yy_c_buf_p now points to the character we want to return. 1810 * If this occurs *before* the EOB characters, then it's a 1811 * valid NUL; if not, then we've hit the end of the buffer. 1812 */ 1813 if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] ) 1814 /* This was really a NUL. */ 1815 *yy_c_buf_p = '\0'; 1816 1817 else 1818 { /* need more input */ 1819 yytext_ptr = yy_c_buf_p; 1820 ++yy_c_buf_p; 1821 1822 switch ( yy_get_next_buffer() ) 1823 { 1824 case EOB_ACT_END_OF_FILE: 1825 { 1826 if ( yywrap() ) 1827 { 1828 yy_c_buf_p = 1829 yytext_ptr + YY_MORE_ADJ; 1830 return EOF; 1831 } 1832 1833 if ( ! yy_did_buffer_switch_on_eof ) 1834 YY_NEW_FILE; 1835#ifdef __cplusplus 1836 return yyinput(); 1837#else 1838 return input(); 1839#endif 1840 } 1841 1842 case EOB_ACT_CONTINUE_SCAN: 1843 yy_c_buf_p = yytext_ptr + YY_MORE_ADJ; 1844 break; 1845 1846 case EOB_ACT_LAST_MATCH: 1847#ifdef __cplusplus 1848 YY_FATAL_ERROR( 1849 "unexpected last match in yyinput()" ); 1850#else 1851 YY_FATAL_ERROR( 1852 "unexpected last match in input()" ); 1853#endif 1854 } 1855 } 1856 } 1857 1858 c = *(unsigned char *) yy_c_buf_p; /* cast for 8-bit char's */ 1859 *yy_c_buf_p = '\0'; /* preserve yytext */ 1860 yy_hold_char = *++yy_c_buf_p; 1861 1862 1863 return c; 1864 } 1865 1866 1867#ifdef YY_USE_PROTOS 1868void yyrestart( FILE *input_file ) 1869#else 1870void yyrestart( input_file ) 1871FILE *input_file; 1872#endif 1873 { 1874 if ( ! yy_current_buffer ) 1875 yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); 1876 1877 yy_init_buffer( yy_current_buffer, input_file ); 1878 yy_load_buffer_state(); 1879 } 1880 1881 1882#ifdef YY_USE_PROTOS 1883void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer ) 1884#else 1885void yy_switch_to_buffer( new_buffer ) 1886YY_BUFFER_STATE new_buffer; 1887#endif 1888 { 1889 if ( yy_current_buffer == new_buffer ) 1890 return; 1891 1892 if ( yy_current_buffer ) 1893 { 1894 /* Flush out information for old buffer. */ 1895 *yy_c_buf_p = yy_hold_char; 1896 yy_current_buffer->yy_buf_pos = yy_c_buf_p; 1897 yy_current_buffer->yy_n_chars = yy_n_chars; 1898 } 1899 1900 yy_current_buffer = new_buffer; 1901 yy_load_buffer_state(); 1902 1903 /* We don't actually know whether we did this switch during 1904 * EOF (yywrap()) processing, but the only time this flag 1905 * is looked at is after yywrap() is called, so it's safe 1906 * to go ahead and always set it. 1907 */ 1908 yy_did_buffer_switch_on_eof = 1; 1909 } 1910 1911 1912#ifdef YY_USE_PROTOS 1913void yy_load_buffer_state( void ) 1914#else 1915void yy_load_buffer_state() 1916#endif 1917 { 1918 yy_n_chars = yy_current_buffer->yy_n_chars; 1919 yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos; 1920 yyin = yy_current_buffer->yy_input_file; 1921 yy_hold_char = *yy_c_buf_p; 1922 } 1923 1924 1925#ifdef YY_USE_PROTOS 1926YY_BUFFER_STATE yy_create_buffer( FILE *file, int size ) 1927#else 1928YY_BUFFER_STATE yy_create_buffer( file, size ) 1929FILE *file; 1930int size; 1931#endif 1932 { 1933 YY_BUFFER_STATE b; 1934 1935 b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) ); 1936 if ( ! b ) 1937 YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); 1938 1939 b->yy_buf_size = size; 1940 1941 /* yy_ch_buf has to be 2 characters longer than the size given because 1942 * we need to put in 2 end-of-buffer characters. 1943 */ 1944 b->yy_ch_buf = (char *) yy_flex_alloc( b->yy_buf_size + 2 ); 1945 if ( ! b->yy_ch_buf ) 1946 YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); 1947 1948 b->yy_is_our_buffer = 1; 1949 1950 yy_init_buffer( b, file ); 1951 1952 return b; 1953 } 1954 1955 1956#ifdef YY_USE_PROTOS 1957void yy_delete_buffer( YY_BUFFER_STATE b ) 1958#else 1959void yy_delete_buffer( b ) 1960YY_BUFFER_STATE b; 1961#endif 1962 { 1963 if ( ! b ) 1964 return; 1965 1966 if ( b == yy_current_buffer ) 1967 yy_current_buffer = (YY_BUFFER_STATE) 0; 1968 1969 if ( b->yy_is_our_buffer ) 1970 yy_flex_free( (void *) b->yy_ch_buf ); 1971 1972 yy_flex_free( (void *) b ); 1973 } 1974 1975 1976#ifndef YY_ALWAYS_INTERACTIVE 1977#ifndef YY_NEVER_INTERACTIVE 1978extern int isatty YY_PROTO(( int )); 1979#endif 1980#endif 1981 1982#ifdef YY_USE_PROTOS 1983void yy_init_buffer( YY_BUFFER_STATE b, FILE *file ) 1984#else 1985void yy_init_buffer( b, file ) 1986YY_BUFFER_STATE b; 1987FILE *file; 1988#endif 1989 1990 1991 { 1992 yy_flush_buffer( b ); 1993 1994 b->yy_input_file = file; 1995 b->yy_fill_buffer = 1; 1996 1997#if YY_ALWAYS_INTERACTIVE 1998 b->yy_is_interactive = 1; 1999#else 2000#if YY_NEVER_INTERACTIVE 2001 b->yy_is_interactive = 0; 2002#else 2003 b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; 2004#endif 2005#endif 2006 } 2007 2008 2009#ifdef YY_USE_PROTOS 2010void yy_flush_buffer( YY_BUFFER_STATE b ) 2011#else 2012void yy_flush_buffer( b ) 2013YY_BUFFER_STATE b; 2014#endif 2015 2016 { 2017 b->yy_n_chars = 0; 2018 2019 /* We always need two end-of-buffer characters. The first causes 2020 * a transition to the end-of-buffer state. The second causes 2021 * a jam in that state. 2022 */ 2023 b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; 2024 b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; 2025 2026 b->yy_buf_pos = &b->yy_ch_buf[0]; 2027 2028 b->yy_at_bol = 1; 2029 b->yy_buffer_status = YY_BUFFER_NEW; 2030 2031 if ( b == yy_current_buffer ) 2032 yy_load_buffer_state(); 2033 } 2034 2035 2036#ifndef YY_NO_SCAN_BUFFER 2037#ifdef YY_USE_PROTOS 2038YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size ) 2039#else 2040YY_BUFFER_STATE yy_scan_buffer( base, size ) 2041char *base; 2042yy_size_t size; 2043#endif 2044 { 2045 YY_BUFFER_STATE b; 2046 2047 if ( size < 2 || 2048 base[size-2] != YY_END_OF_BUFFER_CHAR || 2049 base[size-1] != YY_END_OF_BUFFER_CHAR ) 2050 /* They forgot to leave room for the EOB's. */ 2051 return 0; 2052 2053 b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) ); 2054 if ( ! b ) 2055 YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" ); 2056 2057 b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ 2058 b->yy_buf_pos = b->yy_ch_buf = base; 2059 b->yy_is_our_buffer = 0; 2060 b->yy_input_file = 0; 2061 b->yy_n_chars = b->yy_buf_size; 2062 b->yy_is_interactive = 0; 2063 b->yy_at_bol = 1; 2064 b->yy_fill_buffer = 0; 2065 b->yy_buffer_status = YY_BUFFER_NEW; 2066 2067 yy_switch_to_buffer( b ); 2068 2069 return b; 2070 } 2071#endif 2072 2073 2074#ifndef YY_NO_SCAN_STRING 2075#ifdef YY_USE_PROTOS 2076YY_BUFFER_STATE yy_scan_string( yyconst char *str ) 2077#else 2078YY_BUFFER_STATE yy_scan_string( str ) 2079yyconst char *str; 2080#endif 2081 { 2082 int len; 2083 for ( len = 0; str[len]; ++len ) 2084 ; 2085 2086 return yy_scan_bytes( str, len ); 2087 } 2088#endif 2089 2090 2091#ifndef YY_NO_SCAN_BYTES 2092#ifdef YY_USE_PROTOS 2093YY_BUFFER_STATE yy_scan_bytes( yyconst char *bytes, int len ) 2094#else 2095YY_BUFFER_STATE yy_scan_bytes( bytes, len ) 2096yyconst char *bytes; 2097int len; 2098#endif 2099 { 2100 YY_BUFFER_STATE b; 2101 char *buf; 2102 yy_size_t n; 2103 int i; 2104 2105 /* Get memory for full buffer, including space for trailing EOB's. */ 2106 n = len + 2; 2107 buf = (char *) yy_flex_alloc( n ); 2108 if ( ! buf ) 2109 YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); 2110 2111 for ( i = 0; i < len; ++i ) 2112 buf[i] = bytes[i]; 2113 2114 buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR; 2115 2116 b = yy_scan_buffer( buf, n ); 2117 if ( ! b ) 2118 YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" ); 2119 2120 /* It's okay to grow etc. this buffer, and we should throw it 2121 * away when we're done. 2122 */ 2123 b->yy_is_our_buffer = 1; 2124 2125 return b; 2126 } 2127#endif 2128 2129 2130#ifndef YY_NO_PUSH_STATE 2131#ifdef YY_USE_PROTOS 2132static void yy_push_state( int new_state ) 2133#else 2134static void yy_push_state( new_state ) 2135int new_state; 2136#endif 2137 { 2138 if ( yy_start_stack_ptr >= yy_start_stack_depth ) 2139 { 2140 yy_size_t new_size; 2141 2142 yy_start_stack_depth += YY_START_STACK_INCR; 2143 new_size = yy_start_stack_depth * sizeof( int ); 2144 2145 if ( ! yy_start_stack ) 2146 yy_start_stack = (int *) yy_flex_alloc( new_size ); 2147 2148 else 2149 yy_start_stack = (int *) yy_flex_realloc( 2150 (void *) yy_start_stack, new_size ); 2151 2152 if ( ! yy_start_stack ) 2153 YY_FATAL_ERROR( 2154 "out of memory expanding start-condition stack" ); 2155 } 2156 2157 yy_start_stack[yy_start_stack_ptr++] = YY_START; 2158 2159 BEGIN(new_state); 2160 } 2161#endif 2162 2163 2164#ifndef YY_NO_POP_STATE 2165static void yy_pop_state() 2166 { 2167 if ( --yy_start_stack_ptr < 0 ) 2168 YY_FATAL_ERROR( "start-condition stack underflow" ); 2169 2170 BEGIN(yy_start_stack[yy_start_stack_ptr]); 2171 } 2172#endif 2173 2174 2175#ifndef YY_NO_TOP_STATE 2176static int yy_top_state() 2177 { 2178 return yy_start_stack[yy_start_stack_ptr - 1]; 2179 } 2180#endif 2181 2182#ifndef YY_EXIT_FAILURE 2183#define YY_EXIT_FAILURE 2 2184#endif 2185 2186#ifdef YY_USE_PROTOS 2187static void yy_fatal_error( yyconst char msg[] ) 2188#else 2189static void yy_fatal_error( msg ) 2190char msg[]; 2191#endif 2192 { 2193 (void) fprintf( stderr, "%s\n", msg ); 2194 exit( YY_EXIT_FAILURE ); 2195 } 2196 2197 2198 2199/* Redefine yyless() so it works in section 3 code. */ 2200 2201#undef yyless 2202#define yyless(n) \ 2203 do \ 2204 { \ 2205 /* Undo effects of setting up yytext. */ \ 2206 yytext[yyleng] = yy_hold_char; \ 2207 yy_c_buf_p = yytext + n - YY_MORE_ADJ; \ 2208 yy_hold_char = *yy_c_buf_p; \ 2209 *yy_c_buf_p = '\0'; \ 2210 yyleng = n; \ 2211 } \ 2212 while ( 0 ) 2213 2214 2215/* Internal utility routines. */ 2216 2217#ifndef yytext_ptr 2218#ifdef YY_USE_PROTOS 2219static void yy_flex_strncpy( char *s1, yyconst char *s2, int n ) 2220#else 2221static void yy_flex_strncpy( s1, s2, n ) 2222char *s1; 2223yyconst char *s2; 2224int n; 2225#endif 2226 { 2227 register int i; 2228 for ( i = 0; i < n; ++i ) 2229 s1[i] = s2[i]; 2230 } 2231#endif 2232 2233 2234#ifdef YY_USE_PROTOS 2235static void *yy_flex_alloc( yy_size_t size ) 2236#else 2237static void *yy_flex_alloc( size ) 2238yy_size_t size; 2239#endif 2240 { 2241 return (void *) malloc( size ); 2242 } 2243 2244#ifdef YY_USE_PROTOS 2245static void *yy_flex_realloc( void *ptr, yy_size_t size ) 2246#else 2247static void *yy_flex_realloc( ptr, size ) 2248void *ptr; 2249yy_size_t size; 2250#endif 2251 { 2252 /* The cast to (char *) in the following accommodates both 2253 * implementations that use char* generic pointers, and those 2254 * that use void* generic pointers. It works with the latter 2255 * because both ANSI C and C++ allow castless assignment from 2256 * any pointer type to void*, and deal with argument conversions 2257 * as though doing an assignment. 2258 */ 2259 return (void *) realloc( (char *) ptr, size ); 2260 } 2261 2262#ifdef YY_USE_PROTOS 2263static void yy_flex_free( void *ptr ) 2264#else 2265static void yy_flex_free( ptr ) 2266void *ptr; 2267#endif 2268 { 2269 free( ptr ); 2270 } 2271 2272#if YY_MAIN 2273int main() 2274 { 2275 yylex(); 2276 return 0; 2277 } 2278#endif 2279#line 219 "/5g/ian/binutils/release/copy/binutils/rclex.l" 2280 2281#ifndef yywrap 2282/* This is needed for some versions of lex. */ 2283int yywrap () 2284{ 2285 return 1; 2286} 2287#endif 2288 2289/* Handle a C preprocessor line. */ 2290 2291static void 2292cpp_line (s) 2293 const char *s; 2294{ 2295 int line; 2296 char *send, *fn; 2297 2298 ++s; 2299 while (isspace (*s)) 2300 ++s; 2301 2302 line = strtol (s, &send, 0); 2303 if (*send != '\0' && ! isspace (*send)) 2304 return; 2305 2306 /* Subtract 1 because we are about to count the newline. */ 2307 rc_lineno = line - 1; 2308 2309 s = send; 2310 while (isspace (*s)) 2311 ++s; 2312 2313 if (*s != '"') 2314 return; 2315 2316 ++s; 2317 send = strchr (s, '"'); 2318 if (send == NULL) 2319 return; 2320 2321 fn = (char *) xmalloc (send - s + 1); 2322 strncpy (fn, s, send - s); 2323 fn[send - s] = '\0'; 2324 2325 free (rc_filename); 2326 rc_filename = fn; 2327} 2328 2329/* Handle a quoted string. The quotes are stripped. A pair of quotes 2330 in a string are turned into a single quote. Adjacent strings are 2331 merged separated by whitespace are merged, as in C. */ 2332 2333static char * 2334handle_quotes (input, len) 2335 const char *input; 2336 unsigned long *len; 2337{ 2338 char *ret, *s; 2339 const char *t; 2340 int ch; 2341 2342 ret = get_string (strlen (input) + 1); 2343 2344 s = ret; 2345 t = input; 2346 if (*t == '"') 2347 ++t; 2348 while (*t != '\0') 2349 { 2350 if (*t == '\\') 2351 { 2352 ++t; 2353 switch (*t) 2354 { 2355 case '\0': 2356 rcparse_warning ("backslash at end of string"); 2357 break; 2358 2359 case '\"': 2360 rcparse_warning ("use \"\" to put \" in a string"); 2361 break; 2362 2363 case 'a': 2364 *s++ = ESCAPE_A; 2365 ++t; 2366 break; 2367 2368 case 'b': 2369 *s++ = ESCAPE_B; 2370 ++t; 2371 break; 2372 2373 case 'f': 2374 *s++ = ESCAPE_F; 2375 ++t; 2376 break; 2377 2378 case 'n': 2379 *s++ = ESCAPE_N; 2380 ++t; 2381 break; 2382 2383 case 'r': 2384 *s++ = ESCAPE_R; 2385 ++t; 2386 break; 2387 2388 case 't': 2389 *s++ = ESCAPE_T; 2390 ++t; 2391 break; 2392 2393 case 'v': 2394 *s++ = ESCAPE_V; 2395 ++t; 2396 break; 2397 2398 case '\\': 2399 *s++ = *t++; 2400 break; 2401 2402 case '0': case '1': case '2': case '3': 2403 case '4': case '5': case '6': case '7': 2404 ch = *t - '0'; 2405 ++t; 2406 if (*t >= '0' && *t <= '7') 2407 { 2408 ch = (ch << 3) | (*t - '0'); 2409 ++t; 2410 if (*t >= '0' && *t <= '7') 2411 { 2412 ch = (ch << 3) | (*t - '0'); 2413 ++t; 2414 } 2415 } 2416 *s++ = ch; 2417 break; 2418 2419 case 'x': 2420 ++t; 2421 ch = 0; 2422 while (1) 2423 { 2424 if (*t >= '0' && *t <= '9') 2425 ch = (ch << 4) | (*t - '0'); 2426 else if (*t >= 'a' && *t <= 'f') 2427 ch = (ch << 4) | (*t - 'a'); 2428 else if (*t >= 'A' && *t <= 'F') 2429 ch = (ch << 4) | (*t - 'A'); 2430 else 2431 break; 2432 ++t; 2433 } 2434 *s++ = ch; 2435 break; 2436 2437 default: 2438 rcparse_warning ("unrecognized escape sequence"); 2439 *s++ = '\\'; 2440 *s++ = *t++; 2441 break; 2442 } 2443 } 2444 else if (*t != '"') 2445 *s++ = *t++; 2446 else if (t[1] == '\0') 2447 break; 2448 else if (t[1] == '"') 2449 { 2450 *s++ = '"'; 2451 t += 2; 2452 } 2453 else 2454 { 2455 ++t; 2456 assert (isspace (*t)); 2457 while (isspace (*t)) 2458 ++t; 2459 if (*t == '\0') 2460 break; 2461 assert (*t == '"'); 2462 ++t; 2463 } 2464 } 2465 2466 *s = '\0'; 2467 2468 *len = s - ret; 2469 2470 return ret; 2471} 2472 2473/* Allocate a string of a given length. */ 2474 2475static char * 2476get_string (len) 2477 int len; 2478{ 2479 struct alloc_string *as; 2480 2481 as = (struct alloc_string *) xmalloc (sizeof *as); 2482 as->s = xmalloc (len); 2483 2484 as->next = strings; 2485 strings = as->next; 2486 2487 return as->s; 2488} 2489 2490/* Discard all the strings we have allocated. The parser calls this 2491 when it no longer needs them. */ 2492 2493void 2494rcparse_discard_strings () 2495{ 2496 struct alloc_string *as; 2497 2498 as = strings; 2499 while (as != NULL) 2500 { 2501 struct alloc_string *n; 2502 2503 free (as->s); 2504 n = as->next; 2505 free (as); 2506 as = n; 2507 } 2508 2509 strings = NULL; 2510} 2511 2512/* Enter rcdata mode. */ 2513 2514void 2515rcparse_rcdata () 2516{ 2517 rcdata_mode = 1; 2518} 2519 2520/* Go back to normal mode from rcdata mode. */ 2521 2522void 2523rcparse_normal () 2524{ 2525 rcdata_mode = 0; 2526} 2527