- skeleton = skeleton_find ("BISON_HAIRY", BISON_HAIRY);
- else
- skeleton = skeleton_find ("BISON_SIMPLE", BISON_SIMPLE);
- }
- fskel = xfopen (skeleton, "r");
-
- /* New output code. */
- line = 1;
- c = getc (fskel);
- while (c != EOF)
- {
- if (c != '%')
- {
- if (c == '\n')
- ++line;
- obstack_1grow (&table_obstack, c);
- c = getc (fskel);
- }
- else if ((c = getc (fskel)) == '%')
- {
- /* Read the muscle. */
- const char *muscle_key = 0;
- const char *muscle_value = 0;
- while (isalnum (c = getc (fskel)) || c == '_')
- obstack_1grow (&muscle_obstack, c);
- obstack_1grow (&muscle_obstack, 0);
-
- /* Output the right value, or see if it's something special. */
- muscle_key = obstack_finish (&muscle_obstack);
- muscle_value = muscle_find (muscle_key);
- if (muscle_value)
- obstack_sgrow (&table_obstack, muscle_value);
- else if (!strcmp (muscle_key, "line"))
- obstack_fgrow1 (&table_obstack, "%d", line + 1);
- else if (!strcmp (muscle_key, "action"))
- {
- size_t size = obstack_object_size (&action_obstack);
- obstack_grow (&table_obstack,
- obstack_finish (&action_obstack), size);
- }
- else
- {
- obstack_sgrow (&table_obstack, "%%");
- obstack_sgrow (&table_obstack, muscle_key);
- }
- }