diff --git a/src/elogd.c b/src/elogd.c index 4c129a2b..68ee2503 100755 --- a/src/elogd.c +++ b/src/elogd.c @@ -6,6 +6,9 @@ Contents: Web server program for Electronic Logbook ELOG $Log$ + Revision 1.304 2004/03/21 18:42:59 midas + Implemented CSV import and XML export + Revision 1.303 2004/03/19 15:11:20 midas Implemented 'guest list display' @@ -627,10 +630,10 @@ int tcp_port = 80; char theme_name[80]; #define MAX_GROUPS 32 -#define MAX_PARAM 100 +#define MAX_PARAM 120 #define MAX_ATTACHMENTS 50 #define MAX_N_LIST 100 -#define MAX_N_ATTR 50 +#define MAX_N_ATTR 100 #define MAX_REPLY_TO 100 #define CMD_SIZE 10000 #define TEXT_SIZE 250000 @@ -805,6 +808,8 @@ int is_logbook_in_group(LBLIST pgrp, char *logbook); void free_logbook_hierarchy(LBLIST root); void show_top_text(LOGBOOK * lbs); void show_bottom_text(LOGBOOK * lbs); +int set_attributes(LOGBOOK * lbs, char attributes[][NAME_LENGTH], int n); +void show_elog_list(LOGBOOK * lbs, INT past_n, INT last_n, INT page_n, char *info); /*---- Funcions from the MIDAS library -----------------------------*/ @@ -3014,7 +3019,7 @@ int el_build_index(LOGBOOK * lbs, BOOL rebuild) if (*lbs->n_el_index == 0) printf("\n"); - printf(" ID %3d in %s, ofs %5d, %s, MD5=", + printf(" ID %3d, %s, ofs %5d, %s, MD5=", lbs->el_index[*lbs->n_el_index].message_id, str, lbs->el_index[*lbs->n_el_index].offset, lbs->el_index[*lbs->n_el_index]. @@ -3047,7 +3052,7 @@ int el_build_index(LOGBOOK * lbs, BOOL rebuild) if (verbose) { printf("After sort:\n"); for (i = 0; i < *lbs->n_el_index; i++) - printf(" ID %3d in %s, ofs %5d\n", lbs->el_index[i].message_id, + printf(" ID %3d, %s, ofs %5d\n", lbs->el_index[i].message_id, lbs->el_index[i].file_name, lbs->el_index[i].offset); } @@ -3872,10 +3877,12 @@ int el_submit(LOGBOOK * lbs, int message_id, BOOL bedit, sprintf(message + strlen(message), "Attachment: "); - sprintf(message + strlen(message), afilename[0]); - for (i = 1; i < MAX_ATTACHMENTS; i++) - if (afilename[i][0]) - sprintf(message + strlen(message), ",%s", afilename[i]); + if (afilename) { + sprintf(message + strlen(message), afilename[0]); + for (i = 1; i < MAX_ATTACHMENTS; i++) + if (afilename[i][0]) + sprintf(message + strlen(message), ",%s", afilename[i]); + } sprintf(message + strlen(message), "\n"); sprintf(message + strlen(message), "Encoding: %s\n", encoding); @@ -4737,7 +4744,9 @@ int setparam(char *param, char *value) strlcpy(_value[i], value, NAME_LENGTH); } else { - printf("Error: parameter array too small\n"); + sprintf(str, "Error: Too many parameters (> %d). Cannot perform operation.\n", MAX_PARAM); + show_error(str); + return 0; } return 1; @@ -5006,15 +5015,32 @@ and trailing blanks */ for (i = 0; *p && i < size; i++) { if (*p == '"') { p++; + j = 0; + memset(list[i], 0, NAME_LENGTH); + do { + /* convert two '"' to one */ + if (*p == '"' && *(p+1) == '"') { + list[i][j++] = '"'; + p += 2; + } else if (*p == '"') { + break; + } else + list[i][j++] = *p++; - strlcpy(list[i], p, NAME_LENGTH); + } while (j < NAME_LENGTH-1); + list[i][j] = 0; - if (strchr(list[i], '"')) - *strchr(list[i], '"') = 0; + /* skip second '"' */ + p++; - p += strlen(list[i]) + 1; - while (*p == ' ' || strchr(brk, *p)) + /* skip blanks and break character */ + while (*p == ' ') p++; + if (*p && strchr(brk, *p)) + p++; + while (*p == ' ') + p++; + } else { strlcpy(list[i], p, NAME_LENGTH); @@ -5023,7 +5049,11 @@ and trailing blanks */ list[i][j] = 0; p += strlen(list[i]); - while (*p == ' ' || (*p && strchr(brk, *p))) + while (*p == ' ') + p++; + if (*p && strchr(brk, *p)) + p++; + while (*p == ' ') p++; } @@ -5177,7 +5207,7 @@ void show_http_header(BOOL expires) rsprintf("\r\n"); } -void show_plain_header(int size) +void show_plain_header(int size, char *file_name) { /* header */ rsprintf("HTTP/1.1 200 Document follows\r\n"); @@ -5192,7 +5222,7 @@ void show_plain_header(int size) rsprintf("Pragma: no-cache\r\n"); rsprintf("Expires: Fri, 01 Jan 1983 00:00:00 GMT\r\n"); rsprintf("Content-Type: text/plain\r\n"); - rsprintf("Content-disposition: attachment; filename=\"export.txt\"\r\n"); + rsprintf("Content-disposition: attachment; filename=\"%s\"\r\n", file_name); if (size) rsprintf("Content-Length: %d\r\n", size); rsprintf("\r\n"); @@ -7459,10 +7489,15 @@ void show_find_form(LOGBOOK * lbs) rsprintf(""); else rsprintf(""); - rsprintf("\n", loc("Display comma-separated values (CSV)")); + if (strieq(mode, "XML")) + rsprintf(""); + else + rsprintf(""); + rsprintf("\n"); + rsprintf("\n"); rsprintf("