diff --git a/elogd.c b/elogd.c
index 4ec5d72e..c8c8d366 100755
--- a/elogd.c
+++ b/elogd.c
@@ -6,6 +6,9 @@
Contents: Web server program for Electronic Logbook ELOG
$Log$
+ Revision 2.80 2002/09/23 07:18:05 midas
+ 'Show last' xxx half finished
+
Revision 2.79 2002/09/16 08:27:20 midas
Fixed problem with Konqueror and 'Cancel'
@@ -5366,7 +5369,9 @@ int i;
break;
}
- rsprintf("\n");
+ rsprintf("\n");
+ rsprintf("\n", loc("Go"));
+
}
/*---- entry form ----*/
@@ -6246,14 +6251,46 @@ int msg_compare_reverse(const void *m1, const void *m2)
/*------------------------------------------------------------------*/
-void show_page_navigation(int n_msg, int page_n, int n_page)
+void build_ref(char *ref)
+{
+char *p1, *p2;
+
+ if (strchr(getparam("cmdline"), '?'))
+ strcat(ref, strchr(getparam("cmdline"), '?'));
+
+ /* eliminate old search */
+ if (strstr(ref, "cmd=Search&"))
+ strcpy(strstr(ref, "cmd=Search&"), strstr(ref, "cmd=Search&")+11);
+
+ if (isparam("last"))
+ {
+ /* eliminate old last= */
+ if ((p1 = strstr(ref, "last=")) != NULL)
+ {
+ for (p2 = p1+5 ; *p2 && isdigit(*p2) ; p2++);
+ strcpy(p1-1, p2);
+ }
+ sprintf(ref+strlen(ref), "&last=%s", getparam("last"));
+ }
+
+ /* replace first '&' by '?' if not present */
+ if (!strchr(ref, '?') && strchr(ref, '&'))
+ *strchr(ref, '&') = '?';
+}
+
+void show_page_navigation(int n_msg, int page_n, int n_page, BOOL top)
{
int i;
char ref[256];
- rsprintf("
\n",
+ if (!(page_n && n_msg > n_page) && !top)
+ return;
+
+ rsprintf("\n");
+ rsprintf("\n",
gt("Border width"), gt("Categories cellpadding"));
- rsprintf("| \n", gt("Menu1 Align"), gt("Menu1 BGColor"));
+
+ rsprintf(" | | \n", gt("Menu1 BGColor"));
rsprintf("");
@@ -6263,70 +6300,94 @@ char ref[256];
if (page_n > 1)
{
sprintf(ref, "page%d", page_n - 1);
- if (strstr(getparam("cmdline"), "cmd=Search&"))
- {
- strcat(ref, "?");
- strcat(ref, strstr(getparam("cmdline"), "cmd=Search&")+11);
- }
- else if (strchr(getparam("cmdline"), '?'))
- strcat(ref, strchr(getparam("cmdline"), '?'));
+ build_ref(ref);
+
rsprintf("Previous ", ref);
}
- for (i=0 ; i<(n_msg-1)/n_page+1 ; i++)
+ if (page_n && n_msg > n_page)
{
- sprintf(ref, "page%d", i+1);
- if (strstr(getparam("cmdline"), "cmd=Search&"))
+ for (i=0 ; i<(n_msg-1)/n_page+1 ; i++)
{
- strcat(ref, "?");
- strcat(ref, strstr(getparam("cmdline"), "cmd=Search&")+11);
- }
- else if (strchr(getparam("cmdline"), '?'))
- strcat(ref, strchr(getparam("cmdline"), '?'));
+ sprintf(ref, "page%d", i+1);
+ build_ref(ref);
- if (i == (n_msg-1)/n_page)
- {
- if (page_n == i+1)
- rsprintf("%d  ", i+1);
+ if (i == (n_msg-1)/n_page)
+ {
+ if (page_n == i+1)
+ rsprintf("%d  ", i+1);
+ else
+ rsprintf("%d  \n", ref, i+1);
+ }
else
- rsprintf("%d  \n", ref, i+1);
- }
- else
- {
- if (page_n == i+1)
- rsprintf("%d, ", i+1);
- else
- rsprintf("%d, \n", ref, i+1);
+ {
+ if (page_n == i+1)
+ rsprintf("%d, ", i+1);
+ else
+ rsprintf("%d, \n", ref, i+1);
+ }
}
}
if (page_n != -1 && page_n * n_page < n_msg)
{
sprintf(ref, "page%d", page_n + 1);
- if (strstr(getparam("cmdline"), "cmd=Search&"))
- {
- strcat(ref, "?");
- strcat(ref, strstr(getparam("cmdline"), "cmd=Search&")+11);
- }
- else if (strchr(getparam("cmdline"), '?'))
- strcat(ref, strchr(getparam("cmdline"), '?'));
+ build_ref(ref);
+
rsprintf("Next ", ref);
}
if (page_n != -1 && n_page < n_msg)
{
sprintf(ref, "page");
- if (strstr(getparam("cmdline"), "cmd=Search&"))
- {
- strcat(ref, "?");
- strcat(ref, strstr(getparam("cmdline"), "cmd=Search&")+11);
- }
- else if (strchr(getparam("cmdline"), '?'))
- strcat(ref, strchr(getparam("cmdline"), '?'));
+ build_ref(ref);
+
rsprintf("All\n", ref);
}
- rsprintf(" | | \n\n");
+ rsprintf("\n", gt("Menu1 BGColor"));
+
+ if (top)
+ {
+ i = atoi(getparam("last"));
+
+ rsprintf("%s \n", loc("Show last"));
+
+ rsprintf("\n");
+
+ rsprintf("\n", loc("Go"));
+ }
+
+ rsprintf(" | | |
\n\n");
}
/*------------------------------------------------------------------*/
@@ -6453,6 +6514,27 @@ time_t ltime, ltime_start, ltime_end, now;
struct tm tms, *ptms;
MSG_LIST *msg_list;
+ /* redirect if enpty parameters */
+ if (strstr(_cmdline, "=&"))
+ {
+ while (pt1 = strstr(_cmdline, "=&"))
+ {
+ pt2 = pt1+2;
+ while (*pt1 != '&' && *pt1 != '?')
+ pt1--;
+ strcpy(pt1+1, pt2);
+ }
+ if (_cmdline[strlen(_cmdline)-1] == '=')
+ {
+ pt1 = _cmdline+strlen(_cmdline)-1;
+ while (*pt1 != '&' && *pt1 != '?')
+ *pt1-- = 0;
+ *pt1 = 0;
+ }
+ redirect(_cmdline);
+ return;
+ }
+
printable = atoi(getparam("Printable"));
if (*getparam("Reverse"))
@@ -6464,9 +6546,10 @@ MSG_LIST *msg_list;
reverse = atoi(str);
}
- /* get mode */
- strcpy(mode, "Full");
+ /* default mode */
+ strcpy(mode, "Summary");
+ /* for page display, get mode from config file */
if (past_n || last_n || page_n)
{
if (getcfg(lbs->name, "Display Mode", str))
@@ -6477,6 +6560,7 @@ MSG_LIST *msg_list;
}
else
{
+ /* for find result, get mode from find form */
strcpy(mode, getparam("mode"));
if (mode[0] == 0)
strcpy(mode, "Full");
@@ -6693,6 +6777,19 @@ MSG_LIST *msg_list;
msg_list[i].lbs = NULL;
}
+ if (isparam("last"))
+ {
+ n = atoi(getparam("last"));
+
+ if (n > 0)
+ {
+ for (i=0 ; i