;/** execute me to create and install the module

ec xfdmaster.e
copy xfdmaster.m to EModules:libraries/xfdmaster.m
quit

**	$VER: xfdmaster.i 38.1 (28.5.97)
**
**	Copyright © 1994-97 by Georg Hörmann
**	All Rights Reserved

v38 converted by Kyzer

**/

OPT MODULE
OPT EXPORT
OPT PREPROCESS

MODULE 'exec/libraries'

OBJECT xfdmasterbase
  libnode:lib,
  seglist,
  dosbase,
  firstslave,
  firstforeman,
  minbuffersize,
  minlinkersize
ENDOBJECT

CONST XFDM_VERSION=38

#define XFDM_NAME 'xfdmaster.library'

CONST XFDOBJ_BUFFERINFO=1,XFDOBJ_SEGMENTINFO=2,XFDOBJ_LINKERINFO=3,
      XFDOBJ_SCANNODE=4,XFDOBJ_SCANHOOK=5,XFDOBJ_MAX=5

OBJECT xfdbufferinfo
  sourcebuffer,sourcebuflen,
  slave,
  packername,
  packerflags:INT,
  error:INT,
  targetbuffer,targetbufmemtype,targetbuflen,targetbufsavelen,
  decraddress,
  jmpaddress,
  special,
  flags:INT,reserved0:INT,
  mintargetlen,finaltargetlen,usertargetbuf,usertargetbuflen
ENDOBJECT

#define maxspeciallen error

OBJECT xfdsegmentinfo
  seglist,slave,packername,packerflags:INT,error:INT,
  special,relmode:INT,flags:INT
ENDOBJECT

OBJECT xfdlinkerinfo
  buffer,buflen,linkername,unlink,reserved:INT,error:INT,
  hunk1,hunk2,amount1,amount2,save1,save2,savelen1,savelen2
ENDOBJECT

OBJECT xfdscannode
  next,save,savelen,packername,packerflags
ENDOBJECT

OBJECT xfdscanhook
  entry,data,todo,scannode
ENDOBJECT

ENUM XFDERR_OK=0,XFDERR_NOMEMORY,XFDERR_NOSLAVE,XFDERR_NOTSUPPORTED,
     XFDERR_UNKNOWN,XFDERR_NOSOURCE,XFDERR_WRONGPASSWORD,XFDERR_BADHUNK,
     XFDERR_CORRUPTEDDATA,XFDERR_MISSINGRESOURCE,XFDERR_WRONGKEY,
     XFDERR_BETTERCPU,XFDERR_HOOKBREAK,XFDERR_DOSERROR,XFDERR_NOTARGET,
     XFDERR_TARGETTOOSMALL,XFDERR_TARGETNOTSUPPORTED,

     XFDERR_UNDEFINEDHUNK=$1000,XFDERR_NOHUNKHEADER,XFDERR_BADEXTTYPE,
     XFDERR_BUFFERTRUNCATED,XFDERR_WRONGHUNKAMOUNT,XFDERR_NOOVERLAYS,

     XFDERR_UNSUPPORTEDHUNK=$2000,XFDERR_BADRELMODE

ENUM XFDREL_DEFAULT=0,XFDREL_FORCECHIP,XFDREL_FORCEFAST

ENUM XFDPFB_RELOC=0,XFDPFB_ADDR,XFDPFB_DATA,XFDPFB_PASSWORD,
     XFDPFB_RELMODE,XFDPFB_KEY16,XFDPFB_KEY32,XFDPFB_RECOGLEN,
     XFDPFB_USERTARGET
SET  XFDPFF_RELOC,XFDPFF_ADDR,XFDPFF_DATA,XFDPFF_PASSWORD,
     XFDPFF_RELMODE,XFDPFF_KEY16,XFDPFF_KEY32,XFDPFF_RECOGLEN,
     XFDPFF_USERTARGET

ENUM XFDFB_RECOGEXTERN=0,XFDFB_RECOGTARGETLEN,XFDFB_RECOGUSERTARGET,
     XFDFB_USERTARGET
SET  XFDFF_RECOGEXTERN,XFDFF_RECOGTARGETLEN,XFDFF_RECOGUSERTARGET,
     XFDFF_USERTARGET

ENUM XFDTHB_NOOVERLAYS=0
SET  XFDTHF_NOOVERLAYS

ENUM XFDSHB_NAME=0,XFDSHB_SYMBOL,XFDSHB_DEBUG
SET  XFDSHF_NAME,XFDSHF_SYMBOL,XFDSHF_DEBUG

ENUM XFDSDB_USEEXTERN=0,XFDSDB_SCANODD
SET  XFDSDF_USEEXTERN,XFDSDF_SCANODD

OBJECT xfdforeman
    security,id,version:INT,reserved:INT,next,seglist,firstslave
ENDOBJECT

CONST XFDF_ID="XFDF",XFDF_VERSION=1

