#include <errno.h>
#include <stdarg.h>
#include "citadel.h"
+#include "citadel_ipc.h"
#include "commands.h"
#include "messages.h"
#include "citadel_decls.h"
#ifndef HAVE_SNPRINTF
#include "snprintf.h"
#endif
+#include "screen.h"
struct citcmd {
struct citcmd *next;
int rc_remember_passwords;
int rc_ansi_color;
int num_urls = 0;
+int rc_prompt_control = 0;
+time_t rc_idle_threshold = (time_t)900;
char urls[MAXURLS][SIZ];
char rc_url_cmd[SIZ];
+char rc_gotmail_cmd[SIZ];
char *gl_string;
int next_lazy_cmd = 5;
int lines_printed = 0; /* line count for paginator */
extern int screenwidth, screenheight;
extern int termn8;
+extern CtdlIPC *ipc_for_signal_handlers; /* KLUDGE cover your eyes */
struct citcmd *cmdlist = NULL;
/*
* Check to see if we need to pause at the end of a screen.
- * If we do, we have to disable server keepalives during the pause because
+ * If we do, we have to switch to half keepalives during the pause because
* we are probably in the middle of a server operation and the NOOP command
* would confuse everything.
*/
-int checkpagin(int lp, int pagin, int height)
+int checkpagin(int lp, unsigned int pagin, unsigned int height)
{
int thekey;
if (sigcaught) return(lp);
thekey = was_a_key_pressed();
+ if (thekey == 'q' || thekey == 'Q' || thekey == 's' || thekey == 'S')
+ thekey = STOP_KEY;
+ if (thekey == 'n' || thekey == 'N')
+ thekey = NEXT_KEY;
if ( (thekey == NEXT_KEY) || (thekey == STOP_KEY)) sigcaught = thekey;
if (sigcaught) return(lp);
if (!pagin) return(0);
if (lp>=(height-1)) {
- set_keepalives(KA_NO);
+ set_keepalives(KA_HALF);
hit_any_key();
set_keepalives(KA_YES);
return(0);
/* Otherwise, start spewing... */
va_start(arg_ptr, format);
- vsprintf(buf, format, arg_ptr);
+ vsnprintf(buf, sizeof(buf), format, arg_ptr);
va_end(arg_ptr);
for (i=0; i<strlen(buf); ++i) {
- putc(buf[i], stdout);
+ scr_putc(buf[i]);
if (buf[i]==10) {
++lines_printed;
lines_printed = checkpagin(lines_printed,
int flags = 0;
char sender[64];
char node[64];
+ char *listing = NULL;
+ int r; /* IPC result code */
if (express_msgs == 0)
return;
if (rc_exp_beep) {
- putc(7, stdout);
+ scr_putc(7);
}
if (strlen(rc_exp_cmd) == 0) {
color(BRIGHT_RED);
- printf("\r---");
+ scr_printf("\r---");
}
while (express_msgs != 0) {
- serv_puts("GEXP");
- serv_gets(buf);
- if (buf[0] != '1')
+ r = CtdlIPCGetInstantMessage(ipc_for_signal_handlers, &listing, buf);
+ if (r / 100 != 1)
return;
- express_msgs = extract_int(&buf[4], 0);
- timestamp = extract_long(&buf[4], 1);
- flags = extract_int(&buf[4], 2);
- extract(sender, &buf[4], 3);
- extract(node, &buf[4], 4);
+ express_msgs = extract_int(buf, 0);
+ timestamp = extract_long(buf, 1);
+ flags = extract_int(buf, 2);
+ extract(sender, buf, 3);
+ extract(node, buf, 4);
strcpy(last_paged, sender);
stamp = localtime(×tamp);
fprintf(outpipe, " from %s", sender);
if (strncmp(serv_info.serv_nodename, node, 32))
fprintf(outpipe, " @%s", node);
- fprintf(outpipe, ":\n");
- while (serv_gets(buf), strcmp(buf, "000")) {
- fprintf(outpipe, "%s\n", buf);
- }
+ fprintf(outpipe, ":\n%s\n", listing);
pclose(outpipe);
if (express_msgs == 0)
return;
}
}
/* fall back to built-in express message display */
- printf("\n");
+ scr_printf("\n");
lines_printed++;
/* Header derived from flags */
if (flags & 2)
- printf("Please log off now, as requested ");
+ scr_printf("Please log off now, as requested ");
else if (flags & 1)
- printf("Broadcast message ");
+ scr_printf("Broadcast message ");
else if (flags & 4)
- printf("Chat request ");
+ scr_printf("Chat request ");
else
- printf("Message ");
+ scr_printf("Message ");
/* Timestamp. Can this be improved? */
if (stamp->tm_hour == 0 || stamp->tm_hour == 12)/* 12am/12pm */
- printf("at 12:%02d%cm", stamp->tm_min,
+ scr_printf("at 12:%02d%cm", stamp->tm_min,
stamp->tm_hour ? 'p' : 'a');
else if (stamp->tm_hour > 12) /* pm */
- printf("at %d:%02dpm",
+ scr_printf("at %d:%02dpm",
stamp->tm_hour - 12, stamp->tm_min);
else /* am */
- printf("at %d:%02dam", stamp->tm_hour, stamp->tm_min);
+ scr_printf("at %d:%02dam", stamp->tm_hour, stamp->tm_min);
/* Sender */
- printf(" from %s", sender);
+ scr_printf(" from %s", sender);
/* Remote node, if any */
if (strncmp(serv_info.serv_nodename, node, 32))
- printf(" @%s", node);
+ scr_printf(" @%s", node);
- printf(":\n");
+ scr_printf(":\n");
lines_printed++;
- fmout(screenwidth, NULL, 1, screenheight, -1, 0);
+ fmout(screenwidth, NULL, listing, NULL, 1, screenheight, -1, 0);
+ free(listing);
+
+ /* when running in curses mode, the scroll bar in most
+ xterm-style programs becomes useless, so it makes sense to
+ pause after a screenful of pages if the user has been idle
+ for a while. However, this is annoying to some of the users
+ who aren't in curses mode and tend to leave their clients
+ idle. keepalives become disabled, resulting in getting booted
+ when coming back to the idle session. but they probably have
+ a working scrollback in their terminal, so disable it in this
+ case:
+ */
+ if (!is_curses_enabled())
+ lines_printed = 0;
}
- printf("\n---\n");
+ scr_printf("\n---\n");
color(BRIGHT_WHITE);
static time_t idlet = 0;
static void really_do_keepalive(void) {
- char buf[1024];
+ int r; /* IPC response code */
time(&idlet);
+
+ /* If full keepalives are enabled, send a NOOP to the server and
+ * wait for a response.
+ */
if (keepalives_enabled == KA_YES) {
- serv_puts("NOOP");
- serv_gets(buf);
- if (buf[3] == '*') {
- express_msgs = 1;
+ r = CtdlIPCNoop(ipc_for_signal_handlers);
+ if (express_msgs > 0) {
if (ok_to_interrupt == 1) {
- printf("\r%64s\r", "");
+ scr_printf("\r%64s\r", "");
print_express();
- printf("%s%c ", room_name,
+ scr_printf("%s%c ", room_name,
room_prompt(room_flags));
- fflush(stdout);
+ scr_flush();
}
}
}
+
+ /* If half keepalives are enabled, send a QNOP to the server (if the
+ * server supports it) and then do nothing.
+ */
+ if ( (keepalives_enabled == KA_HALF)
+ && (serv_info.serv_supports_qnop > 0) ) {
+ CtdlIPC_putline(ipc_for_signal_handlers, "QNOP");
+ }
}
/* threaded nonblocking keepalive stuff starts here. I'm going for a simple
}
#endif /* THREADED_CLIENT */
-static void do_keepalive(void)
+/* I changed this from static to not because I need to call it from
+ screen.c, either that or make something in screen.c not static.
+ Fix it how you like. Why all the staticness? stu */
+
+void do_keepalive(void)
{
time_t now;
return;
/* Do a space-backspace to keep telnet sessions from idling out */
- printf(" %c", 8);
- fflush(stdout);
+ scr_printf(" %c", 8);
+ scr_flush();
#ifdef THREADED_CLIENT
if (async_ka_enabled)
int a; /* the watchdog timer in effect if necessary */
fd_set rfds;
struct timeval tv;
- time_t start_time, now;
- char inbuf[2];
+ time_t start_time;
- fflush(stdout);
+ scr_flush();
lines_printed = 0;
time(&start_time);
do {
-
/* This loop waits for keyboard input. If the keepalive
* timer expires, it sends a keepalive to the server if
* necessary and then waits again.
*/
do {
+ scr_set_windowsize();
do_keepalive();
+ scr_set_windowsize();
FD_ZERO(&rfds);
FD_SET(0, &rfds);
tv.tv_sec = S_KEEPALIVE;
tv.tv_usec = 0;
- time(&now);
select(1, &rfds, NULL, NULL, &tv);
} while (!FD_ISSET(0, &rfds));
-
-
-
/* At this point, there's input, so fetch it.
* (There's a hole in the bucket...)
*/
- read(0, inbuf, 1);
- a = inbuf[0];
+ a = scr_getc(SCR_NOBLOCK);
if (a == 127)
a = 8;
if (a > 126)
a = 0;
- if (a == 10)
- a = 13;
- if (((a != 4) && (a != 13) && (a != 8) && (a != NEXT_KEY) && (a != STOP_KEY))
+ if (a == 13)
+ a = 10;
+ if (((a != 23) && (a != 4) && (a != 10) && (a != 8) && (a != NEXT_KEY) && (a != STOP_KEY))
&& ((a < 32) || (a > 126)))
a = 0;
+
+#if defined(HAVE_CURSES_H) || defined(HAVE_NCURSES_H)
+ if (a == ERR)
+ a = 0;
+#endif
+
} while (a == 0);
return (a);
}
a = inkey();
a = tolower(a);
if (a == 'y') {
- printf("Yes\n");
+ scr_printf("Yes\n");
return (1);
}
if (a == 'n') {
- printf("No\n");
+ scr_printf("No\n");
return (0);
}
}
while (1) {
a = inkey();
a = tolower(a);
- if (a == 13)
+ if (a == 10)
a = (d ? 'y' : 'n');
if (a == 'y') {
- printf("Yes\n");
+ scr_printf("Yes\n");
return (1);
}
if (a == 'n') {
- printf("No\n");
+ scr_printf("No\n");
return (0);
}
}
async_ka_start();
GLA:a = inkey();
a = (a & 127);
- if ((a == 8) && (strlen(string) == 0))
+ if ((a == 8 || a == 23) && (strlen(string) == 0))
goto GLA;
- if ((a != 13) && (a != 8) && (strlen(string) == lim))
+ if ((a != 10) && (a != 8) && (strlen(string) == lim))
goto GLA;
if ((a == 8) && (string[0] != 0)) {
string[strlen(string) - 1] = 0;
- putc(8, stdout);
- putc(32, stdout);
- putc(8, stdout);
+ scr_putc(8); scr_putc(32); scr_putc(8);
goto GLA;
}
- if ((a == 13) || (a == 10)) {
- putc(13, stdout);
- putc(10, stdout);
+ if ((a == 23) && (string[0] != 0)) {
+ do {
+ string[strlen(string) - 1] = 0;
+ scr_putc(8); scr_putc(32); scr_putc(8);
+ } while (strlen(string) && string[strlen(string) - 1] != ' ');
+ goto GLA;
+ }
+ if ((a == 10)) {
+ scr_putc(10);
async_ka_end();
return;
}
string[b] = a;
string[b + 1] = 0;
if (flag == 0)
- putc(a, stdout);
+ scr_putc(a);
if (flag == 1)
- putc('*', stdout);
+ scr_putc('*');
goto GLA;
}
*/
void strprompt(char *prompt, char *str, int len)
{
+ int i;
char buf[128];
+
print_express();
color(DIM_WHITE);
- printf("%s ", prompt);
+ scr_printf("%s ", prompt);
color(DIM_MAGENTA);
- printf("[");
+ scr_printf("[");
color(BRIGHT_MAGENTA);
- printf("%s", str);
+
+ if (len >= 0) {
+ scr_printf("%s", str);
+ }
+ else {
+ for (i=0; i<strlen(str); ++i) {
+ scr_printf("*");
+ }
+ }
+
color(DIM_MAGENTA);
- printf("]");
+ scr_printf("]");
color(DIM_WHITE);
- printf(": ");
+ scr_printf(": ");
color(BRIGHT_CYAN);
getline(buf, len);
if (buf[0] != 0)
int r;
color(DIM_WHITE);
- printf("%s ", prompt);
+ scr_printf("%s ", prompt);
color(DIM_MAGENTA);
- printf(" [");
+ scr_printf("[");
color(BRIGHT_MAGENTA);
- printf("%s", (prev_val ? "Yes" : "No"));
+ scr_printf("%s", (prev_val ? "Yes" : "No"));
color(DIM_MAGENTA);
- printf("]: ");
+ scr_printf("]: ");
color(BRIGHT_CYAN);
r = (yesno_d(prev_val));
color(DIM_WHITE);
i = imin - 1;
}
if (i < imin)
- printf("*** Must be no less than %d.\n", imin);
+ scr_printf("*** Must be no less than %d.\n", imin);
if (i > imax)
- printf("*** Must be no more than %d.\n", imax);
+ scr_printf("*** Must be no more than %d.\n", imax);
} while ((i < imin) || (i > imax));
return (i);
}
void newprompt(char *prompt, char *str, int len)
{
color(BRIGHT_MAGENTA);
- printf("%s", prompt);
+ scr_printf("%s", prompt);
color(DIM_MAGENTA);
getline(str, len);
color(DIM_WHITE);
rc_force_mail_prompts = 0;
rc_ansi_color = 0;
strcpy(rc_url_cmd, "");
+ strcpy(rc_gotmail_cmd, "");
+#ifdef HAVE_OPENSSL
+ rc_encrypt = RC_DEFAULT;
+#endif
+#ifdef HAVE_CURSES_H
+ rc_screen = RC_DEFAULT;
+#endif
+ rc_alt_semantics = 0;
/* now try to open the citadel.rc file */
snprintf(buf, sizeof buf, "%s/.citadelrc", getenv("HOME"));
ccfile = fopen(buf, "r");
}
- if (ccfile == NULL) {
- ccfile = fopen("/usr/local/lib/citadel.rc", "r");
- }
if (ccfile == NULL) {
snprintf(buf, sizeof buf, "%s/citadel.rc", BBSDIR);
ccfile = fopen(buf, "r");
}
+ if (ccfile == NULL) {
+ ccfile = fopen("/etc/citadel.rc", "r");
+ }
if (ccfile == NULL) {
ccfile = fopen("./citadel.rc", "r");
}
if (ccfile == NULL) {
perror("commands: cannot open citadel.rc");
- logoff(errno);
+ logoff(NULL, 3);
}
while (fgets(buf, sizeof buf, ccfile) != NULL) {
while ((strlen(buf) > 0) ? (isspace(buf[strlen(buf) - 1])) : 0)
buf[strlen(buf) - 1] = 0;
+ if (!strncasecmp(buf, "encrypt=", 8)) {
+ if (!strcasecmp(&buf[8], "yes")) {
+#ifdef HAVE_OPENSSL
+ rc_encrypt = RC_YES;
+#else
+ fprintf(stderr, "citadel.rc requires encryption support but citadel is not compiled with OpenSSL");
+ logoff(NULL, 3);
+#endif
+ }
+#ifdef HAVE_OPENSSL
+ else if (!strcasecmp(&buf[8], "no")) {
+ rc_encrypt = RC_NO;
+ }
+ else if (!strcasecmp(&buf[8], "default")) {
+ rc_encrypt = RC_DEFAULT;
+ }
+#endif
+ }
+
+#ifdef HAVE_CURSES_H
+ if (!strncasecmp(buf, "fullscreen=", 11)) {
+ if (!strcasecmp(&buf[11], "yes"))
+ rc_screen = RC_YES;
+ else if (!strcasecmp(&buf[11], "no"))
+ rc_screen = RC_NO;
+ }
+#endif
+
if (!strncasecmp(buf, "editor=", 7))
strcpy(editor_path, &buf[7]);
if (!strncasecmp(buf, "allow_attachments=", 18)) {
rc_allow_attachments = atoi(&buf[18]);
}
+ if (!strncasecmp(buf, "idle_threshold=", 15)) {
+ rc_idle_threshold = atoi(&buf[15]);
+ }
if (!strncasecmp(buf, "remember_passwords=", 19)) {
rc_remember_passwords = atoi(&buf[19]);
}
if (!strncasecmp(&buf[11], "user", 4))
rc_ansi_color = 3; /* user config */
}
+ if (!strncasecmp(buf, "prompt_control=", 15)) {
+ if (!strncasecmp(&buf[15], "on", 2))
+ rc_prompt_control = 1;
+ if (!strncasecmp(&buf[15], "user", 4))
+ rc_prompt_control = 3; /* user config */
+ }
if (!strncasecmp(buf, "username=", 9))
strcpy(rc_username, &buf[9]);
if (!strncasecmp(buf, "urlcmd=", 7))
strcpy(rc_url_cmd, &buf[7]);
+ if (!strncasecmp(buf, "gotmailcmd=", 11))
+ strcpy(rc_gotmail_cmd, &buf[11]);
+
+ if (!strncasecmp(buf, "alternate_semantics=", 20)) {
+ if (!strncasecmp(&buf[11], "yes", 3))
+ rc_alt_semantics = 1;
+ if (!strncasecmp(&buf[11], "no", 2))
+ rc_alt_semantics = 0;
+ }
if (!strncasecmp(buf, "cmd=", 4)) {
strcpy(buf, &buf[4]);
* This function returns an integer command number. If the command prompts
* for a string then it is placed in the supplied buffer.
*/
-int getcmd(char *argbuf)
+int getcmd(CtdlIPC *ipc, char *argbuf)
{
char cmdbuf[5];
int cmdspaces[5];
enable_color = 0;
}
/* if we're running in idiot mode, display a cute little menu */
- IFNEXPERT formout("mainmenu");
+ IFNEXPERT formout(ipc, "mainmenu");
- print_express(); /* print express messages if there are any */
+ print_express();
strcpy(argbuf, "");
cmdpos = 0;
for (a = 0; a < 5; ++a)
/* now the room prompt... */
ok_to_interrupt = 1;
color(BRIGHT_WHITE);
- printf("\n%s", room_name);
+ scr_printf("\n%s", room_name);
color(DIM_WHITE);
- printf("%c ", room_prompt(room_flags));
- fflush(stdout);
+ scr_printf("%c ", room_prompt(room_flags));
+ scr_flush();
while (1) {
ch = inkey();
if (cptr->c_cmdnum == this_lazy_cmd) {
for (a = 0; a < 5; ++a)
if (cptr->c_keys[a][0] != 0)
- printf("%s ", cmd_expand(
+ scr_printf("%s ", cmd_expand(
cptr->c_keys[a], 0));
- printf("\n");
+ scr_printf("\n");
return (this_lazy_cmd);
}
}
- printf("\n");
+ scr_printf("\n");
return (this_lazy_cmd);
}
/* Otherwise, process the command */
for (cptr = cmdlist; cptr != NULL; cptr = cptr->next) {
if (cmdmatch(cmdbuf, cptr, cmdpos + 1)) {
- printf("%s", cmd_expand(cptr->c_keys[cmdpos], 0));
+ scr_printf("%s", cmd_expand(cptr->c_keys[cmdpos], 0));
cmdspaces[cmdpos] = strlen(
cmd_expand(cptr->c_keys[cmdpos], 0));
if (cmdpos < 4)
if ((cptr->c_keys[cmdpos + 1]) != 0)
- putc(' ', stdout);
+ scr_putc(' ');
++cmdpos;
}
}
if (requires_string(cptr, cmdpos)) {
getline(argbuf, 32);
} else {
- printf("\n");
+ scr_printf("\n");
}
/* If this command is one that changes rooms,
live.c_oflag = OPOST | ONLCR;
live.c_lflag = ISIG | NOFLSH;
- live.c_cc[VINTR] = (-1);
- live.c_cc[VQUIT] = (-1);
+ live.c_cc[VINTR] = 0;
+ live.c_cc[VQUIT] = 0;
#ifdef hpux
live.c_cc[VMIN] = 0;
{ /* BSD version of sttybbs() */
struct sgttyb live;
static struct sgttyb saved_settings;
+ static int last_cmd = 0;
+
+ if (cmd == SB_LAST)
+ cmd = last_cmd;
+ else
+ last_cmd = cmd;
if ((cmd == 0) || (cmd == 1)) {
gtty(0, &live);
/*
* display_help() - help file viewer
*/
-void display_help(char *name)
+void display_help(CtdlIPC *ipc, char *name)
{
- formout(name);
+ formout(ipc, name);
}
*/
int fmout(
int width, /* screen width to use */
- FILE *fp, /* file to read from, or NULL to read from server */
+ FILE *fpin, /* file to read from, or NULL to format given text */
+ char *text, /* Text to be formatted (when fpin is NULL) */
+ FILE *fpout, /* File to write to, or NULL to write to screen */
char pagin, /* nonzero if we should use the paginator */
int height, /* screen height to use */
int starting_lp,/* starting value for lines_printed, -1 for global */
- char subst) /* nonzero if we should use hypertext mode */
+ int subst) /* nonzero if we should use hypertext mode */
{
- int a, b, c, d, old;
+ int a, b, c, old;
int real = (-1);
char aaa[140];
char buffer[512];
+ char *e;
int eof_flag = 0;
num_urls = 0; /* Start with a clean slate of embedded URL's */
old = 255;
strcpy(buffer, "");
c = 1; /* c is the current pos */
+ e = text; /* e is pointer to current pos */
FMTA: while ((eof_flag == 0) && (strlen(buffer) < 126)) {
- if (fp != NULL) { /* read from file */
- if (feof(fp))
+ if (fpin != NULL) { /* read from file */
+ if (feof(fpin))
eof_flag = 1;
if (eof_flag == 0) {
- a = getc(fp);
+ a = getc(fpin);
buffer[strlen(buffer) + 1] = 0;
buffer[strlen(buffer)] = a;
}
- } else { /* read from server */
- d = strlen(buffer);
- serv_gets(&buffer[d]);
- while ((!isspace(buffer[d])) && (isspace(buffer[strlen(buffer) - 1])))
- buffer[strlen(buffer) - 1] = 0;
- if (!strcmp(&buffer[d], "000")) {
- buffer[d] = 0;
+ } else { /* read from text */
+ if (!*e) {
eof_flag = 1;
while (isspace(buffer[strlen(buffer) - 1]))
buffer[strlen(buffer) - 1] = 0;
+ buffer[strlen(buffer) + 1] = 0;
+ buffer[strlen(buffer)] = 10;
+ }
+ if (eof_flag == 0) {
+ a = *e++;
+ buffer[strlen(buffer) + 1] = 0;
+ buffer[strlen(buffer)] = a;
}
- d = strlen(buffer);
- buffer[d] = 10;
- buffer[d + 1] = 0;
}
}
if (((a == 13) || (a == 10)) && (old != 13) && (old != 10))
a = 32;
if (((old == 13) || (old == 10)) && (isspace(real))) {
- printf("\n");
- ++lines_printed;
- lines_printed = checkpagin(lines_printed, pagin, height);
+ if (fpout) {
+ fprintf(fpout, "\n");
+ } else {
+ scr_printf("\n");
+ ++lines_printed;
+ lines_printed = checkpagin(lines_printed, pagin, height);
+ }
c = 1;
}
if (a > 126)
goto FMTA;
if (a > 32) {
- if (((strlen(aaa) + c) > (width - 5)) && (strlen(aaa) > (width - 5))) {
- printf("\n%s", aaa);
+ if (((strlen(aaa) + c) > (width - 1)) && (strlen(aaa) > (width - 1))) {
+ if (fpout) {
+ fprintf(fpout, "\n%s", aaa);
+ } else {
+ scr_printf("\n%s", aaa);
+ ++lines_printed;
+ lines_printed = checkpagin(lines_printed, pagin, height);
+ }
c = strlen(aaa);
aaa[0] = 0;
- ++lines_printed;
- lines_printed = checkpagin(lines_printed, pagin, height);
}
b = strlen(aaa);
aaa[b] = a;
aaa[b + 1] = 0;
}
if (a == 32) {
- if ((strlen(aaa) + c) > (width - 5)) {
+ if ((strlen(aaa) + c) > (width - 1)) {
c = 1;
- printf("\n");
- ++lines_printed;
- lines_printed = checkpagin(lines_printed, pagin, height);
+ if (fpout) {
+ fprintf(fpout, "\n");
+ } else {
+ scr_printf("\n");
+ ++lines_printed;
+ lines_printed = checkpagin(lines_printed, pagin, height);
+ }
+ }
+ if (fpout) {
+ fprintf(fpout, "%s ", aaa);
+ } else {
+ scr_printf("%s ", aaa);
}
- printf("%s ", aaa);
++c;
c = c + strlen(aaa);
strcpy(aaa, "");
goto FMTA;
}
if ((a == 13) || (a == 10)) {
- printf("%s\n", aaa);
+ if (fpout) {
+ fprintf(fpout, "%s\n", aaa);
+ } else {
+ scr_printf("%s\n", aaa);
+ ++lines_printed;
+ lines_printed = checkpagin(lines_printed, pagin, height);
+ }
c = 1;
- ++lines_printed;
- lines_printed = checkpagin(lines_printed, pagin, height);
if (sigcaught) goto OOPS;
strcpy(aaa, "");
goto FMTA;
goto FMTA;
/* keypress caught; drain the server */
-OOPS: do {
- serv_gets(aaa);
- } while (strcmp(aaa, "000"));
-
-FMTEND: printf("\n");
- ++lines_printed;
- lines_printed = checkpagin(lines_printed, pagin, height);
+OOPS: /* do {
+ CtdlIPC_getline(ipc, aaa);
+ } while (strcmp(aaa, "000")); */
+
+FMTEND:
+ if (fpout) {
+ fprintf(fpout, "\n");
+ } else {
+ scr_printf("\n");
+ ++lines_printed;
+ lines_printed = checkpagin(lines_printed, pagin, height);
+ }
return (sigcaught);
}
current_color = colornum;
if (enable_color) {
+#ifdef HAVE_CURSES_H
+ if (scr_color(colornum))
+ return;
+#endif
/* When switching to dim white, actually output an 'original
* pair' sequence -- this looks better on black-on-white
- * terminals.
+ * terminals. - Changed to ORIGINAL_PAIR as this actually
+ * wound up looking horrible on black-on-white terminals, not
+ * to mention transparent terminals.
*/
- if (colornum == DIM_WHITE)
+ if (colornum == ORIGINAL_PAIR)
printf("\033[39;49m");
else
printf("\033[3%d;40m", (colornum & 7));
printf("\033[0m");
is_bold = 0;
}
- fflush(stdout);
+ scr_flush();
}
}
{
if (enable_color) {
printf("\033[4%dm\033[2J\033[H\033[0m", colornum);
- fflush(stdout);
+ scr_flush();
}
}
{
if (rc_ansi_color == 2) {
printf("\033[c");
- fflush(stdout);
+ scr_flush();
time(&AnsiDetect);
}
}
color(DIM_WHITE);
for (i=0; i<strlen(buf); ++i) {
if (buf[i]=='<') {
- putc(buf[i], stdout);
+ scr_putc(buf[i]);
color(BRIGHT_MAGENTA);
} else {
if (buf[i]=='>') {
color(DIM_WHITE);
}
- putc(buf[i], stdout);
+ scr_putc(buf[i]);
}
}
color(DIM_WHITE);
while (1) {
if (display_prompt) {
if (do_prompt) {
- printf("%s ", menuprompt);
+ scr_printf("%s ", menuprompt);
}
else {
for (i=0; i<choices; ++i) {
extract(buf, menustring, i);
keyopt(buf);
- printf(" ");
+ scr_printf(" ");
}
}
- printf(" -> ");
+ scr_printf(" -> ");
display_prompt = 0;
}
ch = lkey();
if ( (do_prompt) && (ch=='?') ) {
- printf("\rOne of... ");
- printf(" \n");
+ scr_printf("\rOne of... ");
+ scr_printf(" \n");
for (i=0; i<choices; ++i) {
extract(buf, menustring, i);
- printf(" ");
+ scr_printf(" ");
keyopt(buf);
- printf("\n");
+ scr_printf("\n");
}
- printf("\n");
+ scr_printf("\n");
display_prompt = 1;
}
&& (buf[c+1]=='>') ) {
for (a=0; a<strlen(buf); ++a) {
if ( (a!=(c-1)) && (a!=(c+1))) {
- putc(buf[a], stdout);
+ scr_putc(buf[a]);
}
}
- printf("\n\n");
+ scr_printf("\n\n");
return ch;
}
}