]> diplodocus.org Git - nmh/blob - docs/historical/mh-6.8.5/uip/RCS/forw.c,v
sbr/mts.c: Delete mmdlm2; use same-valued mmdlm1 instead.
[nmh] / 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 @