ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Convert-UUlib/uulib/uuint.h
Revision: 1.2
Committed: Mon Jun 11 20:42:37 2001 UTC (22 years, 11 months ago) by root
Content type: text/plain
Branch: MAIN
Branch point for: UUDEVIEW
Changes since 1.1: +5 -3 lines
Log Message:
*** empty log message ***

File Contents

# Content
1 /*
2 * This file is part of uudeview, the simple and friendly multi-part multi-
3 * file uudecoder program (c) 1994-2001 by Frank Pilhofer. The author may
4 * be contacted at fp@fpx.de
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 */
16
17 #ifndef __UUINT_H__
18 #define __UUINT_H__
19
20 /*
21 * This file describes the internal structures, variables and definitions
22 * of UUDeview. It should not be included from other packages. Subject to
23 * change without notice. Do not depend on anything here.
24 *
25 * $Id: uuint.h,v 1.18 2001/06/06 18:21:47 fp Exp $
26 */
27
28 /*
29 * Busy Polls will be made after processing ... lines
30 */
31
32 #define BUSY_LINE_TICKS 50
33
34 /*
35 * States of MIME scanner
36 */
37
38 #define MS_HEADERS 1 /* still inside of headers */
39 #define MS_BODY 2 /* body of `simple' messages */
40 #define MS_PREAMBLE 3 /* preamble of Multipart/Mixed */
41 #define MS_SUBPART 4 /* within one of the Multiparts */
42 #define MS_EPILOGUE 5 /* epilogue of Multipart/Mixed */
43
44 /*
45 * Number of subsequent encoded lines we require to believe this
46 * is valid data.
47 */
48
49 #define ELC_COUNT 4
50
51 /*
52 * Flags a part may have. FL_PROPER means that we are sure about the file's
53 * encoding, beginning and end, and don't have to use special care when de-
54 * coding.
55 */
56
57 #define FL_NONE 0 /* no flag, just plain normal */
58 #define FL_SINGLE 1 /* standalone MSG, do not mix */
59 #define FL_PARTIAL 2 /* from Message/Partial */
60 #define FL_PROPER 4 /* proper MIME part */
61 #define FL_TOEND 8 /* part continues to EOF */
62
63 /*
64 * Auxiliary macro: compute the percentage of a against b.
65 * The obvious answer is (100*a)/b, but this overflows for large a.
66 * a/(b/100) is better; we use a/((b/100)+1) so that we don't divide
67 * by zero for b<100 and the result doesn't become larger than 100%
68 */
69
70 #define UUPERCENT(a,b) ((int) ((unsigned long)(a) / \
71 (((unsigned long)(b)/100)+1)))
72
73 /*
74 * Make the Busy Callback easier. The macro returns true if the BusyCallback
75 * wants us to terminate.
76 */
77
78 extern unsigned long uuyctr;
79 #define UUBUSYPOLL(a,b) (((++uuyctr%BUSY_LINE_TICKS)==0) ? (progress.percent=UUPERCENT((a),(b)),UUBusyPoll()):0)
80
81 /*
82 * How many lines of headers do we need to believe another mail
83 * header is approaching? Use more restrictive values for MIME
84 * mails, less restrictive for Freestyle
85 */
86
87 typedef struct {
88 int restart; /* restarting after a MIME body (not subpart) */
89 int afterdata; /* after we had useful data in freestyle mode */
90 int afternl; /* after an empty line in freestyle mode */
91 } headercount;
92
93 extern headercount hlcount;
94
95 /*
96 * Information from the headers of a message. Each instance must
97 * have its very own copy of the strings. If `mimevers' is NULL,
98 * then this message does not comply to the MIME standard.
99 */
100
101 typedef struct _headers {
102 char *from; /* From: */
103 char *subject; /* Subject: */
104 char *rcpt; /* To: */
105 char *date; /* Date: */
106 char *mimevers; /* MIME-Version: */
107 char *ctype; /* Content-Type: */
108 char *ctenc; /* Content-Transfer-Encoding: */
109 char *fname; /* Potential Filename from Content-Type Parameter */
110 char *boundary; /* MIME-Boundary from Content-Type Parameter */
111 char *mimeid; /* MIME-Id for Message/Partial */
112 int partno; /* part number for Message/Partial */
113 int numparts; /* number of parts for Message/Partial */
114 } headers;
115
116 /*
117 * Scanner state
118 */
119
120 typedef struct _scanstate {
121 int isfolder; /* if we think this is a valid email folder */
122 int ismime; /* if we are within a valid MIME message */
123 int mimestate; /* state of MIME scanner */
124 int mimeenc; /* encoding of this MIME file */
125 char *source; /* source filename */
126 headers envelope; /* mail envelope headers */
127 } scanstate;
128
129 /*
130 * Structure that holds the information for a single file / part of
131 * a file. If a subject line is encountered, it is copied to subject;
132 * if a begin is found, the mode and name of the file is extracted.
133 * flags are set if 'begin' or 'end' is detected and 'uudet' if valid
134 * uuencoded data is found. If the file contains a 'From:' line with
135 * a '@' in it (indicating an origin email address), it is preserved
136 * in 'origin'.
137 **/
138
139 typedef struct _fileread {
140 char *subject; /* Whole subject line */
141 char *filename; /* Only filled in if begin detected */
142 char *origin; /* Whole 'From:' line */
143 char *mimeid; /* the ID for Mime-encoded files */
144 char *mimetype; /* Content-Type */
145 short mode; /* Mode of File (from 'begin') */
146 int begin; /* begin detected */
147 int end; /* end detected */
148 int flags; /* associated flags */
149
150 short uudet; /* valid encoded data. value indicates encoding */
151 short partno; /* Mime-files have a part number within */
152 short maxpno; /* ... plus the total number of parts */
153
154 char *sfname; /* Associated source file */
155 long startpos; /* ftell() position where data starts */
156 long length; /* length of data */
157 } fileread;
158
159 /*
160 * Structure for holding one part of a file, with some more information
161 * about it. The UUPreProcessPart() function takes one a fileread structure
162 * and produces this uufile structure.
163 * Linked List, ordered by partno.
164 **/
165
166 typedef struct _uufile {
167 char *filename;
168 char *subfname;
169 char *mimeid;
170 char *mimetype;
171 short partno;
172 fileread *data;
173 struct _uufile *NEXT;
174 } uufile;
175
176 extern void *uu_MsgCBArg;
177 extern void *uu_BusyCBArg;
178 extern void *uu_FileCBArg;
179 extern void *uu_FFCBArg;
180
181 /*
182 * variables
183 */
184
185 extern int uu_fast_scanning;
186 extern int uu_bracket_policy;
187 extern int uu_verbose;
188 extern int uu_desperate;
189 extern int uu_ignreply;
190 extern int uu_debug;
191 extern int uu_errno;
192 extern int uu_dumbness;
193 extern int uu_overwrite;
194 extern int uu_ignmode;
195 extern int uu_headercount;
196 extern int uu_usepreamble;
197 extern int uu_handletext;
198 extern int uu_tinyb64;
199 extern int uu_remove_input;
200 extern int uu_more_mime;
201
202 extern char *uusavepath;
203 extern char *uuencodeext;
204
205 /*
206 * Encoding/Decoding tables
207 */
208
209 extern unsigned char UUEncodeTable[];
210 extern unsigned char XXEncodeTable[];
211 extern unsigned char B64EncodeTable[];
212 extern unsigned char BHEncodeTable[];
213
214 /*
215 * String tables from uustring.c
216 */
217
218 extern char *msgnames[];
219 extern char *codenames[];
220 extern char *uuretcodes[];
221
222 extern uulist *UUGlobalFileList;
223
224 /*
225 * State of MIME variables and current progress
226 */
227
228 extern int nofnum, mssdepth;
229 extern int mimseqno, lastvalid;
230 extern int lastenc;
231 extern scanstate multistack[];
232 extern headers localenv;
233 extern scanstate sstate;
234 extern uuprogress progress;
235
236 /*
237 * mallocable areas
238 */
239
240 extern char *uugen_fnbuffer, *uugen_inbuffer;
241 extern char *uucheck_lastname, *uucheck_tempname;
242 extern char *uuestr_itemp, *uuestr_otemp;
243 extern char *uulib_msgstring, *uuncdl_fulline;
244 extern char *uuncdp_oline, *uuscan_shlline;
245 extern char *uuscan_pvvalue, *uuscan_phtext;
246 extern char *uuscan_sdline, *uuscan_sdbhds1;
247 extern char *uuscan_sdbhds2, *uuscan_spline;
248 extern char *uuutil_bhwtmp;
249 extern char *uunconc_UUxlat, *uunconc_UUxlen;
250 extern char *uunconc_B64xlat, *uunconc_XXxlat;
251 extern char *uunconc_BHxlat, *uunconc_save;
252
253 #ifdef __cplusplus
254 extern "C" {
255 #endif
256
257 extern void (*uu_MsgCallback) (void *, char *, int);
258 extern int (*uu_BusyCallback) (void *, uuprogress *);
259 extern int (*uu_FileCallback) (void *, char *, char *, int);
260 extern char * (*uu_FNameFilter) (void *, char *);
261
262 /*
263 * Functions from uulib.c that aren't defined in <uudeview.h>
264 * Be careful about the definition with variable arguments.
265 */
266
267 #if defined(STDC_HEADERS) || defined(HAVE_STDARG_H)
268 int UUMessage (char *, int, int, char *, ...);
269 #else
270 int UUMessage ();
271 #endif
272 int UUBusyPoll (void);
273
274 /*
275 * Functions from uucheck.c
276 */
277
278 uufile * UUPreProcessPart (fileread *, int *);
279 int UUInsertPartToList (uufile *);
280 uulist * UUCheckGlobalList (void);
281
282 /*
283 * Functions from uuutil.c
284 */
285
286 void UUkillfread (fileread *);
287 void UUkillfile (uufile *);
288 void UUkilllist (uulist *);
289 void UUkillheaders (headers *);
290
291 fileread * ScanPart (FILE *, char *, int *);
292
293 int UUbhdecomp (char *, char *,
294 char *, int *,
295 size_t, size_t,
296 size_t *);
297 size_t UUbhwrite (char *, size_t, size_t, FILE *);
298
299 /*
300 * Functions from uunconc.c
301 */
302
303 int UURepairData (FILE *, char *, int, int *);
304
305 void UUInitConc (void);
306 int UUValidData (char *, int, int *);
307 size_t UUDecodeLine (char *, char *, int);
308 int UUDecodePart (FILE *, FILE *, int *, long, int, int, char *);
309 int UUDecode (uulist *);
310
311 /*
312 * Message retrieval from uustring.c
313 */
314
315 char * uustring (int);
316
317 /*
318 * From uuscan.c
319 */
320
321 int UUScanHeader (FILE *, headers *);
322
323 #ifdef __cplusplus
324 }
325 #endif
326 #endif