-int CtdlOutputMsg(long msg_num, /* message number (local) to fetch */
- int mode, /* how would you like that message? */
- int headers_only, /* eschew the message body? */
- int do_proto, /* do Citadel protocol responses? */
- FILE *outfp,
- int outsock,
- int crlf /* Use CRLF newlines instead of LF? */
-) {
- int a, i, k;
- char buf[1024];
- time_t xtime;
- CIT_UBYTE ch;
- char allkeys[256];
- char display_name[256];
- struct CtdlMessage *TheMessage;
- char *mptr;
- char *nl; /* newline string */
-
- /* buffers needed for RFC822 translation */
- char suser[256];
- char luser[256];
- char snode[256];
- char lnode[256];
- char mid[256];
- /* */
-
-
- /* BEGIN NESTED FUNCTION omprintf() */
- void omprintf(const char *format, ...) {
- va_list arg_ptr;
- char buf[256];
-
- va_start(arg_ptr, format);
- if (vsnprintf(buf, sizeof buf, format, arg_ptr) == -1)
- buf[sizeof buf - 2] = '\n';
- if (outfp != NULL) {
- fwrite(buf, strlen(buf), 1, outfp);
- }
- else if (outsock >= 0) {
- write(outsock, buf, strlen(buf));
- }
- else {
- client_write(buf, strlen(buf));
- }
- va_end(arg_ptr);
- }
- /* END NESTED FUNCTION omprintf() */
-
- /* BEGIN NESTED FUNCTION omfmout() */
- void omfmout(char *mptr) {
- int b, c;
- int real = 0;
- int old = 0;
- CIT_UBYTE ch;
- char aaa[140];
- char buffer[256];
-
- strcpy(aaa, "");
- old = 255;
- strcpy(buffer, "");
- c = 1; /* c is the current pos */
-
-FMTA: ch = *mptr++;
- old = real;
- real = ch;
- if (ch <= 0)
- goto FMTEND;
-
- if (((ch == 13) || (ch == 10)) && (old != 13) && (old != 10))
- ch = 32;
- if (((old == 13) || (old == 10)) && (isspace(real))) {
- omprintf("%s", nl);
- c = 1;
- }
- if (ch > 126)
- goto FMTA;
-
- if (ch > 32) {
- if (((strlen(aaa) + c) > (75)) && (strlen(aaa) > (75))) {
- omprintf("%s%s", nl, aaa);
- c = strlen(aaa);
- aaa[0] = 0;
- }
- b = strlen(aaa);
- aaa[b] = ch;
- aaa[b + 1] = 0;
- }
- if (ch == 32) {
- if ((strlen(aaa) + c) > (75)) {
- omprintf("%s", nl);
- c = 1;
- }
- omprintf("%s ", aaa);
- ++c;
- c = c + strlen(aaa);
- strcpy(aaa, "");
- goto FMTA;
- }
- if ((ch == 13) || (ch == 10)) {
- omprintf("%s%s", aaa, nl);
- c = 1;
- strcpy(aaa, "");
- goto FMTA;
- }
- goto FMTA;
-
-FMTEND: omprintf("%s%s", aaa, nl);
- }
- /* END NESTED FUNCTION omfmout() */
-
- /* BEGIN NESTED FUNCTION fixed_output() */
- /*
- * Callback function for mime parser that wants to display text
- */
- void fixed_output(char *name, char *filename, char *partnum, char *disp,
- void *content, char *cbtype, size_t length)