home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD1.iso / Cruncher / XPK416SR.LHA / xpk_Source / test / testMemExamine.c < prev    next >
Encoding:
C/C++ Source or Header  |  1997-09-06  |  3.0 KB  |  129 lines

  1. #define NAME        "testMemExamine"
  2. #define DISTRIBUTION    "(Freeware) "
  3. #define REVISION    "2"
  4. #define ENDCODE_NOCTRLC
  5.  
  6. /* Programmheader
  7.  
  8.     Name:        testMemExamine
  9.     Author:        SDI
  10.     Distribution:    Freeware
  11.     Description:    tests Xpk Examine function
  12.     Compileropts:    -
  13.     Linkeropts:    -l xpkmaster
  14.  
  15.  1.1   06.12.96 : fixed for new includes, added new WriteXpkFib
  16.  1.2   15.04.97 : included WriteXpkFib.c
  17. */
  18.  
  19. #include <proto/exec.h>
  20. #include <proto/dos.h>
  21. #include <proto/xpkmaster.h>
  22. #include <exec/memory.h>
  23. #include "SDI_defines.h"
  24. #include "PrintFlags.c"
  25.  
  26. struct Library        *XpkBase        = 0;
  27. ULONG            DosVersion        = 37;
  28. STRPTR            buf            = 0;
  29. BPTR            fh            = 0;
  30. struct RDArgs        *rda            = 0;
  31. struct FileInfoBlock    *fib            = 0;
  32. struct XpkFib        *xfib            = 0;
  33.  
  34. #define PARAM "FILENAME/A"
  35.  
  36. void WriteXpkFib(struct XpkFib *xfib)
  37. {
  38.   STRPTR a = 0;
  39.  
  40.   switch(xfib->xf_Type)
  41.   {
  42.     case 0: a = "XPKTYPE_UNPACKED"; break;
  43.     case 1: a = "XPKTYPE_PACKED"; break;
  44.     case 2: a = "XPKTYPE_ARCHIVE"; break;
  45.   }
  46.  
  47.   if(a)
  48.     VPrintf("xf_Type      : %s\n", &a);
  49.   else
  50.     VPrintf("xf_Type      : %ld\n", &xfib->xf_Type);
  51.   VPrintf(
  52.     "xf_ULen      : %ld\n"
  53.     "xf_CLen      : %ld\n"
  54.     "xf_NLen      : %ld\n"
  55.     "xf_UCur      : %ld\n"
  56.     "xf_CCur      : %ld\n"
  57.     "xf_ID        : %lx", &xfib->xf_ULen);
  58.   a = (STRPTR) &xfib->xf_ID;
  59.   VPrintf(" (%.4s)\n", &a);
  60.   a = xfib->xf_Packer;
  61.   VPrintf(
  62.     "xf_Packer    : %s\n", &a);
  63.   VPrintf(
  64.     "xf_SubVersion: %d\n"
  65.     "xf_MasVersion: %d\n"
  66.     "xf_Flags     : ", &xfib->xf_SubVersion);
  67.   {
  68.     ULONG i = xfib->xf_Flags;
  69.     PrintFlag(&i, XPKFLAGS_PASSWORD, "XPKFLAGS_PASSWORD");
  70.     PrintFlag(&i, XPKFLAGS_NOSEEK, "XPKFLAGS_NOSEEK");
  71.     PrintFlag(&i, XPKFLAGS_NONSTD, "XPKFLAGS_NONSTD");
  72.     PrintEndFlag(i, xfib->xf_Flags);
  73.   }
  74.   VPrintf(
  75.     "xf_Head      : %04lx%04lx%04lx%04lx\n"
  76.     "xf_Ratio     : %ld\n", &xfib->xf_Head[0]);
  77. }
  78.  
  79. void main(void)
  80. {
  81.   UBYTE errbuf[XPKERRMSGSIZE+1];
  82.   STRPTR filename;
  83.  
  84.   if(!(rda = ReadArgs(PARAM, (LONG *) &filename, 0)) ||
  85.   !(xfib = (struct XpkFib *) AllocMem(sizeof(struct XpkFib), MEMF_ANY|MEMF_CLEAR)) ||
  86.   !(XpkBase = OpenLibrary(XPKNAME, 0)))
  87.     End(RETURN_FAIL);
  88.  
  89.   if(XpkExamineTags(xfib, XPK_InName, filename, XPK_GetError, errbuf,
  90.     TAG_DONE))
  91.   {
  92.     STRPTR a = errbuf;
  93.     VPrintf("Can't XpkExamine: %s\n", &a);
  94.     End(RETURN_FAIL);
  95.   }
  96.  
  97.   WriteXpkFib(xfib);
  98.  
  99.   if(!(fh = Open(filename, MODE_OLDFILE)) ||
  100.   !(fib = (struct FileInfoBlock *) AllocDosObject(DOS_FIB, 0)) ||
  101.   !(ExamineFH(fh, fib)) ||
  102.   !(buf = (STRPTR) AllocMem(fib->fib_Size, MEMF_ANY)) ||
  103.   Read(fh, buf, fib->fib_Size) != fib->fib_Size)
  104.     End(RETURN_FAIL);
  105.  
  106.   if(XpkExamineTags(xfib, XPK_InBuf, buf, XPK_InLen, fib->fib_Size,
  107.     XPK_GetError, errbuf, TAG_DONE))
  108.   {
  109.     STRPTR a = errbuf;
  110.     VPrintf("Can't XpkExamine: %s\n", &a);
  111.     End(RETURN_FAIL);
  112.   }
  113.     
  114.   WriteXpkFib(xfib);
  115.  
  116.   End(RETURN_OK);
  117. }
  118.  
  119. void end(void)
  120. {
  121.   if(fh)    Close(fh);
  122.   if(xfib)    FreeMem(xfib, sizeof(struct XpkFib));
  123.   if(buf)    FreeMem(buf, fib->fib_Size);
  124.   if(XpkBase)    CloseLibrary(XpkBase);
  125.   if(fib)    FreeDosObject(DOS_FIB, fib);
  126.   if(rda)    FreeArgs(rda);
  127. }
  128.  
  129.