- int state, out;
- char name[NAMESZ], buffer[BUFSIZ], tmpfil[BUFSIZ];
- register FILE *ifp, *ofp;
-
- if (hdrfd != NOTOK)
- close (hdrfd), hdrfd = NOTOK;
- if (txtfd != NOTOK)
- close (txtfd), txtfd = NOTOK;
-
- if ((ifp = fopen (msgnam, "r")) == NULL)
- adios (msgnam, "unable to open message");
-
- strncpy (tmpfil, m_tmpfil ("dist"), sizeof(tmpfil));
- if ((hdrfd = open (tmpfil, O_RDWR | O_CREAT | O_TRUNC, 0600)) == NOTOK)
- adios (tmpfil, "unable to re-open temporary file");
- if ((out = dup (hdrfd)) == NOTOK
- || (ofp = fdopen (out, "w")) == NULL)
- adios (NULL, "no file descriptors -- you lose big");
- unlink (tmpfil);
-
- for (state = FLD;;)
- switch (state =
- m_getfld (state, name, buffer, sizeof buffer, ifp)) {
- case FLD:
- case FLDPLUS:
- case FLDEOF:
- if (uprf (name, "resent"))
- fprintf (ofp, "Prev-");
- fprintf (ofp, "%s: %s", name, buffer);
- while (state == FLDPLUS) {
- state = m_getfld (state, name,
- buffer, sizeof buffer, ifp);
- fputs (buffer, ofp);
- }
- if (state == FLDEOF)
- goto process;
- break;
-
- case BODY:
- case BODYEOF:
- fclose (ofp);
-
- strncpy (tmpfil, m_tmpfil ("dist"), sizeof(tmpfil));
- if ((txtfd = open (tmpfil, O_RDWR | O_CREAT | O_TRUNC, 0600)) == NOTOK)
- adios (tmpfil, "unable to open temporary file");
- if ((out = dup (txtfd)) == NOTOK
- || (ofp = fdopen (out, "w")) == NULL)
- adios (NULL, "no file descriptors -- you lose big");
- unlink (tmpfil);
- fprintf (ofp, "\n%s", buffer);
- while (state == BODY) {
- state = m_getfld (state, name,
- buffer, sizeof buffer, ifp);
- fputs (buffer, ofp);
- }
- case FILEEOF:
- goto process;
-
- case LENERR:
- case FMTERR:
- adios (NULL, "format error in message %s", msgnam);