home *** CD-ROM | disk | FTP | other *** search
/ rtsi.com / 2014.01.www.rtsi.com.tar / www.rtsi.com / OS9 / OSK / ARCHIVERS / lha208src.lzh / LHA / SRC / append.c next >
Text File  |  1994-06-09  |  3KB  |  158 lines

  1. /***********************************************************
  2.     append.c -- append to archive
  3. ***********************************************************/
  4. #include "lharc.h"
  5. #include "intrface.h"
  6.  
  7. #ifdef NEED_INCREMENTAL_INDICATOR
  8. #define MAX_INDICATOR_COUNT    64
  9. long indicator_count;
  10. long indicator_threshold;
  11. #endif
  12.  
  13. #ifdef OSK
  14. char omsg[256];
  15. char clr_str[77] = {
  16. "                                                                            "
  17. };
  18. #endif
  19.  
  20. extern int quiet;
  21. extern int compress_method;
  22. extern long int reading_size;
  23. extern unsigned    short dicbit;
  24.  
  25. struct interfacing interface;
  26.  
  27. int encode_lzhuf (infp, outfp, size, original_size_var, packed_size_var,
  28. name,hdr_method)
  29. FILE *infp;
  30. FILE *outfp;
  31. long size;
  32. long *original_size_var;
  33. long *packed_size_var;
  34. char *name;
  35. char *hdr_method;
  36. {
  37.     static int method = -1;
  38.  
  39.     if (method < 0) {
  40.         method = compress_method;
  41.         if (method > 0) method = encode_alloc(method);
  42.     }
  43.  
  44.     interface.method = method;
  45.  
  46.     if (interface.method > 0) {
  47.         interface.infile = infp;
  48.         interface.outfile = outfp;
  49.         start_indicator (name, size, "Freezing",1<<dicbit);
  50.         encode(&interface);
  51.         *packed_size_var = interface.packed;
  52.         *original_size_var = interface.original;
  53.     } 
  54.     else {
  55.         copyfile(infp, outfp, size, 1);
  56.         *packed_size_var = *original_size_var = size;
  57.     }
  58.     bcopy ("-lh -", hdr_method, 5);
  59.     hdr_method[3] = interface.method + '0';
  60.  
  61.     finish_indicator2 (name, "Frozen",
  62.     (int)((*packed_size_var * 100L) / *original_size_var ));
  63.     return mcrc;
  64. }
  65.  
  66. void
  67. start_indicator (name, size, msg, def_indicator_threshold)
  68. char *name;
  69. long size;
  70. char *msg;
  71. long def_indicator_threshold;
  72. {
  73. #ifdef NEED_INCREMENTAL_INDICATOR
  74.     long   i;
  75.     int    m;
  76. #endif
  77.  
  78.     if (quiet)
  79.         return;
  80.  
  81. #ifdef NEED_INCREMENTAL_INDICATOR
  82.     m = MAX_INDICATOR_COUNT - strlen (name);
  83.     if (m < 0)
  84.         m = 3;        /* (^_^) */
  85. #ifdef OSK
  86.     sprintf (omsg,"\r%s - %s :  ", name, msg);
  87.     write(1,omsg,strlen(omsg));
  88. #else
  89.     printf ("\r%s\t- %s :  ", name, msg);
  90. #endif
  91.         indicator_threshold = ((size  + (m * def_indicator_threshold - 1)) /
  92.         (m * def_indicator_threshold) * def_indicator_threshold);
  93.     if ( indicator_threshold )
  94.         i = ((size + (indicator_threshold - 1)) / indicator_threshold);
  95.     else
  96.         i = 0;
  97.     while (i--)
  98. #ifdef OSK
  99.         write(1,".",1);
  100. #else
  101.         putchar ('.');
  102. #endif
  103.     indicator_count = 0;
  104. #ifdef OSK
  105.     sprintf (omsg,"\r%s - %s :  ", name, msg);
  106.     write(1,omsg,strlen(omsg));
  107. #else
  108.     printf ("\r%s\t- %s :  ", name, msg);
  109. #endif
  110.  
  111. #else
  112.     printf ("%s\t- ", name);
  113. #endif
  114.     fflush (stdout);
  115.     reading_size = 0L;
  116. }
  117.  
  118. void
  119. finish_indicator2 (name, msg, pcnt)
  120. char *name;
  121. char *msg;
  122. int pcnt;
  123. {
  124.     if (quiet)
  125.         return;
  126.  
  127.     if (pcnt > 100) pcnt = 100;    /* (^_^) */
  128. #ifdef OSK
  129.     sprintf (omsg,"\r%s - %s (%d%%) %s\n\l", \
  130.         name, msg, pcnt, &clr_str[strlen(name)+18]);
  131.     write(1,omsg,strlen(omsg));
  132. #else
  133.     printf ("\r%s\t- %s(%d%%)\n", name, msg, pcnt);
  134. #endif
  135.     fflush (stdout);
  136. }
  137.  
  138. void
  139. finish_indicator (name, msg)
  140. char *name;
  141. char *msg;
  142. {
  143.     if (quiet)
  144.         return;
  145.  
  146. #ifdef NEED_INCREMENTAL_INDICATOR
  147. #ifdef OSK
  148.     sprintf (omsg,"\r%s - %s%s\l\n", name, msg, &clr_str[strlen(name)+9]);
  149.     write(1,omsg,strlen(omsg));
  150. #else
  151.     printf ("\r%s\t- %s \n", name, msg);
  152. #endif
  153. #else
  154.     printf ("%s\n", msg);
  155. #endif
  156.     fflush (stdout);
  157. }
  158.