- Spacing_result best = space_systems_on_best_pages (0, first_page_num);
- page_count = best.systems_per_page_.size ();
- best_division = ideal_line_division;
-
- for (vsize i = 0; i < page_count; i++)
- ideal_sys_count += best.systems_per_page_[i];
-
- min_sys_count = ideal_sys_count - best.systems_per_page_.back ();
- if (page_count > 1)
- min_sys_count -= best.systems_per_page_[page_count - 2];
+ Page_spacing_result best;
+ vsize page_count = robust_scm2int (forced_page_count, 1);
+ Line_division ideal_line_division = current_configuration (0);
+ Line_division best_division = ideal_line_division;
+ vsize min_sys_count = 1;
+ vsize ideal_sys_count = system_count ();
+
+ if (!scm_is_integer (forced_page_count))
+ {
+ /* find out the ideal number of pages */
+ message (_ ("Finding the ideal number of pages..."));
+
+ best = space_systems_on_best_pages (0, first_page_num);
+ page_count = best.systems_per_page_.size ();
+
+ ideal_sys_count = best.system_count ();
+ min_sys_count = ideal_sys_count - best.systems_per_page_.back ();
+
+ if (page_count > 1 && best.systems_per_page_[page_count - 2] > 1)
+ min_sys_count -= best.systems_per_page_[page_count - 2];
+
+ min_sys_count = max (min_sys_count, (vsize)1);
+ }
+ else
+ {
+ /* todo: the following line will spit out programming errors if the
+ ideal line spacing doesn't fit on PAGE_COUNT pages */
+ best = space_systems_on_n_pages (0, page_count, first_page_num);
+ min_sys_count = page_count;
+ }