]> code.citadel.org Git - citadel.git/commitdiff
* read_message() and fmout() now accept a FILE to which to send their
authorMichael Hampton <io_error@uncensored.citadel.org>
Tue, 22 Jan 2002 10:46:25 +0000 (10:46 +0000)
committerMichael Hampton <io_error@uncensored.citadel.org>
Tue, 22 Jan 2002 10:46:25 +0000 (10:46 +0000)
  output; this fixes quoting in the fullscreen client

citadel/ChangeLog
citadel/citadel.c
citadel/commands.c
citadel/commands.h
citadel/messages.c
citadel/rooms.c

index 227db862de45c8ca85b902f1139d566b7ba08269..a31a5952bb7b328452b02d6811a7d832ffefb56e 100644 (file)
@@ -1,4 +1,8 @@
  $Log$
+ Revision 590.80  2002/01/22 10:46:25  error
+ * read_message() and fmout() now accept a FILE to which to send their
+   output; this fixes quoting in the fullscreen client
+
  Revision 590.79  2002/01/20 08:03:43  error
  * curses client: use the status line as "input" line in chat mode
 
@@ -3212,3 +3216,4 @@ Sat Jul 11 00:20:48 EDT 1998 Nathan Bryant <bryant@cs.usm.maine.edu>
 
 Fri Jul 10 1998 Art Cancro <ajc@uncensored.citadel.org>
        * Initial CVS import 
+
index 5793f1681b845cd91885285c3b8caff6c30ac250..e4b427f6e3e187e64baab310cdb6a5bd7199fd28 100644 (file)
@@ -184,7 +184,7 @@ void formout(char *name)
                scr_printf("%s\n", &cmd[4]);
                return;
        }
-       fmout(screenwidth, NULL,
+       fmout(screenwidth, NULL, NULL,
              ((userflags & US_PAGINATOR) ? 1 : 0),
              screenheight, 1, 1);
 }
index 8ae1978a08ee2e3aee62efa0a2d7e4c76a338fc6..1fa6e127be962a752da6fb812fa5ba1702e0b649 100644 (file)
@@ -310,7 +310,7 @@ void print_express(void)
        
                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);
@@ -1184,7 +1184,8 @@ void display_help(char *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 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 */
@@ -1207,11 +1208,11 @@ int fmout(
        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;
                        }
@@ -1256,9 +1257,13 @@ FMTA:    while ((eof_flag == 0) && (strlen(buffer) < 126)) {
        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)
@@ -1266,11 +1271,15 @@ FMTA:   while ((eof_flag == 0) && (strlen(buffer) < 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;
@@ -1279,21 +1288,33 @@ FMTA:   while ((eof_flag == 0) && (strlen(buffer) < 126)) {
        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;
@@ -1305,9 +1326,14 @@ OOPS:    do {
                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);
 }
 
index 209dd06a67463bf5fb5373c17d066405ab66db2f..aff4a81794fc867187f7c39d5d55a3f0d8fd19fd 100644 (file)
@@ -36,8 +36,8 @@ void newprompt(char *prompt, char *str, int len);
 void strprompt(char *prompt, char *str, int len);
 int boolprompt(char *prompt, int prev_val);
 int intprompt(char *prompt, int ival, int imin, int imax);
-int fmout(int width, FILE *fp, char pagin, int height, int starting_lp,
-         char subst);
+int fmout(int width, FILE *fpin, FILE *fpout, char pagin, int height,
+               int starting_lp, char subst);
 int getcmd(char *argbuf);
 void display_help(char *name);
 void color(int colornum);
index 8bfc7a20e349f03ac5244140e4da5f94566248b7..ecbbc5b5821c7fdb1de80c70f00b14afdda4541d 100644 (file)
@@ -50,8 +50,6 @@ struct cittext {
 };
 
 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);
@@ -346,7 +344,8 @@ void citedit(FILE * fp)
  */
 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];
@@ -377,22 +376,30 @@ int read_message(
        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);
@@ -411,48 +418,68 @@ int read_message(
                        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)) {
@@ -465,34 +492,58 @@ int read_message(
                              (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);
@@ -501,40 +552,54 @@ int read_message(
                         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);
@@ -647,7 +712,7 @@ int client_make_message(char *filename,     /* temporary file name */
        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 {
@@ -750,7 +815,7 @@ MECR:       if (mode == 2) {
                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);
@@ -1088,6 +1153,7 @@ void readmsgs(
        char cmd[SIZ];
        char targ[ROOMNAMELEN];
        char filename[SIZ];
+       FILE *dest = NULL;      /* Alternate destination other than screen */
 
        if (c < 0)
                b = (MAXMSGS - 1);
@@ -1164,7 +1230,7 @@ RAGAIN:           pagin = ((arcflag == 0)
                }
 
                /* 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)) {
@@ -1173,13 +1239,15 @@ RAGAIN:         pagin = ((arcflag == 0)
 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();
@@ -1340,14 +1408,14 @@ RMSGREAD:       scr_flush();
                        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;
@@ -1408,7 +1476,7 @@ RMSGREAD: scr_flush();
                        }
                        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;
index 55bc1c5ed802c7b76d1f65fc6746edc550e21bf6..7940bb2c2a1638a1557a6137d3ae52777db44472 100644 (file)
@@ -41,8 +41,6 @@ void dotgoto(char *towhere, int display_name);
 void serv_read(char *buf, int bytes);
 void formout(char *name);
 int inkey(void);
-int fmout(int width, FILE * fp, char pagin, int height, int starting_lp,
-         char subst);
 void progress(long int curr, long int cmax);
 int pattern(char *search, char *patn);
 int file_checksum(char *filename);
@@ -995,7 +993,7 @@ void readinfo(void)
                return;
        }
 
-       fmout(screenwidth, NULL,
+       fmout(screenwidth, NULL, NULL,
              ((userflags & US_PAGINATOR) ? 1 : 0), screenheight, 0, 1);
 }