; Unpack Library Include File
;

	IFND	Unpack.i

Unpack.i	=	1

	IFND	EXEC_TYPES_I
	INCLUDE	"Exec/Types.i"
	ENDC

BPTR	    MACRO
\1	    EQU     SOFFSET
SOFFSET     SET     SOFFSET+4
	    ENDM

; Library Name & Version


UNPACKNAME	MACRO
		dc.b	"unpack.library",0
		ENDM

UnpackVersion	=	42
UnpackRevision	=	71


; First The Library Offsets

upAllocCInfo	=	-30
upFreeCInfo	=	-36
upDetermineFile	=	-42
upUnpack	=	-48
upTestHunk	=	-54
upUnpackNum	=	-60		;OBSOLETE!!!!
upUnpackList	=	-66
upUnpackListNext=	-72

upLoadFile	=	-78		;V34.20
upFreeFile	=	-84		;V34.20

upUseDrive	=	-90		;V36+
upUnuseDrive	=	-96		;V36+
upSendCmd	=	-102		;V36+
upNewUnpackNum	=	-108		;V37+

upGetUnpacker	=	-114		;V42+


; Library Base Structure

	STRUCTURE LibraryStruct,0
	STRUCT	LIB_Node,14
	UBYTE	LIB_Flags
	UBYTE	LIB_Pad
	UWORD	LIB_NegSize
	UWORD	LIB_PosSize
	UWORD	LIB_Version
	UWORD	LIB_Revision
	APTR	LIB_IDString
	ULONG	LIB_Sum
	UWORD	LIB_OpenCnt

	BPTR	LIB_SegList
	APTR	LIB_DosBase
	APTR	LIB_IntBase
	APTR	LIB_SysBase
	LABEL	LibraryStruct_SIZEOF


; Unpack Numbers Structure (V37+)

	STRUCTURE NumberStruct,0
	UWORD	NS_Version		;Library Version
	UWORD	NS_Revision		;Library Revision
	UWORD	NS_Types
	UWORD	NS_Unpackers
	LABEL	NumberStruct_SIZEOF


; Unpacker List Structure (V42+)

	STRUCTURE UnpListStruct,0
	APTR	UL_Name
	UWORD	UL_CrunchNum
	UWORD	UL_TypeNum
	UBYTE	UL_Type
	UBYTE	UL_Flags
	ULONG	UL_Reserved
	LABEL	UnpListStruct_SIZEOF

ULFB_Encrypted	=	0


; Drive Structure (V36+)

	STRUCTURE DriveStruct,0
	APTR	DRV_UnpackInfo
	STRUCT	DRV_IOStdReq,48
	STRUCT	DRV_MsgPort,34
	STRUCT	DRV_DevName,48
	STRUCT	DRV_DriveName,10
	LABEL	DriveStruct_SIZEOF


; Unpack Info Structure

	STRUCTURE UnpackInfo,0
	APTR	UI_Filename
	APTR	UI_Path
	APTR	UI_Jump
	APTR	UI_CruncherName
	APTR	UI_DecrunchAdr
	LONG	UI_DecrunchLen
	UWORD	UI_ErrorNum
	UWORD	UI_CrunchNum
	UBYTE	UI_CrunchType
	UBYTE	UI_Flag
	APTR	UI_LoadNamePoi
	LONG	UI_CrunchLen
	APTR	UI_UserData		;V35+
	APTR	UI_TrackJump		;V36+
	APTR	UI_TrkErrJump		;V36+
	LONG	UI_Offset		;V36+
	UWORD	UI_Track		;V36+
	APTR	UI_ErrorMsg		;V37+
	APTR	UI_CrunchAdr		;V37+
	APTR	UI_LhaPattern		;V38+
	BOOL8	UI_UseFilenamePointer	;V39+
	UBYTE	UI_Pad
	ULONG	UI_Address		;V42+
	ULONG	UI_JumpAdr		;V42+
	APTR	UI_Password		;V42+

	STRUCT	UI_Private,872		;Private Data, Do NOT Touch
	LABEL	UnpackInfo_SIZEOF


; The UI_Flag Have The Following Definations:

UFB_OneFile	=	0		;This Select To Decrunch One File Or
					;All Files In An Archive.
