home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga MA Magazine 1998 #6
/
amigamamagazinepolishissue1998.iso
/
packery
/
xpk_source
/
xpkmaster
/
test
/
getxpksublibdata.c
next >
Wrap
C/C++ Source or Header
|
1996-10-19
|
4KB
|
139 lines
#define NAME "GetXpkSubLibData"
#define REVISION "0"
#include <pragma/xpksub_lib.h>
#include <pragma/dos_lib.h>
#include <pragma/exec_lib.h>
#include <xpk/xpksub.h>
#include "SDI_defines.h"
#define PARAM "LIBID/A"
struct Library *XpkSubBase = 0;
struct RDArgs *rda = 0;
ULONG DosVersion = 37;
void WriteMode(struct XpkMode *, ULONG);
ULONG PrintFlag(ULONG *, ULONG, STRPTR);
ULONG PrintEndFlag(ULONG);
void main(void)
{
STRPTR name = "compressors/xpk____.library";
STRPTR str;
if((rda = ReadArgs(PARAM, (LONG *) &str, 0)))
{
struct XpkInfo *xi;
CopyMem(str,name+15,4); // copies the LibName
if((XpkSubBase = OpenLibrary(name, 0)) &&
(xi = XpksPackerInfo()))
{
VPrintf(
"XpkInfoVersion : %d\n" /* Version number of this structure */
"LibVersion : %d\n" /* The version of this sublibrary */
"MasterVersion : %d\n" /* The required master lib version */
"ModesVersion : %d\n" /* Version number of mode descriptors */
"Name : %s\n" /* Brief name of the packer, 20 char max */
"LongName : %s\n" /* Full name of the packer 30 char max */
"Description : %s\n" /* Short packer desc., 70 char max */
,xi);
str = (STRPTR) &(xi->xi_ID);
VPrintf("ID : '%.4s'\nFlags : ", &str);
{
ULONG i = xi->xi_Flags;
PrintFlag(&i, XPKIF_PK_CHUNK, "XPKIF_PK_CHUNK");
PrintFlag(&i, XPKIF_PK_STREAM, "XPKIF_PK_STREAM");
PrintFlag(&i, XPKIF_PK_ARCHIVE, "XPKIF_PK_ARCHIVE");
PrintFlag(&i, XPKIF_UP_CHUNK, "XPKIF_UP_CHUNK");
PrintFlag(&i, XPKIF_UP_STREAM, "XPKIF_UP_STREAM");
PrintFlag(&i, XPKIF_UP_ARCHIVE, "XPKIF_UP_ARCHIVE");
PrintFlag(&i, XPKIF_HOOKIO, "XPKIF_HOOKIO");
PrintFlag(&i, XPKIF_CHECKING, "XPKIF_CHECKING");
PrintFlag(&i, XPKIF_PREREADHDR, "XPKIF_PREREADHDR");
PrintFlag(&i, XPKIF_ENCRYPTION, "XPKIF_ENCRYPTION");
PrintFlag(&i, XPKIF_NEEDPASSWD, "XPKIF_NEEDPASSWD");
PrintFlag(&i, XPKIF_MODES, "XPKIF_MODES");
PrintFlag(&i, XPKIF_LOSSY, "XPKIF_LOSSY");
PrintEndFlag(i);
}
VPrintf(
"MaxPkInChunk : %ld\n" /* Max input chunk size for packing */
"MinPkInChunk : %ld\n" /* Min input chunk size for packing */
"DefPkInChunk : %ld\n" /* Default packing chunk size */
"PackMsg : %s\n" /* Packing message, present tense */
"UnpackMsg : %s\n" /* Unpacking message, present tense */
"PackedMsg : %s\n" /* Packing message, past tense */
"UnpackedMsg : %s\n" /* Unpacking message, past tense */
"DefMode : %d\n" /* Default mode number */
"Pad : %d\n" /* for future use */
,&(xi->xi_MaxPkInChunk));
VPrintf("Reserved : %ld,%ld,%ld,%ld,%ld,%ld\n", xi->xi_Reserved);
WriteMode(xi->xi_ModeDesc, 1);
}
}
if(XpkSubBase)
CloseLibrary(XpkSubBase);
if(rda)
FreeArgs(rda);
}
void WriteMode(struct XpkMode *m, ULONG num)
{
STRPTR str = (STRPTR) &(m->xm_Description);
VPrintf("\nXpkMode No %ld:\n", &num);
VPrintf("Upto : %ld\nFlags : ", &(m->xm_Upto));
{
ULONG i = m->xm_Flags;
PrintFlag(&i, XPKMF_A3000SPEED, "XPKMF_A3000SPEED");
PrintFlag(&i, XPKMF_PK_NOCPU, "XPKMF_PK_NOCPU");
PrintFlag(&i, XPKMF_UP_NOCPU, "XPKMF_UP_NOCPU");
PrintEndFlag(i);
}
VPrintf(
"PackMemory : %ld\n" /* Extra memory required during packing */
"UnpackMemory : %ld\n" /* Extra memory during unpacking */
"PackSpeed : %ld\n" /* Approx packing speed in K per second */
"UnpackSpeed : %ld\n" /* Approx unpacking speed in K per second */
"Ratio : %d\n" /* CF in 0.1% for AmigaVision executable */
"ChunkSize : %d\n" /* Desired chunk size in K (!!) for this mode*/
, &(m->xm_PackMemory));
VPrintf("Description : '%.10s'\n", &str);
if(m->xm_Next)
WriteMode(m->xm_Next, num+1);
}
ULONG PrintFlag(ULONG *data, ULONG flag, STRPTR str)
{
if(*data & flag)
{
PutStr(str);
*data ^= flag;
if(*data)
{
PutStr("|");
return 2;
}
return 1;
}
return 0;
}
ULONG PrintEndFlag(ULONG data)
{
if(data)
{
VPrintf("%ld\n",&data);
return 1;
}
PutStr("\n");
return 0;
}