#include "tools.h"
#include "rooms.h"
#include "client_chat.h"
+#include "citadel_dirs.h"
#ifndef HAVE_SNPRINTF
#include "snprintf.h"
#endif
vsnprintf(buf, sizeof(buf), format, arg_ptr);
va_end(arg_ptr);
- for (i=0; i<strlen(buf); ++i) {
+ for (i=0; !IsEmptyStr(&buf[i]); ++i) {
scr_putc(buf[i]);
if (buf[i]==10) {
++lines_printed;
if (rc_exp_beep) {
ctdl_beep();
}
- if (strlen(rc_exp_cmd) == 0) {
+ if (IsEmptyStr(rc_exp_cmd)) {
color(BRIGHT_RED);
scr_printf("\r---");
}
return;
}
- if (strlen(rc_exp_cmd) > 0) {
+ if (!IsEmptyStr(rc_exp_cmd)) {
outpipe = popen(rc_exp_cmd, "w");
if (outpipe != NULL) {
/* Header derived from flags */
* (There's a hole in the bucket...)
*/
a = scr_getc(SCR_BLOCK);
- if (a == 127)
+ if (a == 127) {
a = 8;
- if (a > 126)
- a = 0;
- if (a == 13)
+ }
+ if (a == 13) {
a = 10;
+ }
+/* not so fast there dude, we have to handle UTF-8 and ISO-8859-1...
+ if (a > 126) {
+ a = 0;
+ }
if (((a != 23) && (a != 4) && (a != 10) && (a != 8) && (a != NEXT_KEY) && (a != STOP_KEY))
- && ((a < 32) || (a > 126)))
+ && ((a < 32) || (a > 126))) {
a = 0;
+ }
+ */
#ifndef DISABLE_CURSES
#if defined(HAVE_CURSES_H) || defined(HAVE_NCURSES_H)
/* Gets a line from the terminal */
/* string == Pointer to string buffer */
/* lim == Maximum length - if negative, no-show */
-void getline(char *string, int lim)
+void ctdl_getline(char *string, int lim)
{
int a, b;
char flag = 0;
strcpy(string, "");
gl_string = string;
async_ka_start();
- GLA:a = inkey();
- a = (a & 127);
- if ((a == 8 || a == 23) && (strlen(string) == 0))
+
+GLA: a = inkey();
+ /* a = (a & 127); ** commented out because it isn't just an ASCII world anymore */
+ if ((a == 8 || a == 23) && (IsEmptyStr(string)))
goto GLA;
if ((a != 10) && (a != 8) && (strlen(string) == lim))
goto GLA;
do {
string[strlen(string) - 1] = 0;
scr_putc(8); scr_putc(32); scr_putc(8);
- } while (strlen(string) && string[strlen(string) - 1] != ' ');
+ } while (!IsEmptyStr(string) && string[strlen(string) - 1] != ' ');
goto GLA;
}
if ((a == 10)) {
scr_printf("%s", str);
}
else {
- for (i=0; i<strlen(str); ++i) {
+ for (i=0; !IsEmptyStr(&str[i]); ++i) {
scr_printf("*");
}
}
color(DIM_WHITE);
scr_printf(": ");
color(BRIGHT_CYAN);
- getline(buf, len);
+ ctdl_getline(buf, len);
if (buf[0] != 0)
strcpy(str, buf);
color(DIM_WHITE);
snprintf(buf, sizeof buf, "%d", i);
strprompt(prompt, buf, 15);
i = atoi(buf);
- for (p=0; p<strlen(buf); ++p) {
+ for (p=0; !IsEmptyStr(&buf[p]); ++p) {
if ( (!isdigit(buf[p]))
&& ( (buf[p]!='-') || (p!=0) ) )
i = imin - 1;
color(BRIGHT_MAGENTA);
scr_printf("%s", prompt);
color(DIM_MAGENTA);
- getline(str, len);
+ ctdl_getline(str, len);
color(DIM_WHITE);
}
rc_force_mail_prompts = 0;
rc_ansi_color = 0;
rc_color_use_bg = 0;
- rc_reply_extedit = 0;
strcpy(rc_url_cmd, "");
strcpy(rc_gotmail_cmd, "");
#ifdef HAVE_OPENSSL
ccfile = fopen(buf, "r");
}
if (ccfile == NULL) {
- snprintf(buf, sizeof buf,
-#ifndef HAVE_ETC_DIR
- CTDLDIR
-#else
- ETC_DIR
-#endif
- "/citadel.rc");
- ccfile = fopen(buf, "r");
+ ccfile = fopen(file_citadel_rc, "r");
}
if (ccfile == NULL) {
ccfile = fopen("/etc/citadel.rc", "r");
logoff(NULL, 3);
}
while (fgets(buf, sizeof buf, ccfile) != NULL) {
- while ((strlen(buf) > 0) ? (isspace(buf[strlen(buf) - 1])) : 0)
+ while ((!IsEmptyStr(buf)) ? (isspace(buf[strlen(buf) - 1])) : 0)
buf[strlen(buf) - 1] = 0;
if (!strncasecmp(buf, "encrypt=", 8)) {
rc_alt_semantics = 0;
}
}
- if (!strncasecmp(buf, "reply_with_external_editor=", 27)) {
- if (!strncasecmp(&buf[27], "yes", 3)) {
- rc_reply_extedit = 1;
- }
- else {
- rc_reply_extedit = 0;
- }
- }
+
if (!strncasecmp(buf, "cmd=", 4)) {
strcpy(buf, &buf[4]);
a = 0;
b = 0;
buf[strlen(buf) + 1] = 0;
- while (strlen(buf) > 0) {
+ while (!IsEmptyStr(buf)) {
b = strlen(buf);
for (d = strlen(buf); d >= 0; --d)
if (buf[d] == ',')
{
int a;
- for (a = 0; a < strlen(cmdstr); ++a)
+ for (a = 0; !IsEmptyStr(&cmdstr[a]); ++a)
if (cmdstr[a] == '&')
return (tolower(cmdstr[a + 1]));
return (0);
int a;
static char exp[64];
char buf[1024];
+ char *ptr;
strcpy(exp, strbuf);
- for (a = 0; a < strlen(exp); ++a) {
- if (strbuf[a] == '&') {
+ ptr = exp;
+ while (!IsEmptyStr(ptr)){
+ if (*ptr == '&') {
+
+ /* dont echo these non mnemonic command keys */
+ int noecho = *(ptr+1) == '<' || *(ptr+1) == '>' ||
+ *(ptr+1) == '+' || *(ptr+1) == '-';
if (mode == 0) {
- strcpy(&exp[a], &exp[a + 1]);
+ strcpy(ptr, ptr + 1 + noecho);
}
if (mode == 1) {
- exp[a] = '<';
- strcpy(buf, &exp[a + 2]);
- exp[a + 2] = '>';
- exp[a + 3] = 0;
+ *ptr = '<';
+ strcpy(buf, ptr + 2);
+ *(ptr + 2) = '>';
+ *(ptr+ 3) = 0;
strcat(exp, buf);
}
}
- if (!strncmp(&exp[a], "^r", 2)) {
+ if (!strncmp(ptr, "^r", 2)) {
strcpy(buf, exp);
- strcpy(&exp[a], room_name);
- strcat(exp, &buf[a + 2]);
+ strcpy(ptr, room_name);
+ strcat(exp, &buf[ptr - exp + 2]);
}
- if (!strncmp(&exp[a], "^c", 2)) {
- exp[a] = ',';
- strcpy(&exp[a + 1], &exp[a + 2]);
+ if (!strncmp(ptr, "^c", 2)) {
+ *ptr = ',';
+ strcpy(ptr + 1], ptr + 2]);
}
}
char buf[64];
strcpy(buf, cptr->c_keys[ncomp - 1]);
- for (a = 0; a < strlen(buf); ++a) {
+ for (a = 0; !IsEmptyStr(&buf[a]); ++a) {
if (buf[a] == ':')
return (1);
}
if (cmdmatch(cmdbuf, cptr, 5)) {
/* We've found our command. */
if (requires_string(cptr, cmdpos)) {
- getline(argbuf, 32);
+ ctdl_getline(argbuf, 64);
} else {
scr_printf("\n");
}
for (cptr = cmdlist; cptr != NULL; cptr = cptr->next) {
if (cmdmatch(cmdbuf, cptr, cmdpos)) {
for (a = 0; a < 5; ++a) {
- pprintf("%s ", cmd_expand(cptr->c_keys[a], 1));
+ keyopt(cmd_expand(cptr->c_keys[a], 1));
+ pprintf(" ");
}
pprintf("\n");
}
}
+ sigcaught = 0;
pprintf("\n%s%c ", room_name, room_prompt(room_flags));
got = 0;
old = '\n';
continue;
}
- /* Are we looking at a nonprintable? */
+
+ /* Are we looking at a nonprintable?
+ * (This section is now commented out because we could be displaying
+ * a character set like UTF-8 or ISO-8859-1.)
if ( (*e < 32) || (*e > 126) ) {
e++;
continue;
- }
+ } */
+
/* Or are we looking at a space? */
if (*e == ' ') {
e++;
}
} while (FD_ISSET(0, &rfds));
- for (a = 0; a < strlen(abuf); ++a) {
+ for (a = 0; !IsEmptyStr(&abuf[a]); ++a) {
if ((abuf[a] == 27) && (abuf[a + 1] == '[')
&& (abuf[a + 2] == '?')) {
enable_color = 1;
int i;
color(DIM_WHITE);
- for (i=0; i<strlen(buf); ++i) {
+ for (i=0; !IsEmptyStr(&buf[i]); ++i) {
if (buf[i]=='<') {
- scr_putc(buf[i]);
+ pprintf("%c", buf[i]);
color(BRIGHT_MAGENTA);
} else {
- if (buf[i]=='>') {
+ if (buf[i]=='>'&& buf[i+1] != '>') {
color(DIM_WHITE);
}
- scr_putc(buf[i]);
+ pprintf("%c", buf[i]);
}
}
color(DIM_WHITE);
choices = num_tokens(menustring, '|');
if (menuprompt != NULL) do_prompt = 1;
- if (menuprompt != NULL) if (strlen(menuprompt)==0) do_prompt = 0;
+ if (menuprompt != NULL) if (IsEmptyStr(menuprompt)) do_prompt = 0;
while (1) {
if (display_prompt) {
for (i=0; i<choices; ++i) {
extract_token(buf, menustring, i, '|', sizeof buf);
- for (c=1; c<strlen(buf); ++c) {
+ for (c=1; !IsEmptyStr(&buf[c]); ++c) {
if ( (ch == tolower(buf[c]))
&& (buf[c-1]=='<')
&& (buf[c+1]=='>') ) {
- for (a=0; a<strlen(buf); ++a) {
+ for (a=0; !IsEmptyStr(&buf[a]); ++a) {
if ( (a!=(c-1)) && (a!=(c+1))) {
scr_putc(buf[a]);
}