UFB_Delete	=	1		;Delete Files After Scanning.
UFB_NoFree	=	2		;Free Memory After Jump (V35+)
UFB_Banner	=	3		;Give Banner (V36+)
UFB_NoLoad	=	4		;Do Not Load File (V37+)
UFB_Protect	=	5		;Change Protection Bits (V38+)
UFB_NoA4	=	6		;A4 -> A2 Instead (V41+)
UFB_ChipMem	=	7		;Decrunch To Chip Memory (V42+)

UFN_OneFile	=	1<<UFB_OneFile
UFN_Delete	=	1<<UFB_Delete
UFN_NoFree	=	1<<UFB_NoFree
UFN_Banner	=	1<<UFB_Banner
UFN_NoLoad	=	1<<UFB_NoLoad
UFN_Protect	=	1<<UFB_Protect
UFN_NoA4	=	1<<UFB_NoA4
UFN_ChipMem	=	1<<UFB_ChipMem


; And Now For The UI_CrunchType Flag: 

CRU_Archive	=	1		;Archive (Lha, Zoo Etc.)
CRU_Data	=	2		;Data File
CRU_Object	=	3		;Object File
CRU_Object2	=	4		;OBSOLETE!!!
CRU_Track	=	5		;Track File (DMS) (V36+)
CRU_Address	=	6		;Address File (V42+)

CRUB_Encryp	=	7		;Encrypted File (If Bit Is Set)


; And The Error Flag:

UERR_Open	=	1		;Can't Open File
UERR_ReadWrite	=	2		;Read/Write Error
UERR_Memory	=	3		;Allocation Error (Out Of Memory)
UERR_Determine	=	4		;Can't Determine File
UERR_Password	=	5		;Illegal Password
UERR_Hunk	=	6		;Hunk Error
UERR_Extern	=	7		;Extern File Error

UERR_Corrupt	=	8		;Crunched File Is Corrupt (V35+)

UERR_Device	=	9		;Illegal Device (V36+)
UERR_DevOpen	=	10		;Couldn't Opn Dev. Or Create Port V36+
UERR_CRC	=	11		;CRC Checksum Error (V36+)
UERR_CheckSum	=	12		;Checksum Error (V36+)
UERR_Old	=	13		;Decruncher In Lib. Too Old (V36+)
UERR_DevErr	=	14		;Error From Device (V36+)

UERR_Protect	=	15		;Couldn't Set Protection Bits (V38+)

UERR_Output	=	16		;Output File Error (V39+)

UERR_OpenLibrary=	17		;Couldn't Open Library (V40+)
UERR_Unknown	=	18		;Unknown Error (V40+)

UERR_Unpack	=	19		;Can't Unpack (V42+)
UERR_PasswordReq=	20		;Password Required (V42+)
UERR_Directory	=	21		;Can't Make Directory (V42+)

; At Last The Cruncher Numbers:

MaxFilePack	=	12

CN_Lha		=	1		;Lha
CN_LhaSFX	=	2		;LhaSFX
CN_Pak10	=	3		;Pak 1.0
CN_Dms		=	4		;Dms
CN_Lzx		=	5		;Lzx
CN_PCompress	=	6		;P-Compress
CN_DmsE		=	7		;Dms Encrypted

