home *** CD-ROM | disk | FTP | other *** search
/ Amiga ACS 1997 #2 / amigaacscoverdisc / amigascene / diskmagazines / izviestia / izviestia_10.lha / Izviestia_10 / BonusStuff / XPK / UnPack / Unpack.c < prev   
C/C++ Source or Header  |  1996-08-12  |  2KB  |  84 lines

  1. #include <proto/exec.h>
  2. #include <proto/dos.h>
  3.  
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6.  
  7. #include <libraries/xpk.h>
  8.  
  9. struct Library *XpkBase;   /* baza bilioteki */
  10.  
  11. BPTR lock;           /* blokada pliku */
  12. char errbuf[300];    /* miejsce na komunikaty o bîëdach */
  13.  
  14. void end(int kod);   /* funkcja wychodzâca, stworzona póúniej */
  15.  
  16. /* program gîówny */
  17. void main(int argc, char *argv[])
  18. {
  19.    XFIB xfib;
  20.  
  21.    /* czy sâ 2 argumenty? */
  22.    if(argc!=3)
  23.    {
  24.       printf("XPK file-unpacker. Usage:\n%s in_file out_file\n", argv[0]);
  25.       end(100);
  26.    }
  27.  
  28.    /* otwieramy bibliotekë */
  29.    if(!(XpkBase = OpenLibrary(XPKNAME, 0)))
  30.    {
  31.       printf("Cannot open "XPKNAME"\n");
  32.       end(10);
  33.    }
  34.  
  35.    /* blokujemy dostëp do pliku */
  36.    if(!(lock = Lock(argv[1], ACCESS_READ)))
  37.    {
  38.       printf("Error %ld reading '%s'\n", IoErr(), argv[1]);
  39.       end(20);
  40.    }
  41.  
  42.    /* odczytujemy dane o pliku - struktura XFIB */
  43.    if(XpkExamineTags(&xfib, XPK_InName, argv[1], TAG_DONE))
  44.    {
  45.       printf("Error examining '%s'\n", argv[1]);
  46.       end(40);
  47.    }
  48.  
  49.    /* czy plik jest spakowany? */
  50.    if(xfib.Type != XPKTYPE_PACKED)
  51.    {
  52.       printf("Skipping (already unpacked) '%s'\n", argv[1]);
  53.       end(50);
  54.    }
  55.  
  56.    /* rozpakowywujemy sposobym file-2-file */
  57.    if(XpkUnpackTags(XPK_InName,   argv[1],
  58.                   XPK_OutName,    argv[2],
  59.                   XPK_GetError,   errbuf,
  60.                   TAG_DONE))
  61.    {
  62.       printf("Pack error: '%s'\n", errbuf);
  63.       end(60);
  64.    }
  65.  
  66.    printf("File '%s' unpacked to file '%s'.\n", argv[1], argv[2]);
  67.    end(0);
  68. }
  69.  
  70. /* funkcja wychodzâca */
  71. void end(int kod)
  72. {
  73.    /* zwalniamy plik */
  74.    if(lock)
  75.       UnLock(lock);
  76.  
  77.    /* zamykamy bibliotekë */
  78.    if(XpkBase)
  79.       CloseLibrary(XpkBase);
  80.  
  81.    /* wychodzimy z podanym kodem (dostëpny np. poprzez SET z ADosu - RC) */
  82.    exit(kod);
  83. }
  84.