+#elif LEX_SECTION == 3
+
+int yywrap()
+{
+ return 1;
+}
+
+static void free_conv_buffers()
+{
+ free_conv_buffer(ptr_buffer);
+ free_conv_buffer(tag_buffer);
+ free_conv_buffer(str_buffer);
+}
+
+static void yylex_cleanup()
+{
+ /* fix memory leak in lex */
+ yy_delete_buffer(yy_current_buffer);
+ yy_current_buffer = NULL;
+ free_conv_buffers();
+}
+
+static void init_conv_buffers()
+{
+ if (!ptr_buffer) {
+ ptr_buffer = create_conv_buffer(INITIAL_PTR_BUFFER_LEN);
+ tag_buffer = create_conv_buffer(INITIAL_TAG_BUFFER_LEN);
+ str_buffer = create_conv_buffer(INITIAL_STR_BUFFER_LEN);
+ }
+}
+
+static int exitfuncregistered = 0;
+
+void yymyinit(FILE *f)
+{
+ if (! exitfuncregistered && atexit(yylex_cleanup) == 0)
+ exitfuncregistered = 1;
+ init_conv_buffers();
+ yyin = f;
+ yyrestart(f);
+ /* Reset our state */
+ current_level = -1;
+ level_diff = MAXGEDCLEVEL;
+ BEGIN(INITIAL);
+}
+
+#endif