+ /* Still set to -3 ? If so, that probably means that there are no new messages,
+ * so we'll go to the *end* of the final page.
+ */
+ if (BBS->requested_page == (-3)) {
+ if (BBS->num_msgs == 0) {
+ BBS->requested_page = 0;
+ }
+ else {
+ BBS->requested_page = BBS->num_pages - 1;
+ }
+ }
+
+ /* 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");
+ 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);
+ }
+ if (
+ (i == (BBS->num_msgs - 1))
+ && (BBS->msgs[i] <= BBS->lastseen)
+ ) {
+ /* no new messages */
+ do_template("no_new_msgs");
+ 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\">");
+ wc_printf(_("Go to page: "));
+
+ 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?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");
+ }
+ }
+
+ return(0);