* This file contains functions which implement parts of the
* text-mode user interface.
*
+ * Copyright (c) 1987-2009 by the citadel.org team
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "sysdep.h"
#include <signal.h>
#include <errno.h>
#include <stdarg.h>
+#include <libcitadel.h>
#include "citadel.h"
#include "citadel_ipc.h"
#include "commands.h"
#include "citadel_decls.h"
#include "routines.h"
#include "routines2.h"
-#include "tools.h"
#include "rooms.h"
#include "client_chat.h"
#include "citadel_dirs.h"
#include "snprintf.h"
#endif
#include "screen.h"
+#include "ecrash.h"
struct citcmd {
struct citcmd *next;
int rc_prompt_control = 0;
time_t rc_idle_threshold = (time_t)900;
char rc_url_cmd[SIZ];
+char rc_open_cmd[SIZ];
char rc_gotmail_cmd[SIZ];
char *gl_string;
static void *ka_thread(void *arg)
{
+#ifdef HAVE_BACKTRACE
+ char threadName[256];
+
+ // Set up our name
+ sprintf(threadName, "ka_Thread n");
+
+ // Register for tracing
+ eCrash_RegisterThread(threadName, 0);
+#endif
really_do_keepalive();
pthread_detach(ka_thr_handle);
ka_thr_active = 0;
+
+#ifdef HAVE_BACKTRACE
+ eCrash_UnregisterThread();
+#endif
return NULL;
}
rc_ansi_color = 0;
rc_color_use_bg = 0;
strcpy(rc_url_cmd, "");
+ strcpy(rc_open_cmd, "");
strcpy(rc_gotmail_cmd, "");
#ifdef HAVE_OPENSSL
rc_encrypt = RC_DEFAULT;
if (!strncasecmp(buf, "urlcmd=", 7))
strcpy(rc_url_cmd, &buf[7]);
+ if (!strncasecmp(buf, "opencmd=", 7))
+ strcpy(rc_open_cmd, &buf[8]);
+
if (!strncasecmp(buf, "gotmailcmd=", 11))
strcpy(rc_gotmail_cmd, &buf[11]);
int a;
static char exp[64];
char buf[1024];
- char *ptr;
strcpy(exp, strbuf);
- ptr = exp;
- while (!IsEmptyStr(ptr)){
- if (*ptr == '&') {
+ for (a = 0; exp[a]; ++a) {
+ if (strbuf[a] == '&') {
/* dont echo these non mnemonic command keys */
- int noecho = *(ptr+1) == '<' || *(ptr+1) == '>' ||
- *(ptr+1) == '+' || *(ptr+1) == '-';
+ int noecho = strbuf[a+1] == '<' || strbuf[a+1] == '>' || strbuf[a+1] == '+' || strbuf[a+1] == '-';
if (mode == 0) {
- strcpy(ptr, ptr + 1 + noecho);
+ strcpy(&exp[a], &exp[a + 1 + noecho]);
}
if (mode == 1) {
- *ptr = '<';
- strcpy(buf, ptr + 2);
- *(ptr + 2) = '>';
- *(ptr+ 3) = 0;
+ exp[a] = '<';
+ strcpy(buf, &exp[a + 2]);
+ exp[a + 2] = '>';
+ exp[a + 3] = 0;
strcat(exp, buf);
}
}
- if (!strncmp(ptr, "^r", 2)) {
+ if (!strncmp(&exp[a], "^r", 2)) {
strcpy(buf, exp);
- strcpy(ptr, room_name);
- strcat(exp, &buf[ptr - exp + 2]);
+ strcpy(&exp[a], room_name);
+ strcat(exp, &buf[a + 2]);
}
- if (!strncmp(ptr, "^c", 2)) {
- *ptr = ',';
- strcpy(ptr + 1], ptr + 2]);
+ if (!strncmp(&exp[a], "^c", 2)) {
+ exp[a] = ',';
+ strcpy(&exp[a + 1], &exp[a + 2]);
}
}
struct timeval tv;
char abuf[512];
time_t now;
- int a;
+ int a, rv;
if (rc_ansi_color == 0) {
enable_color = 0;
select(1, &rfds, NULL, NULL, &tv);
if (FD_ISSET(0, &rfds)) {
abuf[strlen(abuf) + 1] = 0;
- read(0, &abuf[strlen(abuf)], 1);
+ rv = read(0, &abuf[strlen(abuf)], 1);
}
} while (FD_ISSET(0, &rfds));
choices = num_tokens(menustring, '|');
if (menuprompt != NULL) do_prompt = 1;
- if (menuprompt != NULL) if (IsEmptyStr(menuprompt)) do_prompt = 0;
+ if ((menuprompt != NULL) && (IsEmptyStr(menuprompt))) do_prompt = 0;
while (1) {
if (display_prompt) {