|
|
1.1 root 1: /* A lexical scanner generated by flex */
2:
3: /* scanner skeleton version:
4: *
5: * $Header: flex/RCS/flex.skel,v 2.13 90/05/26 17:24:13 vern Exp $
6: *
7: * @(#)lex.skel 5.2 (Berkeley) 6/18/90
8: */
9:
10: #define FLEX_SCANNER
11:
12: #include <stdio.h>
13:
14: #ifdef __STDC__
15:
16: #ifndef DONT_HAVE_STDLIB_H
17: #include <stdlib.h>
18: #else
19: void *malloc( unsigned );
20: void free( void* );
21: #endif
22:
23: #define YY_USE_PROTOS
24: #define YY_USE_CONST
25: #endif
26:
27:
28: /* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
29: #ifdef c_plusplus
30: #ifndef __cplusplus
31: #define __cplusplus
32: #endif
33: #endif
34:
35:
36: #ifdef __cplusplus
37:
38: #ifndef __STDC__
39: #include <stdlib.h>
40: #endif
41:
42: #include <osfcn.h>
43:
44: /* use prototypes in function declarations */
45: #define YY_USE_PROTOS
46:
47: /* the "const" storage-class-modifier is valid */
48: #define YY_USE_CONST
49:
50: #endif
51:
52:
53: #ifdef __TURBOC__
54: #define YY_USE_CONST
55: #endif
56:
57:
58: #ifndef YY_USE_CONST
59: #define const
60: #endif
61:
62:
63: #ifdef YY_USE_PROTOS
64: #define YY_PROTO(proto) proto
65: #else
66: #define YY_PROTO(proto) ()
67: /* there's no standard place to get these definitions */
68: char *malloc();
69: int free();
70: int read();
71: #endif
72:
73:
74: /* amount of stuff to slurp up with each read */
75: #ifndef YY_READ_BUF_SIZE
76: #define YY_READ_BUF_SIZE 8192
77: #endif
78:
79: /* returned upon end-of-file */
80: #define YY_END_TOK 0
81:
82: /* copy whatever the last rule matched to the standard output */
83:
84: /* cast to (char *) is because for 8-bit chars, yytext is (unsigned char *) */
85: /* this used to be an fputs(), but since the string might contain NUL's,
86: * we now use fwrite()
87: */
88: #define ECHO (void) fwrite( (char *) yytext, yyleng, 1, yyout )
89:
90: /* gets input and stuffs it into "buf". number of characters read, or YY_NULL,
91: * is returned in "result".
92: */
93: #define YY_INPUT(buf,result,max_size) \
94: if ( (result = read( fileno(yyin), (char *) buf, max_size )) < 0 ) \
95: YY_FATAL_ERROR( "read() in flex scanner failed" );
96: #define YY_NULL 0
97:
98: /* no semi-colon after return; correct usage is to write "yyterminate();" -
99: * we don't want an extra ';' after the "return" because that will cause
100: * some compilers to complain about unreachable statements.
101: */
102: #define yyterminate() return ( YY_NULL )
103:
104: /* report a fatal error */
105:
106: /* The funky do-while is used to turn this macro definition into
107: * a single C statement (which needs a semi-colon terminator).
108: * This avoids problems with code like:
109: *
110: * if ( something_happens )
111: * YY_FATAL_ERROR( "oops, the something happened" );
112: * else
113: * everything_okay();
114: *
115: * Prior to using the do-while the compiler would get upset at the
116: * "else" because it interpreted the "if" statement as being all
117: * done when it reached the ';' after the YY_FATAL_ERROR() call.
118: */
119:
120: #define YY_FATAL_ERROR(msg) \
121: do \
122: { \
123: (void) fputs( msg, stderr ); \
124: (void) putc( '\n', stderr ); \
125: exit( 1 ); \
126: } \
127: while ( 0 )
128:
129: /* default yywrap function - always treat EOF as an EOF */
130: #define yywrap() 1
131:
132: /* enter a start condition. This macro really ought to take a parameter,
133: * but we do it the disgusting crufty way forced on us by the ()-less
134: * definition of BEGIN
135: */
136: #define BEGIN yy_start = 1 + 2 *
137:
138: /* action number for EOF rule of a given start state */
139: #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
140:
141: /* special action meaning "start processing a new file" */
142: #define YY_NEW_FILE \
143: do \
144: { \
145: yy_init_buffer( yy_current_buffer, yyin ); \
146: yy_load_buffer_state(); \
147: } \
148: while ( 0 )
149:
150: /* default declaration of generated scanner - a define so the user can
151: * easily add parameters
152: */
153: #define YY_DECL int yylex YY_PROTO(( void ))
154:
155: /* code executed at the end of each rule */
156: #define YY_BREAK break;
157:
158: #define YY_END_OF_BUFFER_CHAR 0
159:
160: #ifndef YY_BUF_SIZE
161: #define YY_BUF_SIZE (YY_READ_BUF_SIZE * 2) /* size of default input buffer */
162: #endif
163:
164: typedef struct yy_buffer_state *YY_BUFFER_STATE;
165:
166: %% section 1 definitions go here
167:
168: /* done after the current pattern has been matched and before the
169: * corresponding action - sets up yytext
170: */
171: #define YY_DO_BEFORE_ACTION \
172: yytext = yy_bp; \
173: %% code to fiddle yytext and yyleng for yymore() goes here
174: yy_hold_char = *yy_cp; \
175: *yy_cp = '\0'; \
176: yy_c_buf_p = yy_cp;
177:
178: #define EOB_ACT_CONTINUE_SCAN 0
179: #define EOB_ACT_END_OF_FILE 1
180: #define EOB_ACT_LAST_MATCH 2
181:
182: /* return all but the first 'n' matched characters back to the input stream */
183: #define yyless(n) \
184: do \
185: { \
186: /* undo effects of setting up yytext */ \
187: *yy_cp = yy_hold_char; \
188: yy_c_buf_p = yy_cp = yy_bp + n; \
189: YY_DO_BEFORE_ACTION; /* set up yytext again */ \
190: } \
191: while ( 0 )
192:
193: #define unput(c) yyunput( c, yytext )
194:
195:
196: struct yy_buffer_state
197: {
198: FILE *yy_input_file;
199:
200: YY_CHAR *yy_ch_buf; /* input buffer */
201: YY_CHAR *yy_buf_pos; /* current position in input buffer */
202:
203: /* size of input buffer in bytes, not including room for EOB characters*/
204: int yy_buf_size;
205:
206: /* number of characters read into yy_ch_buf, not including EOB characters */
207: int yy_n_chars;
208:
209: int yy_eof_status; /* whether we've seen an EOF on this buffer */
210: #define EOF_NOT_SEEN 0
211: /* "pending" happens when the EOF has been seen but there's still
212: * some text process
213: */
214: #define EOF_PENDING 1
215: #define EOF_DONE 2
216: };
217:
218: static YY_BUFFER_STATE yy_current_buffer;
219:
220: /* we provide macros for accessing buffer states in case in the
221: * future we want to put the buffer states in a more general
222: * "scanner state"
223: */
224: #define YY_CURRENT_BUFFER yy_current_buffer
225:
226:
227: /* yy_hold_char holds the character lost when yytext is formed */
228: static YY_CHAR yy_hold_char;
229:
230: static int yy_n_chars; /* number of characters read into yy_ch_buf */
231:
232:
233:
234: #ifndef YY_USER_ACTION
235: #define YY_USER_ACTION
236: #endif
237:
238: #ifndef YY_USER_INIT
239: #define YY_USER_INIT
240: #endif
241:
242: extern YY_CHAR *yytext;
243: extern int yyleng;
244: extern FILE *yyin, *yyout;
245:
246: YY_CHAR *yytext;
247: int yyleng;
248:
249: FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
250:
251: %% data tables for the DFA go here
252:
253: /* these variables are all declared out here so that section 3 code can
254: * manipulate them
255: */
256: /* points to current character in buffer */
257: static YY_CHAR *yy_c_buf_p = (YY_CHAR *) 0;
258: static int yy_init = 1; /* whether we need to initialize */
259: static int yy_start = 0; /* start state number */
260:
261: /* flag which is used to allow yywrap()'s to do buffer switches
262: * instead of setting up a fresh yyin. A bit of a hack ...
263: */
264: static int yy_did_buffer_switch_on_eof;
265:
266: static yy_state_type yy_get_previous_state YY_PROTO(( void ));
267: static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state ));
268: static int yy_get_next_buffer YY_PROTO(( void ));
269: static void yyunput YY_PROTO(( YY_CHAR c, YY_CHAR *buf_ptr ));
270: void yyrestart YY_PROTO(( FILE *input_file ));
271: void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer ));
272: void yy_load_buffer_state YY_PROTO(( void ));
273: YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size ));
274: void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b ));
275: void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file ));
276:
277: #define yy_new_buffer yy_create_buffer
278:
279: #ifdef __cplusplus
280: static int yyinput YY_PROTO(( void ));
281: #else
282: static int input YY_PROTO(( void ));
283: #endif
284:
285: YY_DECL
286: {
287: register yy_state_type yy_current_state;
288: register YY_CHAR *yy_cp, *yy_bp;
289: register int yy_act;
290:
291: %% user's declarations go here
292:
293: if ( yy_init )
294: {
295: YY_USER_INIT;
296:
297: if ( ! yy_start )
298: yy_start = 1; /* first start state */
299:
300: if ( ! yyin )
301: yyin = stdin;
302:
303: if ( ! yyout )
304: yyout = stdout;
305:
306: if ( yy_current_buffer )
307: yy_init_buffer( yy_current_buffer, yyin );
308: else
309: yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE );
310:
311: yy_load_buffer_state();
312:
313: yy_init = 0;
314: }
315:
316: while ( 1 ) /* loops until end-of-file is reached */
317: {
318: %% yymore()-related code goes here
319: yy_cp = yy_c_buf_p;
320:
321: /* support of yytext */
322: *yy_cp = yy_hold_char;
323:
324: /* yy_bp points to the position in yy_ch_buf of the start of the
325: * current run.
326: */
327: yy_bp = yy_cp;
328:
329: %% code to set up and find next match goes here
330:
331: yy_find_action:
332: %% code to find the action number goes here
333:
334: YY_DO_BEFORE_ACTION;
335: YY_USER_ACTION;
336:
337: do_action: /* this label is used only to access EOF actions */
338:
339: %% debug code goes here
340:
341: switch ( yy_act )
342: {
343: %% actions go here
344:
345: case YY_END_OF_BUFFER:
346: {
347: /* amount of text matched not including the EOB char */
348: int yy_amount_of_matched_text = yy_cp - yytext - 1;
349:
350: /* undo the effects of YY_DO_BEFORE_ACTION */
351: *yy_cp = yy_hold_char;
352:
353: /* note that here we test for yy_c_buf_p "<=" to the position
354: * of the first EOB in the buffer, since yy_c_buf_p will
355: * already have been incremented past the NUL character
356: * (since all states make transitions on EOB to the end-
357: * of-buffer state). Contrast this with the test in yyinput().
358: */
359: if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] )
360: /* this was really a NUL */
361: {
362: yy_state_type yy_next_state;
363:
364: yy_c_buf_p = yytext + yy_amount_of_matched_text;
365:
366: yy_current_state = yy_get_previous_state();
367:
368: /* okay, we're now positioned to make the
369: * NUL transition. We couldn't have
370: * yy_get_previous_state() go ahead and do it
371: * for us because it doesn't know how to deal
372: * with the possibility of jamming (and we
373: * don't want to build jamming into it because
374: * then it will run more slowly)
375: */
376:
377: yy_next_state = yy_try_NUL_trans( yy_current_state );
378:
379: yy_bp = yytext + YY_MORE_ADJ;
380:
381: if ( yy_next_state )
382: {
383: /* consume the NUL */
384: yy_cp = ++yy_c_buf_p;
385: yy_current_state = yy_next_state;
386: goto yy_match;
387: }
388:
389: else
390: {
391: %% code to do backtracking for compressed tables and set up yy_cp goes here
392: goto yy_find_action;
393: }
394: }
395:
396: else switch ( yy_get_next_buffer() )
397: {
398: case EOB_ACT_END_OF_FILE:
399: {
400: yy_did_buffer_switch_on_eof = 0;
401:
402: if ( yywrap() )
403: {
404: /* note: because we've taken care in
405: * yy_get_next_buffer() to have set up yytext,
406: * we can now set up yy_c_buf_p so that if some
407: * total hoser (like flex itself) wants
408: * to call the scanner after we return the
409: * YY_NULL, it'll still work - another YY_NULL
410: * will get returned.
411: */
412: yy_c_buf_p = yytext + YY_MORE_ADJ;
413:
414: yy_act = YY_STATE_EOF((yy_start - 1) / 2);
415: goto do_action;
416: }
417:
418: else
419: {
420: if ( ! yy_did_buffer_switch_on_eof )
421: YY_NEW_FILE;
422: }
423: }
424: break;
425:
426: case EOB_ACT_CONTINUE_SCAN:
427: yy_c_buf_p = yytext + yy_amount_of_matched_text;
428:
429: yy_current_state = yy_get_previous_state();
430:
431: yy_cp = yy_c_buf_p;
432: yy_bp = yytext + YY_MORE_ADJ;
433: goto yy_match;
434:
435: case EOB_ACT_LAST_MATCH:
436: yy_c_buf_p =
437: &yy_current_buffer->yy_ch_buf[yy_n_chars];
438:
439: yy_current_state = yy_get_previous_state();
440:
441: yy_cp = yy_c_buf_p;
442: yy_bp = yytext + YY_MORE_ADJ;
443: goto yy_find_action;
444: }
445: break;
446: }
447:
448: default:
449: #ifdef FLEX_DEBUG
450: printf( "action # %d\n", yy_act );
451: #endif
452: YY_FATAL_ERROR(
453: "fatal flex scanner internal error--no action found" );
454: }
455: }
456: }
457:
458:
459: /* yy_get_next_buffer - try to read in a new buffer
460: *
461: * synopsis
462: * int yy_get_next_buffer();
463: *
464: * returns a code representing an action
465: * EOB_ACT_LAST_MATCH -
466: * EOB_ACT_CONTINUE_SCAN - continue scanning from current position
467: * EOB_ACT_END_OF_FILE - end of file
468: */
469:
470: static int yy_get_next_buffer()
471:
472: {
473: register YY_CHAR *dest = yy_current_buffer->yy_ch_buf;
474: register YY_CHAR *source = yytext - 1; /* copy prev. char, too */
475: register int number_to_move, i;
476: int ret_val;
477:
478: if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] )
479: YY_FATAL_ERROR(
480: "fatal flex scanner internal error--end of buffer missed" );
481:
482: /* try to read more data */
483:
484: /* first move last chars to start of buffer */
485: number_to_move = yy_c_buf_p - yytext;
486:
487: for ( i = 0; i < number_to_move; ++i )
488: *(dest++) = *(source++);
489:
490: if ( yy_current_buffer->yy_eof_status != EOF_NOT_SEEN )
491: /* don't do the read, it's not guaranteed to return an EOF,
492: * just force an EOF
493: */
494: yy_n_chars = 0;
495:
496: else
497: {
498: int num_to_read = yy_current_buffer->yy_buf_size - number_to_move - 1;
499:
500: if ( num_to_read > YY_READ_BUF_SIZE )
501: num_to_read = YY_READ_BUF_SIZE;
502:
503: else if ( num_to_read <= 0 )
504: YY_FATAL_ERROR( "fatal error - scanner input buffer overflow" );
505:
506: /* read in more data */
507: YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]),
508: yy_n_chars, num_to_read );
509: }
510:
511: if ( yy_n_chars == 0 )
512: {
513: if ( number_to_move == 1 )
514: {
515: ret_val = EOB_ACT_END_OF_FILE;
516: yy_current_buffer->yy_eof_status = EOF_DONE;
517: }
518:
519: else
520: {
521: ret_val = EOB_ACT_LAST_MATCH;
522: yy_current_buffer->yy_eof_status = EOF_PENDING;
523: }
524: }
525:
526: else
527: ret_val = EOB_ACT_CONTINUE_SCAN;
528:
529: yy_n_chars += number_to_move;
530: yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR;
531: yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
532:
533: /* yytext begins at the second character in yy_ch_buf; the first
534: * character is the one which preceded it before reading in the latest
535: * buffer; it needs to be kept around in case it's a newline, so
536: * yy_get_previous_state() will have with '^' rules active
537: */
538:
539: yytext = &yy_current_buffer->yy_ch_buf[1];
540:
541: return ( ret_val );
542: }
543:
544:
545: /* yy_get_previous_state - get the state just before the EOB char was reached
546: *
547: * synopsis
548: * yy_state_type yy_get_previous_state();
549: */
550:
551: static yy_state_type yy_get_previous_state()
552:
553: {
554: register yy_state_type yy_current_state;
555: register YY_CHAR *yy_cp;
556:
557: %% code to get the start state into yy_current_state goes here
558:
559: for ( yy_cp = yytext + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp )
560: {
561: %% code to find the next state goes here
562: }
563:
564: return ( yy_current_state );
565: }
566:
567:
568: /* yy_try_NUL_trans - try to make a transition on the NUL character
569: *
570: * synopsis
571: * next_state = yy_try_NUL_trans( current_state );
572: */
573:
574: #ifdef YY_USE_PROTOS
575: static yy_state_type yy_try_NUL_trans( register yy_state_type yy_current_state )
576: #else
577: static yy_state_type yy_try_NUL_trans( yy_current_state )
578: register yy_state_type yy_current_state;
579: #endif
580:
581: {
582: register int yy_is_jam;
583: %% code to find the next state, and perhaps do backtracking, goes here
584:
585: return ( yy_is_jam ? 0 : yy_current_state );
586: }
587:
588:
589: #ifdef YY_USE_PROTOS
590: static void yyunput( YY_CHAR c, register YY_CHAR *yy_bp )
591: #else
592: static void yyunput( c, yy_bp )
593: YY_CHAR c;
594: register YY_CHAR *yy_bp;
595: #endif
596:
597: {
598: register YY_CHAR *yy_cp = yy_c_buf_p;
599:
600: /* undo effects of setting up yytext */
601: *yy_cp = yy_hold_char;
602:
603: if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
604: { /* need to shift things up to make room */
605: register int number_to_move = yy_n_chars + 2; /* +2 for EOB chars */
606: register YY_CHAR *dest =
607: &yy_current_buffer->yy_ch_buf[yy_current_buffer->yy_buf_size + 2];
608: register YY_CHAR *source =
609: &yy_current_buffer->yy_ch_buf[number_to_move];
610:
611: while ( source > yy_current_buffer->yy_ch_buf )
612: *--dest = *--source;
613:
614: yy_cp += dest - source;
615: yy_bp += dest - source;
616: yy_n_chars = yy_current_buffer->yy_buf_size;
617:
618: if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
619: YY_FATAL_ERROR( "flex scanner push-back overflow" );
620: }
621:
622: if ( yy_cp > yy_bp && yy_cp[-1] == '\n' )
623: yy_cp[-2] = '\n';
624:
625: *--yy_cp = c;
626:
627: /* note: the formal parameter *must* be called "yy_bp" for this
628: * macro to now work correctly
629: */
630: YY_DO_BEFORE_ACTION; /* set up yytext again */
631: }
632:
633:
634: #ifdef __cplusplus
635: static int yyinput()
636: #else
637: static int input()
638: #endif
639:
640: {
641: int c;
642: YY_CHAR *yy_cp = yy_c_buf_p;
643:
644: *yy_cp = yy_hold_char;
645:
646: if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
647: {
648: /* yy_c_buf_p now points to the character we want to return.
649: * If this occurs *before* the EOB characters, then it's a
650: * valid NUL; if not, then we've hit the end of the buffer.
651: */
652: if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] )
653: /* this was really a NUL */
654: *yy_c_buf_p = '\0';
655:
656: else
657: { /* need more input */
658: yytext = yy_c_buf_p;
659: ++yy_c_buf_p;
660:
661: switch ( yy_get_next_buffer() )
662: {
663: case EOB_ACT_END_OF_FILE:
664: {
665: if ( yywrap() )
666: {
667: yy_c_buf_p = yytext + YY_MORE_ADJ;
668: return ( EOF );
669: }
670:
671: YY_NEW_FILE;
672:
673: #ifdef __cplusplus
674: return ( yyinput() );
675: #else
676: return ( input() );
677: #endif
678: }
679: break;
680:
681: case EOB_ACT_CONTINUE_SCAN:
682: yy_c_buf_p = yytext + YY_MORE_ADJ;
683: break;
684:
685: case EOB_ACT_LAST_MATCH:
686: #ifdef __cplusplus
687: YY_FATAL_ERROR( "unexpected last match in yyinput()" );
688: #else
689: YY_FATAL_ERROR( "unexpected last match in input()" );
690: #endif
691: }
692: }
693: }
694:
695: c = *yy_c_buf_p;
696: yy_hold_char = *++yy_c_buf_p;
697:
698: return ( c );
699: }
700:
701:
702: #ifdef YY_USE_PROTOS
703: void yyrestart( FILE *input_file )
704: #else
705: void yyrestart( input_file )
706: FILE *input_file;
707: #endif
708:
709: {
710: yy_init_buffer( yy_current_buffer, input_file );
711: yy_load_buffer_state();
712: }
713:
714:
715: #ifdef YY_USE_PROTOS
716: void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
717: #else
718: void yy_switch_to_buffer( new_buffer )
719: YY_BUFFER_STATE new_buffer;
720: #endif
721:
722: {
723: if ( yy_current_buffer == new_buffer )
724: return;
725:
726: if ( yy_current_buffer )
727: {
728: /* flush out information for old buffer */
729: *yy_c_buf_p = yy_hold_char;
730: yy_current_buffer->yy_buf_pos = yy_c_buf_p;
731: yy_current_buffer->yy_n_chars = yy_n_chars;
732: }
733:
734: yy_current_buffer = new_buffer;
735: yy_load_buffer_state();
736:
737: /* we don't actually know whether we did this switch during
738: * EOF (yywrap()) processing, but the only time this flag
739: * is looked at is after yywrap() is called, so it's safe
740: * to go ahead and always set it.
741: */
742: yy_did_buffer_switch_on_eof = 1;
743: }
744:
745:
746: #ifdef YY_USE_PROTOS
747: void yy_load_buffer_state( void )
748: #else
749: void yy_load_buffer_state()
750: #endif
751:
752: {
753: yy_n_chars = yy_current_buffer->yy_n_chars;
754: yytext = yy_c_buf_p = yy_current_buffer->yy_buf_pos;
755: yyin = yy_current_buffer->yy_input_file;
756: yy_hold_char = *yy_c_buf_p;
757: }
758:
759:
760: #ifdef YY_USE_PROTOS
761: YY_BUFFER_STATE yy_create_buffer( FILE *file, int size )
762: #else
763: YY_BUFFER_STATE yy_create_buffer( file, size )
764: FILE *file;
765: int size;
766: #endif
767:
768: {
769: YY_BUFFER_STATE b;
770:
771: b = (YY_BUFFER_STATE) malloc( sizeof( struct yy_buffer_state ) );
772:
773: if ( ! b )
774: YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
775:
776: b->yy_buf_size = size;
777:
778: /* yy_ch_buf has to be 2 characters longer than the size given because
779: * we need to put in 2 end-of-buffer characters.
780: */
781: b->yy_ch_buf = (YY_CHAR *) malloc( (unsigned) (b->yy_buf_size + 2) );
782:
783: if ( ! b->yy_ch_buf )
784: YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
785:
786: yy_init_buffer( b, file );
787:
788: return ( b );
789: }
790:
791:
792: #ifdef YY_USE_PROTOS
793: void yy_delete_buffer( YY_BUFFER_STATE b )
794: #else
795: void yy_delete_buffer( b )
796: YY_BUFFER_STATE b;
797: #endif
798:
799: {
800: if ( b == yy_current_buffer )
801: yy_current_buffer = (YY_BUFFER_STATE) 0;
802:
803: free( (char *) b->yy_ch_buf );
804: free( (char *) b );
805: }
806:
807:
808: #ifdef YY_USE_PROTOS
809: void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
810: #else
811: void yy_init_buffer( b, file )
812: YY_BUFFER_STATE b;
813: FILE *file;
814: #endif
815:
816: {
817: b->yy_input_file = file;
818:
819: /* we put in the '\n' and start reading from [1] so that an
820: * initial match-at-newline will be true.
821: */
822:
823: b->yy_ch_buf[0] = '\n';
824: b->yy_n_chars = 1;
825:
826: /* we always need two end-of-buffer characters. The first causes
827: * a transition to the end-of-buffer state. The second causes
828: * a jam in that state.
829: */
830: b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
831: b->yy_ch_buf[2] = YY_END_OF_BUFFER_CHAR;
832:
833: b->yy_buf_pos = &b->yy_ch_buf[1];
834:
835: b->yy_eof_status = EOF_NOT_SEEN;
836: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.