Added all of the MH sources, including RCS files, in
[mmh] / docs / historical / mh-6.8.5 / uip / RCS / forw.c,v
1 head    1.15;
2 access;
3 symbols;
4 locks; strict;
5 comment @ * @;
6
7
8 1.15
9 date    95.12.06.21.07.03;      author jromine; state Exp;
10 branches;
11 next    1.14;
12
13 1.14
14 date    93.08.25.17.25.18;      author jromine; state Exp;
15 branches;
16 next    1.13;
17
18 1.13
19 date    92.12.15.00.20.22;      author jromine; state Exp;
20 branches;
21 next    1.12;
22
23 1.12
24 date    92.11.04.00.43.17;      author jromine; state Exp;
25 branches;
26 next    1.11;
27
28 1.11
29 date    92.10.16.21.36.45;      author jromine; state Exp;
30 branches;
31 next    1.10;
32
33 1.10
34 date    92.05.19.21.07.06;      author jromine; state Exp;
35 branches;
36 next    1.9;
37
38 1.9
39 date    92.02.05.07.26.30;      author jromine; state Exp;
40 branches;
41 next    1.8;
42
43 1.8
44 date    92.02.04.17.46.56;      author jromine; state Exp;
45 branches;
46 next    1.7;
47
48 1.7
49 date    92.01.31.22.09.50;      author jromine; state Exp;
50 branches;
51 next    1.6;
52
53 1.6
54 date    90.04.05.14.59.50;      author sources; state Exp;
55 branches;
56 next    1.5;
57
58 1.5
59 date    90.03.23.15.02.44;      author sources; state Exp;
60 branches;
61 next    1.4;
62
63 1.4
64 date    90.03.20.10.35.58;      author sources; state Exp;
65 branches;
66 next    1.3;
67
68 1.3
69 date    90.02.06.13.19.09;      author sources; state Exp;
70 branches;
71 next    1.2;
72
73 1.2
74 date    90.02.01.14.15.54;      author sources; state Exp;
75 branches;
76 next    1.1;
77
78 1.1
79 date    90.02.01.14.15.39;      author sources; state Exp;
80 branches;
81 next    ;
82
83
84 desc
85 @@
86
87
88 1.15
89 log
90 @add repl -mime
91 @
92 text
93 @/* forw.c - forward messages */
94 #ifndef lint
95 static char ident[] = "@@(#)$Id: forw.c,v 1.14 1993/08/25 17:25:18 jromine Exp jromine $";
96 #endif  /* lint */
97
98 #include "../h/mh.h"
99 #include "../h/formatsbr.h"
100 #include "../zotnet/tws.h"
101 #include <stdio.h>
102 #include <sys/types.h>
103 #include <sys/stat.h>
104 #ifdef LOCALE
105 #include        <locale.h>
106 #endif
107
108 #ifndef MIME
109 #define MIMEminc(a)     (a)
110 #else   /* MIME */
111 #define MIMEminc(a)     0
112 #endif  /* MIME */
113
114 #define IFORMAT "digest-issue-%s"
115 #define VFORMAT "digest-volume-%s"
116
117 static  mhl_draft(), copy_draft(), build_form();
118 /* \f */
119
120 static struct swit switches[] = {
121 #define ANNOSW  0
122     "annotate", 0,
123 #define NANNOSW 1
124     "noannotate", 0,
125
126 #define DFOLDSW 2
127     "draftfolder +folder", 0,
128 #define DMSGSW  3
129     "draftmessage msg", 0,
130 #define NDFLDSW 4
131     "nodraftfolder", 0,
132
133 #define EDITRSW 5
134     "editor editor", 0,
135 #define NEDITSW 6
136     "noedit", 0,
137
138 #define FILTSW  7
139     "filter filterfile", 0,
140 #define FORMSW  8
141     "form formfile", 0,
142
143 #define FRMTSW  9
144     "format", 5,
145 #define NFRMTSW 10
146     "noformat", 7,
147
148 #define INPLSW  11
149     "inplace", 0,
150 #define NINPLSW 12
151     "noinplace", 0,
152
153 #define MIMESW  13
154     "mime", MIMEminc(-4),
155 #define NMIMESW 14
156     "nomime", MIMEminc(-6),
157
158 #define DGSTSW  15
159     "digest list", 0,
160 #define ISSUESW 16
161     "issue number", 0,
162 #define VOLUMSW 17
163     "volume number", 0,
164
165 #define WHATSW  18
166     "whatnowproc program", 0,
167 #define NWHATSW 19
168     "nowhatnowproc", 0,
169
170 #define HELPSW  20
171     "help", 4,
172
173 #define FILESW  21
174     "file file", -4,            /* interface from msh */
175
176 #define DASHSW  22
177     "dashmunging", -4,          /* interface to mhl */
178 #define NDASHSW 23
179     "nodashmunging", -6,
180
181 #ifdef  MHE
182 #define BILDSW  24
183     "build", -5,                /* interface from mhe */
184 #endif  /* MHE */
185
186     NULL, 0
187 };
188
189 /* \f */
190
191 static struct swit aqrnl[] = {
192 #define NOSW    0
193     "quit", 0,
194 #define YESW    1
195     "replace", 0,
196 #define LISTDSW 2
197     "list", 0,
198 #define REFILSW 3
199     "refile +folder", 0,
200 #define NEWSW   4
201     "new", 0,
202
203     NULL, 0
204 };
205
206
207 static struct swit aqrl[] = {
208     "quit", 0,
209     "replace", 0,
210     "list", 0,
211     "refile +folder", 0,
212
213     NULL, 0
214 };
215
216 /* \f */
217
218 static char drft[BUFSIZ];
219
220 static char delim3[] =
221     "\n------------------------------------------------------------\n\n";
222 static char delim4[] = "\n------------------------------\n\n";
223
224
225 static struct msgs *mp = NULL;          /* used a lot */
226
227
228 long    time ();
229 off_t   lseek();
230
231 /* \f */
232
233 /* ARGSUSED */
234
235 main (argc, argv)
236 int     argc;
237 char   *argv[];
238 {
239     int     msgp = 0,
240             anot = 0,
241             inplace = 0,
242             mime = 0,
243             issue = 0,
244             volume = 0,
245             dashflg = 1,
246 #ifdef  MHE
247             buildsw = 0,
248 #endif  /* MHE */
249             nedit = 0,
250             nwhat = 0,
251             i,
252             in,
253             out,
254             isdf = 0,
255             msgnum;
256     char   *cp,
257            *cwd,
258            *maildir,
259            *dfolder = NULL,
260            *dmsg = NULL,
261            *digest = NULL,
262            *ed = NULL,
263            *file = NULL,
264            *filter = NULL,
265            *folder = NULL,
266            *form = NULL,
267             buf[100],
268             value[10],
269           **ap,
270           **argp,
271            *arguments[MAXARGS],
272            *msgs[MAXARGS];
273     struct stat st;
274
275 #ifdef LOCALE
276         setlocale(LC_ALL, "");
277 #endif
278     invo_name = r1bindex (argv[0], '/');
279     if ((cp = m_find (invo_name)) != NULL) {
280         ap = brkstring (cp = getcpy (cp), " ", "\n");
281         ap = copyip (ap, arguments);
282     }
283     else
284         ap = arguments;
285     (void) copyip (argv + 1, ap);
286     argp = arguments;
287
288 /* \f */
289
290     while (cp = *argp++) {
291         if (*cp == '-')
292             switch (smatch (++cp, switches)) {
293                 case AMBIGSW: 
294                     ambigsw (cp, switches);
295                     done (1);
296                 case UNKWNSW: 
297                     adios (NULLCP, "-%s unknown", cp);
298                 case HELPSW: 
299                     (void) sprintf (buf, "%s [+folder] [msgs] [switches]",
300                         invo_name);
301                     help (buf, switches);
302                     done (1);
303
304                 case ANNOSW: 
305                     anot++;
306                     continue;
307                 case NANNOSW: 
308                     anot = 0;
309                     continue;
310
311                 case EDITRSW: 
312                     if (!(ed = *argp++) || *ed == '-')
313                         adios (NULLCP, "missing argument to %s", argp[-2]);
314                     nedit = 0;
315                     continue;
316                 case NEDITSW:
317                     nedit++;
318                     continue;
319
320                 case WHATSW: 
321                     if (!(whatnowproc = *argp++) || *whatnowproc == '-')
322                         adios (NULLCP, "missing argument to %s", argp[-2]);
323                     nwhat = 0;
324                     continue;
325 #ifdef  MHE
326                 case BILDSW:
327                     buildsw++;  /* fall... */
328 #endif  /* MHE */
329                 case NWHATSW: 
330                     nwhat++;
331                     continue;
332
333                 case FILESW: 
334                     if (file)
335                         adios (NULLCP, "only one file at a time!");
336                     if (!(cp = *argp++) || *cp == '-')
337                         adios (NULLCP, "missing argument to %s", argp[-2]);
338                     file = path (cp, TFILE);
339                     continue;
340                 case FILTSW:
341                     if (!(cp = *argp++) || *cp == '-')
342                         adios (NULLCP, "missing argument to %s", argp[-2]);
343                     filter = getcpy (libpath (cp));
344                     mime = 0;
345                     continue;
346                 case FORMSW: 
347                     if (!(form = *argp++) || *form == '-')
348                         adios (NULLCP, "missing argument to %s", argp[-2]);
349                     continue;
350
351                 case FRMTSW:
352                     filter = getcpy (libpath (mhlforward));
353                     continue;
354                 case NFRMTSW:
355                     filter = NULL;
356                     continue;
357
358                 case INPLSW: 
359                     inplace++;
360                     continue;
361                 case NINPLSW: 
362                     inplace = 0;
363                     continue;
364
365                 case MIMESW:
366 #ifdef  MIME
367                     mime++;
368                     filter = NULL;
369 #endif
370                     continue;
371                 case NMIMESW: 
372                     mime = 0;
373                     continue;
374
375                 case DGSTSW: 
376                     if (!(digest = *argp++) || *digest == '-')
377                         adios (NULLCP, "missing argument to %s", argp[-2]);
378                     mime = 0;
379                     continue;
380                 case ISSUESW:
381                     if (!(cp = *argp++) || *cp == '-')
382                         adios (NULLCP, "missing argument to %s", argp[-2]);
383                     if ((issue = atoi (cp)) < 1)
384                         adios (NULLCP, "bad argument %s %s", argp[-2], cp);
385                     continue;
386                 case VOLUMSW:
387                     if (!(cp = *argp++) || *cp == '-')
388                         adios (NULLCP, "missing argument to %s", argp[-2]);
389                     if ((volume = atoi (cp)) < 1)
390                         adios (NULLCP, "bad argument %s %s", argp[-2], cp);
391                     continue;
392
393                 case DFOLDSW: 
394                     if (dfolder)
395                         adios (NULLCP, "only one draft folder at a time!");
396                     if (!(cp = *argp++) || *cp == '-')
397                         adios (NULLCP, "missing argument to %s", argp[-2]);
398                     dfolder = path (*cp == '+' || *cp == '@@' ? cp + 1 : cp,
399                                     *cp != '@@' ? TFOLDER : TSUBCWF);
400                     continue;
401                 case DMSGSW:
402                     if (dmsg)
403                         adios (NULLCP, "only one draft message at a time!");
404                     if (!(dmsg = *argp++) || *dmsg == '-')
405                         adios (NULLCP, "missing argument to %s", argp[-2]);
406                     continue;
407                 case NDFLDSW: 
408                     dfolder = NULL;
409                     isdf = NOTOK;
410                     continue;
411
412                 case DASHSW: 
413                     dashflg++;
414                     continue;
415                 case NDASHSW: 
416                     dashflg = 0;
417                     continue;
418             }
419         if (*cp == '+' || *cp == '@@') {
420             if (folder)
421                 adios (NULLCP, "only one folder at a time!");
422             else
423                 folder = path (cp + 1, *cp == '+' ? TFOLDER : TSUBCWF);
424         }
425         else
426             msgs[msgp++] = cp;
427     }
428
429 /* \f */
430
431     cwd = getcpy (pwd ());
432
433     if (!m_find ("path"))
434         free (path ("./", TFOLDER));
435     if (file && (msgp || folder))
436         adios (NULLCP, "can't mix files and folders/msgs");
437
438 try_it_again: ;
439 #ifndef MHE
440     (void) strcpy (drft, m_draft (dfolder, dmsg, NOUSE, &isdf));
441     if (stat (drft, &st) != NOTOK) {
442 #else   /* MHE */
443     (void) strcpy (drft, buildsw ? m_maildir ("draft")
444                           : m_draft (dfolder, NULLCP, NOUSE, &isdf));
445     if (!buildsw && stat (drft, &st) != NOTOK) {
446 #endif  /* MHE */
447         printf ("Draft \"%s\" exists (%ld bytes).", drft, (long) st.st_size);
448         for (i = LISTDSW; i != YESW;) {
449             if (!(argp = getans ("\nDisposition? ", isdf ? aqrnl : aqrl)))
450                 done (1);
451             switch (i = smatch (*argp, isdf ? aqrnl : aqrl)) {
452                 case NOSW: 
453                     done (0);
454                 case NEWSW: 
455                     dmsg = NULL;
456                     goto try_it_again;
457                 case YESW: 
458                     break;
459                 case LISTDSW: 
460                     (void) showfile (++argp, drft);
461                     break;
462                 case REFILSW: 
463                     if (refile (++argp, drft) == 0)
464                         i = YESW;
465                     break;
466                 default: 
467                     advise (NULLCP, "say what?");
468                     break;
469             }
470         }
471     }
472
473 /* \f */
474
475     if (file) {
476         anot = 0;
477         goto go_to_it;
478     }
479
480     if (!msgp)
481         msgs[msgp++] = "cur";
482     if (!folder)
483         folder = m_getfolder ();
484     maildir = m_maildir (folder);
485
486     if (chdir (maildir) == NOTOK)
487         adios (maildir, "unable to change directory to");
488     if (!(mp = m_gmsg (folder)))
489         adios (NULLCP, "unable to read folder %s", folder);
490     if (mp -> hghmsg == 0)
491         adios (NULLCP, "no messages in %s", folder);
492
493     for (msgnum = 0; msgnum < msgp; msgnum++)
494         if (!m_convert (mp, msgs[msgnum]))
495             done (1);
496     m_setseq (mp);
497
498 /* \f */
499
500 go_to_it: ;
501     if (filter && access (filter, 04) == NOTOK)
502         adios (filter, "unable to read");
503
504     if (digest) {
505         if (issue == 0) {
506             (void) sprintf (buf, IFORMAT, digest);
507             if (volume == 0
508                     && (cp = m_find (buf))
509                     && ((issue = atoi (cp)) < 0))
510                 issue = 0;
511             issue++;
512         }
513         if (volume == 0)
514             (void) sprintf (buf, VFORMAT, digest);
515             if ((cp = m_find (buf)) == NULL || (volume = atoi (cp)) <= 0)
516                 volume = 1;
517         if (!form)
518             form = digestcomps;
519         in = build_form (form, digest, volume, issue);
520     }
521     else
522         if (form) {
523             if ((in = open (libpath (form), 0)) == NOTOK)
524                 adios (form, "unable to open form file");
525         }
526         else {
527             if ((in = open (libpath (forwcomps), 0)) == NOTOK)
528                 adios (forwcomps, "unable to open default components file");
529             form = forwcomps;
530         }
531
532     if ((out = creat (drft, m_gmprot ())) == NOTOK)
533         adios (drft, "unable to create");
534
535     cpydata (in, out, form, drft);
536     (void) close (in);
537
538 /* \f */
539
540     if (file) {
541         if ((in = open (file, 0)) == NOTOK)
542             adios (file, "unable to open");
543         cpydata (in, out, file, drft);
544         (void) close (in);
545         (void) close (out);
546         goto edit_it;
547     }
548
549     if (filter)
550         mhl_draft (out, digest, volume, issue, drft, filter, dashflg);
551     else
552         copy_draft (out, digest, drft, volume, issue, mime);
553     (void) close (out);
554
555     if (digest) {
556         (void) sprintf (buf, IFORMAT, digest);
557         (void) sprintf (value, "%d", issue);
558         m_replace (buf, getcpy (value));
559         (void) sprintf (buf, VFORMAT, digest);
560         (void) sprintf (value, "%d", volume);
561         m_replace (buf, getcpy (value));
562     }
563
564     m_replace (pfolder, folder);
565     if (mp -> lowsel != mp -> curmsg)
566         m_setcur (mp, mp -> lowsel);
567     m_sync (mp);
568     m_update ();
569
570 edit_it: ;
571     if (nwhat)
572         done (0);
573     (void) what_now (ed, nedit, NOUSE, drft, NULLCP, 0, mp,
574         anot ? "Forwarded" : NULLCP, inplace, cwd);
575     done (1);
576 }
577
578 /* \f */
579
580 static  mhl_draft  (out, digest, volume, issue, file, filter, dashflg)
581 int     out,
582         volume,
583         issue,
584         dashflg;
585 register char   *digest,
586                 *file,
587                 *filter;
588 {
589     int     i,
590             child_id,
591             msgnum,
592             pd[2];
593     char   *vec[MAXARGS];
594     char    buf1[BUFSIZ];
595     char    buf2[BUFSIZ];
596     
597     if (pipe (pd) == NOTOK)
598         adios ("pipe", "unable to create");
599
600     vec[0] = r1bindex (mhlproc, '/');
601
602     for (i = 0; (child_id = fork ()) == NOTOK && i < 5; i++)
603         sleep (5);
604     switch (child_id) {
605         case NOTOK: 
606             adios ("fork", "unable to");
607
608         case OK: 
609             (void) close (pd[0]);
610             (void) dup2 (pd[1], 1);
611             (void) close (pd[1]);
612
613             i = 1;
614             vec[i++] = "-forwall";
615             vec[i++] = "-form";
616             vec[i++] = filter;
617             if (digest) {
618                 vec[i++] = "-digest";
619                 vec[i++] = digest;
620                 vec[i++] = "-issue";
621                 sprintf(buf1, "%d", issue); vec[i++] = buf1;
622                 vec[i++] = "-volume";
623                 sprintf(buf2, "%d", volume); vec[i++] = buf2;
624             }
625             vec[i++] = dashflg ? "-dashmunging" : "-nodashmunging";
626             if (mp -> numsel >= MAXARGS - i)
627                 adios (NULLCP, "more than %d messages for %s exec",
628                         vec[0], MAXARGS - i);
629             for (msgnum = mp -> lowsel; msgnum <= mp -> hghsel; msgnum++)
630                 if (mp -> msgstats[msgnum] & SELECTED)
631                     vec[i++] = getcpy (m_name (msgnum));
632             vec[i] = NULL;
633
634             execvp (mhlproc, vec);
635             fprintf (stderr, "unable to exec ");
636             perror (mhlproc);
637             _exit (-1);
638
639         default: 
640             (void) close (pd[1]);
641             cpydata (pd[0], out, vec[0], file);
642             (void) close (pd[0]);
643             (void) pidXwait (child_id, mhlproc);
644             break;
645     }
646 }
647
648 /* \f */
649
650 static  copy_draft (out, digest, file, volume, issue, mime)
651 int     out,
652         volume,
653         issue,
654         mime;
655 register char   *digest,
656                 *file;
657 {
658     int     fd,i,
659             msgcnt,
660             msgnum;
661     register char  *bp,
662                    *msgnam;
663     char    buffer[BUFSIZ];
664
665 #ifdef MIME
666     if (mime) {
667         (void) sprintf (buffer, "#forw [forwarded message%s] +%s",
668                         mp -> numsel == 1 ? "" : "s", mp -> foldpath);
669         (void) write (out, buffer, strlen (buffer));
670         for (msgnum = mp -> lowsel; msgnum <= mp -> hghsel; msgnum++)
671             if (mp -> msgstats[msgnum] & SELECTED) {
672                 (void) sprintf (buffer, " %s", m_name (msgnum));
673                 (void) write (out, buffer, strlen (buffer));
674             }
675         (void) write (out, "\n", 1);
676
677         return;
678     }
679 #endif /* MIME */
680
681     msgcnt = 1;
682     for (msgnum = mp -> lowsel; msgnum <= mp -> hghsel; msgnum++)
683         if (mp -> msgstats[msgnum] & SELECTED) {
684             if (digest)
685                 (void) strcpy (buffer,
686                         msgnum == mp -> lowsel ? delim3 : delim4);
687             else {
688                 (void) strcpy (bp = buffer, "\n-------"), bp += strlen (bp);
689                 if (msgnum == mp -> lowsel)
690                     (void) sprintf (bp, " Forwarded Message%s",
691                             mp -> numsel > 1 ? "s" : "");
692                 else
693                     (void) sprintf (bp, " Message %d", msgcnt);
694                 bp += strlen (bp);
695                 (void) strcpy (bp, "\n\n");
696             }
697             (void) write (out, buffer, strlen (buffer));
698
699             if ((fd = open (msgnam = m_name (msgnum), 0)) == NOTOK) {
700                 admonish (msgnam, "unable to read message");
701                 continue;
702             }
703             cpydgst (fd, out, msgnam, file);
704             (void) close (fd);
705
706             msgcnt++;
707         }
708
709     if (digest)
710         (void) strcpy (buffer, delim4);
711     else
712         (void) sprintf (buffer, "\n------- End of Forwarded Message%s\n\n",
713                 mp -> numsel > 1 ? "s" : "");
714     (void) write (out, buffer, strlen (buffer));
715
716     if (digest) {
717         (void) sprintf (buffer, "End of %s Digest [Volume %d Issue %d]\n", digest, volume, issue);
718         i = strlen (buffer);
719         for (bp = buffer + i; i > 1; i--)
720             *bp++ = '*';
721         *bp++ = '\n';
722         *bp = 0;
723         (void) write (out, buffer, strlen (buffer));
724     }
725 }
726
727 /* \f */
728
729 static int  build_form (form, digest, volume, issue)
730 register char  *form,
731                *digest;
732 int     volume,
733         issue;
734 {
735     int     in;
736     int     fmtsize;
737     register char *nfs;
738     char   *line,
739             tmpfil[BUFSIZ];
740     register    FILE *tmp;
741     register struct comp *cptr;
742     struct format *fmt;
743     int     dat[5];
744
745     nfs = new_fs (form, NULLCP, NULLCP);
746     fmtsize = strlen (nfs) + 256;
747     (void) fmt_compile (nfs, &fmt);
748
749     FINDCOMP (cptr, "digest");
750     if (cptr)
751         cptr->c_text = digest;
752     FINDCOMP (cptr, "date");
753     if (cptr)
754         cptr->c_text = getcpy(dtimenow ());
755
756     dat[0] = issue;
757     dat[1] = volume;
758     dat[2] = 0;
759     dat[3] = fmtsize;
760     dat[4] = 0;
761
762     (void) strcpy (tmpfil, m_tmpfil (invo_name));
763     if ((tmp = fopen (tmpfil, "w+")) == NULL)
764         adios (tmpfil, "unable to create");
765     (void) unlink (tmpfil);
766     if ((in = dup (fileno (tmp))) == NOTOK)
767         adios ("dup", "unable to");
768
769     if ((line = malloc ((unsigned) fmtsize)) == NULLCP)
770         adios (NULLCP, "unable to allocate format line storage");
771     (void) fmtscan (fmt, line, fmtsize, dat);
772     (void) fputs (line, tmp);
773     (void) free (line);
774     if (fclose (tmp))
775         adios (tmpfil, "error writing");
776
777     (void) lseek (in, (off_t)0, 0);
778     return in;
779 }
780 @
781
782
783 1.14
784 log
785 @off_t fixes for BSD44
786 @
787 text
788 @d3 1
789 a3 1
790 static char ident[] = "@@(#)$Id: forw.c,v 1.13 1992/12/15 00:20:22 jromine Exp jromine $";
791 d575 2
792 a576 1
793         (void) sprintf (buffer, "#forw [] +%s", mp -> foldpath);
794 @
795
796
797 1.13
798 log
799 @endif sugar
800 @
801 text
802 @d3 1
803 a3 1
804 static char ident[] = "@@(#)$Id: forw.c,v 1.12 1992/11/04 00:43:17 jromine Exp jromine $";
805 d136 2
806 a137 1
807 long    lseek (), time ();
808 d355 1
809 a355 1
810         printf ("Draft \"%s\" exists (%ld bytes).", drft, st.st_size);
811 d684 1
812 a684 1
813     (void) lseek (in, 0L, 0);
814 @
815
816
817 1.12
818 log
819 @LOCALE
820 @
821 text
822 @d3 2
823 a4 2
824 static char ident[] = "@@(#)$Id: forw.c,v 1.11 1992/10/16 21:36:45 jromine Exp jromine $";
825 #endif  lint
826 d18 1
827 a18 1
828 #else   MIME
829 d20 1
830 a20 1
831 #endif  MIME
832 d92 1
833 a92 1
834 #endif  MHE
835 d155 1
836 a155 1
837 #endif  MHE
838 d235 1
839 a235 1
840 #endif  MHE
841 d349 1
842 a349 1
843 #else   MHE
844 d353 1
845 a353 1
846 #endif  MHE
847 @
848
849
850 1.11
851 log
852 @MIME chagnes
853 @
854 text
855 @d3 1
856 a3 1
857 static char ident[] = "@@(#)$Id: forw.c,v 1.10 1992/05/19 21:07:06 jromine Exp jromine $";
858 d12 3
859 d182 3
860 @
861
862
863 1.10
864 log
865 @AIX
866 @
867 text
868 @d3 1
869 a3 1
870 static char ident[] = "@@(#)$Id: forw.c,v 1.9 1992/02/05 07:26:30 jromine Exp jromine $";
871 d13 5
872 d58 6
873 a63 1
874 #define DGSTSW  13
875 d65 1
876 a65 1
877 #define ISSUESW 14
878 d67 1
879 a67 1
880 #define VOLUMSW 15
881 d70 1
882 a70 1
883 #define WHATSW  16
884 d72 1
885 a72 1
886 #define NWHATSW 17
887 d75 1
888 a75 1
889 #define HELPSW  18
890 d78 1
891 a78 1
892 #define FILESW  19
893 d81 1
894 a81 1
895 #define DASHSW  20
896 d83 1
897 a83 1
898 #define NDASHSW 21
899 d87 1
900 a87 1
901 #define BILDSW  22
902 d146 1
903 d245 1
904 d266 10
905 d279 1
906 d453 1
907 a453 1
908         copy_draft (out, digest, drft, volume, issue);
909 d551 1
910 a551 1
911 static  copy_draft (out, digest, file, volume, issue)
912 d554 2
913 a555 1
914         issue;
915 d565 15
916 @
917
918
919 1.9
920 log
921 @put unseen sequence in mh-format
922 @
923 text
924 @d3 1
925 a3 1
926 static char ident[] = "@@(#)$Id: forw.c,v 1.8 1992/02/04 17:46:56 jromine Exp jromine $";
927 d14 2
928 a15 2
929 #define IFMT    "digest-issue-%s"
930 #define VFMT    "digest-volume-%s"
931 d384 1
932 a384 1
933             (void) sprintf (buf, IFMT, digest);
934 d392 1
935 a392 1
936             (void) sprintf (buf, VFMT, digest);
937 d434 1
938 a434 1
939         (void) sprintf (buf, IFMT, digest);
940 d437 1
941 a437 1
942         (void) sprintf (buf, VFMT, digest);
943 @
944
945
946 1.8
947 log
948 @rename m_whatnow() to what_now() since it's not a m_ routine
949 @
950 text
951 @d3 1
952 a3 1
953 static char ident[] = "@@(#)$Id: forw.c,v 1.7 1992/01/31 22:09:50 jromine Exp jromine $";
954 d604 1
955 a604 1
956     int     dat[4];
957 d621 1
958 @
959
960
961 1.7
962 log
963 @kerberos
964 @
965 text
966 @d3 1
967 a3 1
968 static char ident[] = "@@(#)$Id: forw.c,v 1.6 1990/04/05 14:59:50 sources Exp jromine $";
969 d451 1
970 a451 1
971     (void) m_whatnow (ed, nedit, NOUSE, drft, NULLCP, 0, mp,
972 @
973
974
975 1.6
976 log
977 @add ID
978 @
979 text
980 @d3 1
981 a3 1
982 static char ident[] = "@@(#)$Id:$";
983 d81 1
984 a81 1
985     NULL, NULL
986 d98 1
987 a98 1
988     NULL, NULL
989 d108 1
990 a108 1
991     NULL, NULL
992 d583 1
993 a583 1
994         *bp = NULL;
995 @
996
997
998 1.5
999 log
1000 @make -[no]dashmunging hidden
1001 @
1002 text
1003 @d2 3
1004 @
1005
1006
1007 1.4
1008 log
1009 @additions for digests
1010 @
1011 text
1012 @d69 1
1013 a69 1
1014     "dashmunging", 0,
1015 d71 1
1016 a71 1
1017     "nodashmunging", 0,
1018 @
1019
1020
1021 1.3
1022 log
1023 @ANSI Compilance
1024 @
1025 text
1026 @d425 1
1027 a425 1
1028         mhl_draft (out, digest, drft, filter, dashflg);
1029 d427 1
1030 a427 1
1031         copy_draft (out, digest, drft);
1032 d455 1
1033 a455 1
1034 static  mhl_draft  (out, digest, file, filter, dashflg)
1035 d457 2
1036 d469 3
1037 a471 1
1038
1039 d495 4
1040 d525 4
1041 a528 2
1042 static  copy_draft (out, digest, file)
1043 int     out;
1044 d575 1
1045 a575 1
1046         (void) sprintf (buffer, "End of %s Digest\n", digest);
1047 @
1048
1049
1050 1.2
1051 log
1052 @make -[no]dashmunging visible
1053 @
1054 text
1055 @d14 1
1056 @
1057
1058
1059 1.1
1060 log
1061 @Initial revision
1062 @
1063 text
1064 @d68 1
1065 a68 1
1066     "dashmunging", -4,
1067 d70 1
1068 a70 1
1069     "nodashmunging", -6,
1070 @