Were did that svn:executable come from?
[AROS.git] / workbench / devs / diskimage / include / amigaos / xpk / xpk.h
blob3775e0fd29b74d019500292645cb7936f91f591d
1 #ifndef XPK_XPK_H
2 #define XPK_XPK_H
4 /*
5 ** $VER: xpk/xpk.h 4.19 (28.10.1998) by SDI
6 **
7 ** (C) Copyright 1991-1998 by
8 ** Urban Dominik Mueller, Bryan Ford,
9 ** Christian Schneider, Christian von Roques,
10 ** Dirk Stöcker
11 ** All Rights Reserved
14 #ifndef EXEC_LIBRARIES_H
15 #include <exec/libraries.h>
16 #endif
18 #ifndef EXEC_LISTS_H
19 #include <exec/lists.h>
20 #endif
22 #ifndef UTILITY_TAGITEM_H
23 #include <utility/tagitem.h>
24 #endif
26 #ifndef UTILITY_HOOKS_H
27 #include <utility/hooks.h>
28 #endif
30 #define XPKNAME "xpkmaster.library"
32 /***************************************************************************
35 * The packing/unpacking tags
37 * (TRUE) or (FALSE) mean the default value given by xpkmaster.library
41 #define XPK_TagBase (TAG_USER + ('X'<<8) + 'P')
42 #define XTAG(a) (XPK_TagBase+a)
44 /* Caller must supply ONE of these to tell Xpk#?ack where to get data from */
45 #define XPK_InName XTAG(0x01) /* Process an entire named file */
46 #define XPK_InFH XTAG(0x02) /* File handle - start from current position */
47 /* If packing partial file, must also supply InLen */
48 #define XPK_InBuf XTAG(0x03) /* Single unblocked memory buffer */
49 /* Must also supply InLen */
50 #define XPK_InHook XTAG(0x04) /* Call custom Hook to read data */
51 /* Must also supply InLen, when hook
52 cannot do! (not for XPK unpacking) */
54 /* Caller must supply ONE of these to tell Xpk#?ackFile where to send data to */
55 #define XPK_OutName XTAG(0x10) /* Write (or overwrite) this data file */
56 #define XPK_OutFH XTAG(0x11) /* File handle - write from current position on */
57 #define XPK_OutBuf XTAG(0x12) /* Unblocked buffer - must also supply OutBufLen */
58 #define XPK_GetOutBuf XTAG(0x13) /* Master allocates OutBuf - ti_Data points to buf ptr */
59 #define XPK_OutHook XTAG(0x14) /* Callback Hook to get output buffers */
61 /* Other tags for Pack/Unpack */
62 #define XPK_InLen XTAG(0x20) /* Length of data in input buffer */
63 #define XPK_OutBufLen XTAG(0x21) /* Length of output buffer */
64 #define XPK_GetOutLen XTAG(0x22) /* ti_Data points to long to receive OutLen */
65 #define XPK_GetOutBufLen XTAG(0x23) /* ti_Data points to long to receive OutBufLen */
66 #define XPK_Password XTAG(0x24) /* Password for de/encoding */
67 #define XPK_GetError XTAG(0x25) /* ti_Data points to buffer for error message */
68 #define XPK_OutMemType XTAG(0x26) /* Memory type for output buffer */
69 #define XPK_PassThru XTAG(0x27) /* Bool: Pass through unrecognized formats on unpack */
70 #define XPK_StepDown XTAG(0x28) /* Bool: Step down pack method if necessary */
71 #define XPK_ChunkHook XTAG(0x29) /* Call this Hook between chunks */
72 #define XPK_PackMethod XTAG(0x2a) /* Do a FindMethod before packing */
73 #define XPK_ChunkSize XTAG(0x2b) /* Chunk size to try to pack with */
74 #define XPK_PackMode XTAG(0x2c) /* Packing mode for sublib to use */
75 #define XPK_NoClobber XTAG(0x2d) /* Don't overwrite existing files */
76 #define XPK_Ignore XTAG(0x2e) /* Skip this tag */
77 #define XPK_TaskPri XTAG(0x2f) /* Change priority for (un)packing */
78 #define XPK_FileName XTAG(0x30) /* File name for progress report */
79 #define XPK_ShortError XTAG(0x31) /* !!! obsolete !!! */
80 #define XPK_PackersQuery XTAG(0x32) /* Query available packers */
81 #define XPK_PackerQuery XTAG(0x33) /* Query properties of a packer */
82 #define XPK_ModeQuery XTAG(0x34) /* Query properties of packmode */
83 #define XPK_LossyOK XTAG(0x35) /* Lossy packing permitted? (FALSE)*/
84 #define XPK_NoCRC XTAG(0x36) /* Ignore checksum */
85 /* tags added for xfdmaster support (version 4 revision 25) */
86 #define XPK_Key16 XTAG(0x37) /* 16 bit key (unpack only) */
87 #define XPK_Key32 XTAG(0x38) /* 32 bit key (unpack only) */
89 /* tag added to support seek (version 5) */
90 #define XPK_NeedSeek XTAG(0x39) /* turn on Seek function usage */
92 /* preference depending tags added for version 4 - their default value
93 may depend on preferences, see <xpk/xpkprefs.h> for more info */
95 #define XPK_UseXfdMaster XTAG(0x40) /* Use xfdmaster.library (FALSE) */
96 #define XPK_UseExternals XTAG(0x41) /* Use packers in extern dir (TRUE)*/
97 #define XPK_PassRequest XTAG(0x42) /* automatic password req.? (FALSE)*/
98 #define XPK_Preferences XTAG(0x43) /* use prefs semaphore ? (TRUE) */
99 #define XPK_ChunkReport XTAG(0x44) /* automatic chunk report ? (FALSE)*/
101 /* tags XTAG(0x50) to XTAG(0x6F) are for XpkPassRequest -- see below */
103 #define XPK_MARGIN 256 /* Safety margin for output buffer */
105 /***************************************************************************
108 * The hook function interface
112 /* Message passed to InHook and OutHook as the ParamPacket */
113 struct XpkIOMsg {
114 ULONG xiom_Type ; /* Read/Write/Alloc/Free/Abort */
115 APTR xiom_Ptr ; /* The mem area to read from/write to */
116 LONG xiom_Size ; /* The size of the read/write */
117 ULONG xiom_IOError ; /* The IoErr() that occurred */
118 ULONG xiom_Reserved ; /* Reserved for future use */
119 ULONG xiom_Private1 ; /* Hook specific, will be set to 0 by */
120 ULONG xiom_Private2 ; /* master library before first use */
121 ULONG xiom_Private3 ;
122 ULONG xiom_Private4 ;
125 /* The values for XpkIoMsg->Type */
126 #define XIO_READ 1
127 #define XIO_WRITE 2
128 #define XIO_FREE 3
129 #define XIO_ABORT 4
130 #define XIO_GETBUF 5
131 #define XIO_SEEK 6
132 #define XIO_TOTSIZE 7
134 /***************************************************************************
137 * The progress report interface
141 /* Passed to ChunkHook as the ParamPacket */
142 struct XpkProgress {
143 ULONG xp_Type; /* Type of report: XPKPROG_#? numbers */
144 STRPTR xp_PackerName; /* Brief name of packer being used */
145 STRPTR xp_PackerLongName; /* Descriptive name of packer being used */
146 STRPTR xp_Activity; /* Packing/unpacking message */
147 STRPTR xp_FileName; /* Name of file being processed, if available */
148 ULONG xp_CCur; /* Amount of packed data already processed */
149 ULONG xp_UCur; /* Amount of unpacked data already processed */
150 ULONG xp_ULen; /* Amount of unpacked data in file */
151 LONG xp_CF; /* Compression factor so far */
152 ULONG xp_Done; /* Percentage done already */
153 ULONG xp_Speed; /* Bytes per second, from beginning of stream */
154 ULONG xp_Reserved[8]; /* For future use */
156 #define XPKPROG_START 1 /* crunching started */
157 #define XPKPROG_MID 2 /* somewhere in the mid */
158 #define XPKPROG_END 3 /* crunching is completed */
160 /***************************************************************************
163 * The file info block
167 struct XpkFib {
168 ULONG xf_Type ; /* Unpacked, packed, archive? */
169 ULONG xf_ULen ; /* Uncompressed length */
170 ULONG xf_CLen ; /* Compressed length */
171 ULONG xf_NLen ; /* Next chunk len */
172 ULONG xf_UCur ; /* Uncompressed bytes so far */
173 ULONG xf_CCur ; /* Compressed bytes so far */
174 ULONG xf_ID ; /* 4 letter ID of packer */
175 UBYTE xf_Packer[6] ; /* 4 letter name of packer */
176 UWORD xf_SubVersion ; /* Required sublib version   */
177 UWORD xf_MasVersion ; /* Required masterlib version */
178 ULONG xf_Flags ; /* Password? */
179 UBYTE xf_Head[16] ; /* First 16 bytes of orig. file */
180 LONG xf_Ratio ; /* Compression ratio */
181 ULONG xf_Reserved[8] ; /* For future use */
184 #define XPKTYPE_UNPACKED 0 /* Not packed */
185 #define XPKTYPE_PACKED 1 /* Packed file */
186 #define XPKTYPE_ARCHIVE 2 /* Archive */
188 #define XPKFLAGS_PASSWORD (1<< 0) /* Password needed */
189 #define XPKFLAGS_NOSEEK (1<< 1) /* Chunks are dependent */
190 #define XPKFLAGS_NONSTD (1<< 2) /* Nonstandard file format */
191 /* defines added for xfdmaster support (version 4 revision 25) */
192 #define XPKFLAGS_KEY16 (1<< 3) /* 16 bit key - for decrunching */
193 #define XPKFLAGS_KEY32 (1<< 4) /* 32 bit key - for decrunching */
195 /***************************************************************************
198 * The error messages
202 #define XPKERR_OK 0
203 #define XPKERR_NOFUNC -1 /* This function not implemented */
204 #define XPKERR_NOFILES -2 /* No files allowed for this function */
205 #define XPKERR_IOERRIN -3 /* Input error happened */
206 #define XPKERR_IOERROUT -4 /* Output error happened */
207 #define XPKERR_CHECKSUM -5 /* Check sum test failed */
208 #define XPKERR_VERSION -6 /* Packed file's version newer than lib */
209 #define XPKERR_NOMEM -7 /* Out of memory */
210 #define XPKERR_LIBINUSE -8 /* For not-reentrant libraries */
211 #define XPKERR_WRONGFORM -9 /* Was not packed with this library */
212 #define XPKERR_SMALLBUF -10 /* Output buffer too small */
213 #define XPKERR_LARGEBUF -11 /* Input buffer too large */
214 #define XPKERR_WRONGMODE -12 /* This packing mode not supported */
215 #define XPKERR_NEEDPASSWD -13 /* Password needed for decoding */
216 #define XPKERR_CORRUPTPKD -14 /* Packed file is corrupt */
217 #define XPKERR_MISSINGLIB -15 /* Required library is missing */
218 #define XPKERR_BADPARAMS -16 /* Caller's TagList was screwed up */
219 #define XPKERR_EXPANSION -17 /* Would have caused data expansion */
220 #define XPKERR_NOMETHOD -18 /* Cannot find requested method */
221 #define XPKERR_ABORTED -19 /* Operation aborted by user */
222 #define XPKERR_TRUNCATED -20 /* Input file is truncated */
223 #define XPKERR_WRONGCPU -21 /* Better CPU required for this library */
224 #define XPKERR_PACKED -22 /* Data are already XPacked */
225 #define XPKERR_NOTPACKED -23 /* Data not packed */
226 #define XPKERR_FILEEXISTS -24 /* File already exists */
227 #define XPKERR_OLDMASTLIB -25 /* Master library too old */
228 #define XPKERR_OLDSUBLIB -26 /* Sub library too old */
229 #define XPKERR_NOCRYPT -27 /* Cannot encrypt */
230 #define XPKERR_NOINFO -28 /* Can't get info on that packer */
231 #define XPKERR_LOSSY -29 /* This compression method is lossy */
232 #define XPKERR_NOHARDWARE -30 /* Compression hardware required */
233 #define XPKERR_BADHARDWARE -31 /* Compression hardware failed */
234 #define XPKERR_WRONGPW -32 /* Password was wrong */
235 #define XPKERR_UNKNOWN -33 /* unknown error cause */
236 #define XPKERR_REQTIMEOUT -34 /* password request reached time out */
238 #define XPKERRMSGSIZE 80 /* Maximum size of an error message */
240 /***************************************************************************
243 * The XpkQuery() call
247 struct XpkPackerInfo {
248 UBYTE xpi_Name[24] ; /* Brief name of the packer */
249 UBYTE xpi_LongName[32] ; /* Full name of the packer */
250 UBYTE xpi_Description[80]; /* One line description of packer */
251 ULONG xpi_Flags ; /* Defined below */
252 ULONG xpi_MaxChunk ; /* Max input chunk size for packing */
253 ULONG xpi_DefChunk ; /* Default packing chunk size */
254 UWORD xpi_DefMode ; /* Default mode on 0..100 scale */
257 /* Defines for Flags */
258 #define XPKIF_PK_CHUNK (1<< 0) /* Library supplies chunk packing */
259 #define XPKIF_PK_STREAM (1<< 1) /* Library supplies stream packing */
260 #define XPKIF_PK_ARCHIVE (1<< 2) /* Library supplies archive packing */
261 #define XPKIF_UP_CHUNK (1<< 3) /* Library supplies chunk unpacking */
262 #define XPKIF_UP_STREAM (1<< 4) /* Library supplies stream unpacking */
263 #define XPKIF_UP_ARCHIVE (1<< 5) /* Library supplies archive unpacking */
264 #define XPKIF_HOOKIO (1<< 7) /* Uses full Hook I/O */
265 #define XPKIF_CHECKING (1<<10) /* Does its own data checking */
266 #define XPKIF_PREREADHDR (1<<11) /* Unpacker pre-reads the next chunkhdr */
267 #define XPKIF_ENCRYPTION (1<<13) /* Sub library supports encryption */
268 #define XPKIF_NEEDPASSWD (1<<14) /* Sub library requires encryption */
269 #define XPKIF_MODES (1<<15) /* Sub library has different XpkMode's */
270 #define XPKIF_LOSSY (1<<16) /* Sub library does lossy compression */
271 #define XPKIF_NOSEEK (1<<17) /* unpacker does not support seeking */
273 struct XpkMode {
274 struct XpkMode *xm_Next; /* Chain to next descriptor for ModeDesc list*/
275 ULONG xm_Upto; /* Maximum efficiency handled by this mode */
276 ULONG xm_Flags; /* Defined below */
277 ULONG xm_PackMemory; /* Extra memory required during packing */
278 ULONG xm_UnpackMemory; /* Extra memory during unpacking */
279 ULONG xm_PackSpeed; /* Approx packing speed in K per second */
280 ULONG xm_UnpackSpeed; /* Approx unpacking speed in K per second */
281 UWORD xm_Ratio; /* CF in 0.1% */
282 UWORD xm_ChunkSize; /* Desired chunk size in K (!!) for this mode*/
283 UBYTE xm_Description[10];/* 7 character mode description */
286 /* Defines for XpkMode.Flags */
287 #define XPKMF_A3000SPEED (1<< 0) /* Timings on old standard environment */
288 /* obsolete */
289 #define XPKMF_PK_NOCPU (1<< 1) /* Packing not heavily CPU dependent */
290 #define XPKMF_UP_NOCPU (1<< 2) /* Unpacking... (i.e. hardware modes) */
292 #define MAXPACKERS 100
294 struct XpkPackerList {
295 ULONG xpl_NumPackers;
296 UBYTE xpl_Packer[MAXPACKERS][6];
299 /***************************************************************************
302 * The XpkSeek() call (library version 5)
306 #define XPKSEEK_BEGINNING -1
307 #define XPKSEEK_CURRENT 0
308 #define XPKSEEK_END 1
310 /***************************************************************************
313 * The XpkPassRequest() call (library version 4)
317 #define XPK_PassChars XTAG(0x50) /* which chars should be used */
318 #define XPK_PasswordBuf XTAG(0x51) /* buffer to write password to */
319 #define XPK_PassBufSize XTAG(0x52) /* size of password buffer */
320 #define XPK_Key16BitPtr XTAG(0x53) /* pointer to UWORD var for key data */
321 #define XPK_Key32BitPtr XTAG(0x54) /* pointer to ULONG var for key data */
322 #define XPK_PubScreen XTAG(0x55) /* pointer to struct Screen */
323 #define XPK_PassTitle XTAG(0x56) /* Text shown in Screen title */
324 #define XPK_TimeOut XTAG(0x57) /* Timeout time of requester in seconds */
325 /* request position and verify tags (version 4 revision 25) */
326 #define XPK_PassWinLeft XTAG(0x58) /* distance from left screen border */
327 #define XPK_PassWinTop XTAG(0x59) /* distance form top screen border */
328 #define XPK_PassWinWidth XTAG(0x5A) /* width of requester window */
329 #define XPK_PassWinHeight XTAG(0x5B) /* height of requester window */
330 #define XPK_PassCenter XTAG(0x5C) /* Left and Top are used as center coords */
331 #define XPK_PassVerify XTAG(0x5D) /* force user to verify password */
333 /* XPKPASSFF defines for XPK_PassChars. Do not use. Use XPKPASSFLG defines */
335 #define XPKPASSFF_30x39 (1<< 0) /* all numbers */
336 #define XPKPASSFF_41x46 (1<< 1) /* chars 'A' to 'F' */
337 #define XPKPASSFF_61x66 (1<< 2) /* chars 'a' to 'f' */
338 #define XPKPASSFF_47x5A (1<< 3) /* chars 'G' to 'Z' */
339 #define XPKPASSFF_67x7A (1<< 4) /* chars 'g' to 'z' */
340 #define XPKPASSFF_20 (1<< 5) /* space character */
341 #define XPKPASSFF_SPECIAL7BIT (1<< 6) /* special 7 bit chars */
342 /* all chars 0x20 to 0x7E without above defined */
344 #define XPKPASSFF_C0xDE (1<< 7) /* upper special chars */
345 #define XPKPASSFF_DFxFF (1<< 8) /* lower special chars */
346 #define XPKPASSFF_SPECIAL8BIT (1<< 9) /* special 8 bit chars */
347 /* all chars 0xA0 to 0xBF */
349 /* Control characters (0x00 to 0x1F, 0x7F and 0x80 to 0x9F) are not
350 * useable. This also means carriage return, linefeed, tab stop and
351 * other controls are not usable.
354 /* flags for XPK_PassChars, XPKPASSFLG_PRINTABLE is default
356 * NUMERIC : numbers
357 * HEXADECIMAL : hex numbers
358 * ALPHANUMERIC : numbers and letters
359 * INTALPHANUM : numbers and international letters
360 * ASCII7 : 7 Bit ASCII
361 * PRINTABLE : all printable characters
364 #define XPKPASSFLG_NUMERIC XPKPASSFF_30x39
365 #define XPKPASSFLG_HEXADECIMAL (XPKPASSFF_30x39|XPKPASSFF_41x46|XPKPASSFF_61x66)
366 #define XPKPASSFLG_ALPHANUMERIC (XPKPASSFLG_HEXADECIMAL|XPKPASSFF_47x5A|XPKPASSFF_67x7A)
367 #define XPKPASSFLG_INTALPHANUM (XPKPASSFLG_ALPHANUMERIC|XPKPASSFF_C0xDE|XPKPASSFF_DFxFF)
368 #define XPKPASSFLG_ASCII7 (XPKPASSFLG_ALPHANUMERIC|XPKPASSFF_SPECIAL7BIT)
369 #define XPKPASSFLG_PRINTABLE (XPKPASSFLG_INTALPHANUM|XPKPASSFF_SPECIAL7BIT|XPKPASSFF_SPECIAL8BIT|XPKPASSFF_20)
371 /***************************************************************************
374 * The XpkAllocObject() call (library version 4)
376 * use this always with library version >= 4, do NO longer allocate the
377 * structures yourself
381 #define XPKOBJ_FIB 0 /* XpkFib structure */
382 #define XPKOBJ_PACKERINFO 1 /* XpkPackerInfo structure */
383 #define XPKOBJ_MODE 2 /* XpkMode structure */
384 #define XPKOBJ_PACKERLIST 3 /* XpkPackerList structure */
386 #endif /* XPK_XPK_H */