home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ANews 1
/
AnewsCD01.iso
/
Indispensables
/
Compression
/
xad
/
Developer
/
Include
/
C
/
libraries
/
xadmaster.h
Wrap
C/C++ Source or Header
|
1999-08-09
|
24KB
|
547 lines
#ifndef LIBRARIES_XADMASTER_H
#define LIBRARIES_XADMASTER_H
/*
** $VER: xadmaster.h 2.2 (17.07.1999)
** xadmaster.library defines and structures
**
** Copyright © 1998-1999 by Dirk Stöcker
** All Rights Reserved.
*/
#ifndef EXEC_LIBRARIES_H
#include <exec/libraries.h>
#endif
#ifndef UTILITY_TAGITEM_H
#include <utility/tagitem.h>
#endif
/* NOTE: Nearly all structures need to be allocated using the
xadAllocObject function. */
/************************************************************************
* *
* library base structure *
* *
************************************************************************/
struct xadMasterBase {
struct Library xmb_LibNode;
struct ExecBase * xmb_SysBase;
struct DosLibrary * xmb_DOSBase;
struct UtilityBase * xmb_UtilityBase;
ULONG xmb_RecogSize; /* read only */
};
/************************************************************************
* *
* tag-function call flags *
* *
************************************************************************/
/* input tags for xadGetInfo, only one can be specified per call */
#define XAD_INSIZE (TAG_USER+ 1) /* input data size */
#define XAD_INFILENAME (TAG_USER+ 2)
#define XAD_INFILEHANDLE (TAG_USER+ 3)
#define XAD_INMEMORY (TAG_USER+ 4)
#define XAD_INHOOK (TAG_USER+ 5)
#define XAD_INSPLITTED (TAG_USER+ 6) /* (V2) */
/* output tags, only one can be specified per call, xadXXXXUnArc */
#define XAD_OUTSIZE (TAG_USER+ 10) /* output data size */
#define XAD_OUTFILENAME (TAG_USER+ 11)
#define XAD_OUTFILEHANDLE (TAG_USER+ 12)
#define XAD_OUTMEMORY (TAG_USER+ 13)
#define XAD_OUTHOOK (TAG_USER+ 14)
#define XAD_OUTDEVICE (TAG_USER+ 15) /* for disk archives only */
/* object allocation tags for xadAllocObjectA */
#define XAD_OBJNAMESIZE (TAG_USER+ 20) /* XADOBJ_FILEINFO, size of needed name space */
#define XAD_OBJCOMMENTSIZE (TAG_USER+ 21) /* XADOBJ_FILEINFO, size of needed comment space */
#define XAD_OBJPRIVINFOSIZE (TAG_USER+ 22) /* XADOBJ_FILEINFO & XADOBJ_DISKINFO, self use size */
#define XAD_OBJBLOCKENTRIES (TAG_USER+ 23) /* XADOBJ_DISKINFO, number of needed entries */
/* tags for xadGetInfo, xadFileUnArc and xadDiskUnArc */
#define XAD_NOEXTERN (TAG_USER+ 50) /* do not use extern clients */
#define XAD_PASSWORD (TAG_USER+ 51) /* password when needed */
#define XAD_ENTRYNUMBER (TAG_USER+ 52) /* number of wanted entry */
#define XAD_PROGRESSHOOK (TAG_USER+ 53) /* the progress hook */
#define XAD_OVERWRITE (TAG_USER+ 54) /* overwrite file ? */
#define XAD_MAKEDIRECTORY (TAG_USER+ 55) /* create directory tree */
#define XAD_IGNOREGEOMETRY (TAG_USER+ 56) /* ignore drive geometry ? */
#define XAD_LOWCYLINDER (TAG_USER+ 57) /* lowest cylinder */
#define XAD_HIGHCYLINDER (TAG_USER+ 58) /* highest cylinder */
#define XAD_VERIFY (TAG_USER+ 59) /* verify for disk hook */
/* input tags for xadConvertDates, only one can be passed */
#define XAD_DATEUNIX (TAG_USER+ 70) /* unix date variable */
#define XAD_DATEAMIGA (TAG_USER+ 71) /* amiga date variable */
#define XAD_DATEDATESTAMP (TAG_USER+ 72) /* struct DateStamp */
#define XAD_DATEXADDATE (TAG_USER+ 73) /* struct xadDate */
#define XAD_DATECLOCKDATA (TAG_USER+ 74) /* struct ClockData */
#define XAD_DATECURRENTTIME (TAG_USER+ 75) /* input is system time */
#define XAD_DATEMSDOS (TAG_USER+ 76) /* MS-DOS packed format (V2) */
/* output tags, there can be specified multiple tags for one call */
#define XAD_GETDATEUNIX (TAG_USER+ 80) /* unix date variable */
#define XAD_GETDATEAMIGA (TAG_USER+ 81) /* amiga date variable */
#define XAD_GETDATEDATESTAMP (TAG_USER+ 82) /* struct DateStamp */
#define XAD_GETDATEXADDATE (TAG_USER+ 83) /* struct xadDate */
#define XAD_GETDATECLOCKDATA (TAG_USER+ 84) /* struct ClockData */
#define XAD_GETDATEMSDOS (TAG_USER+ 86) /* MS-DOS packed format (V2) */
/* following tags need locale.library to be installed */
#define XAD_MAKEGMTDATE (TAG_USER+ 90) /* make local to GMT time */
#define XAD_MAKELOCALDATE (TAG_USER+ 91) /* make GMT to local time */
/************************************************************************
* *
* objects for xadAllocObjectA *
* *
************************************************************************/
#define XADOBJ_ARCHIVEINFO 0x0001 /* struct xadArchiveInfo */
#define XADOBJ_FILEINFO 0x0002 /* struct xadFileInfo */
#define XADOBJ_DISKINFO 0x0003 /* struct xadDiskInfo */
#define XADOBJ_HOOKPARAM 0x0004 /* struct HookParam */
#define XADOBJ_DEVICEINFO 0x0005 /* struct xadDeviceInfo */
#define XADOBJ_PROGRESSINFO 0x0006 /* struct xadProgressInfo */
#define XADOBJ_TEXTINFO 0x0007 /* struct xadTextInfo */
#define XADOBJ_SPLITFILE 0x0008 /* struct xadSplitFile */
/* result type of xadAllocVec */
#define XADOBJ_MEMBLOCK 0x0100 /* memory of requested size and type */
/************************************************************************
* *
* modes for xadCalcCRC126 and xadCalcCRC32 *
* *
************************************************************************/
#define XADCRC16_ID1 0xA001
#define XADCRC32_ID1 0xEDB88320
/************************************************************************
* *
* hook related stuff *
* *
************************************************************************/
#define XADHC_READ 1 /* read data into buffer */
#define XADHC_WRITE 2 /* write buffer data to file/memory */
#define XADHC_SEEK 3 /* seek in file */
#define XADHC_INIT 4 /* initialize the hook */
#define XADHC_FREE 5 /* end up hook work, free stuff */
#define XADHC_ABORT 6 /* an error occured, delete partial stuff */
#define XADHC_FULLSIZE 7 /* complete input size is needed */
struct xadHookParam {
ULONG xhp_Command;
LONG xhp_CommandData;
APTR xhp_BufferPtr;
ULONG xhp_BufferSize;
ULONG xhp_DataPos; /* current seek position */
APTR xhp_PrivatePtr;
};
/* xadHookAccess commands */
#define XADAC_READ 10 /* get data */
#define XADAC_WRITE 11 /* write data */
#define XADAC_COPY 12 /* copy input to ouput */
#define XADAC_INPUTSEEK 13 /* seek in input file */
#define XADAC_OUTPUTSEEK 14 /* seek in output file */
/************************************************************************
* *
* support structures *
* *
************************************************************************/
/* Own date structure to cover all possible dates in a human friendly
format. xadConvertDates may be used to convert between different date
structures and variables. */
struct xadDate {
ULONG xd_Micros; /* values 0 to 999999 */
LONG xd_Year; /* values 1 to 2147483648 */
UBYTE xd_Month; /* values 1 to 12 */
UBYTE xd_WeekDay; /* values 1 to 7 */
UBYTE xd_Day; /* values 1 to 31 */
UBYTE xd_Hour; /* values 0 to 23 */
UBYTE xd_Minute; /* values 0 to 60 */
UBYTE xd_Second; /* values 0 to 60 */
};
#define XADDAY_MONDAY 1 /* monday is the first day and */
#define XADDAY_TUESDAY 2
#define XADDAY_WEDNESDAY 3
#define XADDAY_THURSDAY 4
#define XADDAY_FRIDAY 5
#define XADDAY_SATURDAY 6
#define XADDAY_SUNDAY 7 /* sunday the last day of a week */
struct xadDeviceInfo { /* for XAD_OUTDEVICE tag */
STRPTR xdi_DeviceName; /* name of device */
ULONG xdi_Unit; /* unit of device */
STRPTR xdi_DOSName; /* instead of Device+Unit, dos name without ':' */
};
struct xadSplitFile { /* for XAD_INSPLITTED */
struct xadSplitFile *xsf_Next;
ULONG xsf_Type; /* XAD_INFILENAME, XAD_INFILEHANDLE, XAD_INMEMORY, XAD_INHOOK */
ULONG xsf_Size; /* necessary for XAD_INMEMORY, useful for others */
ULONG xsf_Data; /* FileName, Filehandle, Hookpointer or Memory */
};
/************************************************************************
* *
* information structures *
* *
************************************************************************/
struct xadArchiveInfo {
struct xadClient * xai_Client; /* pointer to unarchiving client */
APTR xai_PrivateClient; /* private client data */
STRPTR xai_Password; /* password for crypted archives */
ULONG xai_Flags; /* read only XADAIF_ flags */
ULONG xai_LowCyl; /* lowest cylinder to unarchive */
ULONG xai_HighCyl; /* highest cylinder to unarchive */
ULONG xai_InPos; /* input position, read only */
ULONG xai_InSize; /* input size, read only */
ULONG xai_OutPos; /* output position, read only */
ULONG xai_OutSize; /* output file size, read only */
struct xadFileInfo * xai_FileInfo; /* data pointer for file arcs */
struct xadDiskInfo * xai_DiskInfo; /* data pointer for disk arcs */
struct xadFileInfo * xai_CurFile; /* data pointer for current file arc */
struct xadDiskInfo * xai_CurDisk; /* data pointer for current disk arc */
LONG xai_LastError; /* last error, when XADAIF_FILECORRUPT (V2) */
ULONG * xai_MultiVolume; /* array of start offsets from parts (V2) */
};
/* This structure is nearly complete private to either xadmaster or its
clients. An application program may access for reading only xai_Client,
xai_Flags, xai_FileInfo and xai_DiskInfo. For xai_Flags only XADAIF_CRYPTED
and XADAIF_FILECORRUPT are useful. All the other stuff is private and should
not be accessed! */
#define XADAIB_CRYPTED 0 /* archive entries are encrypted */
#define XADAIB_FILECORRUPT 1 /* file is corrupt, but valid entries are in the list */
#define XADAIB_FILEARCHIVE 2 /* unarchive file entry */
#define XADAIB_DISKARCHIVE 3 /* unarchive disk entry */
#define XADAIB_OVERWRITE 4 /* overwrite the file */
#define XADAIB_MAKEDIRECTORY 5 /* create directory when missing */
#define XADAIB_IGNOREGEOMETRY 6 /* ignore drive geometry */
#define XADAIB_VERIFY 7 /* verify is turned on for disk hook */
#define XADAIF_CRYPTED (1<<XADAIB_CRYPTED)
#define XADAIF_FILECORRUPT (1<<XADAIB_FILECORRUPT)
#define XADAIF_FILEARCHIVE (1<<XADAIB_FILEARCHIVE)
#define XADAIF_DISKARCHIVE (1<<XADAIB_DISKARCHIVE)
#define XADAIF_OVERWRITE (1<<XADAIB_OVERWRITE)
#define XADAIF_MAKEDIRECTORY (1<<XADAIB_MAKEDIRECTORY)
#define XADAIF_IGNOREGEOMETRY (1<<XADAIB_IGNOREGEOMETRY)
#define XADAIF_VERIFY (1<<XADAIB_VERIFY)
struct xadFileInfo {
struct xadFileInfo * xfi_Next;
ULONG xfi_EntryNumber;/* number of entry, starts with 1 */
STRPTR xfi_EntryInfo; /* additional archiver text */
APTR xfi_PrivateInfo;/* client private, see XAD_OBJPRIVINFOSIZE */
ULONG xfi_Flags; /* see XADFIF_xxx defines */
STRPTR xfi_FileName; /* see XAD_OBJNAMESIZE tag */
STRPTR xfi_Comment; /* see XAD_OBJCOMMENTSIZE tag */
ULONG xfi_Protection; /* OS 3 bits (including multiuser) */
ULONG xfi_OwnerUID; /* user ID */
ULONG xfi_OwnerGID; /* group ID */
STRPTR xfi_UserName; /* user name */
STRPTR xfi_GroupName; /* group name */
ULONG xfi_Size; /* size of this file */
ULONG xfi_GroupCrSize;/* crunched size of group */
ULONG xfi_CrunchSize; /* crunched size */
STRPTR xfi_LinkName; /* name and path of link */
struct xadDate xfi_Date;
};
#define XADFIB_CRYPTED 0 /* entry is crypted */
#define XADFIB_DIRECTORY 1 /* entry is a directory */
#define XADFIB_LINK 2 /* entry is a link */
#define XADFIB_INFOTEXT 3 /* file is an information text */
#define XADFIB_GROUPED 4 /* file is in a crunch group */
#define XADFIB_ENDOFGROUP 5 /* crunch group ends here */
#define XADFIB_NODATE 6 /* no date supported, current date is set */
#define XADFIF_CRYPTED (1<<XADFIB_CRYPTED)
#define XADFIF_DIRECTORY (1<<XADFIB_DIRECTORY)
#define XADFIF_LINK (1<<XADFIB_LINK)
#define XADFIF_INFOTEXT (1<<XADFIB_INFOTEXT)
#define XADFIF_GROUPED (1<<XADFIB_GROUPED)
#define XADFIF_ENDOFGROUP (1<<XADFIB_ENDOFGROUP)
#define XADFIF_NODATE (1<<XADFIB_NODATE)
/* NOTE: the texts passed with that structure must not always be printable.
Although the clients should add an additional (not counted) zero at the text
end, the whole file may contain other unprintable stuff (e.g. for DMS).
So when printing this texts do it on a byte for byte base including
printability checks.
*/
struct xadTextInfo {
struct xadTextInfo * xti_Next;
ULONG xti_Size; /* maybe zero - no text - e.g. when crypted */
STRPTR xti_Text; /* and there is no password in xadGetInfo() */
ULONG xti_Flags; /* see XADTIF_xxx defines */
};
#define XADTIB_CRYPTED 0 /* entry is empty, as data was crypted */
#define XADTIB_BANNER 1 /* text is a banner */
#define XADTIB_FILEDIZ 2 /* text is a file description */
#define XADTIF_CRYPTED (1<<XADTIB_CRYPTED)
#define XADTIF_BANNER (1<<XADTIB_BANNER)
#define XADTIF_FILEDIZ (1<<XADTIB_FILEDIZ)
struct xadDiskInfo {
struct xadDiskInfo * xdi_Next;
ULONG xdi_EntryNumber; /* number of entry, starts with 1 */
STRPTR xdi_EntryInfo; /* additional archiver text */
APTR xdi_PrivateInfo; /* client private, see XAD_OBJPRIVINFOSIZE */
ULONG xdi_Flags; /* see XADDIF_xxx defines */
ULONG xdi_SectorSize;
ULONG xdi_TotalSectors; /* see devices/trackdisk.h */
ULONG xdi_Cylinders; /* to find out what these */
ULONG xdi_CylSectors; /* fields mean, they are equal */
ULONG xdi_Heads; /* to struct DriveGeometry */
ULONG xdi_TrackSectors;
ULONG xdi_LowCyl; /* lowest cylinder stored */
ULONG xdi_HighCyl; /* highest cylinder stored */
ULONG xdi_BlockInfoSize;/* number of BlockInfo entries */
UBYTE * xdi_BlockInfo; /* see XADBIF_xxx defines and XAD_OBJBLOCKENTRIES tag */
struct xadTextInfo * xdi_TextInfo; /* linked list with info texts */
};
/* BlockInfo points to a UBYTE field for every track from first sector of
lowest cylinder to last sector of highest cylinder. When not used,
pointer must be 0. Do not use it, when there are no entries!
This is just for information. The applications still asks the client
to unarchive whole cylinders and not archived blocks are cleared for
unarchiving.
*/
#define XADDIB_CRYPTED 0 /* entry is crypted */
/* Some of the crunchers do not store all necessary information, so it
may be needed to guess some of them. Set the following flags in that case
and geometry check will ignore these fields. */
#define XADDIB_GUESSCYLINDERS 7 /* cylinder number is guessed */
#define XADDIB_GUESSCYLSECTORS 8 /* cylsectors is guessed */
#define XADDIB_GUESSHEADS 9 /* number of heads is guessed */
#define XADDIB_GUESSTRACKSECTORS 10 /* tracksectors is guessed */
#define XADDIB_GUESSLOWCYL 11 /* lowcyl is guessed */
#define XADDIB_GUESSHIGHCYL 12 /* highcyl is guessed */
/* If it is impossible to set some of the fields, you not to set some of
these flags. NOTE: XADDIB_NOCYLINDERS is really important, as this turns
of usage of lowcyl and highcyl keywords. When you have cylinder information,
you should not use these and instead use guess flags and calculate
possible values for the missing fields. */
#define XADDIB_NOCYLINDERS 15 /* cylinder number is not set */
#define XADDIB_NOCYLSECTORS 16 /* cylsectors is not set */
#define XADDIB_NOHEADS 17 /* number of heads is not set */
#define XADDIB_NOTRACKSECTORS 18 /* tracksectors is not set */
#define XADDIB_NOLOWCYL 19 /* lowcyl is not set */
#define XADDIB_NOHIGHCYL 20 /* highcyl is not set */
#define XADDIF_CRYPTED (1<<XADDIB_CRYPTED)
#define XADDIF_GUESSCYLINDERS (1<<XADDIB_GUESSCYLINDERS)
#define XADDIF_GUESSCYLSECTORS (1<<XADDIB_GUESSCYLSECTORS)
#define XADDIF_GUESSHEADS (1<<XADDIB_GUESSHEADS)
#define XADDIF_GUESSTRACKSECTORS (1<<XADDIB_GUESSTRACKSECTORS)
#define XADDIF_GUESSLOWCYL (1<<XADDIB_GUESSLOWCYL)
#define XADDIF_GUESSHIGHCYL (1<<XADDIB_GUESSHIGHCYL)
#define XADDIF_NOCYLINDERS (1<<XADDIB_NOCYLINDERS)
#define XADDIF_NOCYLSECTORS (1<<XADDIB_NOCYLSECTORS)
#define XADDIF_NOHEADS (1<<XADDIB_NOHEADS)
#define XADDIF_NOTRACKSECTORS (1<<XADDIB_NOTRACKSECTORS)
#define XADDIF_NOLOWCYL (1<<XADDIB_NOLOWCYL)
#define XADDIF_NOHIGHCYL (1<<XADDIB_NOHIGHCYL)
/* defines for BlockInfo */
#define XADBIB_CLEARED 0 /* this block was cleared for archiving */
#define XADBIB_UNUSED 1 /* this block was not archived */
#define XADBIF_CLEARED (1<<XADBIB_CLEARED)
#define XADBIF_UNUSED (1<<XADBIB_UNUSED)
/************************************************************************
* *
* progress report stuff *
* *
************************************************************************/
struct xadProgressInfo {
ULONG xpi_Mode; /* work modus */
struct xadClient * xpi_Client; /* the client doing the work */
struct xadDiskInfo * xpi_DiskInfo; /* current diskinfo, for disks */
struct xadFileInfo * xpi_FileInfo; /* current info for files */
ULONG xpi_CurrentSize;/* current filesize */
ULONG xpi_LowCyl; /* for disks only */
ULONG xpi_HighCyl; /* for disks only */
ULONG xpi_Status; /* see XADPIF flags */
LONG xpi_Error; /* any of the error codes */
STRPTR xpi_FileName; /* name of file to overwrite (V2) */
STRPTR xpi_NewName; /* new name buffer, passed by hook (V2) */
};
/* NOTE: For disks CurrentSize is Sector*SectorSize, where SectorSize can
be found in xadDiskInfo structure. So you may output the sector value. */
/* different progress modes */
#define XADPMODE_ASK 1
#define XADPMODE_PROGRESS 2
#define XADPMODE_END 3
#define XADPMODE_ERROR 4
/* flags for progress hook and ProgressInfo status field */
#define XADPIB_OVERWRITE 0 /* overwrite the file */
#define XADPIB_MAKEDIRECTORY 1 /* create the directory */
#define XADPIB_IGNOREGEOMETRY 2 /* ignore drive geometry */
#define XADPIB_RENAME 10 /* rename the file (V2) */
#define XADPIB_OK 16 /* all ok, proceed */
#define XADPIB_SKIP 17 /* skip file */
#define XADPIF_OVERWRITE (1<<XADPIB_OVERWRITE)
#define XADPIF_MAKEDIRECTORY (1<<XADPIB_MAKEDIRECTORY)
#define XADPIF_IGNOREGEOMETRY (1<<XADPIB_IGNOREGEOMETRY)
#define XADPIF_RENAME (1<<XADPIB_RENAME)
#define XADPIF_OK (1<<XADPIB_OK)
#define XADPIF_SKIP (1<<XADPIB_SKIP)
/************************************************************************
* *
* errors *
* *
************************************************************************/
#define XADERR_OK 0x0000 /* no error */
#define XADERR_UNKNOWN 0x0001 /* unknown error */
#define XADERR_INPUT 0x0002 /* input data buffers border exceeded */
#define XADERR_OUTPUT 0x0003 /* output data buffers border exceeded */
#define XADERR_BADPARAMS 0x0004 /* function called with illegal parameters */
#define XADERR_NOMEMORY 0x0005 /* not enough memory available */
#define XADERR_ILLEGALDATA 0x0006 /* data is corrupted */
#define XADERR_NOTSUPPORTED 0x0007 /* command is not supported */
#define XADERR_RESOURCE 0x0008 /* required resource missing */
#define XADERR_DECRUNCH 0x0009 /* error on decrunching */
#define XADERR_FILETYPE 0x000A /* unknown file type */
#define XADERR_OPENFILE 0x000B /* opening file failed */
#define XADERR_SKIP 0x000C /* file, disk has been skipped */
#define XADERR_BREAK 0x000D /* user break in progress hook */
#define XADERR_FILEEXISTS 0x000E /* file already exists */
#define XADERR_PASSWORD 0x000F /* missing or wrong password */
#define XADERR_MAKEDIR 0x0010 /* could not create directory */
#define XADERR_CHECKSUM 0x0011 /* wrong checksum */
#define XADERR_VERIFY 0x0012 /* verify failed (disk hook) */
#define XADERR_GEOMETRY 0x0013 /* wrong drive geometry */
#define XADERR_DATAFORMAT 0x0014 /* unknown data format */
/************************************************************************
* *
* client related stuff *
* *
************************************************************************/
struct xadForeman {
ULONG xfm_Security; /* should be XADFOREMAN_SECURITY */
ULONG xfm_ID; /* must be XADFOREMAN_ID */
UWORD xfm_Version; /* set to XADFOREMAN_VERSION */
UWORD xfm_Reserved;
STRPTR xfm_VersString; /* pointer to $VER: string */
struct xadClient * xfm_FirstClient; /* pointer to first client */
};
#define XADFOREMAN_SECURITY 0x70FF4E75 /* MOVEQ #-1,D0 and RTS */
#define XADFOREMAN_ID 0x58414446 /* 'XADF' identification ID */
#define XADFOREMAN_VERSION 1
struct xadClient {
struct xadClient * xc_Next;
UWORD xc_Version; /* set to XADCLIENT_VERSION */
UWORD xc_MasterVersion;
UWORD xc_ClientVersion;
UWORD xc_ClientRevision;
ULONG xc_RecogSize; /* needed size to recog the type */
ULONG xc_Flags; /* see XADCF_xxx defines */
ULONG xc_Identifier; /* ID of internal clients */
STRPTR xc_ArchiverName;
BOOL (* xc_RecogData)();
LONG (* xc_GetInfo)();
LONG (* xc_UnArchive)();
void (* xc_Free)();
};
/* xc_RecogData returns 1 when recognized and 0 when not, all the others
return 0 when ok and XADERR values on error. xc_FinishUnArc has no
return value. */
/* function interface
ASM(BOOL) xc_RecogData(REG(d0, ULONG size), REG(a0, STRPTR data),
REG(a6, struct xadMasterBase *xadMasterBase));
ASM(LONG) xc_GetInfo(REG(a0, struct xadArchiveInfo *ai),
REG(a6, struct xadMasterBase *xadMasterBase));
ASM(LONG) xc_UnArchive(REG(a0, struct xadArchiveInfo *ai),
REG(a6, struct xadMasterBase *xadMasterBase));
ASM(void) xc_Free(REG(a0, struct xadArchiveInfo *ai),
REG(a6, struct xadMasterBase *xadMasterBase));
*/
#define XADCLIENT_VERSION 1
#define XADCB_FILEARCHIVER 0 /* archiver is a file archiver */
#define XADCB_DISKARCHIVER 1 /* archiver is a disk archiver */
#define XADCB_EXTERN 2 /* external client, set by xadmaster */
#define XADCB_FREETEXTINFO 28 /* master frees xadTextInfo structures (V2) */
#define XADCB_FREETEXTINFOTEXT 29 /* master frees xadTExtInfo text block (V2) */
#define XADCB_FREEFILEINFO 30 /* master frees xadFileInfo structures (V2) */
#define XADCB_FREEDISKINFO 31 /* master frees xadDiskInfo structures (V2) */
#define XADCF_FILEARCHIVER (1<<XADCB_FILEARCHIVER)
#define XADCF_DISKARCHIVER (1<<XADCB_DISKARCHIVER)
#define XADCF_EXTERN (1<<XADCB_EXTERN)
#define XADCF_FREETEXTINFO (1<<XADCB_FREETEXTINFO)
#define XADCF_FREETEXTINFOTEXT (1<<XADCB_FREETEXTINFOTEXT)
#define XADCF_FREEFILEINFO (1<<XADCB_FREEFILEINFO)
#define XADCF_FREEDISKINFO (1<<XADCB_FREEDISKINFO)
/************************************************************************
* *
* client ID's *
* *
************************************************************************/
/* If an external client has set the xc_Identifier field, the internal
client is replaced. */
/* disk archivers start with 1000 */
#define XADCID_XMASH 1000
#define XADCID_SUPERDUPER3 1001
#define XADCID_XDISK 1002
#define XADCID_PACKDEV 1003
#define XADCID_ZOOM 1004
#define XADCID_ZOOM5 1005
/* file archivers start with 5000 */
#define XADCID_TAR 5000
#define XADCID_SDSSFX 5001
#define XADCID_LZX 5002
#define XADCID_MXMSIMPLEARC 5003
#define XADCID_LHPAK 5004
#define XADCID_AMIGAPLUSUNPACK 5005
#define XADCID_AMIPACK 5006
#define XADCID_LHA 5007
#define XADCID_LHASFX 5008
/* mixed archivers start with 9000 */
#define XADCID_DMS 9000
#define XADCID_DMSSFX 9001
#endif /* LIBRARIES_XADMASTER_H */