home *** CD-ROM | disk | FTP | other *** search
/ Amiga MA Magazine 1998 #6 / amigamamagazinepolishissue1998.iso / packery / xpk_source / xpkmaster / test / getxpksublibdata.c next >
C/C++ Source or Header  |  1996-10-19  |  4KB  |  139 lines

  1. #define NAME     "GetXpkSubLibData"
  2. #define REVISION "0"
  3.  
  4. #include <pragma/xpksub_lib.h>
  5. #include <pragma/dos_lib.h>
  6. #include <pragma/exec_lib.h>
  7. #include <xpk/xpksub.h>
  8. #include "SDI_defines.h"
  9.  
  10. #define PARAM        "LIBID/A"
  11.  
  12. struct Library *XpkSubBase    = 0;
  13. struct RDArgs  *rda        = 0;
  14. ULONG        DosVersion    = 37;
  15.  
  16. void WriteMode(struct XpkMode *, ULONG);
  17. ULONG PrintFlag(ULONG *, ULONG, STRPTR);
  18. ULONG PrintEndFlag(ULONG);
  19.  
  20. void main(void)
  21. {
  22.   STRPTR name = "compressors/xpk____.library";
  23.   STRPTR str;
  24.  
  25.   if((rda = ReadArgs(PARAM, (LONG *) &str, 0)))
  26.   {
  27.     struct XpkInfo *xi;
  28.     CopyMem(str,name+15,4); // copies the LibName
  29.  
  30.     if((XpkSubBase = OpenLibrary(name, 0)) &&
  31.     (xi = XpksPackerInfo()))
  32.     {
  33.       VPrintf(
  34.       "XpkInfoVersion : %d\n"  /* Version number of this structure        */
  35.       "LibVersion     : %d\n"  /* The version of this sublibrary          */
  36.       "MasterVersion  : %d\n"  /* The required master lib version         */
  37.       "ModesVersion   : %d\n"  /* Version number of mode descriptors      */
  38.       "Name           : %s\n"  /* Brief name of the packer, 20 char max   */
  39.       "LongName       : %s\n"  /* Full name of the packer   30 char max   */
  40.       "Description    : %s\n"  /* Short packer desc., 70 char max         */
  41.       ,xi);
  42.       str = (STRPTR) &(xi->xi_ID);
  43.       VPrintf("ID             : '%.4s'\nFlags          : ", &str);
  44.       {
  45.         ULONG i = xi->xi_Flags;
  46.         PrintFlag(&i, XPKIF_PK_CHUNK,    "XPKIF_PK_CHUNK");
  47.         PrintFlag(&i, XPKIF_PK_STREAM,    "XPKIF_PK_STREAM");
  48.         PrintFlag(&i, XPKIF_PK_ARCHIVE,    "XPKIF_PK_ARCHIVE");
  49.         PrintFlag(&i, XPKIF_UP_CHUNK,    "XPKIF_UP_CHUNK");
  50.         PrintFlag(&i, XPKIF_UP_STREAM,    "XPKIF_UP_STREAM");
  51.         PrintFlag(&i, XPKIF_UP_ARCHIVE,    "XPKIF_UP_ARCHIVE");
  52.         PrintFlag(&i, XPKIF_HOOKIO,    "XPKIF_HOOKIO");
  53.         PrintFlag(&i, XPKIF_CHECKING,    "XPKIF_CHECKING");
  54.         PrintFlag(&i, XPKIF_PREREADHDR,    "XPKIF_PREREADHDR");
  55.         PrintFlag(&i, XPKIF_ENCRYPTION,    "XPKIF_ENCRYPTION");
  56.         PrintFlag(&i, XPKIF_NEEDPASSWD,    "XPKIF_NEEDPASSWD");
  57.         PrintFlag(&i, XPKIF_MODES,    "XPKIF_MODES");
  58.         PrintFlag(&i, XPKIF_LOSSY,    "XPKIF_LOSSY");
  59.         PrintEndFlag(i);
  60.       }
  61.  
  62.       VPrintf(
  63.       "MaxPkInChunk   : %ld\n" /* Max input chunk size for packing        */
  64.       "MinPkInChunk   : %ld\n" /* Min input chunk size for packing        */
  65.       "DefPkInChunk   : %ld\n" /* Default packing chunk size              */
  66.       "PackMsg        : %s\n"  /* Packing message, present tense          */
  67.       "UnpackMsg      : %s\n"  /* Unpacking message, present tense        */
  68.       "PackedMsg      : %s\n"  /* Packing message, past tense             */
  69.       "UnpackedMsg    : %s\n"  /* Unpacking message, past tense           */
  70.       "DefMode        : %d\n"  /* Default mode number                     */
  71.       "Pad            : %d\n"  /* for future use                          */
  72.       ,&(xi->xi_MaxPkInChunk));
  73.       VPrintf("Reserved       : %ld,%ld,%ld,%ld,%ld,%ld\n", xi->xi_Reserved);
  74.  
  75.       WriteMode(xi->xi_ModeDesc, 1);
  76.     }
  77.   }
  78.   if(XpkSubBase)
  79.     CloseLibrary(XpkSubBase);
  80.   if(rda)
  81.     FreeArgs(rda);
  82. }
  83.  
  84. void WriteMode(struct XpkMode *m, ULONG num)
  85. {
  86.   STRPTR str = (STRPTR) &(m->xm_Description);
  87.   VPrintf("\nXpkMode No %ld:\n", &num);
  88.  
  89.   VPrintf("Upto           : %ld\nFlags          : ", &(m->xm_Upto));
  90.   {
  91.     ULONG i = m->xm_Flags;
  92.     PrintFlag(&i, XPKMF_A3000SPEED,    "XPKMF_A3000SPEED");
  93.     PrintFlag(&i, XPKMF_PK_NOCPU,    "XPKMF_PK_NOCPU");
  94.     PrintFlag(&i, XPKMF_UP_NOCPU,    "XPKMF_UP_NOCPU");
  95.     PrintEndFlag(i);
  96.   }
  97.  
  98.   VPrintf(
  99.   "PackMemory     : %ld\n" /* Extra memory required during packing      */
  100.   "UnpackMemory   : %ld\n" /* Extra memory during unpacking             */
  101.   "PackSpeed      : %ld\n" /* Approx packing speed in K per second      */
  102.   "UnpackSpeed    : %ld\n" /* Approx unpacking speed in K per second    */
  103.   "Ratio          : %d\n"  /* CF in 0.1% for AmigaVision executable     */
  104.   "ChunkSize      : %d\n"  /* Desired chunk size in K (!!) for this mode*/
  105.   , &(m->xm_PackMemory));
  106.  
  107.   VPrintf("Description    : '%.10s'\n", &str);
  108.  
  109.   if(m->xm_Next)
  110.     WriteMode(m->xm_Next, num+1);
  111. }
  112.  
  113. ULONG PrintFlag(ULONG *data, ULONG flag, STRPTR str)
  114. {
  115.   if(*data & flag)
  116.   {
  117.     PutStr(str);
  118.     *data ^= flag;
  119.     if(*data)
  120.     {
  121.       PutStr("|");
  122.       return 2;
  123.     }
  124.     return 1;
  125.   }
  126.   return 0;
  127. }
  128.  
  129. ULONG PrintEndFlag(ULONG data)
  130. {
  131.   if(data)
  132.   {
  133.     VPrintf("%ld\n",&data);
  134.     return 1;
  135.   }
  136.   PutStr("\n");
  137.   return 0;
  138. }
  139.