ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Convert-UUlib/uulib/uuint.h
Revision: 1.5
Committed: Sat Apr 6 01:53:30 2002 UTC (22 years, 2 months ago) by root
Content type: text/plain
Branch: MAIN
Changes since 1.4: +2 -1 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.1 /*
2     * This file is part of uudeview, the simple and friendly multi-part multi-
3 root 1.2 * file uudecoder program (c) 1994-2001 by Frank Pilhofer. The author may
4     * be contacted at fp@fpx.de
5 root 1.1 *
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 root 1.5 * $Id: uuint.h,v 1.4 2002/03/31 21:42:37 root Exp $
26 root 1.1 */
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 root 1.4 extern void *uu_FNCBArg;
181 root 1.1
182     /*
183     * variables
184     */
185    
186     extern int uu_fast_scanning;
187     extern int uu_bracket_policy;
188     extern int uu_verbose;
189     extern int uu_desperate;
190     extern int uu_ignreply;
191     extern int uu_debug;
192     extern int uu_errno;
193     extern int uu_dumbness;
194     extern int uu_overwrite;
195     extern int uu_ignmode;
196     extern int uu_headercount;
197     extern int uu_usepreamble;
198     extern int uu_handletext;
199     extern int uu_tinyb64;
200 root 1.2 extern int uu_remove_input;
201     extern int uu_more_mime;
202 root 1.5 extern int uu_dotdot;
203 root 1.1
204     extern char *uusavepath;
205     extern char *uuencodeext;
206    
207     /*
208     * Encoding/Decoding tables
209     */
210    
211     extern unsigned char UUEncodeTable[];
212     extern unsigned char XXEncodeTable[];
213     extern unsigned char B64EncodeTable[];
214     extern unsigned char BHEncodeTable[];
215    
216     /*
217     * String tables from uustring.c
218     */
219    
220     extern char *msgnames[];
221     extern char *codenames[];
222     extern char *uuretcodes[];
223    
224     extern uulist *UUGlobalFileList;
225    
226     /*
227     * State of MIME variables and current progress
228     */
229    
230     extern int nofnum, mssdepth;
231     extern int mimseqno, lastvalid;
232     extern int lastenc;
233     extern scanstate multistack[];
234     extern headers localenv;
235     extern scanstate sstate;
236     extern uuprogress progress;
237    
238     /*
239     * mallocable areas
240     */
241    
242     extern char *uugen_fnbuffer, *uugen_inbuffer;
243     extern char *uucheck_lastname, *uucheck_tempname;
244     extern char *uuestr_itemp, *uuestr_otemp;
245     extern char *uulib_msgstring, *uuncdl_fulline;
246     extern char *uuncdp_oline, *uuscan_shlline;
247     extern char *uuscan_pvvalue, *uuscan_phtext;
248     extern char *uuscan_sdline, *uuscan_sdbhds1;
249     extern char *uuscan_sdbhds2, *uuscan_spline;
250     extern char *uuutil_bhwtmp;
251     extern char *uunconc_UUxlat, *uunconc_UUxlen;
252     extern char *uunconc_B64xlat, *uunconc_XXxlat;
253     extern char *uunconc_BHxlat, *uunconc_save;
254    
255     #ifdef __cplusplus
256     extern "C" {
257     #endif
258    
259 root 1.4 extern void (*uu_MsgCallback) (void *, char *, int);
260     extern int (*uu_BusyCallback) (void *, uuprogress *);
261     extern int (*uu_FileCallback) (void *, char *, char *, int);
262     extern char * (*uu_FNameFilter) (void *, char *);
263     extern char * (*uu_FileNameCallback)(void *, char *, char *);
264 root 1.1
265     /*
266     * Functions from uulib.c that aren't defined in <uudeview.h>
267     * Be careful about the definition with variable arguments.
268     */
269    
270     #if defined(STDC_HEADERS) || defined(HAVE_STDARG_H)
271     int UUMessage (char *, int, int, char *, ...);
272     #else
273     int UUMessage ();
274     #endif
275     int UUBusyPoll (void);
276    
277     /*
278     * Functions from uucheck.c
279     */
280    
281     uufile * UUPreProcessPart (fileread *, int *);
282     int UUInsertPartToList (uufile *);
283     uulist * UUCheckGlobalList (void);
284    
285     /*
286     * Functions from uuutil.c
287     */
288    
289     void UUkillfread (fileread *);
290     void UUkillfile (uufile *);
291     void UUkilllist (uulist *);
292     void UUkillheaders (headers *);
293    
294     fileread * ScanPart (FILE *, char *, int *);
295    
296     int UUbhdecomp (char *, char *,
297     char *, int *,
298     size_t, size_t,
299     size_t *);
300     size_t UUbhwrite (char *, size_t, size_t, FILE *);
301    
302     /*
303     * Functions from uunconc.c
304     */
305    
306     int UURepairData (FILE *, char *, int, int *);
307    
308     void UUInitConc (void);
309     int UUValidData (char *, int, int *);
310     size_t UUDecodeLine (char *, char *, int);
311     int UUDecodePart (FILE *, FILE *, int *, long, int, int, char *);
312     int UUDecode (uulist *);
313    
314     /*
315     * Message retrieval from uustring.c
316     */
317    
318     char * uustring (int);
319    
320     /*
321     * From uuscan.c
322     */
323    
324     int UUScanHeader (FILE *, headers *);
325    
326     #ifdef __cplusplus
327     }
328     #endif
329     #endif