annotate uip/mhlsbr.c @ 7:c20e4181370f

utf-8 input assumption in case of base64/utf-8
author kono
date Sun, 04 Dec 2005 02:30:39 +0900
parents 47d488958a4c
children 52d0fa25c554
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1 /* mhlsbr.c - implement the "nifty" message lister */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2 #ifndef lint
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3 static char ident[] = "@(#)$Id$";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
4 #endif /* lint */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
5
bce86c4163a3 Initial revision
kono
parents:
diff changeset
6 #include "../h/mh.h"
bce86c4163a3 Initial revision
kono
parents:
diff changeset
7 #include "../h/addrsbr.h"
bce86c4163a3 Initial revision
kono
parents:
diff changeset
8 #include "../h/formatsbr.h"
bce86c4163a3 Initial revision
kono
parents:
diff changeset
9 #include "../zotnet/tws.h"
bce86c4163a3 Initial revision
kono
parents:
diff changeset
10 #ifdef SVR4
bce86c4163a3 Initial revision
kono
parents:
diff changeset
11 #undef NULLVP /* XXX */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
12 #endif
bce86c4163a3 Initial revision
kono
parents:
diff changeset
13 #if defined(SYS5) && defined(AUX)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
14 #define u_short ushort
bce86c4163a3 Initial revision
kono
parents:
diff changeset
15 #define u_long ulong
bce86c4163a3 Initial revision
kono
parents:
diff changeset
16 #endif
bce86c4163a3 Initial revision
kono
parents:
diff changeset
17 #include <ctype.h>
bce86c4163a3 Initial revision
kono
parents:
diff changeset
18 #include <setjmp.h>
bce86c4163a3 Initial revision
kono
parents:
diff changeset
19 #include <signal.h>
bce86c4163a3 Initial revision
kono
parents:
diff changeset
20 #include <stdio.h>
bce86c4163a3 Initial revision
kono
parents:
diff changeset
21 #include <sys/types.h>
bce86c4163a3 Initial revision
kono
parents:
diff changeset
22 #include <sys/stat.h>
bce86c4163a3 Initial revision
kono
parents:
diff changeset
23 #ifdef UNISTD
bce86c4163a3 Initial revision
kono
parents:
diff changeset
24 #include <unistd.h>
bce86c4163a3 Initial revision
kono
parents:
diff changeset
25 #endif
bce86c4163a3 Initial revision
kono
parents:
diff changeset
26
bce86c4163a3 Initial revision
kono
parents:
diff changeset
27
bce86c4163a3 Initial revision
kono
parents:
diff changeset
28 /* MAJOR BUG:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
29 for a component containing addresses, ADDRFMT, if COMPRESS is also
bce86c4163a3 Initial revision
kono
parents:
diff changeset
30 set, then addresses get split wrong (not at the spaces between commas).
bce86c4163a3 Initial revision
kono
parents:
diff changeset
31 To fix this correctly, putstr() should know about "atomic" strings that
bce86c4163a3 Initial revision
kono
parents:
diff changeset
32 must NOT be broken across lines. That's too difficult for right now
bce86c4163a3 Initial revision
kono
parents:
diff changeset
33 (it turns out that there are a number of degernate cases), so in
bce86c4163a3 Initial revision
kono
parents:
diff changeset
34 oneline(), instead of
bce86c4163a3 Initial revision
kono
parents:
diff changeset
35
bce86c4163a3 Initial revision
kono
parents:
diff changeset
36 (*onelp == '\n' && !onelp[1])
bce86c4163a3 Initial revision
kono
parents:
diff changeset
37
bce86c4163a3 Initial revision
kono
parents:
diff changeset
38 being a terminating condition,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
39
bce86c4163a3 Initial revision
kono
parents:
diff changeset
40 (*onelp == '\n' && (!onelp[1] || (flags & ADDRFMT)))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
41
bce86c4163a3 Initial revision
kono
parents:
diff changeset
42 is used instead. This cuts the line prematurely, and gives us a much
bce86c4163a3 Initial revision
kono
parents:
diff changeset
43 better chance of getting things right.
bce86c4163a3 Initial revision
kono
parents:
diff changeset
44 */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
45
bce86c4163a3 Initial revision
kono
parents:
diff changeset
46
bce86c4163a3 Initial revision
kono
parents:
diff changeset
47 #ifdef SYS5
bce86c4163a3 Initial revision
kono
parents:
diff changeset
48 #define u_short ushort
bce86c4163a3 Initial revision
kono
parents:
diff changeset
49 #endif /* SYS5 */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
50
bce86c4163a3 Initial revision
kono
parents:
diff changeset
51 #define ONECOMP 0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
52 #define TWOCOMP 1
bce86c4163a3 Initial revision
kono
parents:
diff changeset
53 #define BODYCOMP 2
bce86c4163a3 Initial revision
kono
parents:
diff changeset
54
bce86c4163a3 Initial revision
kono
parents:
diff changeset
55 #define adios mhladios
bce86c4163a3 Initial revision
kono
parents:
diff changeset
56 #define done mhldone
bce86c4163a3 Initial revision
kono
parents:
diff changeset
57
bce86c4163a3 Initial revision
kono
parents:
diff changeset
58 #define QUOTE '\\'
bce86c4163a3 Initial revision
kono
parents:
diff changeset
59
bce86c4163a3 Initial revision
kono
parents:
diff changeset
60 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
61
bce86c4163a3 Initial revision
kono
parents:
diff changeset
62 static struct swit mhlswitches[] = {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
63 #define BELLSW 0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
64 "bell", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
65 #define NBELLSW 1
bce86c4163a3 Initial revision
kono
parents:
diff changeset
66 "nobell", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
67
bce86c4163a3 Initial revision
kono
parents:
diff changeset
68 #define CLRSW 2
bce86c4163a3 Initial revision
kono
parents:
diff changeset
69 "clear", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
70 #define NCLRSW 3
bce86c4163a3 Initial revision
kono
parents:
diff changeset
71 "noclear", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
72
bce86c4163a3 Initial revision
kono
parents:
diff changeset
73 #define FACESW 4
bce86c4163a3 Initial revision
kono
parents:
diff changeset
74 "faceproc program", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
75 #define NFACESW 5
bce86c4163a3 Initial revision
kono
parents:
diff changeset
76 "nofaceproc", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
77
bce86c4163a3 Initial revision
kono
parents:
diff changeset
78 #define FOLDSW 6
bce86c4163a3 Initial revision
kono
parents:
diff changeset
79 "folder +folder", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
80 #define FORMSW 7
bce86c4163a3 Initial revision
kono
parents:
diff changeset
81 "form formfile", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
82
bce86c4163a3 Initial revision
kono
parents:
diff changeset
83 #define PROGSW 8
bce86c4163a3 Initial revision
kono
parents:
diff changeset
84 "moreproc program", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
85 #define NPROGSW 9
bce86c4163a3 Initial revision
kono
parents:
diff changeset
86 "nomoreproc", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
87
bce86c4163a3 Initial revision
kono
parents:
diff changeset
88 #define LENSW 10
bce86c4163a3 Initial revision
kono
parents:
diff changeset
89 "length lines", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
90 #define WIDSW 11
bce86c4163a3 Initial revision
kono
parents:
diff changeset
91 "width columns", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
92
bce86c4163a3 Initial revision
kono
parents:
diff changeset
93 #define SLEEPSW 12
bce86c4163a3 Initial revision
kono
parents:
diff changeset
94 "sleep seconds", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
95
bce86c4163a3 Initial revision
kono
parents:
diff changeset
96 #define DASHSW 13
bce86c4163a3 Initial revision
kono
parents:
diff changeset
97 "dashmunging", -4,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
98 #define NDASHSW 14
bce86c4163a3 Initial revision
kono
parents:
diff changeset
99 "nodashmunging", -6,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
100
bce86c4163a3 Initial revision
kono
parents:
diff changeset
101 #define HELPSW 15
bce86c4163a3 Initial revision
kono
parents:
diff changeset
102 "help", 4,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
103
bce86c4163a3 Initial revision
kono
parents:
diff changeset
104 #define FORW1SW 16
bce86c4163a3 Initial revision
kono
parents:
diff changeset
105 "forward", -7, /* interface from forw */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
106 #define FORW2SW 17
bce86c4163a3 Initial revision
kono
parents:
diff changeset
107 "forwall", -7, /* .. */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
108 #define DGSTSW 18
bce86c4163a3 Initial revision
kono
parents:
diff changeset
109 "digest list", -6,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
110 #define VOLUMSW 19
bce86c4163a3 Initial revision
kono
parents:
diff changeset
111 "volume number", -6,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
112 #define ISSUESW 20
bce86c4163a3 Initial revision
kono
parents:
diff changeset
113 "issue number", -5,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
114 #define NBODYSW 21
bce86c4163a3 Initial revision
kono
parents:
diff changeset
115 "nobody", -6,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
116
bce86c4163a3 Initial revision
kono
parents:
diff changeset
117 NULL, 0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
118 };
bce86c4163a3 Initial revision
kono
parents:
diff changeset
119
bce86c4163a3 Initial revision
kono
parents:
diff changeset
120 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
121
bce86c4163a3 Initial revision
kono
parents:
diff changeset
122 struct mcomp {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
123 char *c_name; /* component name */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
124 char *c_text; /* component text */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
125 char *c_ovtxt; /* text overflow indicator */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
126 char *c_nfs; /* iff FORMAT */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
127 struct format *c_fmt; /* .. */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
128 char *c_face; /* face designator */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
129
bce86c4163a3 Initial revision
kono
parents:
diff changeset
130 int c_offset; /* left margin indentation */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
131 int c_ovoff; /* overflow indentation */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
132 int c_width; /* width of field */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
133 int c_cwidth; /* width of component */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
134 int c_length; /* length in lines */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
135
bce86c4163a3 Initial revision
kono
parents:
diff changeset
136 long c_flags;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
137 #define NOCOMPONENT 0x000001/* don't show component name */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
138 #define UPPERCASE 0x000002/* display in all upper case */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
139 #define CENTER 0x000004/* center line */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
140 #define CLEARTEXT 0x000008/* cleartext */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
141 #define EXTRA 0x000010/* an "extra" component */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
142 #define HDROUTPUT 0x000020/* already output */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
143 #define CLEARSCR 0x000040/* clear screen */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
144 #define LEFTADJUST 0x000080/* left justify multiple lines */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
145 #define COMPRESS 0x000100/* compress text */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
146 #define ADDRFMT 0x000200/* contains addresses */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
147 #define BELL 0x000400/* sound bell at EOP */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
148 #define DATEFMT 0x000800/* contains dates */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
149 #define FORMAT 0x001000/* parse address/date */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
150 #define INIT 0x002000/* initialize component */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
151 #define FACEFMT 0x004000/* contains face */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
152 #define FACEDFLT 0x008000/* default for face */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
153 #define SPLIT 0x010000/* split headers (don't concatenate) */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
154 #define NONEWLINE 0x020000/* don't write trailing newline */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
155 #ifdef MIME_HEADERS
bce86c4163a3 Initial revision
kono
parents:
diff changeset
156 #define DECODE 0x040000/* decode MIME header */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
157 #define LBITS "\020\01NOCOMPONENT\02UPPERCASE\03CENTER\04CLEARTEXT\05EXTRA\06HDROUTPUT\07CLEARSCR\010LEFTADJUST\011COMPRESS\012ADDRFMT\013BELL\014DATEFMT\015FORMAT\016INIT\017FACEFMT\020FACEDFLT\021SPLIT\022NONEWLINE\023DECODE"
bce86c4163a3 Initial revision
kono
parents:
diff changeset
158 #else /* MIME_HEADERS */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
159 #define LBITS "\020\01NOCOMPONENT\02UPPERCASE\03CENTER\04CLEARTEXT\05EXTRA\06HDROUTPUT\07CLEARSCR\010LEFTADJUST\011COMPRESS\012ADDRFMT\013BELL\014DATEFMT\015FORMAT\016INIT\017FACEFMT\020FACEDFLT\021SPLIT\022NONEWLINE"
bce86c4163a3 Initial revision
kono
parents:
diff changeset
160 #endif /* MIME_HEADERS */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
161 #define GFLAGS (NOCOMPONENT | UPPERCASE | CENTER | LEFTADJUST | COMPRESS \
bce86c4163a3 Initial revision
kono
parents:
diff changeset
162 | SPLIT)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
163
bce86c4163a3 Initial revision
kono
parents:
diff changeset
164 struct mcomp *c_next;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
165 };
bce86c4163a3 Initial revision
kono
parents:
diff changeset
166
bce86c4163a3 Initial revision
kono
parents:
diff changeset
167 static struct mcomp *msghd = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
168 static struct mcomp *msgtl = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
169 static struct mcomp *fmthd = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
170 static struct mcomp *fmttl = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
171
bce86c4163a3 Initial revision
kono
parents:
diff changeset
172 static struct mcomp global = {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
173 NULL, NULL, "", NULL, NULL, 0, -1, 80, -1, 40, BELL, 0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
174 };
bce86c4163a3 Initial revision
kono
parents:
diff changeset
175 static struct mcomp holder =
bce86c4163a3 Initial revision
kono
parents:
diff changeset
176 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
177 NULL, NULL, NULL, NULL, NULL, 0, 0, 0, 0, 0, NOCOMPONENT, 0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
178 };
bce86c4163a3 Initial revision
kono
parents:
diff changeset
179
bce86c4163a3 Initial revision
kono
parents:
diff changeset
180
bce86c4163a3 Initial revision
kono
parents:
diff changeset
181 static struct pair {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
182 char *p_name;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
183 long p_flags;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
184 } pairs[] = {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
185 "Date", DATEFMT,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
186 "From", ADDRFMT | FACEDFLT,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
187 "Sender", ADDRFMT,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
188 "Reply-To", ADDRFMT,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
189 "To", ADDRFMT,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
190 "cc", ADDRFMT,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
191 "Bcc", ADDRFMT,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
192 "Resent-Date", DATEFMT,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
193 "Resent-From", ADDRFMT,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
194 "Resent-Sender", ADDRFMT,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
195 "Resent-Reply-To", ADDRFMT,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
196 "Resent-To", ADDRFMT,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
197 "Resent-cc", ADDRFMT,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
198 "Resent-Bcc", ADDRFMT,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
199 "Face", FACEFMT,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
200
bce86c4163a3 Initial revision
kono
parents:
diff changeset
201 NULL
bce86c4163a3 Initial revision
kono
parents:
diff changeset
202 };
bce86c4163a3 Initial revision
kono
parents:
diff changeset
203
bce86c4163a3 Initial revision
kono
parents:
diff changeset
204 static struct triple {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
205 char *t_name;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
206 long t_on;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
207 long t_off;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
208 } triples[] = {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
209 "nocomponent", NOCOMPONENT, 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
210 "uppercase", UPPERCASE, 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
211 "nouppercase", 0, UPPERCASE,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
212 "center", CENTER, 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
213 "nocenter", 0, CENTER,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
214 "clearscreen", CLEARSCR, 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
215 "noclearscreen", 0, CLEARSCR,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
216 "noclear", 0, CLEARSCR,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
217 "leftadjust", LEFTADJUST, 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
218 "noleftadjust", 0, LEFTADJUST,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
219 "compress", COMPRESS, 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
220 "nocompress", 0, COMPRESS,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
221 "split", SPLIT, 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
222 "nosplit", 0, SPLIT,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
223 "addrfield", ADDRFMT, DATEFMT,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
224 "bell", BELL, 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
225 "nobell", 0, BELL,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
226 "datefield", DATEFMT, ADDRFMT,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
227 "newline", 0, NONEWLINE,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
228 "nonewline", NONEWLINE, 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
229 #ifdef MIME_HEADERS
bce86c4163a3 Initial revision
kono
parents:
diff changeset
230 "decode", DECODE, 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
231 #endif /* MIME_HEADERS */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
232
bce86c4163a3 Initial revision
kono
parents:
diff changeset
233 NULL
bce86c4163a3 Initial revision
kono
parents:
diff changeset
234 };
bce86c4163a3 Initial revision
kono
parents:
diff changeset
235
5
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
236 /* from mhn */
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
237
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
238 static int content_encoding; /* internal form */
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
239 #define CE_UNKNOWN 0x00
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
240 #define CE_BASE64 0x01
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
241 #define CE_QUOTED 0x02
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
242 #define CE_8BIT 0x03
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
243 #define CE_7BIT 0x04
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
244 #define CE_BINARY 0x05
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
245 #define CE_EXTENSION 0x06
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
246 #define CE_EXTERNAL 0x07 /* for external-body */
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
247
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
248 #define ENCODING_FIELD "Content-Transfer-Encoding"
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
249
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
250 struct str2init {
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
251 char *mhnsi_key;
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
252 int mhnsi_value;
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
253 };
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
254
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
255 static struct str2init str2ces[] = {
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
256 {"base64", CE_BASE64},
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
257 {"quoted-printable", CE_QUOTED},
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
258 {"8bit", CE_8BIT},
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
259 {"7bit", CE_7BIT},
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
260 {"binary", CE_BINARY},
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
261
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
262 {NULL, CE_EXTENSION},
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
263 {NULL, CE_UNKNOWN},
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
264 };
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
265
7
c20e4181370f utf-8 input assumption in case of base64/utf-8
kono
parents: 5
diff changeset
266 #define CS_DEFAULT 0
c20e4181370f utf-8 input assumption in case of base64/utf-8
kono
parents: 5
diff changeset
267 #define CS_JIS7 1
c20e4181370f utf-8 input assumption in case of base64/utf-8
kono
parents: 5
diff changeset
268 #define CS_JEUC 2
c20e4181370f utf-8 input assumption in case of base64/utf-8
kono
parents: 5
diff changeset
269 #define CS_SJIS 3
c20e4181370f utf-8 input assumption in case of base64/utf-8
kono
parents: 5
diff changeset
270 #define CS_UTF8 4
c20e4181370f utf-8 input assumption in case of base64/utf-8
kono
parents: 5
diff changeset
271 #define CS_NOCONV 99
c20e4181370f utf-8 input assumption in case of base64/utf-8
kono
parents: 5
diff changeset
272
c20e4181370f utf-8 input assumption in case of base64/utf-8
kono
parents: 5
diff changeset
273 static int content_type; /* internal form */
c20e4181370f utf-8 input assumption in case of base64/utf-8
kono
parents: 5
diff changeset
274 #define TYPE_FIELD "Content-Type"
c20e4181370f utf-8 input assumption in case of base64/utf-8
kono
parents: 5
diff changeset
275 static struct str2init str2charset[] = {
c20e4181370f utf-8 input assumption in case of base64/utf-8
kono
parents: 5
diff changeset
276 {"utf-8", CS_UTF8},
c20e4181370f utf-8 input assumption in case of base64/utf-8
kono
parents: 5
diff changeset
277 {"iso-2022-jp", CS_JIS7},
c20e4181370f utf-8 input assumption in case of base64/utf-8
kono
parents: 5
diff changeset
278 {"euc-jp", CS_JEUC},
c20e4181370f utf-8 input assumption in case of base64/utf-8
kono
parents: 5
diff changeset
279 {"xsjis", CS_SJIS},
c20e4181370f utf-8 input assumption in case of base64/utf-8
kono
parents: 5
diff changeset
280 {"shift_jis", CS_SJIS},
c20e4181370f utf-8 input assumption in case of base64/utf-8
kono
parents: 5
diff changeset
281 };
c20e4181370f utf-8 input assumption in case of base64/utf-8
kono
parents: 5
diff changeset
282
c20e4181370f utf-8 input assumption in case of base64/utf-8
kono
parents: 5
diff changeset
283
5
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
284 #define istoken(c) \
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
285 (!isspace (c) \
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
286 && !iscntrl (c) \
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
287 && !((c) & 0x80) \
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
288 && (c) != '(' \
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
289 && (c) != ')' \
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
290 && (c) != '<' \
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
291 && (c) != '>' \
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
292 && (c) != '@' \
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
293 && (c) != ',' \
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
294 && (c) != ';' \
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
295 && (c) != ':' \
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
296 && (c) != '\\' \
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
297 && (c) != '"' \
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
298 && (c) != '/' \
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
299 && (c) != '[' \
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
300 && (c) != ']' \
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
301 && (c) != '?' \
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
302 && (c) != '=')
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
303
0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
304 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
305
bce86c4163a3 Initial revision
kono
parents:
diff changeset
306 static int bellflg = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
307 static int clearflg = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
308 static int dashflg = 1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
309 static int dobody = 1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
310 static int forwflg = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
311 static int forwall = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
312
bce86c4163a3 Initial revision
kono
parents:
diff changeset
313 static int sleepsw = NOTOK;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
314
bce86c4163a3 Initial revision
kono
parents:
diff changeset
315 static char *digest = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
316 static int volume = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
317 static int issue = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
318
bce86c4163a3 Initial revision
kono
parents:
diff changeset
319 static int exitstat = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
320 static int mhldebug = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
321
bce86c4163a3 Initial revision
kono
parents:
diff changeset
322 #define PITTY (-1)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
323 #define NOTTY 0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
324 #define ISTTY 1
bce86c4163a3 Initial revision
kono
parents:
diff changeset
325 static int ontty = NOTTY;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
326
bce86c4163a3 Initial revision
kono
parents:
diff changeset
327 static int row;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
328 static int column;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
329
bce86c4163a3 Initial revision
kono
parents:
diff changeset
330 static int lm;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
331 static int llim;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
332 static int ovoff;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
333 static int term;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
334 static int wid;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
335
bce86c4163a3 Initial revision
kono
parents:
diff changeset
336
bce86c4163a3 Initial revision
kono
parents:
diff changeset
337 static char *ovtxt;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
338
bce86c4163a3 Initial revision
kono
parents:
diff changeset
339 static char *onelp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
340
bce86c4163a3 Initial revision
kono
parents:
diff changeset
341
bce86c4163a3 Initial revision
kono
parents:
diff changeset
342 static char *parptr;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
343 static char *ignores[MAXARGS];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
344
bce86c4163a3 Initial revision
kono
parents:
diff changeset
345
bce86c4163a3 Initial revision
kono
parents:
diff changeset
346 static jmp_buf env;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
347 static jmp_buf mhlenv;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
348
bce86c4163a3 Initial revision
kono
parents:
diff changeset
349
bce86c4163a3 Initial revision
kono
parents:
diff changeset
350 static char delim3[] = /* from forw.c */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
351 "\n----------------------------------------------------------------------\n\n";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
352 static char delim4[] = "\n------------------------------\n\n";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
353
bce86c4163a3 Initial revision
kono
parents:
diff changeset
354
bce86c4163a3 Initial revision
kono
parents:
diff changeset
355 static FP (*mhl_action) () = (FP (*) ()) 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
356
bce86c4163a3 Initial revision
kono
parents:
diff changeset
357
bce86c4163a3 Initial revision
kono
parents:
diff changeset
358 static void mhladios (), mhldone ();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
359 static TYPESIG intrser (), pipeser (), quitser ();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
360 static char *mcomp_add (), *oneline (), *parse ();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
361 static struct mcomp *add_queue ();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
362
bce86c4163a3 Initial revision
kono
parents:
diff changeset
363 static mhl_format(), evalvar(), process(), mhlfile(), free_queue(), putcomp();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
364 static putstr(), putch(), face_format(), m_popen();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
365 static int ptoi(), ptos(), doface();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
366
bce86c4163a3 Initial revision
kono
parents:
diff changeset
367 void clear_screen ();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
368
bce86c4163a3 Initial revision
kono
parents:
diff changeset
369 #ifdef JAPAN
bce86c4163a3 Initial revision
kono
parents:
diff changeset
370 static char mlbuf[BUFSIZ];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
371 static char *mlcp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
372 static int ml_cont_p;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
373 static void putstr_sbr();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
374 #endif /* JAPAN */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
375
bce86c4163a3 Initial revision
kono
parents:
diff changeset
376 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
377
bce86c4163a3 Initial revision
kono
parents:
diff changeset
378 /* ARGSUSED */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
379
bce86c4163a3 Initial revision
kono
parents:
diff changeset
380 int mhl (argc, argv)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
381 int argc;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
382 char *argv[];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
383 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
384 int length = 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
385 nomore = 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
386 width = 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
387 vecp = 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
388 i;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
389 register char *cp,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
390 *folder = NULL,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
391 *form = NULL,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
392 **ap,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
393 **argp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
394 char buf[80],
bce86c4163a3 Initial revision
kono
parents:
diff changeset
395 *arguments[MAXARGS],
bce86c4163a3 Initial revision
kono
parents:
diff changeset
396 *files[MAXARGS];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
397
bce86c4163a3 Initial revision
kono
parents:
diff changeset
398 invo_name = r1bindex (argv[0], '/');
bce86c4163a3 Initial revision
kono
parents:
diff changeset
399 if ((cp = getenv ("MHLDEBUG")) && *cp)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
400 mhldebug++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
401 if ((cp = m_find (invo_name)) != NULL) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
402 ap = brkstring (getcpy (cp), " ", "\n");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
403 ap = copyip (ap, arguments);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
404 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
405 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
406 ap = arguments;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
407 (void) copyip (argv + 1, ap);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
408 argp = arguments;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
409
bce86c4163a3 Initial revision
kono
parents:
diff changeset
410 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
411
bce86c4163a3 Initial revision
kono
parents:
diff changeset
412 if (cp = getenv ("FACEPROC"))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
413 faceproc = cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
414
bce86c4163a3 Initial revision
kono
parents:
diff changeset
415 vecp = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
416 while (cp = *argp++) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
417 if (*cp == '-')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
418 switch (smatch (++cp, mhlswitches)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
419 case AMBIGSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
420 ambigsw (cp, mhlswitches);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
421 done (1);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
422 case UNKWNSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
423 adios (NULLCP, "-%s unknown\n", cp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
424 case HELPSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
425 (void) sprintf (buf, "%s [switches] [files ...]",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
426 invo_name);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
427 help (buf, mhlswitches);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
428 done (1);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
429
bce86c4163a3 Initial revision
kono
parents:
diff changeset
430 case BELLSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
431 bellflg = 1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
432 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
433 case NBELLSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
434 bellflg = -1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
435 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
436
bce86c4163a3 Initial revision
kono
parents:
diff changeset
437 case CLRSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
438 clearflg = 1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
439 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
440 case NCLRSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
441 clearflg = -1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
442 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
443
bce86c4163a3 Initial revision
kono
parents:
diff changeset
444 case FOLDSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
445 if (!(folder = *argp++) || *folder == '-')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
446 adios (NULLCP, "missing argument to %s", argp[-2]);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
447 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
448 case FORMSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
449 if (!(form = *argp++) || *form == '-')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
450 adios (NULLCP, "missing argument to %s", argp[-2]);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
451 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
452
bce86c4163a3 Initial revision
kono
parents:
diff changeset
453 case FACESW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
454 if (!(faceproc = *argp++) || *faceproc == '-')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
455 adios (NULLCP, "missing argument to %s", argp[-2]);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
456 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
457 case NFACESW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
458 faceproc = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
459 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
460 case SLEEPSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
461 if (!(cp = *argp++) || *cp == '-')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
462 adios (NULLCP, "missing argument to %s", argp[-2]);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
463 sleepsw = atoi (cp);/* ZERO ok! */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
464 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
465
bce86c4163a3 Initial revision
kono
parents:
diff changeset
466 case PROGSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
467 if (!(moreproc = *argp++) || *moreproc == '-')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
468 adios (NULLCP, "missing argument to %s", argp[-2]);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
469 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
470 case NPROGSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
471 nomore++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
472 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
473
bce86c4163a3 Initial revision
kono
parents:
diff changeset
474 case LENSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
475 if (!(cp = *argp++) || *cp == '-')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
476 adios (NULLCP, "missing argument to %s", argp[-2]);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
477 if ((length = atoi (cp)) < 1)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
478 adios (NULLCP, "bad argument %s %s", argp[-2], cp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
479 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
480 case WIDSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
481 if (!(cp = *argp++) || *cp == '-')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
482 adios (NULLCP, "missing argument to %s", argp[-2]);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
483 if ((width = atoi (cp)) < 1)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
484 adios (NULLCP, "bad argument %s %s", argp[-2], cp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
485 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
486
bce86c4163a3 Initial revision
kono
parents:
diff changeset
487 case DGSTSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
488 if (!(digest = *argp++) || *digest == '-')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
489 adios (NULLCP, "missing argument to %s", argp[-2]);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
490 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
491 case ISSUESW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
492 if (!(cp = *argp++) || *cp == '-')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
493 adios (NULLCP, "missing argument to %s", argp[-2]);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
494 if ((issue = atoi (cp)) < 1)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
495 adios (NULLCP, "bad argument %s %s", argp[-2], cp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
496 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
497 case VOLUMSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
498 if (!(cp = *argp++) || *cp == '-')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
499 adios (NULLCP, "missing argument to %s", argp[-2]);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
500 if ((volume = atoi (cp)) < 1)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
501 adios (NULLCP, "bad argument %s %s", argp[-2], cp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
502 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
503
bce86c4163a3 Initial revision
kono
parents:
diff changeset
504 case FORW2SW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
505 forwall++; /* fall */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
506 case FORW1SW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
507 forwflg++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
508 clearflg = -1;/* XXX */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
509 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
510
bce86c4163a3 Initial revision
kono
parents:
diff changeset
511 case DASHSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
512 dashflg++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
513 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
514 case NDASHSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
515 dashflg = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
516 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
517
bce86c4163a3 Initial revision
kono
parents:
diff changeset
518 case NBODYSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
519 dobody = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
520 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
521 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
522 files[vecp++] = cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
523 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
524
bce86c4163a3 Initial revision
kono
parents:
diff changeset
525 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
526
bce86c4163a3 Initial revision
kono
parents:
diff changeset
527 if (!folder)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
528 folder = getenv ("mhfolder");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
529
bce86c4163a3 Initial revision
kono
parents:
diff changeset
530 if (isatty (fileno (stdout)))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
531 if (!nomore && !sc_hardcopy () && moreproc && *moreproc) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
532 if (mhl_action) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
533 setsig (SIGINT, SIG_IGN);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
534 setsig (SIGQUIT, quitser);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
535 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
536 m_popen (moreproc);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
537 ontty = PITTY;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
538 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
539 else {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
540 setsig (SIGINT, SIG_IGN);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
541 setsig (SIGQUIT, quitser);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
542 ontty = ISTTY;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
543 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
544 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
545 ontty = NOTTY;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
546
bce86c4163a3 Initial revision
kono
parents:
diff changeset
547 mhl_format (form ? form : mhlformat, length, width);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
548
bce86c4163a3 Initial revision
kono
parents:
diff changeset
549 if (vecp == 0)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
550 process (folder, NULLCP, 1, vecp = 1);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
551 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
552 for (i = 0; i < vecp; i++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
553 process (folder, files[i], i + 1, vecp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
554
bce86c4163a3 Initial revision
kono
parents:
diff changeset
555 if (forwall) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
556 if (digest) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
557 printf ("%s", delim4);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
558 if (volume == 0) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
559 (void) sprintf (buf, "End of %s Digest\n", digest);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
560 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
561 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
562 (void) sprintf (buf, "End of %s Digest [Volume %d Issue %d]\n", digest, volume, issue);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
563 i = strlen (buf);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
564 for (cp = buf + i; i > 1; i--)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
565 *cp++ = '*';
bce86c4163a3 Initial revision
kono
parents:
diff changeset
566 *cp++ = '\n';
bce86c4163a3 Initial revision
kono
parents:
diff changeset
567 *cp = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
568 printf ("%s", buf);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
569 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
570 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
571 printf ("\n------- End of Forwarded Message%s\n\n",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
572 vecp > 1 ? "s" : "");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
573 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
574
bce86c4163a3 Initial revision
kono
parents:
diff changeset
575 if (clearflg > 0 && ontty == NOTTY)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
576 clear_screen ();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
577
bce86c4163a3 Initial revision
kono
parents:
diff changeset
578 if (ontty == PITTY)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
579 m_pclose ();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
580
bce86c4163a3 Initial revision
kono
parents:
diff changeset
581 return exitstat;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
582 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
583
bce86c4163a3 Initial revision
kono
parents:
diff changeset
584 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
585
bce86c4163a3 Initial revision
kono
parents:
diff changeset
586 static mhl_format (file, length, width)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
587 register char *file;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
588 int length,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
589 width;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
590 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
591 int i;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
592 register char *bp,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
593 *cp,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
594 **ip;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
595 char *ap,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
596 buffer[BUFSIZ],
bce86c4163a3 Initial revision
kono
parents:
diff changeset
597 name[NAMESZ];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
598 register struct mcomp *c1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
599 struct stat st;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
600 register FILE *fp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
601 static dev_t dev = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
602 static ino_t ino = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
603 static time_t mtime = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
604
bce86c4163a3 Initial revision
kono
parents:
diff changeset
605 if (fmthd != NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
606 if (stat (libpath (file), &st) != NOTOK
bce86c4163a3 Initial revision
kono
parents:
diff changeset
607 && mtime == st.st_mtime
bce86c4163a3 Initial revision
kono
parents:
diff changeset
608 && dev == st.st_dev
bce86c4163a3 Initial revision
kono
parents:
diff changeset
609 && ino == st.st_ino)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
610 goto out;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
611 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
612 free_queue (&fmthd, &fmttl);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
613
bce86c4163a3 Initial revision
kono
parents:
diff changeset
614 if ((fp = fopen (libpath (file), "r")) == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
615 adios (file, "unable to open format file");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
616
bce86c4163a3 Initial revision
kono
parents:
diff changeset
617 if (fstat (fileno (fp), &st) != NOTOK)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
618 mtime = st.st_mtime, dev = st.st_dev, ino = st.st_ino;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
619
bce86c4163a3 Initial revision
kono
parents:
diff changeset
620 global.c_ovtxt = global.c_nfs = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
621 global.c_fmt = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
622 global.c_offset = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
623 global.c_ovoff = -1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
624 if ((i = sc_width ()) > 5)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
625 global.c_width = i;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
626 global.c_cwidth = -1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
627 if ((i = sc_length ()) > 5)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
628 global.c_length = i - 1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
629 global.c_flags = BELL; /* BELL is default */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
630 *(ip = ignores) = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
631
bce86c4163a3 Initial revision
kono
parents:
diff changeset
632 while (vfgets (fp, &ap) == OK) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
633 #ifdef JAPAN
bce86c4163a3 Initial revision
kono
parents:
diff changeset
634 (void) ml_conv(ap);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
635 #endif /* JAPAN */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
636 bp = ap;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
637 if (*bp == ';')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
638 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
639
bce86c4163a3 Initial revision
kono
parents:
diff changeset
640 if (cp = index (bp, '\n'))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
641 *cp = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
642
bce86c4163a3 Initial revision
kono
parents:
diff changeset
643 if (*bp == ':') {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
644 c1 = add_queue (&fmthd, &fmttl, NULLCP, bp + 1, CLEARTEXT);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
645 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
646 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
647
bce86c4163a3 Initial revision
kono
parents:
diff changeset
648 parptr = bp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
649 (void) strcpy (name, parse ());
bce86c4163a3 Initial revision
kono
parents:
diff changeset
650 switch (*parptr) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
651 case '\0':
bce86c4163a3 Initial revision
kono
parents:
diff changeset
652 case ',':
bce86c4163a3 Initial revision
kono
parents:
diff changeset
653 case '=':
bce86c4163a3 Initial revision
kono
parents:
diff changeset
654 if (uleq (name, "ignores")) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
655 ip = copyip (brkstring (getcpy (++parptr), ",", NULLCP), ip);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
656 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
657 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
658 parptr = bp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
659 while (*parptr) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
660 if (evalvar (&global))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
661 adios (NULLCP, "format file syntax error: %s", bp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
662 if (*parptr)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
663 parptr++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
664 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
665 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
666
bce86c4163a3 Initial revision
kono
parents:
diff changeset
667 case ':':
bce86c4163a3 Initial revision
kono
parents:
diff changeset
668 c1 = add_queue (&fmthd, &fmttl, name, NULLCP, INIT);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
669 while (*parptr == ':' || *parptr == ',') {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
670 parptr++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
671 if (evalvar (c1))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
672 adios (NULLCP, "format file syntax error: %s", bp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
673 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
674 if (!c1 -> c_nfs && global.c_nfs)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
675 if (c1 -> c_flags & DATEFMT) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
676 if (global.c_flags & DATEFMT)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
677 c1 -> c_nfs = getcpy (global.c_nfs);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
678 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
679 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
680 if (c1 -> c_flags & ADDRFMT) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
681 if (global.c_flags & ADDRFMT)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
682 c1 -> c_nfs = getcpy (global.c_nfs);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
683 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
684 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
685
bce86c4163a3 Initial revision
kono
parents:
diff changeset
686 default:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
687 adios (NULLCP, "format file syntax error: %s", bp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
688 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
689 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
690 (void) fclose (fp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
691
bce86c4163a3 Initial revision
kono
parents:
diff changeset
692 if (mhldebug)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
693 for (c1 = fmthd; c1; c1 = c1 -> c_next) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
694 fprintf (stderr, "c1: name=\"%s\" text=\"%s\" ovtxt=\"%s\"\n",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
695 c1 -> c_name, c1 -> c_text, c1 -> c_ovtxt);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
696 fprintf (stderr, "\tnfs=0x%x fmt=0x%x\n",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
697 c1 -> c_nfs, c1 -> c_fmt);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
698 fprintf (stderr, "\toffset=%d ovoff=%d width=%d cwidth=%d length=%d\n",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
699 c1 -> c_offset, c1 -> c_ovoff, c1 -> c_width,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
700 c1 -> c_cwidth, c1 -> c_length);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
701 fprintf (stderr, "\tflags=%s\n",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
702 sprintb (buffer, (unsigned) c1 -> c_flags, LBITS));
bce86c4163a3 Initial revision
kono
parents:
diff changeset
703 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
704
bce86c4163a3 Initial revision
kono
parents:
diff changeset
705 out: ;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
706 if (clearflg == 1)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
707 global.c_flags |= CLEARSCR;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
708 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
709 if (clearflg == -1)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
710 global.c_flags &= ~CLEARSCR;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
711
bce86c4163a3 Initial revision
kono
parents:
diff changeset
712 switch (bellflg) { /* command line may override format file */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
713 case 1:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
714 global.c_flags |= BELL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
715 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
716 case -1:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
717 global.c_flags &= ~BELL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
718 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
719 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
720
bce86c4163a3 Initial revision
kono
parents:
diff changeset
721 if (length)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
722 global.c_length = length;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
723 if (width)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
724 global.c_width = width;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
725 if (global.c_length < 5)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
726 global.c_length = 10000;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
727 if (global.c_width < 5)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
728 global.c_width = 10000;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
729 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
730
bce86c4163a3 Initial revision
kono
parents:
diff changeset
731 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
732
bce86c4163a3 Initial revision
kono
parents:
diff changeset
733 static evalvar (c1)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
734 register struct mcomp *c1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
735 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
736 char *cp,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
737 name[NAMESZ];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
738 register struct triple *ap;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
739
bce86c4163a3 Initial revision
kono
parents:
diff changeset
740 if (!*parptr)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
741 return 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
742 (void) strcpy (name, parse ());
bce86c4163a3 Initial revision
kono
parents:
diff changeset
743
bce86c4163a3 Initial revision
kono
parents:
diff changeset
744 if (uleq (name, "component")) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
745 if (ptos (name, &c1 -> c_text))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
746 return 1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
747 c1 -> c_flags &= ~NOCOMPONENT;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
748 return 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
749 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
750 if (uleq (name, "overflowtext"))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
751 return ptos (name, &c1 -> c_ovtxt);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
752 if (uleq (name, "formatfield")) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
753 if (ptos (name, &cp))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
754 return 1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
755 c1 -> c_nfs = getcpy (new_fs (NULLCP, NULLCP, cp));
bce86c4163a3 Initial revision
kono
parents:
diff changeset
756 c1 -> c_flags |= FORMAT;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
757 return 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
758 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
759
bce86c4163a3 Initial revision
kono
parents:
diff changeset
760 if (uleq (name, "offset"))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
761 return ptoi (name, &c1 -> c_offset);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
762 if (uleq (name, "overflowoffset"))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
763 return ptoi (name, &c1 -> c_ovoff);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
764 if (uleq (name, "width"))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
765 return ptoi (name, &c1 -> c_width);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
766 if (uleq (name, "compwidth"))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
767 return ptoi (name, &c1 -> c_cwidth);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
768 if (uleq (name, "length"))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
769 return ptoi (name, &c1 -> c_length);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
770 if (uleq (name, "nodashmunging"))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
771 return (dashflg = 0);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
772
bce86c4163a3 Initial revision
kono
parents:
diff changeset
773 for (ap = triples; ap -> t_name; ap++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
774 if (uleq (ap -> t_name, name)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
775 c1 -> c_flags |= ap -> t_on;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
776 c1 -> c_flags &= ~ap -> t_off;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
777 return 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
778 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
779
bce86c4163a3 Initial revision
kono
parents:
diff changeset
780 return 1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
781 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
782
bce86c4163a3 Initial revision
kono
parents:
diff changeset
783 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
784
bce86c4163a3 Initial revision
kono
parents:
diff changeset
785 static int ptoi (name, i)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
786 register char *name;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
787 register int *i;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
788 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
789 char *cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
790
bce86c4163a3 Initial revision
kono
parents:
diff changeset
791 if (*parptr++ != '=' || !*(cp = parse ())) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
792 advise (NULLCP, "missing argument to variable %s", name);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
793 return 1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
794 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
795
bce86c4163a3 Initial revision
kono
parents:
diff changeset
796 *i = atoi (cp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
797 return 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
798 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
799
bce86c4163a3 Initial revision
kono
parents:
diff changeset
800
bce86c4163a3 Initial revision
kono
parents:
diff changeset
801 static int ptos (name, s)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
802 register char *name,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
803 **s;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
804 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
805 char c,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
806 *cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
807
bce86c4163a3 Initial revision
kono
parents:
diff changeset
808 if (*parptr++ != '=') {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
809 advise (NULLCP, "missing argument to variable %s", name);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
810 return 1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
811 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
812
bce86c4163a3 Initial revision
kono
parents:
diff changeset
813 if (*parptr != '"')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
814 for (cp = parptr;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
815 *parptr && *parptr != ':' && *parptr != ',';
bce86c4163a3 Initial revision
kono
parents:
diff changeset
816 parptr++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
817 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
818 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
819 for (cp = ++parptr; *parptr && *parptr != '"'; parptr++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
820 if (*parptr == QUOTE)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
821 if (!*++parptr)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
822 parptr--;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
823 c = *parptr;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
824 *parptr = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
825 *s = getcpy (cp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
826 if ((*parptr = c) == '"')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
827 parptr++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
828 return 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
829 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
830
bce86c4163a3 Initial revision
kono
parents:
diff changeset
831 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
832
bce86c4163a3 Initial revision
kono
parents:
diff changeset
833 static char *parse () {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
834 unsigned int c;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
835 register char *cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
836 static char result[NAMESZ];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
837
bce86c4163a3 Initial revision
kono
parents:
diff changeset
838 for (cp = result; c = *parptr; parptr++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
839 if (isalnum (c)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
840 || c == '.'
bce86c4163a3 Initial revision
kono
parents:
diff changeset
841 || c == '-'
bce86c4163a3 Initial revision
kono
parents:
diff changeset
842 || c == '_'
bce86c4163a3 Initial revision
kono
parents:
diff changeset
843 || c =='['
bce86c4163a3 Initial revision
kono
parents:
diff changeset
844 || c == ']')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
845 *cp++ = c;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
846 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
847 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
848 *cp = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
849
bce86c4163a3 Initial revision
kono
parents:
diff changeset
850 return result;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
851 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
852
bce86c4163a3 Initial revision
kono
parents:
diff changeset
853 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
854
bce86c4163a3 Initial revision
kono
parents:
diff changeset
855 static process (folder, fname, ofilen, ofilec)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
856 char *folder,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
857 *fname;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
858 int ofilen,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
859 ofilec;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
860 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
861 char *cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
862 FILE *fp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
863 struct mcomp *c1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
864
bce86c4163a3 Initial revision
kono
parents:
diff changeset
865 switch (setjmp (env)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
866 case OK:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
867 if (fname) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
868 fp = mhl_action ? (*mhl_action) (fname) : fopen (fname, "r");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
869 if (fp == NULL) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
870 advise (fname, "unable to open");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
871 exitstat++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
872 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
873 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
874 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
875 else {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
876 fname = "(stdin)";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
877 fp = stdin;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
878 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
879 cp = folder ? concat (folder, ":", fname, NULLCP) : getcpy (fname);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
880 if (ontty != PITTY)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
881 (void) signal (SIGINT, intrser);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
882 mhlfile (fp, cp, ofilen, ofilec);/* fall */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
883
bce86c4163a3 Initial revision
kono
parents:
diff changeset
884 default:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
885 if (ontty != PITTY)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
886 (void) signal (SIGINT, SIG_IGN);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
887 if (mhl_action == NULL && fp != stdin)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
888 (void) fclose (fp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
889 free (cp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
890 if (holder.c_text) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
891 free (holder.c_text);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
892 holder.c_text = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
893 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
894 free_queue (&msghd, &msgtl);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
895 for (c1 = fmthd; c1; c1 = c1 -> c_next)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
896 c1 -> c_flags &= ~HDROUTPUT;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
897 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
898 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
899 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
900
bce86c4163a3 Initial revision
kono
parents:
diff changeset
901 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
902
bce86c4163a3 Initial revision
kono
parents:
diff changeset
903 static mhlfile (fp, mname, ofilen, ofilec)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
904 register FILE *fp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
905 register char *mname;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
906 int ofilen,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
907 ofilec;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
908 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
909 int state;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
910 register struct mcomp *c1,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
911 *c2,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
912 *c3;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
913 register char **ip;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
914 char name[NAMESZ],
bce86c4163a3 Initial revision
kono
parents:
diff changeset
915 buf[BUFSIZ];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
916
bce86c4163a3 Initial revision
kono
parents:
diff changeset
917 if (forwall) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
918 if (digest)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
919 printf ("%s", ofilen == 1 ? delim3 : delim4);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
920 else {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
921 printf ("\n-------");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
922 if (ofilen == 1)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
923 printf (" Forwarded Message%s", ofilec > 1 ? "s" : "");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
924 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
925 printf (" Message %d", ofilen);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
926 printf ("\n\n");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
927 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
928 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
929 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
930 switch (ontty) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
931 case PITTY:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
932 if (ofilec > 1) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
933 if (ofilen > 1) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
934 if ((global.c_flags & CLEARSCR))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
935 clear_screen ();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
936 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
937 printf ("\n\n\n");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
938 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
939 printf (">>> %s\n\n", mname);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
940 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
941 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
942
bce86c4163a3 Initial revision
kono
parents:
diff changeset
943 case ISTTY:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
944 (void) strcpy (buf, "\n");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
945 if (ofilec > 1) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
946 if (SOprintf ("Press <return> to list \"%s\"...", mname)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
947 if (ofilen > 1)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
948 printf ("\n\n\n");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
949 printf ("Press <return> to list \"%s\"...", mname);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
950 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
951 (void) fflush (stdout);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
952 buf[0] = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
953 (void) read (fileno (stdout), buf, sizeof buf);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
954 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
955 if (index (buf, '\n')) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
956 if ((global.c_flags & CLEARSCR))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
957 clear_screen ();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
958 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
959 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
960 printf ("\n");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
961 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
962
bce86c4163a3 Initial revision
kono
parents:
diff changeset
963 default:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
964 if (ofilec > 1) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
965 if (ofilen > 1) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
966 printf ("\n\n\n");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
967 if (clearflg > 0)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
968 clear_screen ();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
969 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
970 printf (">>> %s\n\n", mname);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
971 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
972 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
973 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
974
bce86c4163a3 Initial revision
kono
parents:
diff changeset
975 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
976
bce86c4163a3 Initial revision
kono
parents:
diff changeset
977 for (state = FLD;;)
5
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
978 next:
0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
979 switch (state = m_getfld (state, name, buf, sizeof buf, fp)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
980 case FLD:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
981 case FLDPLUS:
5
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
982 #ifdef ENCODING_FIELD
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
983 /* form mhn */
7
c20e4181370f utf-8 input assumption in case of base64/utf-8
kono
parents: 5
diff changeset
984 /* We had better to check Content-Type, */
c20e4181370f utf-8 input assumption in case of base64/utf-8
kono
parents: 5
diff changeset
985 /* because in case of short utf-8 text, nkf mail fail to */
c20e4181370f utf-8 input assumption in case of base64/utf-8
kono
parents: 5
diff changeset
986 /* correct code */
5
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
987 if (uleq (name, ENCODING_FIELD)) {
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
988 char *cp,
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
989 *dp;
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
990 char c;
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
991 register struct str2init *s2i;
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
992
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
993 cp = add (buf, NULLCP);
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
994 while (state == FLDPLUS) {
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
995 state = m_getfld (state, name, buf, sizeof buf, fp);
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
996 cp = add (buf, cp);
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
997 }
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
998 while (isspace (*cp))
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
999 cp++;
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
1000 for (dp = index (cp, '\n'); dp; dp = index (dp, '\n'))
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
1001 *dp++ = ' ';
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
1002 if (*cp == '(' ) { /* comment */
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
1003 int i;
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
1004 for (i = 1;i;) {
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
1005 switch (*cp++) {
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
1006 case '(': i++; break;
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
1007 case ')': --i; break;
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
1008 case '\\': if ((*cp++) != '\0') break;
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
1009 case '\0': goto next;
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
1010 }
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
1011 }
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
1012 }
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
1013 for (dp = cp; istoken (*dp); dp++);
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
1014 c = *dp, *dp = '\0';
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
1015 for (s2i = str2ces; s2i -> mhnsi_key; s2i++)
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
1016 if (uleq (cp, s2i -> mhnsi_key))
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
1017 break;
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
1018 if (!s2i -> mhnsi_key && !uprf (cp, "X-"))
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
1019 s2i++;
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
1020 *dp = c;
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
1021 content_encoding = s2i -> mhnsi_value;
7
c20e4181370f utf-8 input assumption in case of base64/utf-8
kono
parents: 5
diff changeset
1022 } else if (uleq (name, TYPE_FIELD)) {
c20e4181370f utf-8 input assumption in case of base64/utf-8
kono
parents: 5
diff changeset
1023 char *cp,
c20e4181370f utf-8 input assumption in case of base64/utf-8
kono
parents: 5
diff changeset
1024 *dp;
c20e4181370f utf-8 input assumption in case of base64/utf-8
kono
parents: 5
diff changeset
1025 char c;
c20e4181370f utf-8 input assumption in case of base64/utf-8
kono
parents: 5
diff changeset
1026 register struct str2init *s2i;
c20e4181370f utf-8 input assumption in case of base64/utf-8
kono
parents: 5
diff changeset
1027
c20e4181370f utf-8 input assumption in case of base64/utf-8
kono
parents: 5
diff changeset
1028 cp = add (buf, NULLCP);
c20e4181370f utf-8 input assumption in case of base64/utf-8
kono
parents: 5
diff changeset
1029 while (state == FLDPLUS) {
c20e4181370f utf-8 input assumption in case of base64/utf-8
kono
parents: 5
diff changeset
1030 state = m_getfld (state, name, buf, sizeof buf, fp);
c20e4181370f utf-8 input assumption in case of base64/utf-8
kono
parents: 5
diff changeset
1031 cp = add (buf, cp);
c20e4181370f utf-8 input assumption in case of base64/utf-8
kono
parents: 5
diff changeset
1032 }
c20e4181370f utf-8 input assumption in case of base64/utf-8
kono
parents: 5
diff changeset
1033 while (isspace (*cp))
c20e4181370f utf-8 input assumption in case of base64/utf-8
kono
parents: 5
diff changeset
1034 cp++;
c20e4181370f utf-8 input assumption in case of base64/utf-8
kono
parents: 5
diff changeset
1035 while(cp) {
c20e4181370f utf-8 input assumption in case of base64/utf-8
kono
parents: 5
diff changeset
1036 cp = index (cp, 'c');
c20e4181370f utf-8 input assumption in case of base64/utf-8
kono
parents: 5
diff changeset
1037 if (!strncasecmp(cp,"charset",7)) {
c20e4181370f utf-8 input assumption in case of base64/utf-8
kono
parents: 5
diff changeset
1038 cp+=7;
c20e4181370f utf-8 input assumption in case of base64/utf-8
kono
parents: 5
diff changeset
1039 break;
c20e4181370f utf-8 input assumption in case of base64/utf-8
kono
parents: 5
diff changeset
1040 } else {
c20e4181370f utf-8 input assumption in case of base64/utf-8
kono
parents: 5
diff changeset
1041 cp++;
c20e4181370f utf-8 input assumption in case of base64/utf-8
kono
parents: 5
diff changeset
1042 }
c20e4181370f utf-8 input assumption in case of base64/utf-8
kono
parents: 5
diff changeset
1043 }
c20e4181370f utf-8 input assumption in case of base64/utf-8
kono
parents: 5
diff changeset
1044 while (isspace (*cp)||*cp=='=') cp++;
c20e4181370f utf-8 input assumption in case of base64/utf-8
kono
parents: 5
diff changeset
1045
c20e4181370f utf-8 input assumption in case of base64/utf-8
kono
parents: 5
diff changeset
1046 for (dp = cp; istoken (*dp); dp++);
c20e4181370f utf-8 input assumption in case of base64/utf-8
kono
parents: 5
diff changeset
1047 c = *dp, *dp = '\0';
c20e4181370f utf-8 input assumption in case of base64/utf-8
kono
parents: 5
diff changeset
1048 for (s2i = str2charset; s2i -> mhnsi_key; s2i++)
c20e4181370f utf-8 input assumption in case of base64/utf-8
kono
parents: 5
diff changeset
1049 if (uleq (cp, s2i -> mhnsi_key))
c20e4181370f utf-8 input assumption in case of base64/utf-8
kono
parents: 5
diff changeset
1050 break;
c20e4181370f utf-8 input assumption in case of base64/utf-8
kono
parents: 5
diff changeset
1051 if (!s2i -> mhnsi_key && !uprf (cp, "X-"))
c20e4181370f utf-8 input assumption in case of base64/utf-8
kono
parents: 5
diff changeset
1052 s2i++;
c20e4181370f utf-8 input assumption in case of base64/utf-8
kono
parents: 5
diff changeset
1053 *dp = c;
c20e4181370f utf-8 input assumption in case of base64/utf-8
kono
parents: 5
diff changeset
1054 content_type = s2i -> mhnsi_value;
5
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
1055 }
47d488958a4c support contents-encoding in mhl.
kono
parents: 0
diff changeset
1056 #endif
0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1057 for (ip = ignores; *ip; ip++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1058 if (uleq (name, *ip)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1059 while (state == FLDPLUS)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1060 state = m_getfld (state, name, buf, sizeof buf, fp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1061 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1062 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1063 if (*ip)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1064 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1065
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1066 for (c2 = fmthd; c2; c2 = c2 -> c_next)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1067 if (uleq (c2 -> c_name, name))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1068 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1069 c1 = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1070 if (!((c3 = c2 ? c2 : &global) -> c_flags & SPLIT))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1071 for (c1 = msghd; c1; c1 = c1 -> c_next)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1072 if (uleq (c1 -> c_name, c3 -> c_name)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1073 c1 -> c_text =
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1074 mcomp_add (c1 -> c_flags, buf, c1 -> c_text);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1075 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1076 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1077 if (c1 == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1078 c1 = add_queue (&msghd, &msgtl, name, buf, 0);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1079 while (state == FLDPLUS) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1080 state = m_getfld (state, name, buf, sizeof buf, fp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1081 c1 -> c_text = add (buf, c1 -> c_text);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1082 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1083 if (c2 == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1084 c1 -> c_flags |= EXTRA;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1085 #ifdef JAPAN
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1086 (void) ml_conv(c1 -> c_text);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1087 #endif /* JAPAN */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1088 if (*(c1 -> c_text) == ' ') {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1089 char *cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1090 cp = getcpy((c1 -> c_text) + 1);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1091 free(c1 -> c_text);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1092 c1 -> c_text = cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1093 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1094 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1095
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1096 case BODY:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1097 case FILEEOF:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1098 row = column = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1099 for (c1 = fmthd; c1; c1 = c1 -> c_next) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1100 if (c1 -> c_flags & CLEARTEXT) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1101 putcomp (c1, c1, ONECOMP);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1102 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1103 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1104 if (uleq (c1 -> c_name, "messagename")) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1105 holder.c_text = concat ("(Message ", mname, ")\n",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1106 NULLCP);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1107 putcomp (c1, &holder, ONECOMP);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1108 free (holder.c_text);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1109 holder.c_text = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1110 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1111 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1112 if (uleq (c1 -> c_name, "extras")) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1113 for (c2 = msghd; c2; c2 = c2 -> c_next)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1114 if (c2 -> c_flags & EXTRA)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1115 putcomp (c1, c2, TWOCOMP);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1116 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1117 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1118 if (dobody && uleq (c1 -> c_name, "body")) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1119 #ifdef JAPAN
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1120 int buflen = sizeof(buf);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1121 #endif /* JAPAN */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1122 if ((holder.c_text = malloc (sizeof buf)) == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1123 adios (NULLCP, "unable to allocate buffer memory");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1124 (void) strcpy (holder.c_text, buf);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1125 #ifdef JAPAN
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1126 /* ... (-_-; */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1127 while (state == BODY) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1128 char *cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1129 cp = rindex(holder.c_text, '\n');
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1130 if (cp == NULL) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1131 cp = holder.c_text + strlen(holder.c_text);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1132 } else {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1133 strcpy(buf, ++cp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1134 *cp = 0;
7
c20e4181370f utf-8 input assumption in case of base64/utf-8
kono
parents: 5
diff changeset
1135 (void) ml_conv_decode(holder.c_text,content_encoding,content_type);
0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1136 /* putcomp() may change the address
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1137 of holder.c_text */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1138 putcomp(c1, &holder, BODYCOMP);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1139 cp = copy(buf, holder.c_text);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1140 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1141 if (cp - holder.c_text >= buflen - 1) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1142 /* buffer overflow */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1143 state = m_getfld(state, name,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1144 buf, sizeof buf, fp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1145 holder.c_text = add(buf, holder.c_text);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1146 buflen = strlen(holder.c_text) + 1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1147 } else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1148 state = m_getfld(state, name, cp,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1149 holder.c_text + buflen - cp,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1150 fp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1151 }
7
c20e4181370f utf-8 input assumption in case of base64/utf-8
kono
parents: 5
diff changeset
1152 (void) ml_conv_decode(holder.c_text,content_encoding,content_type);
0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1153 putcomp(c1, &holder, BODYCOMP);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1154 #else /* JAPAN */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1155 while (state == BODY) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1156 putcomp (c1, &holder, BODYCOMP);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1157 state = m_getfld (state, name, holder.c_text,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1158 sizeof buf, fp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1159 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1160 #endif /* JAPAN */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1161 free (holder.c_text);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1162 holder.c_text = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1163 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1164 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1165 for (c2 = msghd; c2; c2 = c2 -> c_next)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1166 if (uleq (c2 -> c_name, c1 -> c_name)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1167 putcomp (c1, c2, ONECOMP);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1168 if (!(c1 -> c_flags & SPLIT))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1169 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1170 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1171 if (faceproc && c2 == NULL && (c1 -> c_flags & FACEFMT))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1172 for (c2 = msghd; c2; c2 = c2 -> c_next)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1173 if (c2 -> c_flags & FACEDFLT) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1174 if (c2 -> c_face == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1175 face_format (c2);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1176 if (holder.c_text = c2 -> c_face) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1177 putcomp (c1, &holder, ONECOMP);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1178 holder.c_text = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1179 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1180 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1181 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1182 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1183 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1184
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1185 case LENERR:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1186 case FMTERR:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1187 advise (NULLCP, "format error in message %s", mname);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1188 exitstat++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1189 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1190
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1191 default:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1192 adios (NULLCP, "getfld() returned %d", state);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1193 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1194 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1195
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1196 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1197
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1198 static int mcomp_flags (name)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1199 register char *name;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1200 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1201 register struct pair *ap;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1202
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1203 for (ap = pairs; ap -> p_name; ap++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1204 if (uleq (ap -> p_name, name))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1205 return (ap -> p_flags);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1206
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1207 return 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1208 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1209
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1210
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1211 static char *mcomp_add (flags, s1, s2)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1212 long flags;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1213 register char *s1,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1214 *s2;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1215 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1216 register char *dp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1217
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1218 if (!(flags & ADDRFMT))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1219 return add (s1, s2);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1220
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1221 if (s2 && *(dp = s2 + strlen (s2) - 1) == '\n')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1222 *dp = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1223
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1224 return add (s1, add (",\n", s2));
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1225 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1226
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1227 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1228
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1229 struct pqpair {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1230 char *pq_text;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1231 char *pq_error;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1232 struct pqpair *pq_next;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1233 };
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1234
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1235
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1236 static mcomp_format (c1, c2)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1237 register struct mcomp *c1,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1238 *c2;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1239 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1240 int dat[5];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1241 register char *ap,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1242 *cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1243 char error[BUFSIZ];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1244 register struct comp *cptr;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1245 register struct pqpair *p,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1246 *q;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1247 struct pqpair pq;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1248 register struct mailname *mp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1249 char *buffer;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1250 int buflen;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1251
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1252 ap = c2 -> c_text;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1253 c2 -> c_text = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1254 buflen = ap ? strlen(ap)*5 : 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1255 if ((buffer = malloc(buflen = (buflen > BUFSIZ) ? buflen : BUFSIZ))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1256 == NULLCP)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1257 adios(NULLCP, "out of memory");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1258 dat[0] = dat[1] = dat[2] = dat[4] = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1259 dat[3] = buflen - 1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1260 (void) fmt_compile (c1 -> c_nfs, &c1 -> c_fmt);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1261
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1262 if (!(c1 -> c_flags & ADDRFMT)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1263 FINDCOMP (cptr, "text");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1264 if (cptr)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1265 cptr -> c_text = ap;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1266 if (cp = rindex(ap, '\n')) /* drop ending newline */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1267 if (!cp[1])
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1268 *cp = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1269
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1270 (void) fmtscan (c1 -> c_fmt, buffer, buflen - 1, dat);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1271 c2 -> c_text = getcpy (buffer);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1272 #ifndef JLR
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1273 /* Don't need to append a newline, dctime() already did */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1274 #else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1275 if (!(c1 -> c_flags & NONEWLINE))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1276 c2 -> c_text = add ("\n", c2 -> c_text);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1277 #endif
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1278
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1279 free (ap);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1280 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1281 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1282
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1283 (q = &pq) -> pq_next = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1284 while (cp = getname (ap)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1285 if ((p = (struct pqpair *) calloc ((unsigned) 1, sizeof *p)) == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1286 adios (NULLCP, "unable to allocate pqpair memory");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1287
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1288 if ((mp = getm (cp, NULLCP, 0, AD_NAME, error)) == NULL) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1289 p -> pq_text = getcpy (cp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1290 p -> pq_error = getcpy (error);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1291 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1292 else {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1293 if ((c1 -> c_flags & FACEDFLT) && c2 -> c_face == NULL) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1294 char *h, *o;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1295 if ((h = mp -> m_host) == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1296 h = LocalName ();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1297 if (o = OfficialName (h))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1298 h = o;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1299 c2 -> c_face = concat ("address ", h, " ", mp -> m_mbox,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1300 NULLCP);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1301 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1302 p -> pq_text = getcpy (mp -> m_text);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1303 mnfree (mp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1304 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1305 q = (q -> pq_next = p);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1306 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1307
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1308 for (p = pq.pq_next; p; p = q) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1309 FINDCOMP (cptr, "text");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1310 if (cptr)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1311 cptr -> c_text = p -> pq_text;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1312 FINDCOMP (cptr, "error");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1313 if (cptr)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1314 cptr -> c_text = p -> pq_error;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1315
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1316 (void) fmtscan (c1 -> c_fmt, buffer, buflen - 1, dat);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1317 if (*buffer) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1318 if (c2 -> c_text)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1319 c2 -> c_text = add (",\n", c2 -> c_text);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1320 if (*(cp = buffer + strlen (buffer) - 1) == '\n')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1321 *cp = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1322 c2 -> c_text = add (buffer, c2 -> c_text);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1323 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1324
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1325 free (p -> pq_text);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1326 if (p -> pq_error)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1327 free (p -> pq_error);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1328 q = p -> pq_next;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1329 free ((char *) p);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1330 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1331
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1332 c2 -> c_text = add ("\n", c2 -> c_text);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1333 free (ap);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1334 free (buffer);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1335 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1336
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1337 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1338
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1339 static struct mcomp *add_queue (head, tail, name, text, flags)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1340 register struct mcomp **head,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1341 **tail;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1342 register char *name,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1343 *text;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1344 int flags;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1345 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1346 register struct mcomp *c1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1347
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1348 if ((c1 = (struct mcomp *) calloc ((unsigned) 1, sizeof *c1)) == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1349 adios (NULLCP, "unable to allocate comp memory");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1350
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1351 c1 -> c_flags = flags & ~INIT;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1352 if (c1 -> c_name = name ? getcpy (name) : NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1353 c1 -> c_flags |= mcomp_flags (c1 -> c_name);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1354 c1 -> c_text = text ? getcpy (text) : NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1355 if (flags & INIT) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1356 if (global.c_ovtxt)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1357 c1 -> c_ovtxt = getcpy (global.c_ovtxt);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1358 c1 -> c_offset = global.c_offset;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1359 c1 -> c_ovoff = global. c_ovoff;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1360 c1 -> c_width = c1 -> c_length = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1361 c1 -> c_cwidth = global.c_cwidth;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1362 c1 -> c_flags |= global.c_flags & GFLAGS;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1363 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1364 if (*head == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1365 *head = c1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1366 if (*tail != NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1367 (*tail) -> c_next = c1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1368 *tail = c1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1369
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1370 return c1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1371 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1372
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1373
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1374 static free_queue (head, tail)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1375 register struct mcomp **head,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1376 **tail;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1377 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1378 register struct mcomp *c1,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1379 *c2;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1380
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1381 for (c1 = *head; c1; c1 = c2) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1382 c2 = c1 -> c_next;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1383 if (c1 -> c_name)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1384 free (c1 -> c_name);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1385 if (c1 -> c_text)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1386 free (c1 -> c_text);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1387 if (c1 -> c_ovtxt)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1388 free (c1 -> c_ovtxt);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1389 if (c1 -> c_nfs)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1390 free (c1 -> c_nfs);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1391 if (c1 -> c_fmt)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1392 free ((char *) c1 -> c_fmt);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1393 if (c1 -> c_face)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1394 free (c1 -> c_face);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1395 free ((char *) c1);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1396 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1397
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1398 *head = *tail = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1399 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1400
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1401 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1402
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1403 static putcomp (c1, c2, flag)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1404 register struct mcomp *c1,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1405 *c2;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1406 int flag;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1407 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1408 int count,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1409 cchdr;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1410 register char *cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1411
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1412 cchdr = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1413 lm = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1414 llim = c1 -> c_length ? c1 -> c_length : -1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1415 wid = c1 -> c_width ? c1 -> c_width : global.c_width;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1416 ovoff = (c1 -> c_ovoff >= 0 ? c1 -> c_ovoff : global.c_ovoff)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1417 + c1 -> c_offset;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1418 if ((ovtxt = c1 -> c_ovtxt ? c1 -> c_ovtxt : global.c_ovtxt) == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1419 ovtxt = "";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1420 if (wid < ovoff + strlen (ovtxt) + 5)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1421 adios (NULLCP, "component: %s width(%d) too small for overflow(%d)",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1422 c1 -> c_name, wid, ovoff + strlen (ovtxt) + 5);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1423 onelp = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1424
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1425 if (c1 -> c_flags & CLEARTEXT) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1426 putstr (c1 -> c_text);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1427 putstr ("\n");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1428 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1429 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1430
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1431 if (c1 -> c_flags & FACEFMT)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1432 switch (doface (c2)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1433 case NOTOK: /* error */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1434 case OK: /* async faceproc */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1435 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1436
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1437 default: /* sync faceproc */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1438 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1439 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1440
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1441 #ifdef MIME_HEADERS
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1442 if (c1 -> c_flags & DECODE) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1443 char *ep;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1444 if ((ep = malloc((unsigned)strlen(c2 -> c_text)+1)) == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1445 adios(NULLCP, "out of memory");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1446 (void) exthdr_decode(c2 -> c_text, ep);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1447 free(c2 -> c_text);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1448 c2 -> c_text = ep;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1449 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1450 #endif /* MIME_HEADERS */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1451
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1452 if (c1 -> c_nfs && (c1 -> c_flags & (ADDRFMT | DATEFMT | FORMAT)))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1453 mcomp_format (c1, c2);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1454
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1455 if (c1 -> c_flags & CENTER) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1456 count = (c1 -> c_width ? c1 -> c_width : global.c_width)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1457 - c1 -> c_offset - strlen (c2 -> c_text);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1458 if (!(c1 -> c_flags & HDROUTPUT) && !(c1 -> c_flags & NOCOMPONENT))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1459 count -= strlen (c1 -> c_text ? c1 -> c_text : c1 -> c_name) + 2;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1460 lm = c1 -> c_offset + (count / 2);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1461 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1462 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1463 if (c1 -> c_offset)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1464 lm = c1 -> c_offset;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1465
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1466 if (!(c1 -> c_flags & HDROUTPUT) && !(c1 -> c_flags & NOCOMPONENT)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1467 if (c1 -> c_flags & UPPERCASE) /* uppercase component also */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1468 for (cp = (c1 -> c_text ? c1 -> c_text : c1 -> c_name); *cp; cp++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1469 if (islower (*cp & 0xff))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1470 *cp = toupper (*cp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1471 putstr (c1 -> c_text ? c1 -> c_text : c1 -> c_name);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1472 if (flag != BODYCOMP) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1473 putstr (": ");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1474 if (!(c1 -> c_flags & SPLIT))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1475 c1 -> c_flags |= HDROUTPUT;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1476
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1477 cchdr++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1478 if ((count = c1 -> c_cwidth -
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1479 strlen (c1 -> c_text ? c1 -> c_text : c1 -> c_name) - 2) > 0)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1480 while (count--)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1481 putstr (" ");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1482 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1483 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1484 c1 -> c_flags |= HDROUTPUT; /* for BODYCOMP */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1485 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1486
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1487 if (flag == TWOCOMP
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1488 && !(c2 -> c_flags & HDROUTPUT)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1489 && !(c2 -> c_flags & NOCOMPONENT)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1490 if (c1 -> c_flags & UPPERCASE)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1491 for (cp = c2 -> c_name; *cp; cp++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1492 if (islower (*cp & 0xff))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1493 *cp = toupper (*cp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1494 putstr (c2 -> c_name);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1495 putstr (": ");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1496 if (!(c1 -> c_flags & SPLIT))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1497 c2 -> c_flags |= HDROUTPUT;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1498
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1499 cchdr++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1500 if ((count = c1 -> c_cwidth - strlen (c2 -> c_name) - 2) > 0)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1501 while (count--)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1502 putstr (" ");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1503 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1504 if (c1 -> c_flags & UPPERCASE)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1505 for (cp = c2 -> c_text; *cp; cp++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1506 if (islower (*cp & 0xff))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1507 *cp = toupper (*cp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1508
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1509 count = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1510 if (cchdr)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1511 if (flag == TWOCOMP)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1512 count = (c1 -> c_cwidth >= 0) ? c1 -> c_cwidth
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1513 : strlen (c2 -> c_name) + 2;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1514 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1515 count = (c1 -> c_cwidth >= 0) ? c1 -> c_cwidth
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1516 : strlen (c1->c_text ? c1->c_text : c1->c_name) + 2;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1517 count += c1 -> c_offset;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1518
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1519 if (cp = oneline (c2 -> c_text, c1 -> c_flags))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1520 putstr(cp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1521 if (term == '\n')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1522 putstr ("\n");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1523 while (cp = oneline (c2 -> c_text, c1 -> c_flags)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1524 lm = count;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1525 if (flag == BODYCOMP
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1526 && !(c1 -> c_flags & NOCOMPONENT))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1527 putstr (c1 -> c_text ? c1 -> c_text : c1 -> c_name);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1528 if (*cp)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1529 putstr (cp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1530 if (term == '\n')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1531 putstr ("\n");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1532 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1533 if (term != -1 && flag == BODYCOMP
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1534 && !(c1 -> c_flags & NOCOMPONENT))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1535 c1 -> c_flags &= ~HDROUTPUT;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1536 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1537
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1538 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1539
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1540 static char *oneline (stuff, flags)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1541 register char *stuff;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1542 long flags;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1543 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1544 int spc;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1545 register char *cp,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1546 *ret;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1547
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1548 if (onelp == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1549 onelp = stuff;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1550 if (*onelp == 0)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1551 return (onelp = NULL);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1552
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1553 ret = onelp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1554 term = -1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1555 if (flags & COMPRESS) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1556 for (spc = 1, cp = ret; *onelp; onelp++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1557 if (isspace (*onelp)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1558 if (*onelp == '\n' && (!onelp[1] || (flags & ADDRFMT))) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1559 term = '\n';
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1560 *onelp++ = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1561 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1562 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1563 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1564 if (!spc) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1565 *cp++ = ' ';
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1566 spc++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1567 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1568 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1569 else {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1570 *cp++ = *onelp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1571 spc = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1572 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1573
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1574 *cp = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1575 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1576 else {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1577 while (*onelp && *onelp != '\n')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1578 onelp++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1579 if (*onelp == '\n') {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1580 term = '\n';
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1581 *onelp++ = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1582 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1583 if (flags & LEFTADJUST)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1584 while (*ret == ' ' || *ret == '\t')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1585 ret++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1586 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1587 if (*onelp == 0 && term == '\n' && (flags & NONEWLINE))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1588 term = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1589
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1590 return ret;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1591 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1592
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1593 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1594
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1595 #ifdef JAPAN
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1596 static
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1597 putstr(string)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1598 char *string;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1599 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1600 mlcp = mlbuf;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1601 ml_cont_p = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1602 putstr_sbr(string);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1603 *mlcp = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1604 ml_fputs(mlbuf, stdout);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1605 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1606
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1607 static void
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1608 putstr_sbr(string)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1609 char *string;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1610 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1611 if (!column && lm > 0)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1612 while (lm > 0)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1613 if (lm >= 8) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1614 putch('\t'); lm -= 8;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1615 } else {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1616 putch(' '); lm--;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1617 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1618 lm = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1619 while (*string)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1620 putch(*string++);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1621 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1622
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1623 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1624
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1625 static
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1626 putch(ch)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1627 char ch;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1628 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1629 char buf[BUFSIZ];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1630
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1631 if (llim == 0) return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1632
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1633 switch (ch) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1634 case '\n':
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1635 if (llim > 0) llim--;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1636 ml_cont_p = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1637 column = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1638 row++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1639 if (ontty != ISTTY || row != global.c_length)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1640 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1641 if (global.c_flags & BELL) *mlcp++ = '\007';
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1642 *mlcp = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1643 ml_fputs(mlbuf, stdout);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1644 mlcp = mlbuf;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1645 (void) fflush(stdout);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1646 buf[0] = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1647 (void) read (fileno (stdout), buf, sizeof buf);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1648 if (index (buf, '\n')) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1649 if (global.c_flags & CLEARSCR) clear_screen ();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1650 row = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1651 } else {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1652 (void) putchar('\n');
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1653 row = global.c_length / 3;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1654 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1655 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1656 case '\t':
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1657 ml_cont_p = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1658 column |= 07;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1659 column++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1660 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1661 case '\b':
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1662 ml_cont_p = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1663 column--;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1664 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1665 case '\r':
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1666 ml_cont_p = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1667 column = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1668 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1669 default:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1670 if (column == 0 && forwflg && dashflg && ch == '-') {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1671 *mlcp++ = '-'; *mlcp++ = ' '; column += 2;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1672 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1673 if (ml_ismlchar(ch)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1674 ml_cont_p = ml_cont_p ? 0 : 1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1675 column++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1676 } else if ((ch & 0xff) >= ' ') {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1677 ml_cont_p = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1678 column++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1679 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1680 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1681 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1682 if (((column >= wid-1) && ml_cont_p) || (column >= wid)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1683 putch ('\n');
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1684 if (ovoff > 0) lm = ovoff;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1685 putstr_sbr(ovtxt ? ovtxt : "");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1686 putch(ch);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1687 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1688 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1689 *mlcp++ = ch;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1690 if ((mlcp > mlbuf + sizeof(mlbuf) - 3) && ! ml_cont_p) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1691 *mlcp = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1692 ml_fputs(mlbuf, stdout);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1693 mlcp = mlbuf;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1694 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1695 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1696
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1697 #else /* JAPAN */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1698
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1699 static putstr (string)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1700 register char *string;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1701 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1702 if (!column && lm > 0)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1703 while (lm > 0)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1704 if (lm >= 8) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1705 putch ('\t');
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1706 lm -= 8;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1707 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1708 else {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1709 putch (' ');
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1710 lm--;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1711 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1712 lm = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1713 while (*string)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1714 putch (*string++);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1715 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1716
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1717 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1718
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1719 static putch (ch)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1720 register char ch;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1721 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1722 char buf[BUFSIZ];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1723
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1724 if (llim == 0)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1725 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1726
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1727 switch (ch) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1728 case '\n':
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1729 if (llim > 0)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1730 llim--;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1731 column = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1732 row++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1733 if (ontty != ISTTY || row != global.c_length)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1734 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1735 if (global.c_flags & BELL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1736 (void) putchar ('\007');
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1737 (void) fflush (stdout);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1738 buf[0] = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1739 (void) read (fileno (stdout), buf, sizeof buf);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1740 if (index (buf, '\n')) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1741 if (global.c_flags & CLEARSCR)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1742 clear_screen ();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1743 row = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1744 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1745 else {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1746 (void) putchar ('\n');
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1747 row = global.c_length / 3;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1748 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1749 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1750
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1751 case '\t':
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1752 column |= 07;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1753 column++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1754 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1755
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1756 case '\b':
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1757 column--;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1758 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1759
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1760 case '\r':
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1761 column = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1762 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1763
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1764 default:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1765 if (column == 0 && forwflg && dashflg && ch == '-')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1766 (void) putchar ('-'), putchar (' ');
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1767 if (ch >= ' ')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1768 column++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1769 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1770 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1771
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1772 if (column >= wid) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1773 putch ('\n');
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1774 if (ovoff > 0)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1775 lm = ovoff;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1776 putstr (ovtxt ? ovtxt : "");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1777 putch (ch);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1778 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1779 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1780
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1781 (void) putchar (ch);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1782 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1783 #endif /* JAPAN */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1784
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1785 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1786
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1787 /* ARGSUSED */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1788
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1789 static TYPESIG intrser (i)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1790 int i;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1791 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1792 #ifndef BSD42
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1793 (void) signal (SIGINT, intrser);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1794 #endif /* BSD42 */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1795
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1796 discard (stdout);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1797 (void) putchar ('\n');
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1798
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1799 longjmp (env, DONE);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1800 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1801
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1802
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1803 /* ARGSUSED */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1804
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1805 static TYPESIG pipeser (i)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1806 int i;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1807 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1808 #ifndef BSD42
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1809 (void) signal (SIGPIPE, pipeser);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1810 #endif /* BSD42 */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1811
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1812 done (NOTOK);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1813 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1814
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1815
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1816 /* ARGSUSED */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1817
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1818 static TYPESIG quitser (i)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1819 int i;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1820 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1821 #ifndef BSD42
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1822 (void) signal (SIGQUIT, quitser);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1823 #endif /* BSD42 */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1824
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1825 (void) putchar ('\n');
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1826 (void) fflush (stdout);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1827
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1828 done (NOTOK);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1829 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1830
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1831 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1832
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1833 static face_format (c1)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1834 register struct mcomp *c1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1835 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1836 register char *cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1837 register struct mailname *mp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1838
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1839 if ((cp = c1 -> c_text) == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1840 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1841
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1842 if (cp = getname (cp)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1843 if (mp = getm (cp, NULLCP, 0, AD_NAME, NULLCP)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1844 char *h, *o;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1845 if ((h = mp -> m_host) == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1846 h = LocalName ();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1847 if (o = OfficialName (h))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1848 h = o;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1849 c1 -> c_face = concat ("address ", h, " ", mp -> m_mbox, NULLCP);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1850 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1851
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1852 while (cp = getname (cp))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1853 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1854 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1855 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1856
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1857 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1858
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1859 #if defined(BSD42) || defined(SOCKETS)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1860
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1861 /* faceproc is two elements defining the image agent's location:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1862 Internet host
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1863 UDP port
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1864 */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1865
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1866 #include <sys/socket.h>
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1867 #include <netinet/in.h>
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1868 #include <netdb.h>
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1869 #ifndef hpux
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1870 #include <arpa/inet.h>
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1871 #endif
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1872
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1873 struct hostent *gethostbystring ();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1874
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1875
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1876 static int doface (c1)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1877 register struct mcomp *c1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1878 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1879 int i,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1880 result,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1881 sd;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1882 struct sockaddr_in in_socket;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1883 register struct sockaddr_in *isock = &in_socket;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1884 static int inited = OK;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1885 static int addrlen;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1886 static struct in_addr addr;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1887 static u_short portno;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1888
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1889 if (inited == OK) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1890 #ifndef __alpha
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1891 u_long iaddr;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1892 #else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1893 u_int iaddr;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1894 #endif
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1895 char *cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1896 char **ap = brkstring (cp = getcpy (faceproc), " ", "\n");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1897 struct hostent *hp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1898
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1899 if (ap[0] == NULL || ap[1] == NULL) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1900 bad_faceproc: ;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1901 free (cp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1902 return (inited = NOTOK);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1903 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1904
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1905 if (!(hp = gethostbystring (ap[0])))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1906 goto bad_faceproc;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1907 bcopy (hp -> h_addr, (char *) &addr, addrlen = hp -> h_length);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1908
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1909 portno = htons ((u_short) atoi (ap[1]));
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1910 free (cp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1911
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1912 inited = DONE;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1913 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1914 if (inited == NOTOK)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1915 return NOTOK;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1916
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1917 isock -> sin_family = AF_INET;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1918 isock -> sin_port = portno;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1919 bcopy ((char *) &addr, (char *) &isock -> sin_addr, addrlen);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1920
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1921 if ((sd = socket (AF_INET, SOCK_DGRAM, 0)) == NOTOK)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1922 return NOTOK;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1923
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1924 result = sendto (sd, c1 -> c_text, strlen (c1 -> c_text), 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1925 (struct sockaddr *) isock, sizeof *isock);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1926
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1927 (void) close (sd);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1928
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1929 return (result != NOTOK ? OK : NOTOK);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1930 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1931
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1932 #else /* not BSD42 and not SOCKETS */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1933
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1934 static int doface (c1)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1935 register struct mcomp *c1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1936 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1937 register int i,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1938 len,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1939 vecp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1940 int child_id,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1941 result,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1942 pdi[2],
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1943 pdo[2];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1944 register char *bp,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1945 *cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1946 char buffer[BUFSIZ],
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1947 *vec[10];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1948
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1949 if (pipe (pdi) == NOTOK)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1950 return NOTOK;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1951 if (pipe (pdo) == NOTOK) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1952 (void) close (pdi[0]);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1953 (void) close (pdi[1]);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1954 return NOTOK;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1955 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1956
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1957 for (i = 0; (child_id = vfork ()) == NOTOK && i < 5; i++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1958 sleep (5);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1959
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1960 switch (child_id) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1961 case NOTOK:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1962 return NOTOK;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1963
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1964 case OK:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1965 (void) signal (SIGINT, SIG_IGN);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1966 (void) signal (SIGQUIT, SIG_IGN);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1967 if (pdi[0] != fileno (stdin)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1968 (void) dup2 (pdi[0], fileno (stdin));
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1969 (void) close (pdi[0]);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1970 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1971 (void) close (pdi[1]);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1972 (void) close (pdo[0]);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1973 if (pdo[1] != fileno (stdout)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1974 (void) dup2 (pdo[1], fileno (stdout));
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1975 (void) close (pdo[1]);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1976 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1977 vecp = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1978 vec[vecp++] = r1bindex (faceproc, '/');
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1979 vec[vecp++] = "-e";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1980 if (sleepsw != NOTOK) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1981 vec[vecp++] = "-s";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1982 (void) sprintf (buffer, "%d", sleepsw);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1983 vec[vecp++] = buffer;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1984 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1985 vec[vecp] = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1986 execvp (faceproc, vec);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1987 fprintf (stderr, "unable to exec ");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1988 perror (faceproc);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1989 _exit (-1); /* NOTREACHED */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1990
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1991 default:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1992 (void) close (pdi[0]);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1993 i = strlen (c1 -> c_text);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1994 if (write (pdi[1], c1 -> c_text, i) != i)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1995 adios ("pipe", "error writing to");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1996 free (c1 -> c_text), c1 -> c_text = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1997 (void) close (pdi[1]);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1998
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1999 (void) close (pdo[1]);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2000 cp = NULL, len = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2001 result = DONE;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2002 while ((i = read (pdo[0], buffer, strlen (buffer))) > 0) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2003 if (cp) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2004 register int j;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2005 register char *dp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2006 if ((dp = realloc (cp, (unsigned) (j = len + i))) == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2007 adios (NULLCP, "unable to allocate face storage");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2008 bcopy (buffer, dp + len, i);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2009 cp = dp, len = j;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2010 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2011 else {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2012 if ((cp = malloc ((unsigned) i)) == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2013 adios (NULLCP, "unable to allocate face storage");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2014 bcopy (buffer, cp, i);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2015 len = i;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2016 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2017 if (result == DONE)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2018 for (bp = buffer + i - 1; bp >= buffer; bp--)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2019 if (!isascii (*bp) || iscntrl (*bp)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2020 result = OK;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2021 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2022 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2023 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2024 (void) close (pdo[0]);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2025
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2026 /* no waiting for child... */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2027
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2028 if (result == OK) { /* binary */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2029 if (write (1, cp, len) != len)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2030 adios ("writing", "error");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2031 free (cp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2032 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2033 else /* empty */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2034 if ((c1 -> c_text = cp) == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2035 result = OK;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2036 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2037 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2038
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2039 return result;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2040 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2041 #endif /* not BSD42 and not SOCKETS */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2042
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2043 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2044
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2045 #undef adios
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2046 #undef done
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2047
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2048 int mhlsbr (argc, argv, action)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2049 int argc;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2050 char **argv;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2051 FP (*action) ();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2052 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2053 TYPESIG (*istat) (), (*pstat) (), (*qstat) ();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2054 char *cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2055 struct mcomp *c1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2056
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2057 switch (setjmp (mhlenv)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2058 case OK:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2059 cp = invo_name;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2060 sleepsw = 0; /* XXX */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2061 bellflg = clearflg = forwflg = forwall = exitstat = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2062 digest = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2063 ontty = NOTTY;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2064 mhl_action = action;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2065 if ((istat = signal (SIGINT, SIG_IGN)) != SIG_DFL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2066 (void) signal (SIGINT, istat);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2067 if ((qstat = signal (SIGQUIT, SIG_IGN)) != SIG_DFL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2068 (void) signal (SIGQUIT, qstat);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2069 pstat = signal (SIGPIPE, pipeser);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2070 (void) mhl (argc, argv); /* fall */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2071
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2072 default:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2073 (void) signal (SIGINT, istat);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2074 (void) signal (SIGQUIT, qstat);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2075 (void) signal (SIGPIPE, SIG_IGN);/* XXX */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2076 if (ontty == PITTY)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2077 m_pclose ();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2078 (void) signal (SIGPIPE, pstat);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2079 invo_name = cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2080 if (holder.c_text) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2081 free (holder.c_text);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2082 holder.c_text = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2083 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2084 free_queue (&msghd, &msgtl);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2085 for (c1 = fmthd; c1; c1 = c1 -> c_next)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2086 c1 -> c_flags &= ~HDROUTPUT;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2087 return exitstat;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2088 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2089 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2090
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2091 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2092
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2093 /* VARARGS2 */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2094
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2095 static void mhladios (what, fmt, a, b, c, d, e, f)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2096 char *what,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2097 *fmt,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2098 *a,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2099 *b,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2100 *c,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2101 *d,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2102 *e,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2103 *f;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2104 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2105 advise (what, fmt, a, b, c, d, e, f);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2106 mhldone (1);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2107 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2108
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2109
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2110 static void mhldone (status)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2111 int status;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2112 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2113 exitstat = status;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2114 if (mhl_action)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2115 longjmp (mhlenv, DONE);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2116 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2117 done (exitstat);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2118 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2119
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2120 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2121
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2122 static int m_pid = NOTOK;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2123 static int sd = NOTOK;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2124
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2125
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2126 static m_popen (name)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2127 char *name;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2128 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2129 int pd[2];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2130
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2131 if (mhl_action && (sd = dup (fileno (stdout))) == NOTOK)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2132 adios ("standard output", "unable to dup()");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2133
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2134 if (pipe (pd) == NOTOK)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2135 adios ("pipe", "unable to");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2136
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2137 switch (m_pid = vfork ()) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2138 case NOTOK:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2139 adios ("fork", "unable to");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2140
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2141 case OK:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2142 (void) signal (SIGINT, SIG_DFL);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2143 (void) signal (SIGQUIT, SIG_DFL);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2144
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2145 (void) close (pd[1]);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2146 if (pd[0] != fileno (stdin)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2147 (void) dup2 (pd[0], fileno (stdin));
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2148 (void) close (pd[0]);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2149 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2150 execlp (name, r1bindex (name, '/'), NULLCP);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2151 fprintf (stderr, "unable to exec ");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2152 perror (name);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2153 _exit (-1);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2154
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2155 default:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2156 (void) close (pd[0]);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2157 if (pd[1] != fileno (stdout)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2158 (void) dup2 (pd[1], fileno (stdout));
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2159 (void) close (pd[1]);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2160 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2161 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2162 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2163
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2164
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2165 m_pclose () {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2166 if (m_pid == NOTOK)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2167 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2168
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2169 if (sd != NOTOK) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2170 (void) fflush (stdout);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2171 if (dup2 (sd, fileno (stdout)) == NOTOK)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2172 adios ("standard output", "unable to dup2()");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2173
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2174 clearerr (stdout);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2175 (void) close (sd);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2176 sd = NOTOK;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2177 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2178 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2179 (void) fclose (stdout);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2180
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2181 (void) pidwait (m_pid, OK);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2182 m_pid = NOTOK;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2183 }