CN_GnuPack10D	=	12		;Gnu Packer 1.0 Data
CN_GnuPack12D	=	13		;Gnu Packer 1.1/1.2 Data
CN_GnuPack12Two	=	14		;Gnu Packer 1.1/1.2 Two Segment
CN_GnuPack10	=	15		;Gnu Packer 1.0
CN_GnuPack12	=	16		;Gnu Packer 1.1/1.2 One Segment
CN_PPData	=	17		;PowerPacker Data
CN_PPDataE	=	18		;PowerPacker Data/Encrypted
CN_PPLoadSeg	=	19		;PowerPacker LoadSeg
CN_PP40Lib	=	20		;PowerPacker 4.0 Library
CN_PP40LibE	=	21		;PowerPacker 4.0 Library/Encrypted
CN_PP40LibOv	=	22		;PowerPacker 4.0 Library/Overlayed
CN_PP2x		=	23		;PowerPacker 2.x Normal
CN_PP30		=	24		;PowerPacker 3.0
CN_PP30E	=	25		;PowerPacker 3.0 Encrypted
CN_PP30Ov	=	26		;PowerPacker 3.0 Overlayed
CN_PP40		=	27		;PowerPacker 4.0
CN_PP40E	=	28		;PowerPacker 4.0 Encrypted
CN_PP40Ov	=	29		;PowerPacker 4.0 Overlayed
CN_Turtle141	=	30		;Turtle Smasher 1.3-1.41
CN_TSqueeze80	=	31		;TurboSqueezer 8.0
CN_TSqueeze80S	=	32		;TurboSqueezer 8.0 Small
CN_TryIt101	=	33		;TryIt 1.01
CN_Titanic11	=	34		;Titanics Cruncher 1.1
CN_Titanic12	=	35		;Titanics Cruncher 1.2
CN_Time22	=	36		;Time Cruncher 1.7-2.2
CN_Tetra21	=	37		;TetraPack 2.1
CN_Tetra21Pro	=	38		;TetraPack 2.1 Pro
CN_Tetra22	=	39		;TetraPack 2.2
CN_Tetra22Pro	=	40		;TetraPack 2.2 Pro
CN_Tetra102	=	41		;TetraCrunch 1.02
CN_Tetra11	=	42		;TetraCrunch 1.1
CN_Stone299d	=	43		;Stone Cracker 2.99c-2.99d
CN_Stone311	=	44		;Stone Cracker 3.11
CN_Stone401A	=	45		;Stone Cracker 4.01 Address
CN_Imploder31	=	46		;Imploder 1.0-3.1
CN_Imploder31P	=	47		;Imploder 1.0-3.1 Protected
CN_Imploder31L	=	48		;Imploder 1.0-3.1 Library
CN_Imploder31LP	=	49		;Imploder 1.0-3.1 Library/Protected
CN_Imploder40	=	50		;Imploder 4.0
CN_Imploder40L	=	51		;Imploder 4.0 Library
CN_BytKil13	=	52		;ByteKiller 1.2-1.3
CN_BytKil20	=	53		;ByteKiller 2.0
CN_BytKil30	=	54		;ByteKiller 3.0
CN_TNMCrun11	=	55		;TNM Cruncher 1.1
CN_CrunMast10	=	56		;Crunch Master 1.0
CN_CrMania191A	=	57		;Crunch-Mania 1.4-1.91 Address
CN_CrMania18AP	=	58		;Crunch-Mania 1.4-1.8 Address/Pro
CN_CrMania191D	=	59		;Crunch-Mania 1.4-1.91 Data
CN_CrMania191	=	60		;Crunch-Mania 1.4-1.91
CN_CrMania191S	=	61		;Crunch-Mania 1.4-1.91 Simple
CN_CrMania191L	=	62		;Crunch-Mania 1.8-1.91 Library
CN_CrMania191LH	=	63		;Crunch-Mania 1.8-1.91 Library/Huffman
CN_CrMania191H	=	64		;Crunch-Mania 1.8-1.91 Huffman
CN_CrMania191DH	=	65		;Crunch-Mania 1.8-1.91 Data/Huffman
CN_CrMania191DHS=	66		;Crunch-Mania 1.8-1.91 Data/Huff/Sample
CN_CrMania191DS	=	67		;Crunch-Mania 1.8-1.91 Data/Sample
CN_DoubAction10	=	68		;Double Action 1.0
CN_DragPack10	=	69		;DragPack 1.0
CN_House14	=	70		;House 1.4 (RSI-Packer)
CN_HPC		=	71		;High Pressure Cruncher
CN_HPCU		=	72		;High Pressure Cruncher Unlinked
CN_IAM10Ice	=	73		;IAM Packer 1.0 Ice
CN_IAM10IceD	=	74		;IAM Packer 1.0 Ice/Data
CN_IAM10Atm5	=	75		;IAM Packer 1.0 Atm5
CN_IAM10Atm5D	=	76		;IAM Packer 1.0 Atm5/Data
CN_ISC15P1	=	77		;ISC 1.5 Pass 1
CN_ISC15P2	=	78		;ISC 1.5 Pass 2
CN_ISC15P3	=	79		;ISC 1.5 Pass 3
CN_MastCrun31A	=	80		;Master Cruncher 3.0-3.1 Address
CN_MastCrun31	=	81		;Master Cruncher 3.0-3.1
CN_MegaCrun10	=	83		;Megacruncher 1.0
CN_MegaCrun12A	=	84		;Megacruncher 1.2 Address
CN_MegaCrun12	=	85		;Megacruncher 1.2
CN_Defjam36	=	86		;Defjam 3.2-3.6
CN_Defjam36Pro	=	87		;Defjam 3.2-3.6 Pro
CN_PackIt10	=	88		;PackIt 1.0
CN_PackIt10D	=	89		;PackIt 1.0 Data
CN_Relokit10	=	90		;Relokit 1.0
CN_Spike	=	91		;Spike Cruncher
CN_SuperCrun27	=	92		;Super Cruncher 2.7
CN_Syncro46	=	93		;Syncro Packer 4.6
CN_Syncro46P	=	94		;Syncro Packer 4.6 Pro
CN_Syncro46R	=	95		;Syncro Packer 4.6 Raw
CN_Syncro46RP	=	96		;Syncro Packer 4.6 Raw/Pro
CN_Stone400	=	97		;Stone Cracker 4.00
CN_Stone400D	=	98		;Stone Cracker 4.00 Data
CN_Stone401	=	99		;Stone Cracker 4.01
CN_Stone401D	=	100		;Stone Cracker 4.01 Data

