+/* Define the muscle for the %define variable VARIABLE appearing at
+ VARIABLE_LOC in the grammar file with value VALUE. Warn if VARIABLE is
+ already defined. Record this as a grammar occurrence of VARIABLE by
+ invoking muscle_user_name_list_grow. */
+void muscle_percent_define_insert (char const *variable, location variable_loc,
+ char const *value);
+
+/* Mimic b4_percent_define_get in ../data/bison.m4 exactly. That is, if the
+ %define variable VARIABLE is defined, return its value. Otherwise, return
+ the empty string. Also, record Bison's usage of VARIABLE by defining
+ b4_percent_define_bison_variables(VARIABLE). The caller is responsible for
+ freeing the memory of the returned string. */
+char *muscle_percent_define_get (char const *variable);
+
+/* Mimic b4_percent_define_ifdef in ../data/bison.m4 exactly. That is, if the
+ %define variable VARIABLE is defined, return true. Otherwise, return false.
+ Also, record Bison's usage of VARIABLE by defining
+ b4_percent_define_bison_variables(VARIABLE). */
+bool muscle_percent_define_ifdef (char const *variable);
+
+/* Mimic b4_percent_define_flag_if in ../data/bison.m4 exactly. That is, if
+ the %define variable VARIABLE is defined to "" or "true", return true. If
+ it is defined to "false", return false. Complain if it is undefined (a
+ Bison error since the default value should have been set already) or defined
+ to any other value (possibly a user error). Also, record Bison's usage of
+ VARIABLE by defining b4_percent_define_bison_variables(VARIABLE). */
+bool muscle_percent_define_flag_if (char const *variable);
+
+/* Mimic b4_percent_define_default in ../data/bison.m4 exactly. That is, if
+ the %define variable VARIABLE is undefined, set its value to VALUE.
+ Don't record this as a Bison usage of VARIABLE as there's no reason to
+ suspect that the value has yet influenced the output. */
+void muscle_percent_define_default (char const *variable, char const *value);
+
+/* VALUES points to a sequence of strings that is partitioned into
+ subsequences by NULL's, one terminating each subsequence. The last
+ subsequence is followed by a second NULL. For each subsequence, the first
+ string is the name of a %define variable, and all remaining strings in that
+ subsequence are the valid values for that variable. Complain if such a
+ variable is undefined (a Bison error since the default value should have
+ been set already) or defined to any other value (possibly a user error).
+ Don't record this as a Bison usage of the variable as there's no reason to
+ suspect that the value has yet influenced the output. */
+void muscle_percent_define_check_values (char const * const *values);
+
+/* Grow the muscle for the %code qualifier QUALIFIER appearing at QUALIFIER_LOC
+ in the grammar file with code CODE appearing at CODE_LOC. Record this as a
+ grammar occurrence of VARIABLE by invoking muscle_user_name_list_grow. */
+void muscle_percent_code_grow (char const *qualifier, location qualifier_loc,
+ char const *code, location code_loc);
+
+void muscles_m4_output (FILE *out);
+