home *** CD-ROM | disk | FTP | other *** search
/ BBS 1 / BBS#1.iso / document / compress.arj / SQUOTEST.C < prev    next >
C/C++ Source or Header  |  1992-05-23  |  3KB  |  173 lines

  1. /*
  2.     Test for squo.c package
  3. */
  4.  
  5.  
  6. #include <stdio.h>
  7. #include <alloc.h>
  8. #include <time.h>
  9.  
  10.  
  11. #include "style.h"
  12. #include "squo.h"
  13.  
  14.  
  15. /*    Utility Functions
  16.     ================= */
  17.  
  18. void    FreeHeap (void)    {
  19.     printf ("coreleft () = %lu\n", coreleft ());
  20. }
  21.  
  22.  
  23. /*    File variables
  24.     ============== */
  25.  
  26. FILE    * inStream, * outStream;
  27.  
  28.  
  29. /*    User-supplied i/o functions
  30.     =========================== */
  31.  
  32. ReadFunc    readf    {
  33.     return    fread (buffer, size, 1, inStream);
  34. }
  35.  
  36. WriteFunc    writef    {
  37.     return    fwrite (buffer, size, 1, outStream);
  38. }
  39.  
  40.  
  41. /*    main ()
  42.     ======= */
  43.  
  44. main (int argc,    char **argv)    {
  45.  
  46.     int    ErrorFlag = 0,
  47.         PackFlag = 0,
  48.         UnpackFlag = 0;
  49.  
  50.     char    * inFilename = NULL,
  51.         * outFilename = NULL;
  52.  
  53.     clock_t    startTime,
  54.         stopTime;
  55.  
  56.     startTime = clock ();
  57.  
  58.     printf ("LZ  Version %s  (C)\xFF Compact Soft\n\n", SquoVersion);
  59.  
  60.     #ifdef    DEBUG
  61.     printf ("Max Distance = %d, Max Length = %d\n"
  62.         "Partial Shift Length = %d\n",
  63.         MD, ML,    SHLEN);
  64.     #endif
  65.  
  66.     {
  67.         char    ** p;
  68.  
  69.         argc = argc; /* Warning: parameter 'argc' is never used */
  70.         for    (p = argv + 1; *p != NULL; p ++)    {
  71.             switch    ((*p) [0])    {
  72.                 case    '-':
  73.                 case    '/':
  74.                     switch    ((*p) [1])    {
  75.                         case    'u':
  76.                             UnpackFlag = 1;
  77.                             break;
  78.                         case    'p':
  79.                             PackFlag = 1;
  80.                             break;
  81.                         default:
  82.                             ErrorFlag = 1;
  83.                             break;
  84.                     }
  85.                     break;
  86.                 default:
  87.                     if (inFilename == NULL)
  88.                         inFilename = *p;
  89.                     else if (outFilename == NULL)
  90.                         outFilename = *p;
  91.                     else
  92.                         ErrorFlag = 1;
  93.                     break;
  94.             }    /* switch ((*p) [0]) */
  95.         }    /* for (p) */
  96.  
  97.         if (ErrorFlag || ! (PackFlag ^ UnpackFlag) )    {
  98.             printf (" Usage:\n"
  99.                 "    LZ switch infile outfile\n"
  100.                 "  Switches:\n"
  101.                 "    -p    : packing\n"
  102.                 "    -u    : unpacking\n"
  103.             );
  104.             return    1;
  105.         }
  106.     }
  107.  
  108.     inStream = fopen (inFilename, "rb");
  109.     outStream = fopen (outFilename, "wb");
  110.     if (inStream == NULL || outStream == NULL)    {
  111.         fprintf (stderr, "LZ: Can't open file(s)\n");
  112.         return    1;
  113.     }
  114.  
  115.     if (PackFlag)    {
  116.  
  117.     /* use almost all memory for buffers */
  118.     {
  119.         ULONG    bufSize;
  120.  
  121.         bufSize = (coreleft () - 2048) / 2;
  122.         if (bufSize > 0x7fff)    bufSize = 0x7fff;
  123.  
  124.         /* !!! small buffers for benchmarking */
  125.         bufSize = 4096;
  126.  
  127.         FreeHeap ();
  128.         setvbuf (inStream, NULL, _IOFBF, (unsigned) bufSize);
  129.         setvbuf (outStream, NULL, _IOFBF, (unsigned) bufSize);
  130.         FreeHeap ();
  131.     }
  132.  
  133.     SquoPack (readf, writef);
  134.  
  135.     } else    {    /* unpacking */
  136.  
  137.     SquoUnpack (readf, writef);
  138.  
  139.     }
  140.  
  141.     fclose (inStream);
  142.     fclose (outStream);
  143.  
  144.     stopTime = clock ();
  145.     printf ("Elapsed time: %lu ms.\n",
  146.         (stopTime - startTime) * 10000 / 182);
  147.  
  148.     return    0;
  149. }
  150.  
  151.  
  152. /*
  153.     !!! it should be a class:
  154.     ctor allocates buffer (filename and buffer size are params)
  155.         and opens file in unbuffered mode,
  156.     dtor flushes buffer and frees it,
  157.     read gets from buffer (and calls fread if necessary),
  158.     write puts to buffer (and may be flushes it via fwrite);
  159. */
  160.  
  161. #if    0
  162.  
  163. typedef    struct    {
  164.     UBYTE    buf [60000];
  165.     UWORD    used;
  166.     FILE    * file;
  167. }    fileBuffer;
  168.  
  169. fileBuffer    * readBuffer,
  170.         * writeBuffer;
  171.  
  172. #endif
  173.