OBJECT xfdslave
    next,version:INT,masterversion:INT,packername,packerflags:INT,
    maxspeciallen:INT,recogbuffer,decrunchbuffer,recogsegment,
    decrunchsegment,slaveid:INT,replaceid:INT,minbuffersize
ENDOBJECT

CONST XFDS_VERSION=2

OBJECT xfdrecogresult
  mintargetlen,finaltargetlen
ENDOBJECT

#define XFDID_BASE   $8000

#define XFDID_PowerPacker23           (XFDID_BASE+$0001)
#define XFDID_PowerPacker30           (XFDID_BASE+$0003)
#define XFDID_PowerPacker30Enc        (XFDID_BASE+$0005)
#define XFDID_PowerPacker30Ovl        (XFDID_BASE+$0007)
#define XFDID_PowerPacker40           (XFDID_BASE+$0009)
#define XFDID_PowerPacker40Lib        (XFDID_BASE+$000a)
#define XFDID_PowerPacker40Enc        (XFDID_BASE+$000b)
#define XFDID_PowerPacker40LibEnc     (XFDID_BASE+$000c)
#define XFDID_PowerPacker40Ovl        (XFDID_BASE+$000d)
#define XFDID_PowerPacker40LibOvl     (XFDID_BASE+$000e)
#define XFDID_PowerPackerData         (XFDID_BASE+$000f)
#define XFDID_PowerPackerDataEnc      (XFDID_BASE+$0010)
#define XFDID_ByteKiller13            (XFDID_BASE+$0011)
#define XFDID_ByteKiller20            (XFDID_BASE+$0012)
#define XFDID_ByteKiller30            (XFDID_BASE+$0013)
#define XFDID_ByteKillerPro10         (XFDID_BASE+$0014)
#define XFDID_ByteKillerPro10Pro      (XFDID_BASE+$0015)
#define XFDID_DragPack10              (XFDID_BASE+$0016)
#define XFDID_TNMCruncher11           (XFDID_BASE+$0017)
#define XFDID_HQCCruncher20           (XFDID_BASE+$0018)
#define XFDID_RSICruncher14           (XFDID_BASE+$0019)
#define XFDID_ANCCruncher             (XFDID_BASE+$001a)
#define XFDID_ReloKit10               (XFDID_BASE+$001b)
#define XFDID_HighPressureCruncher    (XFDID_BASE+$001c)
#define XFDID_STPackedSong            (XFDID_BASE+$001d)
#define XFDID_TSKCruncher             (XFDID_BASE+$001e)
#define XFDID_LightPack15             (XFDID_BASE+$001f)
#define XFDID_CrunchMaster10          (XFDID_BASE+$0020)
#define XFDID_HQCCompressor100        (XFDID_BASE+$0021)
#define XFDID_FlashSpeed10            (XFDID_BASE+$0022)
#define XFDID_CrunchManiaData         (XFDID_BASE+$0023)
#define XFDID_CrunchManiaDataEnc      (XFDID_BASE+$0024)
#define XFDID_CrunchManiaLib          (XFDID_BASE+$0025)
#define XFDID_CrunchManiaNormal       (XFDID_BASE+$0026)
#define XFDID_CrunchManiaSimple       (XFDID_BASE+$0027)
#define XFDID_CrunchManiaAddr         (XFDID_BASE+$0028)
#define XFDID_DefJamCruncher32        (XFDID_BASE+$0029)
#define XFDID_DefJamCruncher32Pro     (XFDID_BASE+$002a)
#define XFDID_TetraPack102            (XFDID_BASE+$002b)
#define XFDID_TetraPack11             (XFDID_BASE+$002c)
#define XFDID_TetraPack21             (XFDID_BASE+$002d)
#define XFDID_TetraPack21Pro          (XFDID_BASE+$002e)
#define XFDID_TetraPack22             (XFDID_BASE+$002f)
#define XFDID_TetraPack22Pro          (XFDID_BASE+$0030)
#define XFDID_DoubleAction10          (XFDID_BASE+$0031)
#define XFDID_DragPack252Data         (XFDID_BASE+$0032)
#define XFDID_DragPack252             (XFDID_BASE+$0033)
#define XFDID_FCG10                   (XFDID_BASE+$0034)
#define XFDID_Freeway07               (XFDID_BASE+$0035)
#define XFDID_IAMPacker10ATM5Data     (XFDID_BASE+$0036)
#define XFDID_IAMPacker10ATM5         (XFDID_BASE+$0037)
#define XFDID_IAMPacker10ICEData      (XFDID_BASE+$0038)
#define XFDID_IAMPacker10ICE          (XFDID_BASE+$0039)
#define XFDID_Imploder                (XFDID_BASE+$003a)
#define XFDID_ImploderLib             (XFDID_BASE+$003b)
#define XFDID_ImploderOvl             (XFDID_BASE+$003c)
#define XFDID_FileImploder            (XFDID_BASE+$003d)
#define XFDID_MasterCruncher30Addr    (XFDID_BASE+$003f)
#define XFDID_MasterCruncher30        (XFDID_BASE+$0040)
#define XFDID_MaxPacker12             (XFDID_BASE+$0041)
#define XFDID_PackIt10Data            (XFDID_BASE+$0042)
#define XFDID_PackIt10                (XFDID_BASE+$0043)
#define XFDID_PMCNormal               (XFDID_BASE+$0044)
#define XFDID_PMCSample               (XFDID_BASE+$0045)
#define XFDID_XPKPacked               (XFDID_BASE+$0046)
#define XFDID_XPKCrypted              (XFDID_BASE+$0047)
#define XFDID_TimeCruncher17          (XFDID_BASE+$0048)
#define XFDID_TFACruncher154          (XFDID_BASE+$0049)
#define XFDID_TurtleSmasher13         (XFDID_BASE+$004a)
#define XFDID_MegaCruncher10          (XFDID_BASE+$004b)
#define XFDID_MegaCruncher12          (XFDID_BASE+$004c)
#define XFDID_ProPack                 (XFDID_BASE+$004d)
#define XFDID_ProPackData             (XFDID_BASE+$004e)
#define XFDID_ProPackDataKey          (XFDID_BASE+$004f)
#define XFDID_STCruncher10            (XFDID_BASE+$0050)
#define XFDID_STCruncher10Data        (XFDID_BASE+$0051)
#define XFDID_SpikeCruncher           (XFDID_BASE+$0052)
#define XFDID_SyncroPacker46          (XFDID_BASE+$0053)
#define XFDID_SyncroPacker46Pro       (XFDID_BASE+$0054)
#define XFDID_TitanicsCruncher11      (XFDID_BASE+$0055)
#define XFDID_TitanicsCruncher12      (XFDID_BASE+$0056)
#define XFDID_TryItCruncher101        (XFDID_BASE+$0057)
#define XFDID_TurboSqueezer61         (XFDID_BASE+$0058)
#define XFDID_TurboSqueezer80         (XFDID_BASE+$0059)
#define XFDID_TurtleSmasher200        (XFDID_BASE+$005a)
#define XFDID_TurtleSmasher200Data    (XFDID_BASE+$005b)
#define XFDID_StoneCracker270         (XFDID_BASE+$005c)
#define XFDID_StoneCracker270Pro      (XFDID_BASE+$005d)
#define XFDID_StoneCracker292         (XFDID_BASE+$005e)
#define XFDID_StoneCracker299         (XFDID_BASE+$005f)
#define XFDID_StoneCracker299d        (XFDID_BASE+$0060)
#define XFDID_StoneCracker300         (XFDID_BASE+$0061)
#define XFDID_StoneCracker300Data     (XFDID_BASE+$0062)
#define XFDID_StoneCracker310         (XFDID_BASE+$0063)
#define XFDID_StoneCracker310Data     (XFDID_BASE+$0064)
#define XFDID_StoneCracker311         (XFDID_BASE+$0065)
#define XFDID_StoneCracker400         (XFDID_BASE+$0066)
#define XFDID_StoneCracker400Data     (XFDID_BASE+$0067)
#define XFDID_StoneCracker401         (XFDID_BASE+$0068)
#define XFDID_StoneCracker401Data     (XFDID_BASE+$0069)
#define XFDID_StoneCracker401Addr     (XFDID_BASE+$006a)
#define XFDID_StoneCracker401BetaAddr (XFDID_BASE+$006b)
#define XFDID_StoneCracker403Data     (XFDID_BASE+$006c)
#define XFDID_StoneCracker404         (XFDID_BASE+$006d)
#define XFDID_StoneCracker404Data     (XFDID_BASE+$006e)
#define XFDID_StoneCracker404Addr     (XFDID_BASE+$006f)
#define XFDID_ChryseisCruncher09      (XFDID_BASE+$0070)
#define XFDID_QuickPowerPacker10      (XFDID_BASE+$0071)
#define XFDID_GNUPacker12             (XFDID_BASE+$0072)
#define XFDID_GNUPacker12Seg          (XFDID_BASE+$0073)
#define XFDID_GNUPacker12Data         (XFDID_BASE+$0074)
#define XFDID_TrashEliminator10       (XFDID_BASE+$0075)
#define XFDID_MasterCruncher30Data    (XFDID_BASE+$0076)
#define XFDID_SuperCruncher27         (XFDID_BASE+$0077)
#define XFDID_UltimatePacker11        (XFDID_BASE+$0078)
#define XFDID_ProPackOld              (XFDID_BASE+$0079)
#define XFDID_SACFPQCruncher          (XFDID_BASE+$007a)
#define XFDID_PowerPackerPatch10      (XFDID_BASE+$007b)
#define XFDID_CFP135                  (XFDID_BASE+$007c)
#define XFDID_BOND                    (XFDID_BASE+$007d)
#define XFDID_PowerPackerLoadSeg      (XFDID_BASE+$007e)
#define XFDID_StoneCracker299b        (XFDID_BASE+$007f)
#define XFDID_CrunchyDat10            (XFDID_BASE+$0080)