CN_MaxPacker12	=	113		;MaxPacker 1.2
CN_PMC		=	114		;PMC
CN_Stone271	=	115		;Stone Cracker 2.70-2.71
CN_Stone271K	=	116		;Stone Cracker 2.70-2.71 Kill
CN_Stone310	=	117		;Stone Cracker 3.10
CN_Stone402	=	118		;Stone Cracker 4.02a
CN_Stone402A	=	119		;Stone Cracker 4.02a Address
CN_Stone402D	=	120		;Stone Cracker 4.02a Data
CN_Stone402L	=	121		;Stone Cracker 4.02a Library
CN_Turtle200	=	122		;Turtle Smasher 2.00
CN_Turtle200D	=	123		;Turtle Smasher 2.00 Data
CN_ANC		=	124		;ANC-Cruncher
CN_DisImp10	=	125		;Discovery File Imploder 1.0
CN_HQC20	=	126		;HQC Cruncher 2.0

CN_Stone292	=	130		;Stone Cracker 2.92
CN_Stone299	=	131		;Stone Cracker 2.99
CN_PCompressD	=	132		;P-Compress Data
CN_CrMania191AP	=	133		;Crunch-Mania 1.9t-1.91 Address/Pro
CN_CrMania191AH	=	134		;Crunch-Mania 1.9t-1.91 Address/Huffman
CN_CrMania19APH	=	135		;Crunch-Mania 1.9t Address/Pro/Huff
CN_TSqueeze61	=	136		;TurboSqueezer 6.1
CN_FlashSpeed10	=	137		;FlashSpeed 1.0
CN_BytKilPro10	=	138		;ByteKiller 1.0 Pro
CN_BytKilPro10K	=	139		;ByteKiller 1.0 Pro K
CN_Stone401bA	=	140		;Stone Cracker 4.01ß Address
CN_TrashEli10	=	141		;Trash Eliminator 1.0
CN_Ultimate11	=	142		;Ultimate Packer 1.1
CN_TFA154	=	143		;TFA Cruncher 1.54
CN_SExec11	=	144		;S-Exec 1.1
CN_Stone4103	=	145		;Stone Cracker 4.10.2-4.10.3
CN_Stone4103A	=	146		;Stone Cracker 4.10.2-4.10.3 Address
CN_Stone4103APl	=	147		;Stone Cracker 4.10.2-4.10.3 Adr/Plain
CN_Stone4103AP	=	148		;Stone Cracker 4.10.2-4.10.3 Adr/Pro
CN_Stone4103D	=	149		;Stone Cracker 4.10.2-4.10.3 Data
CN_Stone4102L	=	150		;Stone Cracker 4.10.2 Library
CN_DragPack252	=	151		;DragPack 2.52
CN_DragPack252D	=	152		;DragPack 2.52 Data
CN_Stone300	=	153		;Stone Cracker 3.00
CN_Stone300D	=	154		;Stone Cracker 3.00 Data
CN_Stone300K	=	155		;Stone Cracker 3.00 Kill

