PROFILE_ARGS= --with-gprof
endif
ifneq (,$(findstring debug,$(DEB_BUILD_OPTIONS)))
- CFLAGS += -O0 -ggdb -rdynamic -MD -MP -D TECH_PREVIEW
+ CFLAGS += -O0 -ggdb -rdynamic -MD -MP -D TECH_PREVIEW -pedantic
LDFLAGS += -pg
EXTRA_ARGS = --with-backtrace
else
}
-void DrawMessageDropdown(StrBuf *Selector, long maxmsgs, long startmsg)
+long DrawMessageDropdown(StrBuf *Selector, long maxmsgs, long startmsg)
{
StrBuf *TmpBuf;
wcsession *WCC = WC;
int lo, hi, n;
int i = 0;
long StartMsg = 0;
+ long ret;
void *vMsg;
long hklen;
const char *key;
int nItems;
HashPos *At;
long vector[16];
- int nMessages = DEFAULT_MAXMSGS;
+ int nMessages = (lbstr("SortOrder") == 1)? DEFAULT_MAXMSGS : -DEFAULT_MAXMSGS;
TmpBuf = NewStrBuf();
- At = GetNewHashPos(WCC->summ, (lbstr("SortOrder") == 1)? -nMessages : nMessages);
+ At = GetNewHashPos(WCC->summ, nMessages);
nItems = GetCount(WCC->summ);
-
+ ret = abs(nMessages);
vector[0] = 7;
vector[1] = startmsg;
vector[2] = maxmsgs;
while (!done) {
lo = GetHashPosCounter(At);
- if (lo + nMessages > nItems) {
- hi = nItems;
- }
- else {
- hi = lo + nMessages;
+ if (nMessages > 0) {
+ if (lo + nMessages > nItems) {
+ hi = nItems;
+ }
+ else {
+ hi = lo + nMessages;
+ }
+ } else {
+ if (lo + nMessages <= 0) {
+ hi = 1;
+ }
+ else {
+ if (lo % abs(nMessages) != 0)
+ hi = lo + (lo % abs(nMessages) *
+ (nMessages / abs(nMessages)));
+ else
+ hi = lo + nMessages;
+ }
}
done = !GetNextHashPos(WCC->summ, At, &hklen, &key, &vMsg);
Msg = (message_summary*) vMsg;
n = (Msg==NULL)? 0 : Msg->msgnum;
if (i == 0)
StartMsg = n;
- vector[4] = lo;
+ if ((vector[1] == n) && (lo - hi + 1 != nMessages)) {
+ ret = abs(lo - hi + 1);
+ }
+ vector[4] = lo + 1;
vector[5] = hi;
vector[6] = n;
FlushStrBuf(TmpBuf);
+ dbg_print_longvector(vector);
DoTemplate(HKEY("select_messageindex"), TmpBuf, &vector, CTX_LONGVECTOR);
StrBufAppendBuf(Selector, TmpBuf, 0);
i++;
FlushStrBuf(TmpBuf);
vector[1] = lbstr("maxmsgs") == 9999999;
vector[2] = 0;
+ dbg_print_longvector(vector);
DoTemplate(HKEY("select_messageindex_all"), TmpBuf, &vector, CTX_LONGVECTOR);
StrBufAppendBuf(Selector, TmpBuf, 0);
FreeStrBuf(&TmpBuf);
DeleteHashPos(&At);
+ return ret;
}
void load_seen_flags(void)
}
if (is_bbview) {
+ SetAccessCommand(oper);
if (havebstr("SortOrder")) {
bbs_reverse = lbstr("SortOrder") == 2;
}
BBViewToolBar = NewStrBuf();
MessageDropdown = NewStrBuf();
- DrawMessageDropdown(MessageDropdown, maxmsgs, startmsg);
+ maxmsgs = DrawMessageDropdown(MessageDropdown, maxmsgs, startmsg);
DoTemplate(HKEY("msg_listselector_top"), BBViewToolBar, MessageDropdown, CTX_STRBUF);
StrBufAppendBuf(WCC->WBuf, BBViewToolBar, 0);
if (lowest_displayed < 0) lowest_displayed = a;
highest_displayed = a;
- ++num_displayed;
+ num_displayed++;
}
}
}
+void SetAccessCommand(long Oper)
+{
+ wcsession *WCC = WC;
+ if (WCC->UrlFragment1 != NULL ) {
+ FlushStrBuf(WCC->UrlFragment1);
+ StrBufAppendBufPlain(WCC->UrlFragment1,
+ rlid[Oper].name.Key, rlid[Oper].name.len, 0);
+ }
+ else
+ WCC->UrlFragment1 = NewStrBufPlain(rlid[Oper].name.Key, rlid[Oper].name.len);
+}
UrlBuf = WCC->UrlFragment2;
else
UrlBuf = WCC->UrlFragment3;
+ if (UrlBuf == NULL) {
+ lprintf(1, "urlbuf [%s] not set. (in '%s' line %ld);[%s]\n",
+ Tokens->Params[0]->Start,
+ ChrPtr(Tokens->FileName),
+ Tokens->Line,
+ ChrPtr(Tokens->FlatToken));
+ StrBufAppendPrintf(
+ Target,
+ "<pre>\nurlbuf [%s] not set (in '%s' line %ld)\n[%s]\n</pre>\n",
+ Tokens->Params[0]->Start,
+ ChrPtr(Tokens->FileName),
+ Tokens->Line,
+ ChrPtr(Tokens->FlatToken));
+
+
+ }
StrBufAppendTemplate(Target, nArgs, Tokens, Context, ContextType,
- UrlBuf, 1);
+ UrlBuf, 2);
}
}
RegisterNamespace("ROOMNAME", 0, 1, tmplput_RoomName, 0);
WebcitAddUrlHandler(HKEY("knrooms"), knrooms, 0);
- WebcitAddUrlHandler(HKEY("gotonext"), _gotonext, 0);
- WebcitAddUrlHandler(HKEY("skip"), gotonext, 0);
- WebcitAddUrlHandler(HKEY("ungoto"), ungoto, 0);
- WebcitAddUrlHandler(HKEY("dotgoto"), dotgoto, 0);
- WebcitAddUrlHandler(HKEY("dotskip"), dotskip, 0);
+ WebcitAddUrlHandler(HKEY("gotonext"), _gotonext, NEED_URL);
+ WebcitAddUrlHandler(HKEY("skip"), gotonext, NEED_URL);
+ WebcitAddUrlHandler(HKEY("ungoto"), ungoto, NEED_URL);
+ WebcitAddUrlHandler(HKEY("dotgoto"), dotgoto, NEED_URL);
+ WebcitAddUrlHandler(HKEY("dotskip"), dotskip, NEED_URL);
WebcitAddUrlHandler(HKEY("display_private"), _display_private, 0);
- WebcitAddUrlHandler(HKEY("goto_private"), goto_private, 0);
+ WebcitAddUrlHandler(HKEY("goto_private"), goto_private, NEED_URL);
WebcitAddUrlHandler(HKEY("zapped_list"), zapped_list, 0);
WebcitAddUrlHandler(HKEY("display_zap"), display_zap, 0);
WebcitAddUrlHandler(HKEY("zap"), zap, 0);
</select>
<input type="radio" name="direction" value=""
- OnChange="location.href='<?URLPART(1)>?SortBy=date&SortOrder=2'"
+ OnChange="location.href='<?URLPART(0)>?SortBy=date&SortOrder=1'"
<?%("COND:BSTR", 1, "SortOrder", 1, "checked", "")>
>
<?_("oldest to newest")>
<input type="radio" name="direction" value=""
- OnChange="location.href='<?URLPART(1)>?SortBy=date&SortOrder=1'"
- <?%("COND:BSTR", 1, "SortOrder", 1, "", "checked")>
+ OnChange="location.href='<?URLPART(0)>?SortBy=date&SortOrder=2'"
+ <?%("COND:BSTR", 1, "SortOrder", 2, "checked", "")>
>
<?_("newest to oldest")>
</p>
</select>
<input type="radio" name="direction" value=""
- OnChange="location.href='<?URLPART(1)>?SortBy=date&SortOrder=1'"
+ OnChange="location.href='<?URLPART(0)>?SortBy=date&SortOrder=1'"
<?%("COND:BSTR", 1, "SortOrder", 1, "checked", "")>
>
<?_("oldest to newest")>
<input type="radio" name="direction" value=""
- OnChange="location.href='<?URLPART(1)>?SortBy=date&SortOrder=2'"
+ OnChange="location.href='<?URLPART(0)>?SortBy=date&SortOrder=2'"
<?%("COND:BSTR", 1, "SortOrder", 2, "checked", "")>
>
<?_("newest to oldest")>
}
}
+void dbg_print_longvector(long *LongVector)
+{
+ StrBuf *Buf = NewStrBufPlain(HKEY("Longvector: ["));
+ int nItems = LongVector[0];
+ int i;
+
+ for (i = 0; i < nItems; i++) {
+ if (i + 1 < nItems)
+ StrBufAppendPrintf(Buf, "%d: %ld | ", i, LongVector[i]);
+ else
+ StrBufAppendPrintf(Buf, "%d: %ld]\n", i, LongVector[i]);
+ }
+ lprintf(1, ChrPtr(Buf));
+ FreeStrBuf(&Buf);
+}
int ConditionalLongVector(WCTemplateToken *Tokens, void *Context, int ContextType)
{
CompareFunc Reverse,
long ContextType);
+void dbg_print_longvector(long *LongVector);
/*
* \brief Values for wcs_type
ConstStr name;
readloop_servcmd cmd;
} readloop_struct;
+void SetAccessCommand(long Oper);
void readloop(long oper);
int read_message(StrBuf *Target, const char *tmpl, long tmpllen, long msgnum, int printable_view, const StrBuf *section);
void do_addrbook_view(addrbookent *addrbook, int num_ab);