- void generate_page_dispatch(std::ostream & file, int indent,
- int first_page, int last_page)
- {
- if (first_page == 1 && last_page == 1)
- {
- // The dispatch code is *on* page 1 so we must not dispatch to
- // page 1 since that would cause an infinite loop. This case
- // should be unreachable if there is more than one page due
- // to the following case.
- }
- else if (first_page == 1 && last_page == 2)
- {
- // dvdauthor doesn't allow empty blocks or null statements so
- // when selecting between pages 1 and 2 we don't use an "else"
- // part. We must use braces so that a following "else" will
- // match the right "if".
- file << std::setw(indent) << "" << "{\n"
- << std::setw(indent) << "" << "if (g0 eq 2)\n"
- << std::setw(indent + 2) << "" << "jump menu 2;\n"
- << std::setw(indent) << "" << "}\n";
- }
- else if (first_page == last_page)
- {
- file << std::setw(indent) << ""
- << "jump menu " << first_page << ";\n";
- }
- else
- {
- int middle = (first_page + last_page) / 2;
- file << std::setw(indent) << "" << "if (g0 le " << middle << ")\n";
- generate_page_dispatch(file, indent + 2, first_page, middle);
- file << std::setw(indent) << "" << "else\n";
- generate_page_dispatch(file, indent + 2, middle + 1, last_page);
- }
- }
-