scr_printf(":\n");
lines_printed++;
- fmout(screenwidth, NULL, 1, screenheight, -1, 0);
+ fmout(screenwidth, NULL, NULL, 1, screenheight, -1, 0);
}
scr_printf("\n---\n");
color(BRIGHT_WHITE);
*/
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 read from server */
+ 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 */
c = 1; /* c is the 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;
}
if (((a == 13) || (a == 10)) && (old != 13) && (old != 10))
a = 32;
if (((old == 13) || (old == 10)) && (isspace(real))) {
- scr_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)
if (a > 32) {
if (((strlen(aaa) + c) > (width - 5)) && (strlen(aaa) > (width - 5))) {
- scr_printf("\n%s", aaa);
+ 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;
if (a == 32) {
if ((strlen(aaa) + c) > (width - 5)) {
c = 1;
- scr_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);
}
- scr_printf("%s ", aaa);
++c;
c = c + strlen(aaa);
strcpy(aaa, "");
goto FMTA;
}
if ((a == 13) || (a == 10)) {
- scr_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;
serv_gets(aaa);
} while (strcmp(aaa, "000"));
-FMTEND: scr_printf("\n");
- ++lines_printed;
- lines_printed = checkpagin(lines_printed, pagin, height);
+FMTEND:
+ if (fpout) {
+ fprintf(fpout, "\n");
+ } else {
+ scr_printf("\n");
+ ++lines_printed;
+ lines_printed = checkpagin(lines_printed, pagin, height);
+ }
return (sigcaught);
}
};
void sttybbs(int cmd);
-int fmout(int width, FILE * fp, char pagin, int height, int starting_lp,
- char subst);
int haschar(char *st, int ch);
int checkpagin(int lp, int pagin, int height);
void getline(char *string, int lim);
*/
int read_message(
long num, /* message number */
- char pagin) /* 0 = normal read, 1 = read with pagination, 2 = header */
+ char pagin, /* 0 = normal read, 1 = read with pagination, 2 = header */
+ FILE *dest) /* Destination file, NULL for screen */
{
char buf[SIZ];
char m_subject[SIZ];
strcpy(node, "");
strcpy(rfca, "");
- scr_printf("\n");
- ++lines_printed;
- lines_printed = checkpagin(lines_printed, pagin, screenheight);
- scr_printf(" ");
- if (pagin == 1) {
+ if (dest) {
+ fprintf(dest, "\n ");
+ } else {
+ scr_printf("\n");
+ ++lines_printed;
+ lines_printed = checkpagin(lines_printed, pagin, screenheight);
+ scr_printf(" ");
+ }
+ if (pagin == 1 && !dest) {
color(BRIGHT_CYAN);
}
if (pagin == 2) {
while (serv_gets(buf), strcmp(buf, "000")) {
if (buf[4] == '=') {
- scr_printf("%s\n", buf);
- ++lines_printed;
- lines_printed =
- checkpagin(lines_printed,
- pagin, screenheight);
+ if (dest) {
+ fprintf(dest, "%s\n", buf);
+ } else {
+ scr_printf("%s\n", buf);
+ ++lines_printed;
+ lines_printed =
+ checkpagin(lines_printed,
+ pagin, screenheight);
+ }
}
}
sttybbs(0);
format_type = atoi(&buf[5]);
if ((!strncasecmp(buf, "msgn=", 5))
&& (rc_display_message_numbers)) {
- color(DIM_WHITE);
- scr_printf("[");
- color(BRIGHT_WHITE);
- scr_printf("#%s", &buf[5]);
- color(DIM_WHITE);
- scr_printf("] ");
+ if (dest) {
+ fprintf(dest, "[#%s] ", &buf[5]);
+ } else {
+ color(DIM_WHITE);
+ scr_printf("[");
+ color(BRIGHT_WHITE);
+ scr_printf("#%s", &buf[5]);
+ color(DIM_WHITE);
+ scr_printf("] ");
+ }
}
if (!strncasecmp(buf, "from=", 5)) {
- color(DIM_WHITE);
- scr_printf("from ");
- color(BRIGHT_CYAN);
- scr_printf("%s ", &buf[5]);
+ if (dest) {
+ fprintf(dest, "from %s ", &buf[5]);
+ } else {
+ color(DIM_WHITE);
+ scr_printf("from ");
+ color(BRIGHT_CYAN);
+ scr_printf("%s ", &buf[5]);
+ }
}
if (!strncasecmp(buf, "subj=", 5))
strcpy(m_subject, &buf[5]);
if (!strncasecmp(buf, "rfca=", 5)) {
safestrncpy(rfca, &buf[5], sizeof(rfca) - 5);
- color(DIM_WHITE);
- scr_printf("<");
- color(BRIGHT_BLUE);
- scr_printf("%s", &buf[5]);
- color(DIM_WHITE);
- scr_printf("> ");
+ if (dest) {
+ fprintf(dest, "<%s> ", &buf[5]);
+ } else {
+ color(DIM_WHITE);
+ scr_printf("<");
+ color(BRIGHT_BLUE);
+ scr_printf("%s", &buf[5]);
+ color(DIM_WHITE);
+ scr_printf("> ");
+ }
}
if ((!strncasecmp(buf, "hnod=", 5))
&& (strcasecmp(&buf[5], serv_info.serv_humannode))
&& (strlen(rfca) == 0)) {
- color(DIM_WHITE);
- scr_printf("(");
- color(BRIGHT_WHITE);
- scr_printf("%s", &buf[5]);
- color(DIM_WHITE);
- scr_printf(") ");
+ if (dest) {
+ fprintf(dest, "(%s) ", &buf[5]);
+ } else {
+ color(DIM_WHITE);
+ scr_printf("(");
+ color(BRIGHT_WHITE);
+ scr_printf("%s", &buf[5]);
+ color(DIM_WHITE);
+ scr_printf(") ");
+ }
}
if ((!strncasecmp(buf, "room=", 5))
&& (strcasecmp(&buf[5], room_name))
&& (strlen(rfca) == 0)) {
- color(DIM_WHITE);
- scr_printf("in ");
- color(BRIGHT_MAGENTA);
- scr_printf("%s> ", &buf[5]);
+ if (dest) {
+ fprintf(dest, "in %s> ", &buf[5]);
+ } else {
+ color(DIM_WHITE);
+ scr_printf("in ");
+ color(BRIGHT_MAGENTA);
+ scr_printf("%s> ", &buf[5]);
+ }
}
if (!strncasecmp(buf, "node=", 5)) {
(strcasecmp(&buf[5], serv_info.serv_fqdn)))))
{
if (strlen(rfca) == 0) {
- color(DIM_WHITE);
- scr_printf("@");
- color(BRIGHT_YELLOW);
- scr_printf("%s ", &buf[5]);
+ if (dest) {
+ fprintf(dest, "@%s ", &buf[5]);
+ } else {
+ color(DIM_WHITE);
+ scr_printf("@");
+ color(BRIGHT_YELLOW);
+ scr_printf("%s ", &buf[5]);
+ }
}
}
}
if (!strncasecmp(buf, "rcpt=", 5)) {
- color(DIM_WHITE);
- scr_printf("to ");
- color(BRIGHT_CYAN);
- scr_printf("%s ", &buf[5]);
+ if (dest) {
+ fprintf(dest, "to %s ", &buf[5]);
+ } else {
+ color(DIM_WHITE);
+ scr_printf("to ");
+ color(BRIGHT_CYAN);
+ scr_printf("%s ", &buf[5]);
+ }
}
if (!strncasecmp(buf, "time=", 5)) {
fmt_date(now, atol(&buf[5]), 0);
- scr_printf("%s ", now);
+ if (dest) {
+ fprintf(dest, "%s ", now);
+ } else {
+ scr_printf("%s ", now);
+ }
}
}
if (nhdr == 1) {
if (!is_room_aide) {
- scr_printf(" ****");
+ if (dest) {
+ fprintf(dest, " ****");
+ } else {
+ scr_printf(" ****");
+ }
} else {
- scr_printf(" %s", from);
+ if (dest) {
+ fprintf(dest, " %s", from);
+ } else {
+ scr_printf(" %s", from);
+ }
}
}
- scr_printf("\n");
+ if (dest) {
+ fprintf(dest, "\n");
+ } else {
+ scr_printf("\n");
+ }
if (strlen(rfca) > 0) {
strcpy(reply_to, rfca);
node);
}
- if (pagin == 1)
+ if (pagin == 1 && !dest)
color(BRIGHT_WHITE);
- ++lines_printed;
- lines_printed = checkpagin(lines_printed, pagin, screenheight);
+ if (!dest) {
+ ++lines_printed;
+ lines_printed = checkpagin(lines_printed, pagin, screenheight);
+ }
if (strlen(m_subject) > 0) {
- scr_printf("Subject: %s\n", m_subject);
- ++lines_printed;
- lines_printed =
- checkpagin(lines_printed, pagin, screenheight);
+ if (dest) {
+ fprintf(dest, "Subject: %s\n", m_subject);
+ } else {
+ scr_printf("Subject: %s\n", m_subject);
+ ++lines_printed;
+ lines_printed = checkpagin(lines_printed,
+ pagin, screenheight);
+ }
}
if (format_type == 0) {
- fr = fmout(screenwidth, NULL,
+ fr = fmout(screenwidth, NULL, dest,
((pagin == 1) ? 1 : 0), screenheight, (-1), 1);
} else {
while (serv_gets(buf), strcmp(buf, "000")) {
if (sigcaught == 0) {
+ if (dest) {
+ fprintf(dest, "%s\n", buf);
+ } else {
scr_printf("%s\n", buf);
- lines_printed = lines_printed + 1 +
- (strlen(buf) / screenwidth);
- lines_printed =
- checkpagin(lines_printed, pagin,
- screenheight);
+ lines_printed = lines_printed + 1 +
+ (strlen(buf) / screenwidth);
+ lines_printed =
+ checkpagin(lines_printed, pagin,
+ screenheight);
+ }
}
}
fr = sigcaught;
}
- scr_printf("\n");
- scr_flush();
- ++lines_printed;
- lines_printed = checkpagin(lines_printed, pagin, screenheight);
+ if (dest) {
+ fprintf(dest, "\n");
+ } else {
+ scr_printf("\n");
+ scr_flush();
+ ++lines_printed;
+ lines_printed = checkpagin(lines_printed, pagin, screenheight);
+ }
- if (pagin == 1)
+ if (pagin == 1 && !dest)
color(DIM_WHITE);
sttybbs(0);
return (fr);
if (mode == 0) {
fp = fopen(filename, "r");
if (fp != NULL) {
- fmout(screenwidth, fp, 0, screenheight, 0, 0);
+ fmout(screenwidth, fp, NULL, 0, screenheight, 0, 0);
beg = ftell(fp);
fclose(fp);
} else {
scr_printf("\n");
fp = fopen(filename, "r");
if (fp != NULL) {
- fmout(screenwidth, fp,
+ fmout(screenwidth, fp, NULL,
((userflags & US_PAGINATOR) ? 1 : 0),
screenheight, 0, 0);
beg = ftell(fp);
char cmd[SIZ];
char targ[ROOMNAMELEN];
char filename[SIZ];
+ FILE *dest = NULL; /* Alternate destination other than screen */
if (c < 0)
b = (MAXMSGS - 1);
}
/* now read the message... */
- e = read_message(msg_arr[a], pagin);
+ e = read_message(msg_arr[a], pagin, dest);
/* ...and set the screenwidth back if we have to */
if ((quotflag) || (arcflag)) {
RMSGREAD: scr_flush();
highest_msg_read = msg_arr[a];
if (quotflag) {
- freopen("/dev/tty", "r+", stdout);
+ fclose(dest);
+ dest = NULL;
quotflag = 0;
enable_color = hold_color;
process_quote();
}
if (arcflag) {
- freopen("/dev/tty", "r+", stdout);
+ fclose(dest);
+ dest = NULL;
arcflag = 0;
enable_color = hold_color;
f = fork();
goto RMSGREAD;
case 'p':
scr_flush();
- freopen(prtfile, "w", stdout);
+ dest = fopen(prtfile, "w");
arcflag = 1;
hold_color = enable_color;
enable_color = 0;
goto RAGAIN;
case 'q':
scr_flush();
- freopen(temp2, "w", stdout);
+ dest = fopen(temp2, "w");
quotflag = 1;
hold_color = enable_color;
enable_color = 0;
}
break;
case 'h':
- read_message(msg_arr[a], READ_HEADER);
+ read_message(msg_arr[a], READ_HEADER, NULL);
goto RMSGREAD;
case 'r':
savedpos = num_msgs;