home *** CD-ROM | disk | FTP | other *** search
/ Amiga MA Magazine 1998 #6 / amigamamagazinepolishissue1998.iso / packery / xpk_source / shell / xquery.c < prev    next >
C/C++ Source or Header  |  1996-10-19  |  2KB  |  109 lines

  1.  
  2. /* xQuery - Query packer properties */
  3.  
  4. char ver[]= "$VER: xQuery 1.2 (" __DATE__ ")";
  5.  
  6. #include <proto/xpk.h>
  7. #include <proto/dos.h>
  8. #include <proto/exec.h>
  9. #include <stdio.h>
  10. #include <stdlib.h>
  11. #include <string.h>
  12. #include <dos.h>
  13.  
  14. struct Library *XpkBase = NULL;
  15. char errbuf[XPKERRMSGSIZE];
  16. char line1[200], line2[200], line3[200], line4[200];
  17. char line5[200], line6[200], line7[200];
  18.  
  19. void
  20. end (const char *text)
  21. {
  22.   if (text)
  23.     printf (text);
  24.   if (XpkBase)
  25.     CloseLibrary (XpkBase);
  26.   exit (text ? 10 : 0);
  27. }
  28.  
  29. int
  30. breakfunc (void)
  31. {
  32.   end ("***Break\n");
  33.   return 0;
  34. }
  35.  
  36. void
  37. packerquery (char *packer)
  38. {
  39.   XPINFO xpinfo;
  40.   XMINFO xminfo;
  41.   LONG mode, res;
  42.   char name[5];
  43.  
  44.   onbreak (breakfunc);
  45.   printf ("\23332mPacker :\233m %s\n", packer);
  46.  
  47.   if (res = XpkQueryTags (
  48.                XPK_PackerQuery, &xpinfo,
  49.                XPK_PackMethod, packer,
  50.                TAG_DONE
  51.       ))
  52.     return;
  53.  
  54.   printf ("\23332mName   :\233m %s\n", xpinfo.LongName);
  55.   printf ("\23332mDescr. :\233m %s\n", xpinfo.Description);
  56.   printf ("\23332mDefMode:\233m %d\t", xpinfo.DefMode);
  57.   printf ("\23332mDefChunk:\233m %ld Kb\t", xpinfo.DefChunk / 1024);
  58.   printf ("\23332mMaxChunk:\233m %ld Kb\n", xpinfo.MaxChunk / 1024);
  59.  
  60.   printf ("                      Pack  Unpack  Pack Unpack\n");
  61.   printf ("Name   Mode  Ratio   Speed   Speed   Mem    Mem Description\n");
  62.   /*       FAST 99..100 99.7% 1024K/s 1040K/s 1024K  1024K Gnubbeldubbel */
  63.  
  64.   memcpy (name, packer, 4);
  65.   name[4] = 0;
  66.  
  67.   for (mode = 0; mode < 100; mode = xminfo.Upto + 1) {
  68.     if (XpkQueryTags (
  69.                XPK_ModeQuery, &xminfo,
  70.                XPK_PackMethod, packer,
  71.                XPK_PackMode, mode,
  72.                TAG_DONE
  73.     ))
  74.       break;
  75.  
  76.     printf ("%4.4s %2ld..%-3ld %2ld.%1ld%% %4ldK/s %4ldK/s %4ldK  %4ldK %s\n",
  77.         name, mode, xminfo.Upto,
  78.         xminfo.Ratio / 10, xminfo.Ratio % 10,
  79.         xminfo.PackSpeed, xminfo.UnpackSpeed,
  80.         xminfo.PackMemory / 1024, xminfo.UnpackMemory / 1024,
  81.         xminfo.Description);
  82.  
  83.   }
  84.   printf ("\n");
  85. }
  86.  
  87.  
  88. void
  89. main (int argc, char *argv[])
  90. {
  91.   XPLIST list;
  92.   LONG i;
  93.  
  94.   if (!(XpkBase = OpenLibrary (XPKNAME, 0)))
  95.     end ("Cannot open " XPKNAME "\n");
  96.  
  97.   if (XpkQueryTags (XPK_PackersQuery, &list, TAG_DONE))
  98.     end ("Cannot get information");
  99.  
  100.   if (argc == 1)
  101.     for (i = 0; i < list.NumPackers; i++)
  102.       packerquery (list.Packer[i]);
  103.   else
  104.     for (i = 1; i < argc; i++)
  105.       packerquery (argv[i]);
  106.  
  107.   end (NULL);
  108. }
  109.