+void
+Paper_book::add_performance (SCM s)
+{
+ performances_ = scm_cons (s, performances_);
+}
+
+void
+Paper_book::output_aux (SCM output_channel,
+ bool is_last,
+ int *first_page_number,
+ int *first_performance_number)
+{
+ 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 = scm_reverse (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)));
+ pbookpart->output_aux (output_channel,
+ is_last_part,
+ first_page_number,
+ first_performance_number);
+ }
+ }
+ else
+ {
+ if (scores_ == SCM_EOL)
+ return;
+ 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. */
+ *first_page_number += scm_ilength (pages ());
+ }
+}
+
+void
+Paper_book::output (SCM output_channel)
+{
+ int first_page_number = robust_scm2int (paper_->c_variable ("first-page-number"), 1);
+ int first_performance_number = 0;
+ output_aux (output_channel,
+ true,
+ &first_page_number,
+ &first_performance_number);