+ VS = (bbsview_struct*) malloc(sizeof(bbsview_struct));
+ memset(VS, 0, sizeof(bbsview_struct));
+ *ViewSpecific = (void*)VS;
+ Stat->defaultsortorder = 1;
+ Stat->startmsg = -1;
+ Stat->sortit = 1;
+
+ rlid[oper].cmd(cmd, len);
+
+ if (havebstr("maxmsgs"))
+ Stat->maxmsgs = ibstr("maxmsgs");
+ if (Stat->maxmsgs == 0) Stat->maxmsgs = DEFAULT_MAXMSGS;
+
+ if (havebstr("startmsg")) {
+ Stat->startmsg = lbstr("startmsg");
+ }
+ if (lbstr("SortOrder") == 2) {
+ Stat->reverse = 1;
+ Stat->num_displayed = -DEFAULT_MAXMSGS;
+ }
+ else {
+ Stat->reverse = 0;
+ Stat->num_displayed = DEFAULT_MAXMSGS;
+ }
+
+ return 200;
+}
+
+int bbsview_PrintViewHeader(SharedMessageStatus *Stat, void **ViewSpecific)
+{
+ bbsview_struct *VS;
+ WCTemplputParams SubTP;
+
+ VS = (bbsview_struct*)*ViewSpecific;
+
+ VS->BBViewToolBar = NewStrBufPlain(NULL, SIZ);
+ VS->MessageDropdown = NewStrBufPlain(NULL, SIZ);
+
+ /*** startmsg->maxmsgs = **/DrawMessageDropdown(VS->MessageDropdown,
+ Stat->maxmsgs,
+ Stat->startmsg,
+ Stat->num_displayed,
+ Stat->lowest_found-1);
+ if (Stat->num_displayed < 0) {
+ Stat->startmsg += Stat->maxmsgs;
+ if (Stat->num_displayed != Stat->maxmsgs)
+ Stat->maxmsgs = abs(Stat->maxmsgs) + 1;
+ else
+ Stat->maxmsgs = abs(Stat->maxmsgs);
+
+ }
+ if (Stat->nummsgs > 0) {
+ memset(&SubTP, 0, sizeof(WCTemplputParams));
+ SubTP.Filter.ContextType = CTX_STRBUF;
+ SubTP.Context = VS->MessageDropdown;
+ DoTemplate(HKEY("msg_listselector_top"), VS->BBViewToolBar, &SubTP);
+ StrBufAppendBuf(WC->WBuf, VS->BBViewToolBar, 0);
+ FlushStrBuf(VS->BBViewToolBar);
+ }
+ return 200;
+}
+
+int bbsview_LoadMsgFromServer(SharedMessageStatus *Stat,
+ void **ViewSpecific,
+ message_summary* Msg,
+ int is_new,
+ int i)
+{
+ bbsview_struct *VS;
+
+ VS = (bbsview_struct*)*ViewSpecific;
+ if (VS->displayed_msgs == NULL) {
+ VS->displayed_msgs = malloc(sizeof(long) *
+ ((Stat->maxmsgs < Stat->nummsgs) ?
+ Stat->maxmsgs + 1 :
+ Stat->nummsgs + 1));
+ }
+ if ((i >= Stat->startmsg) && (i < Stat->startmsg + Stat->maxmsgs)) {
+ VS->displayed_msgs[Stat->num_displayed] = Msg->msgnum;
+ Stat->num_displayed++;
+ }
+ return 200;
+}
+
+
+int bbsview_RenderView_or_Tail(SharedMessageStatus *Stat,
+ void **ViewSpecific,
+ long oper)
+{
+ wcsession *WCC = WC;
+ bbsview_struct *VS;
+ WCTemplputParams SubTP;
+ const StrBuf *Mime;
+
+ VS = (bbsview_struct*)*ViewSpecific;
+ if (Stat->nummsgs == 0) {
+ wprintf("<div class=\"nomsgs\"><br><em>");
+ switch (oper) {
+ case readnew:
+ wprintf(_("No new messages."));
+ break;
+ case readold:
+ wprintf(_("No old messages."));
+ break;
+ default:
+ wprintf(_("No messages here."));
+ }
+ wprintf("</em><br></div>\n");