]> diplodocus.org Git - nmh/blob - docs/historical/mh-6.8.5/uip/RCS/sendsbr.c,v
sbr/mts.c: Delete mmdlm2; use same-valued mmdlm1 instead.
[nmh] / docs / historical / mh-6.8.5 / uip / RCS / sendsbr.c,v
1 head 2.14;
2 access;
3 symbols;
4 locks; strict;
5 comment @ * @;
6
7
8 2.14
9 date 93.08.25.17.28.05; author jromine; state Exp;
10 branches;
11 next 2.13;
12
13 2.13
14 date 93.08.20.15.54.44; author jromine; state Exp;
15 branches;
16 next 2.12;
17
18 2.12
19 date 92.12.15.00.20.22; author jromine; state Exp;
20 branches;
21 next 2.11;
22
23 2.11
24 date 92.12.03.17.42.42; author jromine; state Exp;
25 branches;
26 next 2.10;
27
28 2.10
29 date 92.11.24.18.10.13; author jromine; state Exp;
30 branches;
31 next 2.9;
32
33 2.9
34 date 92.10.26.16.48.46; author jromine; state Exp;
35 branches;
36 next 2.8;
37
38 2.8
39 date 92.10.16.22.34.49; author jromine; state Exp;
40 branches;
41 next 2.7;
42
43 2.7
44 date 92.10.16.22.30.15; author jromine; state Exp;
45 branches;
46 next 2.6;
47
48 2.6
49 date 92.10.16.21.37.40; author jromine; state Exp;
50 branches;
51 next 2.5;
52
53 2.5
54 date 92.01.31.22.27.17; author jromine; state Exp;
55 branches;
56 next 2.4;
57
58 2.4
59 date 92.01.31.16.35.02; author jromine; state Exp;
60 branches;
61 next 2.3;
62
63 2.3
64 date 90.04.05.14.57.18; author sources; state Exp;
65 branches;
66 next 2.2;
67
68 2.2
69 date 90.02.06.13.30.51; author sources; state Exp;
70 branches;
71 next 2.1;
72
73 2.1
74 date 90.02.05.14.26.30; author sources; state Exp;
75 branches;
76 next 2.0;
77
78 2.0
79 date 89.11.17.15.58.11; author sources; state Exp;
80 branches;
81 next 1.1;
82
83 1.1
84 date 89.11.17.15.44.55; author sources; state Exp;
85 branches;
86 next ;
87
88
89 desc
90 @@
91
92
93 2.14
94 log
95 @off_t fixes for BSD44
96 @
97 text
98 @/* sendsbr.c - routines to help WhatNow/Send along */
99 #ifndef lint
100 static char ident[] = "@@(#)$Id: sendsbr.c,v 2.13 1993/08/20 15:54:44 jromine Exp jromine $";
101 #endif /* lint */
102
103 #include "../h/mh.h"
104 #include <setjmp.h>
105 #include <stdio.h>
106 #include <signal.h>
107 #include <sys/types.h>
108 #include <sys/stat.h>
109
110 static alert(), anno(), annoaux();
111 static int tmp_fd();
112 static int sendaux();
113 #ifdef MIME
114 static int sendaux2();
115 #endif
116
117 /* \f */
118
119 int debugsw = 0; /* global */
120 int forwsw = 1;
121 int inplace = 0;
122 int mime = 0;
123 int pushsw = 0;
124 int splitsw = -1;
125 int unique = 0;
126 int verbsw = 0;
127
128 char *altmsg = NULL; /* .. */
129 char *annotext = NULL;
130 char *distfile = NULL;
131
132
133 static int armed = 0;
134 static jmp_buf env;
135
136
137 char *getusr ();
138 off_t lseek ();
139 long time ();
140
141 /* \f */
142
143 int sendsbr (vec, vecp, drft, st)
144 char **vec,
145 *drft;
146 int vecp;
147 struct stat *st;
148 {
149 int status;
150
151 armed++;
152 switch (setjmp (env)) {
153 case OK:
154 status = sendaux (vec, vecp, drft, st) ? NOTOK : OK;
155 break;
156
157 default:
158 status = DONE;
159 break;
160 }
161 armed = 0;
162 if (distfile)
163 (void) unlink (distfile);
164
165 return status;
166 }
167
168 /* \f */
169
170 #ifdef MIME
171 #include "../h/mhn.h"
172
173 static int sendaux (vec, vecp, drft, st)
174 register char **vec,
175 *drft;
176 int vecp;
177 register struct stat *st;
178 {
179 int compnum,
180 nparts,
181 partno,
182 state,
183 status;
184 long clock,
185 pos,
186 start;
187 char *cp,
188 *dp,
189 buffer[BUFSIZ],
190 msgid[BUFSIZ],
191 name[NAMESZ],
192 partnum[BUFSIZ];
193 struct stat sts;
194 FILE *in;
195
196 if (splitsw < 0
197 || distfile
198 || stat (drft, &sts) == NOTOK
199 || sts.st_size < CPERMSG) {
200 one_shot: ;
201 splitsw = -1;
202 return sendaux2 (vec, vecp, drft, st);
203 }
204
205 if ((in = fopen (drft, "r")) == NULL)
206 adios (drft, "unable to open for reading");
207
208 cp = dp = NULL;
209 start = 0L;
210 for (compnum = 1, state = FLD;;) {
211 switch (state = m_getfld (state, name, buffer, sizeof buffer, in)) {
212 case FLD:
213 case FLDPLUS:
214 case FLDEOF:
215 compnum++;
216
217 if (uleq (name, VRSN_FIELD)
218 || uleq (name, "Encrypted")
219 || uleq (name, "Message-ID")) {
220 while (state == FLDPLUS)
221 state = m_getfld (state, name, buffer, sizeof buffer,
222 in);
223 }
224 else
225 if (uprf (name, XXX_FIELD_PRF)) {
226 dp = add (concat (name, ":", buffer, NULLCP), dp);
227 while (state == FLDPLUS) {
228 state = m_getfld (state, name, buffer,
229 sizeof buffer, in);
230 dp = add (buffer, dp);
231 }
232 }
233 else {
234 cp = add (concat (name, ":", buffer, NULLCP), cp);
235 while (state == FLDPLUS) {
236 state = m_getfld (state, name, buffer,
237 sizeof buffer, in);
238 cp = add (buffer, cp);
239 }
240 }
241 if (state != FLDEOF) {
242 start = ftell (in) + 1;
243 continue;
244 }
245 /* else fall... */
246 case BODY:
247 case BODYEOF:
248 case FILEEOF:
249 break;
250
251 case LENERR:
252 case FMTERR:
253 adios (NULLCP, "message format error in component #%d",
254 compnum);
255
256 default:
257 adios (NULLCP, "getfld () returned %d", state);
258 }
259
260 break;
261 }
262 if (cp == NULL)
263 adios (NULLCP, "headers missing from draft");
264
265 nparts = 1, pos = start;
266 while (fgets (buffer, sizeof buffer - 1, in)) {
267 register long len;
268
269 if ((pos += (len = strlen (buffer))) > CPERMSG)
270 nparts++, pos = len;
271 }
272 if (nparts == 1) {
273 free (cp);
274 if (dp)
275 free (dp);
276
277 (void) fclose (in);
278
279 goto one_shot;
280 }
281
282 if (!pushsw) {
283 printf ("Sending as %d Partial Messages\n", nparts);
284 (void) fflush (stdout);
285 }
286 status = OK;
287
288 vec[vecp++] = "-partno";
289 vec[vecp++] = partnum;
290 if (splitsw == 0)
291 vec[vecp++] = "-queued";
292
293 (void) time (&clock);
294 (void) sprintf (msgid, "<%d.%ld@@%s>", getpid (), clock, LocalName ());
295
296 (void) fseek (in, start, 0);
297 for (partno = 1; partno <= nparts; partno++) {
298 char tmpdrf[BUFSIZ];
299 FILE *out;
300
301 (void) strcpy (tmpdrf, m_scratch (drft, invo_name));
302 if ((out = fopen (tmpdrf, "w")) == NULL)
303 adios (tmpdrf, "unable to open for writing");
304 (void) chmod (tmpdrf, 0600);
305
306 (void) fputs (cp, out);
307 fprintf (out, "%s: %s\n", VRSN_FIELD, VRSN_VALUE);
308 fprintf (out,
309 "%s: message/partial; id=\"%s\"; number=%d; total=%d\n",
310 TYPE_FIELD, msgid, partno, nparts);
311 fprintf (out, "%s: part %d of %d\n\n", DESCR_FIELD, partno,
312 nparts);
313
314 if (partno == 1) {
315 if (dp)
316 (void) fputs (dp, out);
317 fprintf (out, "Message-ID: %s\n", msgid);
318 fprintf (out, "\n");
319 }
320
321 pos = 0;
322 for (;;) {
323 register long len;
324
325 if (!fgets (buffer, sizeof buffer - 1, in)) {
326 if (partno == nparts)
327 break;
328 adios (NULLCP, "premature eof");
329 }
330
331 if ((pos += (len = strlen (buffer))) > CPERMSG) {
332 (void) fseek (in, -len, 1);
333 break;
334 }
335
336 (void) fputs (buffer, out);
337 }
338
339 if (fflush (out))
340 adios (tmpdrf, "error writing to");
341
342 (void) fclose (out);
343
344 if (!pushsw && verbsw) {
345 printf ("\n");
346 (void) fflush (stdout);
347 }
348 if (splitsw > 0 && 1 < partno && partno < nparts) {
349 if (!pushsw) {
350 printf ("pausing %d seconds before sending part %d...\n",
351 splitsw, partno);
352 (void) fflush (stdout);
353 }
354
355 sleep ((unsigned) splitsw);
356 }
357
358 (void) sprintf (partnum, "%d", partno);
359 status = sendaux2 (vec, vecp, tmpdrf, st);
360 (void) unlink (tmpdrf);
361 if (status != OK)
362 break;
363
364 annotext = NULL;
365 }
366
367 free (cp);
368 if (dp)
369 free (dp);
370
371 (void) fclose (in);
372
373 if (status == OK &&
374 rename (drft, strcpy (buffer, m_backup (drft))) == NOTOK)
375 advise (buffer, "unable to rename %s to", drft);
376
377 return status;
378 }
379 #endif
380
381 /* \f */
382
383 #ifndef MIME
384 static int sendaux (vec, vecp, drft, st)
385 #else /* MIME */
386 static int sendaux2 (vec, vecp, drft, st)
387 #endif /* MIME */
388 register char **vec,
389 *drft;
390 int vecp;
391 register struct stat *st;
392 {
393 int child_id,
394 i,
395 status,
396 fd,
397 fd2;
398 char backup[BUFSIZ],
399 buf[BUFSIZ],
400 file[BUFSIZ];
401
402 fd = pushsw ? tmp_fd () : NOTOK;
403 fd2 = NOTOK;
404
405 if (pushsw && unique) {
406 if (rename (drft, strcpy (file, m_scratch (drft, invo_name)))
407 == NOTOK)
408 adios (file, "unable to rename %s to", drft);
409 drft = file;
410 }
411 vec[vecp++] = drft;
412 if (annotext)
413 if ((fd2 = tmp_fd ()) != NOTOK) {
414 vec[vecp++] = "-idanno";
415 (void) sprintf (buf, "%d", fd2);
416 vec[vecp++] = buf;
417 }
418 else
419 admonish (NULLCP, "unable to create file for annotation list");
420 if (distfile && distout (drft, distfile, backup) == NOTOK)
421 done (1);
422 vec[vecp] = NULL;
423
424 for (i = 0; (child_id = vfork ()) == NOTOK && i < 5; i++)
425 sleep (5);
426 switch (child_id) {
427 case NOTOK: /* oops */
428 adios ("fork", "unable to");
429
430 case OK: /* send it */
431 if (fd != NOTOK) {
432 (void) dup2 (fd, fileno (stdout));
433 (void) dup2 (fd, fileno (stderr));
434 (void) close (fd);
435 }
436 execvp (postproc, vec);
437 fprintf (stderr, "unable to exec ");
438 perror (postproc);
439 _exit (-1);
440
441 default: /* wait for it */
442 if ((status = pidwait (child_id, NOTOK)) == 0) {
443 if (annotext && fd2 != NOTOK)
444 anno (fd2, st);
445 if (splitsw < 0
446 && rename (drft, strcpy (buf, m_backup (drft)))
447 == NOTOK)
448 advise (buf, "unable to rename %s to", drft);
449 }
450 else {
451 if (fd != NOTOK) {
452 alert (drft, fd);
453 (void) close (fd);
454 }
455 else
456 advise (NULLCP, "message not delivered to anyone");
457 if (annotext && fd2 != NOTOK)
458 (void) close (fd2);
459 if (distfile) {
460 (void) unlink (drft);
461 if (rename (backup, drft) == NOTOK)
462 advise (drft, "unable to rename %s to", backup);
463 }
464 }
465 break;
466 }
467
468 return status;
469 }
470
471 /* \f */
472
473 static alert (file, out)
474 register char *file;
475 int out;
476 {
477 int child_id,
478 i,
479 in;
480 char buf[BUFSIZ];
481
482 for (i = 0; (child_id = fork ()) == NOTOK && i < 5; i++)
483 sleep (5);
484 switch (child_id) {
485 case NOTOK: /* oops */
486 advise ("fork", "unable to");
487
488 case OK: /* send it */
489 (void) signal (SIGHUP, SIG_IGN);
490 (void) signal (SIGINT, SIG_IGN);
491 (void) signal (SIGQUIT, SIG_IGN);
492 (void) signal (SIGTERM, SIG_IGN);
493 if (forwsw)
494 if ((in = open (file, 0)) == NOTOK)
495 admonish (file, "unable to re-open");
496 else {
497 (void) lseek (out, (off_t)0, 2);
498 (void) strcpy (buf, "\nMessage not delivered to anyone.\n");
499 (void) write (out, buf, strlen (buf));
500 (void) strcpy (buf, "\n------- Unsent Draft\n\n");
501 (void) write (out, buf, strlen (buf));
502 cpydgst (in, out, file, "temporary file");
503 (void) close (in);
504 (void) strcpy (buf, "\n------- End of Unsent Draft\n");
505 (void) write (out, buf, strlen (buf));
506 if (rename (file, strcpy (buf, m_backup (file))) == NOTOK)
507 admonish (buf, "unable to rename %s to", file);
508 }
509 (void) lseek (out, (off_t)0, 0);
510 (void) dup2 (out, fileno (stdin));
511 (void) close (out);
512 (void) sprintf (buf, "send failed on %s",
513 forwsw ? "enclosed draft" : file);
514
515 execlp (mailproc, r1bindex (mailproc, '/'), getusr (),
516 "-subject", buf, NULLCP);
517 fprintf (stderr, "unable to exec ");
518 perror (mailproc);
519 _exit (-1);
520
521 default: /* no waiting... */
522 break;
523 }
524 }
525
526 /* \f */
527
528 static int tmp_fd () {
529 int fd;
530 char tmpfil[BUFSIZ];
531
532 (void) strcpy (tmpfil, m_tmpfil (invo_name));
533 if ((fd = creat (tmpfil, 0600)) == NOTOK)
534 return NOTOK;
535 (void) close (fd);
536
537 if ((fd = open (tmpfil, 2)) == NOTOK)
538 return NOTOK;
539 if (debugsw)
540 advise (NULLCP, "temporary file %s selected", tmpfil);
541 else
542 if (unlink (tmpfil) == NOTOK)
543 advise (tmpfil, "unable to remove");
544
545 return fd;
546 }
547
548 /* \f */
549
550 static anno (fd, st)
551 int fd;
552 register struct stat *st;
553 {
554 int child_id;
555 TYPESIG (*hstat) (), (*istat) (), (*qstat) (), (*tstat) ();
556 static char *cwd = NULL;
557 struct stat st2;
558
559 if (altmsg &&
560 (stat (altmsg, &st2) == NOTOK
561 || st -> st_mtime != st2.st_mtime
562 || st -> st_dev != st2.st_dev
563 || st -> st_ino != st2.st_ino)) {
564 if (debugsw)
565 admonish (NULLCP, "$mhaltmsg mismatch");
566 return;
567 }
568
569 child_id = debugsw ? NOTOK : fork ();
570 switch (child_id) {
571 case NOTOK: /* oops */
572 if (!debugsw)
573 advise (NULLCP,
574 "unable to fork, so doing annotations by hand...");
575 if (cwd == NULL)
576 cwd = getcpy (pwd ());
577
578 case OK:
579 hstat = signal (SIGHUP, SIG_IGN);
580 istat = signal (SIGINT, SIG_IGN);
581 qstat = signal (SIGQUIT, SIG_IGN);
582 tstat = signal (SIGTERM, SIG_IGN);
583
584 annoaux (fd);
585 if (child_id == OK)
586 _exit (0);
587
588 (void) signal (SIGHUP, hstat);
589 (void) signal (SIGINT, istat);
590 (void) signal (SIGQUIT, qstat);
591 (void) signal (SIGTERM, tstat);
592
593 (void) chdir (cwd);
594 break;
595
596 default: /* no waiting... */
597 (void) close (fd);
598 break;
599 }
600 }
601
602 /* \f */
603
604 static annoaux (fd)
605 int fd;
606 {
607 int fd2,
608 fd3,
609 msgnum;
610 char *cp,
611 *folder,
612 *maildir,
613 buffer[BUFSIZ],
614 **ap;
615 FILE *fp;
616 struct msgs *mp;
617
618 if ((folder = getenv ("mhfolder")) == NULL || *folder == 0) {
619 if (debugsw)
620 admonish (NULLCP, "$mhfolder not set");
621 return;
622 }
623 maildir = m_maildir (folder);
624 if (chdir (maildir) == NOTOK) {
625 if (debugsw)
626 admonish (maildir, "unable to change directory to");
627 return;
628 }
629 if (!(mp = m_gmsg (folder))) {
630 if (debugsw)
631 admonish (NULLCP, "unable to read folder %s");
632 return;
633 }
634 if (mp -> hghmsg == 0) {
635 if (debugsw)
636 admonish (NULLCP, "no messages in %s", folder);
637 goto oops;
638 }
639
640 if ((cp = getenv ("mhmessages")) == NULL || *cp == 0) {
641 if (debugsw)
642 admonish (NULLCP, "$mhmessages not set");
643 goto oops;
644 }
645 if (!debugsw /* MOBY HACK... */
646 && pushsw
647 && (fd3 = open ("/dev/null", 2)) != NOTOK
648 && (fd2 = dup (fileno (stderr))) != NOTOK) {
649 (void) dup2 (fd3, fileno (stderr));
650 (void) close (fd3);
651 }
652 else
653 fd2 = NOTOK;
654 for (ap = brkstring (cp = getcpy (cp), " ", NULLCP); *ap; ap++)
655 (void) m_convert (mp, *ap);
656 free (cp);
657 if (fd2 != NOTOK)
658 (void) dup2 (fd2, fileno (stderr));
659 if (mp -> numsel == 0) {
660 if (debugsw)
661 admonish (NULLCP, "no messages to annotate");
662 goto oops;
663 }
664
665 (void) lseek (fd, (off_t)0, 0);
666 if ((fp = fdopen (fd, "r")) == NULL) {
667 if (debugsw)
668 admonish (NULLCP, "unable to fdopen annotation list");
669 goto oops;
670 }
671 cp = NULL;
672 while (fgets (buffer, sizeof buffer, fp) != NULL)
673 cp = add (buffer, cp);
674 (void) fclose (fp);
675
676 if (debugsw)
677 advise (NULLCP, "annotate%s with %s: \"%s\"",
678 inplace ? " inplace" : "", annotext, cp);
679 for (msgnum = mp -> lowsel; msgnum <= mp -> hghsel; msgnum++)
680 if (mp -> msgstats[msgnum] & SELECTED) {
681 if (debugsw)
682 advise (NULLCP, "annotate message %d", msgnum);
683 (void) annotate (m_name (msgnum), annotext, cp, inplace, 1);
684 }
685
686 free (cp);
687
688 oops: ;
689 m_fmsg (mp);
690 }
691
692 /* \f */
693
694 void done (status)
695 int status;
696 {
697 if (armed)
698 longjmp (env, status ? status : NOTOK);
699
700 exit (status);
701 }
702 @
703
704
705 2.13
706 log
707 @fixes from mtr:
708 -partno, -queued interface
709 @
710 text
711 @d3 1
712 a3 1
713 static char ident[] = "@@(#)$Id: sendsbr.c,v 2.12 1992/12/15 00:20:22 jromine Exp jromine $";
714 d41 2
715 a42 1
716 long lseek (), time ();
717 d400 1
718 a400 1
719 (void) lseek (out, 0L, 2);
720 d412 1
721 a412 1
722 (void) lseek (out, 0L, 0);
723 d568 1
724 a568 1
725 (void) lseek (fd, 0L, 0);
726 @
727
728
729 2.12
730 log
731 @endif sugar
732 @
733 text
734 @d3 1
735 a3 1
736 static char ident[] = "@@(#)$Id: sendsbr.c,v 2.11 1992/12/03 17:42:42 jromine Exp jromine $";
737 d102 1
738 a105 1
739 status = OK;
740 a106 3
741 vec[vecp++] = "-partno";
742 vec[vecp++] = partnum;
743
744 d119 3
745 a121 1
746 if (uleq (name, VRSN_FIELD) || uleq (name, "Message-ID")) {
747 d164 2
748 d174 10
749 d188 6
750 @
751
752
753 2.11
754 log
755 @fixes for -split 0 (from mtr)
756 @
757 text
758 @d3 2
759 a4 2
760 static char ident[] = "@@(#)$Id: sendsbr.c,v 2.10 1992/11/24 18:10:13 jromine Exp jromine $";
761 #endif lint
762 @
763
764
765 2.10
766 log
767 @add decl
768 @
769 text
770 @d3 1
771 a3 1
772 static char ident[] = "@@(#)$Id: sendsbr.c,v 2.9 1992/10/26 16:48:46 jromine Exp jromine $";
773 d200 2
774 a201 1
775 (void) fputs (dp, out);
776 d253 2
777 a254 1
778 free (dp);
779 @
780
781
782 2.9
783 log
784 @fix from MTR
785 @
786 text
787 @d3 1
788 a3 1
789 static char ident[] = "@@(#)$Id: sendsbr.c,v 2.8 1992/10/16 22:34:49 jromine Exp jromine $";
790 d15 5
791 d267 1
792 a267 1
793 int sendaux (vec, vecp, drft, st)
794 @
795
796
797 2.8
798 log
799 @MIME changes
800 @
801 text
802 @d3 1
803 a3 1
804 static char ident[] = "@@(#)$Id: sendsbr.c,v 2.7 1992/10/16 22:30:15 jromine Exp jromine $";
805 d335 1
806 a335 1
807 if (fd2 != NOTOK)
808 @
809
810
811 2.7
812 log
813 @#ifdef MIME fixups
814 @
815 text
816 @d3 1
817 a3 1
818 static char ident[] = "@@(#)$Id: sendsbr.c,v 2.6 1992/10/16 21:37:40 jromine Exp jromine $";
819 d117 1
820 a117 1
821 if (uleq (name, VRSN_FIELD)) {
822 d123 7
823 a129 6
824 if (uprf (name, XXX_FIELD_PRF)) {
825 dp = add (concat (name, ": ", buffer, NULLCP), dp);
826 while (state == FLDPLUS) {
827 state = m_getfld (state, name, buffer, sizeof buffer,
828 in);
829 dp = add (buffer, dp);
830 d131 7
831 a137 7
832 }
833 else {
834 cp = add (concat (name, ": ", buffer, NULLCP), cp);
835 while (state == FLDPLUS) {
836 state = m_getfld (state, name, buffer, sizeof buffer,
837 in);
838 cp = add (buffer, cp);
839 a138 1
840 }
841 d191 2
842 a192 2
843 fprintf (out, "Content-Description: part %d of %d\n\n",
844 partno, nparts);
845 d196 1
846 @
847
848
849 2.6
850 log
851 @MIME changes
852 @
853 text
854 @d3 1
855 a3 1
856 static char ident[] = "@@(#)$Id: sendsbr.c,v 2.5 1992/01/31 22:27:17 jromine Exp jromine $";
857 d67 1
858 a69 1
859
860 d256 1
861 d260 3
862 d264 1
863 d320 1
864 a320 1
865 if (fd2 != NOTOK)
866 @
867
868
869 2.5
870 log
871 @kerberos
872 @
873 text
874 @d3 1
875 a3 1
876 static char ident[] = "@@(#)$Id: sendsbr.c,v 2.4 1992/01/31 16:35:02 jromine Exp jromine $";
877 d20 1
878 @
879
880
881 2.4
882 log
883 @Multimedia MH
884 @
885 text
886 @d3 1
887 a3 1
888 static char ident[] = "@@(#)$Id: sendsbr.c,v 2.3 90/04/05 14:57:18 sources Exp $";
889 d489 1
890 a489 1
891 if ((folder = getenv ("mhfolder")) == NULL || *folder == NULL) {
892 d511 1
893 a511 1
894 if ((cp = getenv ("mhmessages")) == NULL || *cp == NULL) {
895 @
896
897
898 2.3
899 log
900 @add ID
901 @
902 text
903 @d3 1
904 a3 1
905 static char ident[] = "@@(#)$Id:$";
906 d21 1
907 d23 1
908 d35 1
909 a35 1
910 long lseek ();
911 d66 4
912 a69 1
913 int sendaux (vec, vecp, drft, st)
914 d75 189
915 d314 1
916 a314 1
917 if (annotext && fd2 != NOTOK)
918 d316 3
919 a318 1
920 if (rename (drft, strcpy (buf, m_backup (drft))) == NOTOK)
921 @
922
923
924 2.2
925 log
926 @ANSI Compilance
927 @
928 text
929 @d2 3
930 @
931
932
933 2.1
934 log
935 @TYPESIG
936 @
937 text
938 @d10 2
939 @
940
941
942 2.0
943 log
944 @changes for SUN40 shared libraries and NNTP under bbc
945 @
946 text
947 @d225 1
948 a225 1
949 int (*hstat) (), (*istat) (), (*qstat) (), (*tstat) ();
950 @
951
952
953 1.1
954 log
955 @Initial revision
956 @
957 text
958 @d353 1
959 a353 1
960 (void) annotate (m_name (msgnum), annotext, cp, inplace);
961 @