annotate lib-src/fakemail.c @ 22758:dbd9ecc9dbac

Added next-buffer/previous-buffer keybindings (bound to M-n/M-p). (crisp-unbury-buffer): New function. Fixed bogus XEmacs/Lucid string-match checking. Made modeline entry mouse2-able. (crisp-mode-map): Make this a sparse keymap parented from current-global-map. (crisp-mode-original-keymap): Don't copy the keymap. (crisp-last-last-command): Renamed from last-last-command. defvar it. (crisp-mode): Honor ARG. (crisp-kill-line, crisp-copy-line): When a region isn't highlighted, use the region from point to eol. Honor prefix argument. (crisp-submit-bug-report): New command, taken from cc-mode. Shortened the version numbering, removed the release-version tracking (crisp-version): New function. New keybindings `C-home', `C-end', `M-home', `M-end', `C-f', `M-l', `M-m'. (crisp-copy-line): No need to save point. Removed S-right and S-left bindings. Abstract the marking and selection interfaces so that we can be compatible with both Emacs and XEmacs. And try and make the behavior as close as possible under both environments so that there are no surprises.
author Karl Heuer <kwzh@gnu.org>
date Tue, 14 Jul 1998 22:17:35 +0000
parents 48690fd8d40a
children 7ebe942c4a9c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1 /* sendmail-like interface to /bin/mail for system V,
7307
cd81dba38a49 Update copyright.
Karl Heuer <kwzh@gnu.org>
parents: 6992
diff changeset
2 Copyright (C) 1985, 1994 Free Software Foundation, Inc.
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4 This file is part of GNU Emacs.
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5
37
e48c0f5e6696 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 20
diff changeset
6 GNU Emacs is free software; you can redistribute it and/or modify
e48c0f5e6696 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 20
diff changeset
7 it under the terms of the GNU General Public License as published by
6109
e52619114580 Update GPL.
David J. MacKenzie <djm@gnu.org>
parents: 5959
diff changeset
8 the Free Software Foundation; either version 2, or (at your option)
37
e48c0f5e6696 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 20
diff changeset
9 any later version.
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
10
37
e48c0f5e6696 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 20
diff changeset
11 GNU Emacs is distributed in the hope that it will be useful,
e48c0f5e6696 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 20
diff changeset
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
e48c0f5e6696 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 20
diff changeset
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
e48c0f5e6696 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 20
diff changeset
14 GNU General Public License for more details.
e48c0f5e6696 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 20
diff changeset
15
e48c0f5e6696 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 20
diff changeset
16 You should have received a copy of the GNU General Public License
e48c0f5e6696 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 20
diff changeset
17 along with GNU Emacs; see the file COPYING. If not, write to
14186
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 12840
diff changeset
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 12840
diff changeset
19 Boston, MA 02111-1307, USA. */
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21
21389
48690fd8d40a (_XOPEN_SOURCE): Define for declaration of cuserid.
Andreas Schwab <schwab@suse.de>
parents: 18841
diff changeset
22 /* This is needed to get the declaration of cuserid in GNU libc. */
48690fd8d40a (_XOPEN_SOURCE): Define for declaration of cuserid.
Andreas Schwab <schwab@suse.de>
parents: 18841
diff changeset
23 #define _XOPEN_SOURCE 1
48690fd8d40a (_XOPEN_SOURCE): Define for declaration of cuserid.
Andreas Schwab <schwab@suse.de>
parents: 18841
diff changeset
24
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
25 #define NO_SHORTNAMES
4696
1fc792473491 Include <config.h> instead of "config.h".
Roland McGrath <roland@gnu.org>
parents: 3219
diff changeset
26 #include <../src/config.h>
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
27
16218
32f82ca8b41f Replaced all BSD with BSD_SYSTEM.
Karl Heuer <kwzh@gnu.org>
parents: 16121
diff changeset
28 #if defined (BSD_SYSTEM) && !defined (BSD4_1) && !defined (USE_FAKEMAIL)
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
29 /* This program isnot used in BSD, so just avoid loader complaints. */
15683
5f9426e991a3 Declare main as int, not void.
Karl Heuer <kwzh@gnu.org>
parents: 15099
diff changeset
30 int
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
31 main ()
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
32 {
16121
6e026dc3f1b1 Whitespace fix.
Richard M. Stallman <rms@gnu.org>
parents: 15683
diff changeset
33 return 0;
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
34 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
35 #else /* not BSD 4.2 (or newer) */
5447
6f0905b05218 (main) [MSDOS]: Dummy stub just to make the file compile.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
36 #ifdef MSDOS
15683
5f9426e991a3 Declare main as int, not void.
Karl Heuer <kwzh@gnu.org>
parents: 15099
diff changeset
37 int
5447
6f0905b05218 (main) [MSDOS]: Dummy stub just to make the file compile.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
38 main ()
6f0905b05218 (main) [MSDOS]: Dummy stub just to make the file compile.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
39 {
16121
6e026dc3f1b1 Whitespace fix.
Richard M. Stallman <rms@gnu.org>
parents: 15683
diff changeset
40 return 0;
5447
6f0905b05218 (main) [MSDOS]: Dummy stub just to make the file compile.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
41 }
6f0905b05218 (main) [MSDOS]: Dummy stub just to make the file compile.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
42 #else /* not MSDOS */
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
43 /* This conditional contains all the rest of the file. */
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
44
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
45 /* These are defined in config in some versions. */
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
46
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
47 #ifdef static
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
48 #undef static
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
49 #endif
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
50
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
51 #ifdef read
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
52 #undef read
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
53 #undef write
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
54 #undef open
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
55 #undef close
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
56 #endif
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
57
15099
857388330750 [WINDOWSNT]: Include ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
58 #ifdef WINDOWSNT
857388330750 [WINDOWSNT]: Include ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
59 #include "ntlib.h"
857388330750 [WINDOWSNT]: Include ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
60 #endif
857388330750 [WINDOWSNT]: Include ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
61
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
62 #include <stdio.h>
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
63 #include <string.h>
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
64 #include <ctype.h>
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
65 #include <time.h>
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
66 #include <pwd.h>
18841
36704f455f32 [HAVE_UNISTD_H]: Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
67
36704f455f32 [HAVE_UNISTD_H]: Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
68 /* This is to declare cuserid. */
36704f455f32 [HAVE_UNISTD_H]: Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
69 #ifdef HAVE_UNISTD_H
36704f455f32 [HAVE_UNISTD_H]: Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
70 #include <unistd.h>
36704f455f32 [HAVE_UNISTD_H]: Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
71 #endif
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
72
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
73 /* Type definitions */
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
74
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
75 #define boolean int
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
76 #define true 1
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
77 #define false 0
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
78
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
79 /* Various lists */
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
80
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
81 struct line_record
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
82 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
83 char *string;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
84 struct line_record *continuation;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
85 };
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
86 typedef struct line_record *line_list;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
87
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
88 struct header_record
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
89 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
90 line_list text;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
91 struct header_record *next;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
92 struct header_record *previous;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
93 };
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
94 typedef struct header_record *header;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
95
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
96 struct stream_record
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
97 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
98 FILE *handle;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
99 int (*action)();
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
100 struct stream_record *rest_streams;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
101 };
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
102 typedef struct stream_record *stream_list;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
103
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
104 /* A `struct linebuffer' is a structure which holds a line of text.
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
105 * `readline' reads a line from a stream into a linebuffer
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
106 * and works regardless of the length of the line.
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
107 */
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
108
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
109 struct linebuffer
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
110 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
111 long size;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
112 char *buffer;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
113 };
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
114
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
115 struct linebuffer lb;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
116
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
117 #define new_list() \
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
118 ((line_list) xmalloc (sizeof (struct line_record)))
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
119 #define new_header() \
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
120 ((header) xmalloc (sizeof (struct header_record)))
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
121 #define new_stream() \
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
122 ((stream_list) xmalloc (sizeof (struct stream_record)))
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
123 #define alloc_string(nchars) \
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
124 ((char *) xmalloc ((nchars) + 1))
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
125
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
126 /* Global declarations */
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
127
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
128 #define BUFLEN 1024
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
129 #define KEYWORD_SIZE 256
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
130 #define FROM_PREFIX "From"
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
131 #define MY_NAME "fakemail"
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
132 #define NIL ((line_list) NULL)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
133 #define INITIAL_LINE_SIZE 200
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
134
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
135 #ifndef MAIL_PROGRAM_NAME
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
136 #define MAIL_PROGRAM_NAME "/bin/mail"
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
137 #endif
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
138
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
139 static char *my_name;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
140 static char *the_date;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
141 static char *the_user;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
142 static line_list file_preface;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
143 static stream_list the_streams;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
144 static boolean no_problems = true;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
145
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
146 extern FILE *popen ();
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
147 extern int fclose (), pclose ();
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
148
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
149 #ifdef CURRENT_USER
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
150 extern struct passwd *getpwuid ();
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
151 extern unsigned short geteuid ();
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
152 static struct passwd *my_entry;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
153 #define cuserid(s) \
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
154 (my_entry = getpwuid (((int) geteuid ())), \
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
155 my_entry->pw_name)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
156 #endif
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
157
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
158 /* Utilities */
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
159
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
160 /* Print error message. `s1' is printf control string, `s2' is arg for it. */
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
161
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
162 static void
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
163 error (s1, s2)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
164 char *s1, *s2;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
165 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
166 printf ("%s: ", my_name);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
167 printf (s1, s2);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
168 printf ("\n");
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
169 no_problems = false;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
170 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
171
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
172 /* Print error message and exit. */
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
173
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
174 static void
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
175 fatal (s1, s2)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
176 char *s1, *s2;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
177 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
178 error (s1, s2);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
179 exit (1);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
180 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
181
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
182 /* Like malloc but get fatal error if memory is exhausted. */
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
183
12833
25464bf61eb1 (xmalloc, xrealloc): Use return-type long *.
Richard M. Stallman <rms@gnu.org>
parents: 10265
diff changeset
184 static long *
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
185 xmalloc (size)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
186 int size;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
187 {
12833
25464bf61eb1 (xmalloc, xrealloc): Use return-type long *.
Richard M. Stallman <rms@gnu.org>
parents: 10265
diff changeset
188 long *result = (long *) malloc (((unsigned) size));
25464bf61eb1 (xmalloc, xrealloc): Use return-type long *.
Richard M. Stallman <rms@gnu.org>
parents: 10265
diff changeset
189 if (result == ((long *) NULL))
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
190 fatal ("virtual memory exhausted", 0);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
191 return result;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
192 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
193
12833
25464bf61eb1 (xmalloc, xrealloc): Use return-type long *.
Richard M. Stallman <rms@gnu.org>
parents: 10265
diff changeset
194 static long *
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
195 xrealloc (ptr, size)
12833
25464bf61eb1 (xmalloc, xrealloc): Use return-type long *.
Richard M. Stallman <rms@gnu.org>
parents: 10265
diff changeset
196 long *ptr;
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
197 int size;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
198 {
12833
25464bf61eb1 (xmalloc, xrealloc): Use return-type long *.
Richard M. Stallman <rms@gnu.org>
parents: 10265
diff changeset
199 long *result = (long *) realloc (ptr, ((unsigned) size));
12840
4e9a14304b8b (xrealloc): Change cast to match return type.
Karl Heuer <kwzh@gnu.org>
parents: 12833
diff changeset
200 if (result == ((long *) NULL))
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
201 fatal ("virtual memory exhausted");
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
202 return result;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
203 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
204
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
205 /* Initialize a linebuffer for use */
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
206
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
207 void
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
208 init_linebuffer (linebuffer)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
209 struct linebuffer *linebuffer;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
210 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
211 linebuffer->size = INITIAL_LINE_SIZE;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
212 linebuffer->buffer = ((char *) xmalloc (INITIAL_LINE_SIZE));
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
213 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
214
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
215 /* Read a line of text from `stream' into `linebuffer'.
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
216 * Return the length of the line.
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
217 */
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
218
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
219 long
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
220 readline (linebuffer, stream)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
221 struct linebuffer *linebuffer;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
222 FILE *stream;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
223 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
224 char *buffer = linebuffer->buffer;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
225 char *p = linebuffer->buffer;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
226 char *end = p + linebuffer->size;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
227
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
228 while (true)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
229 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
230 int c = getc (stream);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
231 if (p == end)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
232 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
233 linebuffer->size *= 2;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
234 buffer = ((char *) xrealloc (buffer, linebuffer->size));
6992
ed57331fb222 (readline): Fix updating of p when buffer grows.
Richard M. Stallman <rms@gnu.org>
parents: 6954
diff changeset
235 p = buffer + (p - linebuffer->buffer);
6954
774fdc20d115 (readline): When extending the buffer,
Richard M. Stallman <rms@gnu.org>
parents: 6109
diff changeset
236 end = buffer + linebuffer->size;
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
237 linebuffer->buffer = buffer;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
238 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
239 if (c < 0 || c == '\n')
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
240 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
241 *p = 0;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
242 break;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
243 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
244 *p++ = c;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
245 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
246
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
247 return p - buffer;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
248 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
249
10265
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
250 /* Extract a colon-terminated keyword from the string FIELD.
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
251 Return that keyword as a string stored in a static buffer.
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
252 Store the address of the rest of the string into *REST.
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
253
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
254 If there is no keyword, return NULL and don't alter *REST. */
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
255
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
256 char *
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
257 get_keyword (field, rest)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
258 register char *field;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
259 char **rest;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
260 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
261 static char keyword[KEYWORD_SIZE];
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
262 register char *ptr;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
263 register char c;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
264
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
265 ptr = &keyword[0];
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
266 c = *field++;
10265
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
267 if (isspace (c) || c == ':')
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
268 return ((char *) NULL);
10265
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
269 *ptr++ = (islower (c) ? toupper (c) : c);
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
270 while (((c = *field++) != ':') && ! isspace (c))
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
271 *ptr++ = (islower (c) ? toupper (c) : c);
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
272 *ptr++ = '\0';
10265
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
273 while (isspace (c))
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
274 c = *field++;
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
275 if (c != ':')
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
276 return ((char *) NULL);
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
277 *rest = field;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
278 return &keyword[0];
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
279 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
280
10265
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
281 /* Nonzero if the string FIELD starts with a colon-terminated keyword. */
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
282
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
283 boolean
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
284 has_keyword (field)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
285 char *field;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
286 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
287 char *ignored;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
288 return (get_keyword (field, &ignored) != ((char *) NULL));
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
289 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
290
10265
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
291 /* Store the string FIELD, followed by any lines in THE_LIST,
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
292 into the buffer WHERE.
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
293 Concatenate lines, putting just a space between them.
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
294 Delete everything contained in parentheses.
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
295 When a recipient name contains <...>, we discard
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
296 everything except what is inside the <...>.
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
297
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
298 We don't pay attention to overflowing WHERE;
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
299 the caller has to make it big enough. */
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
300
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
301 char *
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
302 add_field (the_list, field, where)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
303 line_list the_list;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
304 register char *field, *where;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
305 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
306 register char c;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
307 while (true)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
308 {
10265
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
309 char *this_recipient_where;
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
310 int in_quotes = 0;
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
311
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
312 *where++ = ' ';
10265
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
313 this_recipient_where = where;
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
314
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
315 while ((c = *field++) != '\0')
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
316 {
10265
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
317 if (c == '\\')
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
318 *where++ = c;
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
319 else if (c == '"')
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
320 {
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
321 in_quotes = ! in_quotes;
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
322 *where++ = c;
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
323 }
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
324 else if (in_quotes)
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
325 *where++ = c;
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
326 else if (c == '(')
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
327 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
328 while (*field && *field != ')') ++field;
10265
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
329 if (! (*field++)) break; /* no close */
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
330 continue;
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
331 }
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
332 else if (c == ',')
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
333 {
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
334 *where++ = ' ';
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
335 /* When we get to the end of one recipient,
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
336 don't discard it if the next one has <...>. */
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
337 this_recipient_where = where;
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
338 }
10265
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
339 else if (c == '<')
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
340 /* Discard everything we got before the `<'. */
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
341 where = this_recipient_where;
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
342 else if (c == '>')
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
343 /* Discard the rest of this name that follows the `>'. */
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
344 {
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
345 while (*field && *field != ',') ++field;
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
346 if (! (*field++)) break; /* no comma */
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
347 continue;
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
348 }
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
349 else
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
350 *where++ = c;
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
351 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
352 if (the_list == NIL) break;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
353 field = the_list->string;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
354 the_list = the_list->continuation;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
355 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
356 return where;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
357 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
358
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
359 line_list
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
360 make_file_preface ()
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
361 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
362 char *the_string, *temp;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
363 long idiotic_interface;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
364 long prefix_length;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
365 long user_length;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
366 long date_length;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
367 line_list result;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
368
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
369 prefix_length = strlen (FROM_PREFIX);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
370 time (&idiotic_interface);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
371 the_date = ctime (&idiotic_interface);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
372 /* the_date has an unwanted newline at the end */
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
373 date_length = strlen (the_date) - 1;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
374 the_date[date_length] = '\0';
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
375 temp = cuserid ((char *) NULL);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
376 user_length = strlen (temp);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
377 the_user = alloc_string (user_length + 1);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
378 strcpy (the_user, temp);
18841
36704f455f32 [HAVE_UNISTD_H]: Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
379 the_string = alloc_string (3 + prefix_length
36704f455f32 [HAVE_UNISTD_H]: Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
380 + user_length
36704f455f32 [HAVE_UNISTD_H]: Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
381 + date_length);
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
382 temp = the_string;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
383 strcpy (temp, FROM_PREFIX);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
384 temp = &temp[prefix_length];
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
385 *temp++ = ' ';
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
386 strcpy (temp, the_user);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
387 temp = &temp[user_length];
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
388 *temp++ = ' ';
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
389 strcpy (temp, the_date);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
390 result = new_list ();
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
391 result->string = the_string;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
392 result->continuation = ((line_list) NULL);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
393 return result;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
394 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
395
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
396 void
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
397 write_line_list (the_list, the_stream)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
398 register line_list the_list;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
399 FILE *the_stream;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
400 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
401 for ( ;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
402 the_list != ((line_list) NULL) ;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
403 the_list = the_list->continuation)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
404 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
405 fputs (the_list->string, the_stream);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
406 putc ('\n', the_stream);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
407 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
408 return;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
409 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
410
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
411 int
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
412 close_the_streams ()
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
413 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
414 register stream_list rem;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
415 for (rem = the_streams;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
416 rem != ((stream_list) NULL);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
417 rem = rem->rest_streams)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
418 no_problems = (no_problems &&
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
419 ((*rem->action) (rem->handle) == 0));
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
420 the_streams = ((stream_list) NULL);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
421 return (no_problems ? 0 : 1);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
422 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
423
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
424 void
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
425 add_a_stream (the_stream, closing_action)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
426 FILE *the_stream;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
427 int (*closing_action)();
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
428 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
429 stream_list old = the_streams;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
430 the_streams = new_stream ();
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
431 the_streams->handle = the_stream;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
432 the_streams->action = closing_action;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
433 the_streams->rest_streams = old;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
434 return;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
435 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
436
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
437 int
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
438 my_fclose (the_file)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
439 FILE *the_file;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
440 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
441 putc ('\n', the_file);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
442 fflush (the_file);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
443 return fclose (the_file);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
444 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
445
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
446 boolean
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
447 open_a_file (name)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
448 char *name;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
449 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
450 FILE *the_stream = fopen (name, "a");
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
451 if (the_stream != ((FILE *) NULL))
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
452 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
453 add_a_stream (the_stream, my_fclose);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
454 if (the_user == ((char *) NULL))
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
455 file_preface = make_file_preface ();
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
456 write_line_list (file_preface, the_stream);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
457 return true;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
458 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
459 return false;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
460 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
461
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
462 void
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
463 put_string (s)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
464 char *s;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
465 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
466 register stream_list rem;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
467 for (rem = the_streams;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
468 rem != ((stream_list) NULL);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
469 rem = rem->rest_streams)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
470 fputs (s, rem->handle);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
471 return;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
472 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
473
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
474 void
20
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
475 put_line (string)
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
476 char *string;
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
477 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
478 register stream_list rem;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
479 for (rem = the_streams;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
480 rem != ((stream_list) NULL);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
481 rem = rem->rest_streams)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
482 {
20
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
483 char *s = string;
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
484 int column = 0;
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
485
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
486 /* Divide STRING into lines. */
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
487 while (*s != 0)
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
488 {
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
489 char *breakpos;
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
490
5959
e4337a7bbe32 (put_line): Don't break the line if it all fits.
Richard M. Stallman <rms@gnu.org>
parents: 5447
diff changeset
491 /* Find the last char that fits. */
20
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
492 for (breakpos = s; *breakpos && column < 78; ++breakpos)
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
493 {
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
494 if (*breakpos == '\t')
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
495 column += 8;
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
496 else
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
497 column++;
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
498 }
5959
e4337a7bbe32 (put_line): Don't break the line if it all fits.
Richard M. Stallman <rms@gnu.org>
parents: 5447
diff changeset
499 /* If we didn't reach end of line, break the line. */
e4337a7bbe32 (put_line): Don't break the line if it all fits.
Richard M. Stallman <rms@gnu.org>
parents: 5447
diff changeset
500 if (*breakpos)
20
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
501 {
5959
e4337a7bbe32 (put_line): Don't break the line if it all fits.
Richard M. Stallman <rms@gnu.org>
parents: 5447
diff changeset
502 /* Back up to just after the last comma that fits. */
e4337a7bbe32 (put_line): Don't break the line if it all fits.
Richard M. Stallman <rms@gnu.org>
parents: 5447
diff changeset
503 while (breakpos != s && breakpos[-1] != ',') --breakpos;
e4337a7bbe32 (put_line): Don't break the line if it all fits.
Richard M. Stallman <rms@gnu.org>
parents: 5447
diff changeset
504
e4337a7bbe32 (put_line): Don't break the line if it all fits.
Richard M. Stallman <rms@gnu.org>
parents: 5447
diff changeset
505 if (breakpos == s)
e4337a7bbe32 (put_line): Don't break the line if it all fits.
Richard M. Stallman <rms@gnu.org>
parents: 5447
diff changeset
506 {
e4337a7bbe32 (put_line): Don't break the line if it all fits.
Richard M. Stallman <rms@gnu.org>
parents: 5447
diff changeset
507 /* If no comma fits, move past the first address anyway. */
e4337a7bbe32 (put_line): Don't break the line if it all fits.
Richard M. Stallman <rms@gnu.org>
parents: 5447
diff changeset
508 while (*breakpos != 0 && *breakpos != ',') ++breakpos;
e4337a7bbe32 (put_line): Don't break the line if it all fits.
Richard M. Stallman <rms@gnu.org>
parents: 5447
diff changeset
509 if (*breakpos != 0)
e4337a7bbe32 (put_line): Don't break the line if it all fits.
Richard M. Stallman <rms@gnu.org>
parents: 5447
diff changeset
510 /* Include the comma after it. */
e4337a7bbe32 (put_line): Don't break the line if it all fits.
Richard M. Stallman <rms@gnu.org>
parents: 5447
diff changeset
511 ++breakpos;
e4337a7bbe32 (put_line): Don't break the line if it all fits.
Richard M. Stallman <rms@gnu.org>
parents: 5447
diff changeset
512 }
20
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
513 }
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
514 /* Output that much, then break the line. */
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
515 fwrite (s, 1, breakpos - s, rem->handle);
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
516 column = 8;
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
517
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
518 /* Skip whitespace and prepare to print more addresses. */
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
519 s = breakpos;
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
520 while (*s == ' ' || *s == '\t') ++s;
3219
1aa8fa0a569e (put_line): Don't output \n\t unless more text follows.
Richard M. Stallman <rms@gnu.org>
parents: 37
diff changeset
521 if (*s != 0)
1aa8fa0a569e (put_line): Don't output \n\t unless more text follows.
Richard M. Stallman <rms@gnu.org>
parents: 37
diff changeset
522 fputs ("\n\t", rem->handle);
20
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
523 }
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
524 putc ('\n', rem->handle);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
525 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
526 return;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
527 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
528
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
529 #define mail_error error
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
530
10265
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
531 /* Handle an FCC field. FIELD is the text of the first line (after
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
532 the header name), and THE_LIST holds the continuation lines if any.
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
533 Call open_a_file for each file. */
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
534
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
535 void
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
536 setup_files (the_list, field)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
537 register line_list the_list;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
538 register char *field;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
539 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
540 register char *start;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
541 register char c;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
542 while (true)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
543 {
10265
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
544 while (((c = *field) != '\0')
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
545 && (c == ' '
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
546 || c == '\t'
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
547 || c == ','))
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
548 field += 1;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
549 if (c != '\0')
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
550 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
551 start = field;
10265
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
552 while (((c = *field) != '\0')
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
553 && c != ' '
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
554 && c != '\t'
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
555 && c != ',')
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
556 field += 1;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
557 *field = '\0';
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
558 if (!open_a_file (start))
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
559 mail_error ("Could not open file %s", start);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
560 *field = c;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
561 if (c != '\0') continue;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
562 }
10265
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
563 if (the_list == ((line_list) NULL))
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
564 return;
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
565 field = the_list->string;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
566 the_list = the_list->continuation;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
567 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
568 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
569
10265
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
570 /* Compute the total size of all recipient names stored in THE_HEADER.
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
571 The result says how big to make the buffer to pass to parse_header. */
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
572
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
573 int
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
574 args_size (the_header)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
575 header the_header;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
576 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
577 register header old = the_header;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
578 register line_list rem;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
579 register int size = 0;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
580 do
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
581 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
582 char *field;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
583 register char *keyword = get_keyword (the_header->text->string, &field);
10265
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
584 if ((strcmp (keyword, "TO") == 0)
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
585 || (strcmp (keyword, "CC") == 0)
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
586 || (strcmp (keyword, "BCC") == 0))
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
587 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
588 size += 1 + strlen (field);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
589 for (rem = the_header->text->continuation;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
590 rem != NIL;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
591 rem = rem->continuation)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
592 size += 1 + strlen (rem->string);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
593 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
594 the_header = the_header->next;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
595 } while (the_header != old);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
596 return size;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
597 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
598
10265
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
599 /* Scan the header described by the lists THE_HEADER,
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
600 and put all recipient names into the buffer WHERE.
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
601 Precede each recipient name with a space.
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
602
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
603 Also, if the header has any FCC fields, call setup_files for each one. */
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
604
21389
48690fd8d40a (_XOPEN_SOURCE): Define for declaration of cuserid.
Andreas Schwab <schwab@suse.de>
parents: 18841
diff changeset
605 void
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
606 parse_header (the_header, where)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
607 header the_header;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
608 register char *where;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
609 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
610 register header old = the_header;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
611 do
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
612 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
613 char *field;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
614 register char *keyword = get_keyword (the_header->text->string, &field);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
615 if (strcmp (keyword, "TO") == 0)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
616 where = add_field (the_header->text->continuation, field, where);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
617 else if (strcmp (keyword, "CC") == 0)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
618 where = add_field (the_header->text->continuation, field, where);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
619 else if (strcmp (keyword, "BCC") == 0)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
620 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
621 where = add_field (the_header->text->continuation, field, where);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
622 the_header->previous->next = the_header->next;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
623 the_header->next->previous = the_header->previous;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
624 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
625 else if (strcmp (keyword, "FCC") == 0)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
626 setup_files (the_header->text->continuation, field);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
627 the_header = the_header->next;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
628 } while (the_header != old);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
629 *where = '\0';
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
630 return;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
631 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
632
10265
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
633 /* Read lines from the input until we get a blank line.
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
634 Create a list of `header' objects, one for each header field,
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
635 each of which points to a list of `line_list' objects,
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
636 one for each line in that field.
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
637 Continuation lines are grouped in the headers they continue. */
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
638
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
639 header
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
640 read_header ()
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
641 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
642 register header the_header = ((header) NULL);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
643 register line_list *next_line = ((line_list *) NULL);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
644
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
645 init_linebuffer (&lb);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
646
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
647 do
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
648 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
649 long length;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
650 register char *line;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
651
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
652 readline (&lb, stdin);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
653 line = lb.buffer;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
654 length = strlen (line);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
655 if (length == 0) break;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
656
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
657 if (has_keyword (line))
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
658 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
659 register header old = the_header;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
660 the_header = new_header ();
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
661 if (old == ((header) NULL))
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
662 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
663 the_header->next = the_header;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
664 the_header->previous = the_header;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
665 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
666 else
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
667 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
668 the_header->previous = old;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
669 the_header->next = old->next;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
670 old->next = the_header;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
671 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
672 next_line = &(the_header->text);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
673 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
674
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
675 if (next_line == ((line_list *) NULL))
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
676 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
677 /* Not a valid header */
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
678 exit (1);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
679 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
680 *next_line = new_list ();
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
681 (*next_line)->string = alloc_string (length);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
682 strcpy (((*next_line)->string), line);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
683 next_line = &((*next_line)->continuation);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
684 *next_line = NIL;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
685
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
686 } while (true);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
687
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
688 return the_header->next;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
689 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
690
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
691 void
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
692 write_header (the_header)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
693 header the_header;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
694 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
695 register header old = the_header;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
696 do
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
697 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
698 register line_list the_list;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
699 for (the_list = the_header->text;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
700 the_list != NIL;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
701 the_list = the_list->continuation)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
702 put_line (the_list->string);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
703 the_header = the_header->next;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
704 } while (the_header != old);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
705 put_line ("");
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
706 return;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
707 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
708
15683
5f9426e991a3 Declare main as int, not void.
Karl Heuer <kwzh@gnu.org>
parents: 15099
diff changeset
709 int
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
710 main (argc, argv)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
711 int argc;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
712 char **argv;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
713 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
714 char *command_line;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
715 header the_header;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
716 long name_length;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
717 char *mail_program_name;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
718 char buf[BUFLEN + 1];
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
719 register int size;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
720 FILE *the_pipe;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
721
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
722 extern char *getenv ();
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
723
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
724 mail_program_name = getenv ("FAKEMAILER");
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
725 if (!(mail_program_name && *mail_program_name))
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
726 mail_program_name = MAIL_PROGRAM_NAME;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
727 name_length = strlen (mail_program_name);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
728
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
729 my_name = MY_NAME;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
730 the_streams = ((stream_list) NULL);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
731 the_date = ((char *) NULL);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
732 the_user = ((char *) NULL);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
733
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
734 the_header = read_header ();
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
735 command_line = alloc_string (name_length + args_size (the_header));
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
736 strcpy (command_line, mail_program_name);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
737 parse_header (the_header, &command_line[name_length]);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
738
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
739 the_pipe = popen (command_line, "w");
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
740 if (the_pipe == ((FILE *) NULL))
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
741 fatal ("cannot open pipe to real mailer");
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
742
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
743 add_a_stream (the_pipe, pclose);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
744
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
745 write_header (the_header);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
746
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
747 /* Dump the message itself */
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
748
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
749 while (!feof (stdin))
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
750 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
751 size = fread (buf, 1, BUFLEN, stdin);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
752 buf[size] = '\0';
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
753 put_string (buf);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
754 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
755
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
756 exit (close_the_streams ());
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
757 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
758
5447
6f0905b05218 (main) [MSDOS]: Dummy stub just to make the file compile.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
759 #endif /* not MSDOS */
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
760 #endif /* not BSD 4.2 (or newer) */