+SCM
+dump_fields ()
+{
+ SCM fields = SCM_EOL;
+ for (vsize i = dump_header_fieldnames_global.size (); i--;)
+ fields
+ = scm_cons (ly_symbol2scm (dump_header_fieldnames_global[i].c_str ()),
+ fields);
+ return fields;
+}
+
+void
+Paper_book::add_score (SCM s)
+{
+ scores_ = scm_cons (s, scores_);
+}
+
+void
+Paper_book::add_bookpart (SCM p)
+{
+ bookparts_ = scm_cons (p, bookparts_);
+}
+
+void
+Paper_book::add_performance (SCM s)
+{
+ performances_ = scm_cons (s, performances_);
+}
+
+int
+Paper_book::output_aux (SCM output_channel,
+ bool is_last,
+ int *first_page_number,
+ int *first_performance_number)
+{
+ int page_nb = 0;
+ if (scm_is_pair (performances_))
+ {
+ SCM proc = ly_lily_module_constant ("write-performances-midis");
+
+ scm_call_3 (proc,
+ performances (),
+ output_channel,
+ scm_long2num (*first_performance_number));
+ *first_performance_number += scm_ilength (performances_);
+ }
+
+ if (scm_is_pair (bookparts_))
+ {
+ for (SCM p = bookparts_; scm_is_pair (p); p = scm_cdr (p))
+ if (Paper_book *pbookpart = unsmob_paper_book (scm_car (p)))
+ {
+ bool is_last_part = (is_last && !scm_is_pair (scm_cdr (p)));
+ page_nb += pbookpart->output_aux (output_channel,
+ is_last_part,
+ first_page_number,
+ first_performance_number);
+ }
+ }
+ else
+ {
+ if (scores_ == SCM_EOL)
+ return 0;
+ paper_->set_variable (ly_symbol2scm ("first-page-number"),
+ scm_long2num (*first_page_number));
+ paper_->set_variable (ly_symbol2scm ("is-last-bookpart"),
+ ly_bool2scm (is_last));
+ /* Generate all stencils to trigger font loads. */
+ page_nb = scm_ilength (pages ());
+ *first_page_number += page_nb;
+ }
+ return page_nb;
+}