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 __UUDEVIEW_H__ 18 #define __UUDEVIEW_H__ 19 20 /* 21 * This include file features all the definitions that should 22 * be externally visible. This isn't much. 23 * 24 * $Id: uudeview.h,v 1.18 2003/09/29 23:27:47 fp Exp $ 25 */ 26 27 #ifndef _ANSI_ARGS_ 28 #ifdef PROTOTYPES 29 #define _ANSI_ARGS_(c) c 30 #else 31 #define _ANSI_ARGS_(c) () 32 #endif 33 #endif 34 35 /* 36 * Message Types 37 */ 38 39 #define UUMSG_MESSAGE (0) /* just a message, nothing important */ 40 #define UUMSG_NOTE (1) /* something that should be noticed */ 41 #define UUMSG_WARNING (2) /* important msg, processing continues */ 42 #define UUMSG_ERROR (3) /* processing has been terminated */ 43 #define UUMSG_FATAL (4) /* decoder cannot process further requests */ 44 #define UUMSG_PANIC (5) /* recovery impossible, app must terminate */ 45 46 /* 47 * Return Values 48 */ 49 50 #define UURET_OK (0) /* everything went fine */ 51 #define UURET_IOERR (1) /* I/O Error - examine errno */ 52 #define UURET_NOMEM (2) /* not enough memory */ 53 #define UURET_ILLVAL (3) /* illegal value for operation */ 54 #define UURET_NODATA (4) /* decoder didn't find any data */ 55 #define UURET_NOEND (5) /* encoded data wasn't ended properly */ 56 #define UURET_UNSUP (6) /* unsupported function (encoding) */ 57 #define UURET_EXISTS (7) /* file exists (decoding) */ 58 #define UURET_CONT (8) /* continue -- special from ScanPart */ 59 #define UURET_CANCEL (9) /* operation canceled */ 60 61 /* 62 * File states, may be OR'ed 63 */ 64 65 #define UUFILE_READ (0) /* Read in, but not further processed */ 66 #define UUFILE_MISPART (1) /* Missing Part(s) detected */ 67 #define UUFILE_NOBEGIN (2) /* No 'begin' found */ 68 #define UUFILE_NOEND (4) /* No 'end' found */ 69 #define UUFILE_NODATA (8) /* File does not contain valid uudata */ 70 #define UUFILE_OK (16) /* All Parts found, ready to decode */ 71 #define UUFILE_ERROR (32) /* Error while decoding */ 72 #define UUFILE_DECODED (64) /* Successfully decoded */ 73 #define UUFILE_TMPFILE (128) /* Temporary decoded file exists */ 74 75 /* 76 * Encoding Types 77 */ 78 79 #define UU_ENCODED (1) /* UUencoded data */ 80 #define B64ENCODED (2) /* Mime-Base64 data */ 81 #define XX_ENCODED (3) /* XXencoded data */ 82 #define BH_ENCODED (4) /* Binhex encoded */ 83 #define PT_ENCODED (5) /* Plain-Text encoded (MIME) */ 84 #define QP_ENCODED (6) /* Quoted-Printable (MIME) */ 85 #define YENC_ENCODED (7) /* yEnc encoded */ 86 87 /* 88 * Option indices for GetOption / SetOption 89 */ 90 91 #define UUOPT_VERSION (0) /* version number MAJOR.MINORplPATCH (ro) */ 92 #define UUOPT_FAST (1) /* assumes only one part per file */ 93 #define UUOPT_DUMBNESS (2) /* switch off the program's intelligence */ 94 #define UUOPT_BRACKPOL (3) /* give numbers in [] higher precendence */ 95 #define UUOPT_VERBOSE (4) /* generate informative messages */ 96 #define UUOPT_DESPERATE (5) /* try to decode incomplete files */ 97 #define UUOPT_IGNREPLY (6) /* ignore RE:plies (off by default) */ 98 #define UUOPT_OVERWRITE (7) /* whether it's OK to overwrite ex. files */ 99 #define UUOPT_SAVEPATH (8) /* prefix to save-files on disk */ 100 #define UUOPT_IGNMODE (9) /* ignore the original file mode */ 101 #define UUOPT_DEBUG (10) /* print messages with FILE/LINE info */ 102 #define UUOPT_ERRNO (14) /* get last error code for UURET_IOERR (ro) */ 103 #define UUOPT_PROGRESS (15) /* retrieve progress information */ 104 #define UUOPT_USETEXT (16) /* handle text messages */ 105 #define UUOPT_PREAMB (17) /* handle Mime preambles/epilogues */ 106 #define UUOPT_TINYB64 (18) /* detect short B64 outside of Mime */ 107 #define UUOPT_ENCEXT (19) /* extension for single-part encoded files */ 108 #define UUOPT_REMOVE (20) /* remove input files after decoding */ 109 #define UUOPT_MOREMIME (21) /* strict MIME adherence */ 110 111 /* 112 * Code for the "action" in the progress structure 113 */ 114 115 #define UUACT_IDLE (0) /* we don't do anything */ 116 #define UUACT_SCANNING (1) /* scanning an input file */ 117 #define UUACT_DECODING (2) /* decoding into a temp file */ 118 #define UUACT_COPYING (3) /* copying temp to target */ 119 #define UUACT_ENCODING (4) /* encoding a file */ 120 121 /* 122 * forward definition 123 */ 124 125 struct _uufile; 126 127 /* 128 * Structure for holding the list of files that have been found 129 * uufile items are inserted into this list with UUInsertPartToList 130 * After inserting a bunch of files, UUCheckGlobalList must be called 131 * to update the states. 132 */ 133 134 typedef struct _uulist { 135 short state; /* Status as described by the macros above */ 136 short mode; /* file mode as found on begin line */ 137 138 int begin; /* part number where begin was detected */ 139 int end; /* part number where end was detected */ 140 141 short uudet; /* Encoding type (see macros above) */ 142 int flags; /* flags, especially for single-part files */ 143 144 long size; /* approximate size of resulting file */ 145 char *filename; /* malloc'ed file name */ 146 char *subfname; /* malloc'ed ID from subject line */ 147 char *mimeid; /* malloc'ed MIME-ID, if available */ 148 char *mimetype; /* malloc'ed Content-Type, if available */ 149 150 char *binfile; /* name of temp file, if already decoded */ 151 152 struct _uufile *thisfile; /* linked list of this file's parts */ 153 154 int *haveparts; /* the parts we have (max. 256 are listed) */ 155 int *misparts; /* list of missing parts (max. 256) */ 156 157 struct _uulist *NEXT; /* next item of the list */ 158 struct _uulist *PREV; /* previous item of the list */ 159 } uulist; 160 161 /* 162 * The "progress" structure which is passed to the Busy Callback 163 */ 164 165 typedef struct { 166 int action; /* see UUACT_* definitions above */ 167 char curfile[256]; /* the file we are working on, incl. path */ 168 int partno; /* part we're currently decoding */ 169 int numparts; /* total number of parts of this file */ 170 long fsize; /* size of the current file */ 171 int percent; /* % of _current part_ */ 172 long foffset; /* file offset -- internal use only */ 173 long totsize; /* file total size -- internal use only */ 174 } uuprogress; 175 176 177 /* 178 * Externally visible Functions 179 */ 180 181 #ifndef UUEXPORT 182 #define UUEXPORT 183 #endif 184 185 #ifdef __cplusplus 186 extern "C" { 187 #endif 188 189 int UUEXPORT UUInitialize _ANSI_ARGS_((void)); 190 int UUEXPORT UUGetOption _ANSI_ARGS_((int, int *, char *, int)); 191 int UUEXPORT UUSetOption _ANSI_ARGS_((int, int, char *)); 192 char * UUEXPORT UUstrerror _ANSI_ARGS_((int)); 193 int UUEXPORT UUSetMsgCallback _ANSI_ARGS_((void *, 194 void (*) (void *, 195 char *, 196 int))); 197 int UUEXPORT UUSetBusyCallback _ANSI_ARGS_((void *, 198 int (*) (void *, 199 uuprogress *), 200 long)); 201 int UUEXPORT UUSetFileCallback _ANSI_ARGS_((void *, 202 int (*) (void *, char *, 203 char *, int))); 204 int UUEXPORT UUSetFNameFilter _ANSI_ARGS_((void *, 205 char * (*) (void *, 206 char *))); 207 char * UUEXPORT UUFNameFilter _ANSI_ARGS_((char *)); 208 int UUEXPORT UULoadFile _ANSI_ARGS_((char *, char *, int)); 209 int UUEXPORT UULoadFileWithPartNo _ANSI_ARGS_((char *, char *, int, int)); 210 uulist *UUEXPORT UUGetFileListItem _ANSI_ARGS_((int)); 211 int UUEXPORT UURenameFile _ANSI_ARGS_((uulist *, char *)); 212 int UUEXPORT UUDecodeToTemp _ANSI_ARGS_((uulist *)); 213 int UUEXPORT UURemoveTemp _ANSI_ARGS_((uulist *)); 214 int UUEXPORT UUDecodeFile _ANSI_ARGS_((uulist *, char *)); 215 int UUEXPORT UUInfoFile _ANSI_ARGS_((uulist *, void *, 216 int (*) (void *, 217 char *))); 218 int UUEXPORT UUSmerge _ANSI_ARGS_((int)); 219 int UUEXPORT UUCleanUp _ANSI_ARGS_((void)); 220 221 int UUEXPORT UUQuickDecode _ANSI_ARGS_((FILE *, FILE *, 222 char *, long)); 223 224 int UUEXPORT UUEncodeMulti _ANSI_ARGS_((FILE *, FILE *, 225 char *, int, 226 char *, char *, int)); 227 int UUEXPORT UUEncodePartial _ANSI_ARGS_((FILE *, FILE *, 228 char *, int, 229 char *, char *, 230 int, int, long, 231 unsigned long*)); 232 int UUEXPORT UUEncodeToStream _ANSI_ARGS_((FILE *, FILE *, 233 char *, int, 234 char *, int)); 235 int UUEXPORT UUEncodeToFile _ANSI_ARGS_((FILE *, char *, int, 236 char *, char *, long)); 237 int UUEXPORT UUE_PrepSingle _ANSI_ARGS_((FILE *, FILE *, 238 char *, int, 239 char *, int, 240 char *, char *, 241 char *, int)); 242 int UUEXPORT UUE_PrepPartial _ANSI_ARGS_((FILE *, FILE *, 243 char *, int, 244 char *, int, 245 int, long, long, char *, 246 char *, char *, int)); 247 248 int UUEXPORT UUE_PrepSingleExt _ANSI_ARGS_((FILE *, FILE *, 249 char *, int, 250 char *, int, 251 char *, char *, 252 char *, char *, 253 int)); 254 int UUEXPORT UUE_PrepPartialExt _ANSI_ARGS_((FILE *, FILE *, 255 char *, int, 256 char *, int, 257 int, long, long, char *, 258 char *, char *, char *, 259 int)); 260 #ifdef __cplusplus 261 } 262 #endif 263 #endif 264