+ /* keep the requested page within bounds */
+ if (BBS->requested_page < 0) BBS->requested_page = 0;
+ if (BBS->requested_page >= BBS->num_pages) BBS->requested_page = BBS->num_pages - 1;
+
+ start_index = BBS->requested_page * Stat->maxmsgs;
+ if (start_index < 0) start_index = 0;
+ end_index = start_index + Stat->maxmsgs - 1;
+
+ for (seq = 0; seq < 3; ++seq) { /* cheap & sleazy way of rendering the page numbers twice */
+
+ if ( (seq == 1) && (Stat->nummsgs > 0)) {
+ /* display the selected range of messages */
+
+ for (i=start_index; (i<=end_index && i<BBS->num_msgs); ++i) {
+ if (
+ (BBS->msgs[i] > BBS->lastseen)
+ && ( (i == 0) || (BBS->msgs[i-1] <= BBS->lastseen) )
+ ) {
+ /* new messages start here */
+ do_template("start_of_new_msgs");
+ if (!go_to_the_very_end) {
+ StrBufAppendPrintf(WC->trailing_javascript, "location.href=\"#newmsgs\";\n");
+ }
+ }
+ if (BBS->msgs[i] > 0L) {
+ read_message(WC->WBuf, HKEY("view_message"), BBS->msgs[i], NULL, &Mime, NULL);
+ }
+ if (
+ (i == (BBS->num_msgs - 1))
+ && (BBS->msgs[i] <= BBS->lastseen)
+ ) {
+ /* no new messages */
+ do_template("no_new_msgs");
+ if (!go_to_the_very_end) {
+ StrBufAppendPrintf(WC->trailing_javascript, "location.href=\"#nonewmsgs\";\n");
+ }
+ }
+ }
+ }
+
+ else if ( (seq == 0) || (seq == 2) ) {
+ int first;
+ int last;
+ /* Display the selecto-bar with the page numbers */
+
+ wc_printf("<div class=\"moreprompt\">");
+ if (seq == 2) {
+ wc_printf("<a name=\"end_of_msgs\">");
+ }
+ wc_printf(_("Go to page: "));
+ if (seq == 2) {
+ wc_printf("</a>");
+ }
+
+ first = 0;
+ last = BBS->num_pages - 1;
+
+ for (i=0; i<=last; ++i) {
+
+ if (
+ (i == first)
+ || (i == last)
+ || (i == BBS->requested_page)
+ || (
+ ((BBS->requested_page - i) < RANGE)
+ && ((BBS->requested_page - i) > (0 - RANGE))
+ )
+ ) {
+
+ if (
+ (i == last)
+ && (last - BBS->requested_page > RANGE)
+ ) {
+ wc_printf("... ");
+ }
+ if (i == BBS->requested_page) {
+ wc_printf("[");
+ }
+ else {
+ wc_printf("<a href=\"readfwd?go=");
+ urlescputs(ChrPtr(WC->CurRoom.name));
+ wc_printf("?start_reading_at=%ld\">",
+ BBS->msgs[i*Stat->maxmsgs]
+ );
+ /* wc_printf("?page=%d\">", i); */
+ wc_printf("<span class=\"moreprompt_link\">");
+ }
+ if (
+ (i == first)
+ && (BBS->requested_page > (RANGE + 1))
+ ) {
+ wc_printf(_("First"));
+ }
+ else if (
+ (i == last)
+ && (last - BBS->requested_page > RANGE)
+ ) {
+ wc_printf(_("Last"));
+ }
+ else {
+ wc_printf("%d", i + 1); /* change to one-based for display */
+ }
+ if (i == BBS->requested_page) {
+ wc_printf("]");
+ }
+ else {
+ wc_printf("</span>");
+ wc_printf("</a>");
+ }
+ if (
+ (i == first)
+ && (BBS->requested_page > (RANGE + 1))
+ ) {
+ wc_printf(" ...");
+ }
+ if (i != last) {
+ wc_printf(" ");
+ }
+ }
+ }
+ wc_printf("</div>\n");
+ }
+ }
+
+ if (go_to_the_very_end) {
+ StrBufAppendPrintf(WC->trailing_javascript, "location.href=\"#end_of_msgs\";\n");
+ }