CN_PP23Master	=	157		;PowerPacker 2.3 Master
CN_XPK		=	158		;XPK
CN_XPKE		=	159		;XPK Encrypted

CN_CrMania191DE	=	160		;Crunch-Mania 1.9t-1.91 Data/Encrypted
CN_CrMania191DSE=	161		;Crunch-Mania 1.9t-1.91 Data/Samp/Encr
CN_CrMania191DHE=	162		;Crunch-Mania 1.9t-1.91 Data/Huff/Encr
CN_CrMania191DHSE=	163		;Crunch-Mania 1.9t-1.91 Dat/Huf/Sam/Enc
CN_CrMania191APH=	164		;Crunch-Mania 1.91 Address/Pro/Huff
CN_CrMatic10D	=	165		;Crunch-o-Matic 1.0 Data
CN_CrMatic10E	=	166		;Crunch-o-Matic 1.0 Execute
CN_CrMatic10M	=	167		;Crunch-o-Matic 1.0 Module
CN_CrMatic10P	=	168		;Crunch-o-Matic 1.0 Picture
CN_CrMatic10T	=	169		;Crunch-o-Matic 1.0 Text
CN_Stone4103L	=	170		;Stone Cracker 4.10.3 Library
CN_Chryseis09	=	171		;Chryseis Cruncher 0.9
CN_TUC116d	=	172		;TUC Cruncher 1.16d
CN_TUC116dD	=	173		;TUC Cruncher 1.16d Data
CN_SoundTrkPack	=	174		;ST-Packer
CN_PHD		=	175		;PHD Compressor
CN_LightPack15	=	176		;LightPack 1.5
CN_PPRNC1	=	177		;ProPack (RNC) Mode 1
CN_PPRNC1V	=	178		;ProPack (RNC) Validate Mode 1
CN_PPRNC1K	=	179		;ProPack (RNC) Key Mode 1
CN_PPRNC1VK	=	180		;ProPack (RNC) Validate Key Mode 1
CN_PPRNC168000	=	181		;ProPack (RNC) 68000 Mode 1
CN_PPRNC168000V	=	182		;ProPack (RNC) 68000 Validate Mode 1
CN_PPRNC168000K	=	183		;ProPack (RNC) 68000 Key Mode 1
CN_PPRNC168000VK=	184		;ProPack (RNC) 68000 Valid. Key Mode 1
CN_PPRNC1D	=	185		;ProPack (RNC) Data Mode 1
CN_PPRNC1DK	=	186		;ProPack (RNC) Data Key Mode 1
CN_PPRNC2	=	187		;ProPack (RNC) Mode 2
CN_PPRNC2V	=	188		;ProPack (RNC) Validate Mode 2
CN_PPRNC2K	=	189		;ProPack (RNC) Key Mode 2
CN_PPRNC2VK	=	190		;ProPack (RNC) Validate Key Mode 2
CN_PPRNC268000	=	191		;ProPack (RNC) 68000 Mode 2
CN_PPRNC268000V	=	192		;ProPack (RNC) 68000 Validate Mode 2
CN_PPRNC268000K	=	193		;ProPack (RNC) 68000 Key Mode 2
CN_PPRNC268000VK=	194		;ProPack (RNC) 68000 Valid. Key Mode 2
CN_PPRNC2D	=	195		;ProPack (RNC) Data Mode 2
CN_PPRNC2DK	=	196		;ProPack (RNC) Data Key Mode 2
CN_Imploder31O	=	197		;Imploder 1.0-3.1 Overlayed
CN_Imploder31OP	=	198		;Imploder 1.0-3.1 Overlayed Protected
CN_Imploder40O	=	199		;Imploder 4.0 Overlayed
CN_PP30Master	=	200		;PowerPacker 3.0 Master
CN_PP30MasterE	=	201		;PowerPacker 3.0 Master Encrypted
CN_PP30MasterOv	=	202		;PowerPacker 3.0 Master Overlayed

	ENDC
