home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / misc / volume28 / freeze / patch02 next >
Text File  |  1992-02-02  |  24KB  |  1,013 lines

  1. Newsgroups: comp.sources.misc
  2. From: leo@s514.ipmce.su (Leonid A. Broukhis)
  3. Subject:  v28i011:  freeze - Freeze/melt compression program, Patch02
  4. Message-ID: <1992Feb2.051701.29115@sparky.imd.sterling.com>
  5. X-Md4-Signature: cfc18df459d0b08eeab2739a010776e4
  6. Date: Sun, 2 Feb 1992 05:17:01 GMT
  7. Approved: kent@sparky.imd.sterling.com
  8.  
  9. Submitted-by: leo@s514.ipmce.su (Leonid A. Broukhis)
  10. Posting-number: Volume 28, Issue 11
  11. Archive-name: freeze/patch02
  12. Environment: ISC, Xenix, SunOS, MS-DOS
  13. Patch-To: freeze: Volume 25, Issue 12-13
  14.  
  15. Here is the patchlevel 2 for Freeze. Modifications done:
  16.  
  17.  - UTIMES handling;
  18.  - TOS support (I don't know what is this, maybe yet another MSDOS-like
  19. system), hence BIN_DEFAULT replaced with TEXT_DEFAULT;
  20.  - unfreeze now means the same as melt (for non-English speakers and
  21. to make freeze's interface similar to compress' one).
  22.  - melting progress indicator frequency changed.
  23.  
  24. --- cut here ---
  25.  
  26. *** ../distribution/README    Fri Jan 31 21:07:17 1992
  27. --- README    Fri Jan 31 21:22:02 1992
  28. ***************
  29. *** 5,12 ****
  30.   The following preprocessor symbols control the compilation of Freeze
  31.   package:
  32.   
  33. !     o BITS                  The size of hash table (default is 18,
  34. !                 reducing to 14 gives a 50% speeddown).
  35.       o COMPAT                Turns on backwards compatibility
  36.                   with Freeze 1.0
  37.       o M_XENIX & M_I286      Makes arrays < 65536 bytes each
  38. --- 5,12 ----
  39.   The following preprocessor symbols control the compilation of Freeze
  40.   package:
  41.   
  42. !     o BITS                  The size of hash table (default is 16,
  43. !                 reducing to 14 gives some speeddown).
  44.       o COMPAT                Turns on backwards compatibility
  45.                   with Freeze 1.0
  46.       o M_XENIX & M_I286      Makes arrays < 65536 bytes each
  47. ***************
  48. *** 28,36 ****
  49.       o __i386__              When compiling under GNU C causes
  50.                   some fixed register allocations,
  51.                   which give better code.
  52. !     o BIN_DEFAULT           (For MS-DOS only!) Define, if you
  53. !                 forget to use -i option when freezing
  54. !                 binary files.
  55.   
  56.   Please! If your computer supports the string operations, try to write
  57.   "asm" instructions (GNU style) which realize the right-to-left memory
  58. --- 28,41 ----
  59.       o __i386__              When compiling under GNU C causes
  60.                   some fixed register allocations,
  61.                   which give better code.
  62. !     o TEXT_DEFAULT          (For MS-DOS only!) Define, if you
  63. !                 freeze text files more often than binary
  64. !                 ones. In this case don't forget to use "-i"
  65. !                 to freeze binary files!!
  66. !         o UTIMES        For using the utimes() function
  67. !                 instead of utime(), which is obsolete
  68. !                 on some systems (most notably BSD
  69. !                 4.3).
  70.   
  71.   Please! If your computer supports the string operations, try to write
  72.   "asm" instructions (GNU style) which realize the right-to-left memory
  73. ***************
  74. *** 158,163 ****
  75. --- 163,169 ----
  76.   
  77.   When using 18 bits table (about 600K) and gcc, the speed of freeze is more
  78.   than the same of ARJ 1.00, but is less than of LHA 2.05.
  79. + On SPARCs freeze works faster than ZIP 1.0.
  80.   
  81.   Note: the percents mean 'relatively to compressed size', if you want
  82.   to have them relatively to original size, divide them to 2-2.5.
  83. ***************
  84. *** 168,174 ****
  85.   
  86.   Note: if you see Compress works nearly as Freeze (on some files), this
  87.   means the maximum is gained, so LHA and ARJ won't better more than
  88. ! 1-1.5%.
  89.   
  90.   --------------- POSSIBLE IMPROVEMENTS ---------------
  91.   
  92. --- 174,181 ----
  93.   
  94.   Note: if you see Compress works nearly as Freeze (on some files), this
  95.   means the maximum is gained, so LHA and ARJ won't better more than
  96. ! 1-1.5%. There are some files (I have one) that freeze compresses better
  97. ! than ARJ 2.20.
  98.   
  99.   --------------- POSSIBLE IMPROVEMENTS ---------------
  100.   
  101. *** ../distribution/freeze.1    Fri Jan 31 21:07:22 1992
  102. --- freeze.1    Fri Dec  6 00:30:51 1991
  103. ***************
  104. *** 1,7 ****
  105.   .PU
  106.   .TH FREEZE 1 local
  107.   .SH NAME
  108. ! freeze, melt, fcat  \-  compress and uncompress files
  109.   .SH SYNOPSIS
  110.   .ll +8
  111.   .B freeze
  112. --- 1,7 ----
  113.   .PU
  114.   .TH FREEZE 1 local
  115.   .SH NAME
  116. ! freeze, unfreeze, melt, fcat  \-  compress and uncompress files
  117.   .SH SYNOPSIS
  118.   .ll +8
  119.   .B freeze
  120. ***************
  121. *** 12,17 ****
  122. --- 12,24 ----
  123.   ]
  124.   .ll -8
  125.   .br
  126. + .B unfreeze
  127. + [
  128. + .B \-cfvV
  129. + ] [
  130. + .I "filename \&..."
  131. + ]
  132. + .br
  133.   .B melt
  134.   [
  135.   .B \-cfvV
  136. ***************
  137. *** 34,40 ****
  138.   .B \-d
  139.   option, or by running
  140.   .I melt
  141. ! (linked to
  142.   .IR freeze ),
  143.   on the 
  144.   .B "\&.F"
  145. --- 41,49 ----
  146.   .B \-d
  147.   option, or by running
  148.   .I melt
  149. ! or
  150. ! .I unfreeze
  151. ! (both linked to
  152.   .IR freeze ),
  153.   on the 
  154.   .B "\&.F"
  155. *** ../distribution/freeze.c    Fri Jan 31 21:07:24 1992
  156. --- freeze.c    Fri Jan 31 21:27:35 1992
  157. ***************
  158. *** 33,38 ****
  159. --- 33,40 ----
  160.    * (pa@verano.sba.ca.us, clewis@ferret.ocunix.on.ca (Chris Lewis)),
  161.    * "chain threshold" euristic used for speedup (in "greedy" mode) -
  162.    * a la ZIP (Jean-Loup Gailly). Max. hash bits reduced to 16.
  163. +  * Version 2.3.2: Adaptation to TOS 1.04 (fifi@hiss.han.de), UTIMES
  164. +  * handling (jik@athena.mit.edu).
  165.    */
  166.   
  167.   static char ident[] = "@(#) freeze.c 2.3.%d %s leo@s514.ipmce.su\n";
  168. ***************
  169. *** 42,60 ****
  170.   void Usage() {
  171.   #ifdef DEBUG
  172.   
  173. ! # ifdef MSDOS
  174.       fprintf(stderr,"Usage: freeze [-cdDfitvVg] [file | +type ...]\n");
  175.   # else
  176.       fprintf(stderr,"Usage: freeze [-cdDfvVg] [file | +type ...]\n");
  177. ! # endif /* MSDOS */
  178.   
  179.   #else
  180.   
  181. ! # ifdef MSDOS
  182.       fprintf(stderr,"Usage: freeze [-cdfitvVg] [file | +type ...]\n");
  183.   # else
  184.       fprintf(stderr,"Usage: freeze [-cdfvVg] [file | +type ...]\n");
  185. ! # endif /* MSDOS */
  186.   
  187.   #endif /* DEBUG */
  188.   }
  189. --- 44,62 ----
  190.   void Usage() {
  191.   #ifdef DEBUG
  192.   
  193. ! # ifdef DOS
  194.       fprintf(stderr,"Usage: freeze [-cdDfitvVg] [file | +type ...]\n");
  195.   # else
  196.       fprintf(stderr,"Usage: freeze [-cdDfvVg] [file | +type ...]\n");
  197. ! # endif /* DOS */
  198.   
  199.   #else
  200.   
  201. ! # ifdef DOS
  202.       fprintf(stderr,"Usage: freeze [-cdfitvVg] [file | +type ...]\n");
  203.   # else
  204.       fprintf(stderr,"Usage: freeze [-cdfvVg] [file | +type ...]\n");
  205. ! # endif /* DOS */
  206.   
  207.   #endif /* DEBUG */
  208.   }
  209. ***************
  210. *** 71,83 ****
  211.   char ofname [MAXNAMLEN];
  212.   struct stat statbuf;    /* Used by 'main' and 'copystat' routines */
  213.   
  214. ! #ifdef MSDOS
  215.      char *last_sep();    /* last slash, backslash, or colon */
  216.      char tail[2];        /* 2nd and 3rd chars of file extension */
  217. ! # ifdef BIN_DEFAULT
  218. !     short image = O_BINARY;
  219. ! # else
  220.       short image = O_TEXT;
  221.   # endif
  222.   #else
  223.   #  define last_sep(s) strrchr((s), '/')  /* Unix always uses slashes */
  224. --- 73,87 ----
  225.   char ofname [MAXNAMLEN];
  226.   struct stat statbuf;    /* Used by 'main' and 'copystat' routines */
  227.   
  228. ! char inbuf[BUFSIZ * 4], outbuf[BUFSIZ * 4];
  229. ! #ifdef DOS
  230.      char *last_sep();    /* last slash, backslash, or colon */
  231.      char tail[2];        /* 2nd and 3rd chars of file extension */
  232. ! # ifdef TEXT_DEFAULT
  233.       short image = O_TEXT;
  234. + # else
  235. +     short image = O_BINARY;
  236.   # endif
  237.   #else
  238.   #  define last_sep(s) strrchr((s), '/')  /* Unix always uses slashes */
  239. ***************
  240. *** 166,172 ****
  241.       char **filelist, **fileptr;
  242.       char *cp;
  243.   
  244. ! #ifndef MSDOS
  245.       char *malloc();
  246.   #endif
  247.   
  248. --- 170,182 ----
  249.       char **filelist, **fileptr;
  250.       char *cp;
  251.   
  252. ! #ifdef TOS
  253. !     char *argv0 = "freeze.ttp"; /* argv[0] is not defined :-( */
  254. ! #endif
  255. ! #ifndef DOS
  256.       char *malloc();
  257.   #endif
  258.   
  259. ***************
  260. *** 176,182 ****
  261.       extern onintr();
  262.   #endif
  263.   
  264. ! #ifdef MSDOS
  265.       char *sufp;
  266.   #else
  267.   #ifdef INT_SIG
  268. --- 186,192 ----
  269.       extern onintr();
  270.   #endif
  271.   
  272. ! #ifdef DOS
  273.       char *sufp;
  274.   #else
  275.   #ifdef INT_SIG
  276. ***************
  277. *** 186,200 ****
  278.   #endif
  279.   #endif
  280.   
  281. ! #ifndef MSDOS
  282.       if ( (bgnd_flag = signal ( SIGINT, SIG_IGN )) != SIG_IGN )
  283.   #endif
  284.       {
  285.       (void) signal ( SIGINT, onintr );
  286.   #ifdef __TURBOC__
  287.       setcbrk(1);
  288.   #endif
  289. ! #ifndef MSDOS
  290.       (void) signal ( SIGSEGV, oops );
  291.   #endif
  292.       }
  293. --- 196,214 ----
  294.   #endif
  295.   #endif
  296.   
  297. ! #ifndef DOS
  298.       if ( (bgnd_flag = signal ( SIGINT, SIG_IGN )) != SIG_IGN )
  299.   #endif
  300.       {
  301.       (void) signal ( SIGINT, onintr );
  302.   #ifdef __TURBOC__
  303. + #ifndef TOS
  304.       setcbrk(1);
  305. + #endif
  306.   #endif
  307. ! #ifndef DOS
  308.       (void) signal ( SIGSEGV, oops );
  309.   #endif
  310.       }
  311. ***************
  312. *** 205,225 ****
  313.       if((cp = last_sep(argv[0])) != 0) {
  314.       cp++;
  315.       } else {
  316.       cp = argv[0];
  317. -     }
  318.   
  319. ! #ifdef MSDOS
  320.   
  321.   /* use case-insensitive match: parent may not be command.com */
  322. !     if(stricmp(cp, "melt.exe") == 0) {
  323.   #else
  324. !     if(strcmp(cp, "melt") == 0) {
  325.   #endif
  326.   
  327.       do_melt = 1;
  328. !     
  329.   #ifdef MSDOS
  330.       } else if(stricmp(cp, "fcat.exe") == 0) {
  331.   #else
  332.       } else if(strcmp(cp, "fcat") == 0) {
  333.   #endif
  334. --- 219,254 ----
  335.       if((cp = last_sep(argv[0])) != 0) {
  336.       cp++;
  337.       } else {
  338. + #ifdef TOS
  339. +     cp = argv0;
  340. + #else
  341.       cp = argv[0];
  342.   
  343. ! #endif
  344. !     }
  345.   
  346. + #ifdef DOS
  347.   /* use case-insensitive match: parent may not be command.com */
  348. ! #ifdef MSDOS
  349. !     if (!stricmp(cp, "unfreeze.exe") || !stricmp(cp, "melt.exe")) {
  350. ! #else /* TOS */
  351. !     if (!stricmp(cp, "unfreeze.ttp") || !stricmp(cp, "melt.ttp")) {
  352. ! #endif
  353.   #else
  354. !     if (!strcmp(cp, "unfreeze") || !strcmp(cp, "melt")) {
  355.   #endif
  356.   
  357.       do_melt = 1;
  358. ! #ifdef DOS    
  359.   #ifdef MSDOS
  360.       } else if(stricmp(cp, "fcat.exe") == 0) {
  361. + #else /* TOS */
  362. +     } else if(stricmp(cp, "fcat.ttp") == 0) {
  363. + #endif
  364.   #else
  365.       } else if(strcmp(cp, "fcat") == 0) {
  366.   #endif
  367. ***************
  368. *** 229,235 ****
  369.   
  370.       } else {
  371.       /* Freezing */
  372. ! #ifndef MSDOS
  373.       (void) defopen(deffile);
  374.   #else
  375.       cp = strrchr(cp, '.');
  376. --- 258,265 ----
  377.   
  378.       } else {
  379.       /* Freezing */
  380. ! #ifndef DOS
  381.       (void) defopen(deffile);
  382.   #else
  383.       cp = strrchr(cp, '.');
  384. ***************
  385. *** 237,244 ****
  386.       *++cp = 'N';
  387.       *++cp = 'F';
  388.       *++cp = '\0';
  389.       (void) defopen(argv[0]);
  390. ! #endif
  391.       }
  392.   #ifdef BSD4_2
  393.       /* 4.2BSD dependent - take it out if not */
  394. --- 267,280 ----
  395.       *++cp = 'N';
  396.       *++cp = 'F';
  397.       *++cp = '\0';
  398. + #ifdef TOS
  399. +     (void) defopen(argv0);
  400. + #else
  401.       (void) defopen(argv[0]);
  402. ! #endif  /* TOS */
  403. ! #endif  /* DOS */
  404.       }
  405.   #ifdef BSD4_2
  406.       /* 4.2BSD dependent - take it out if not */
  407. ***************
  408. *** 271,277 ****
  409.               version();
  410.   #endif /* DEBUG */
  411.               break;
  412. ! #ifdef MSDOS
  413.               case 'i':
  414.               case 'b':
  415.               image = O_BINARY;    /* binary (aka image) mode */
  416. --- 307,313 ----
  417.               version();
  418.   #endif /* DEBUG */
  419.               break;
  420. ! #ifdef DOS
  421.               case 'i':
  422.               case 'b':
  423.               image = O_BINARY;    /* binary (aka image) mode */
  424. ***************
  425. *** 331,337 ****
  426.           exit_stat = 0;
  427.           if (do_melt != 0) {               /* MELTING */
  428.   
  429. ! #ifdef MSDOS
  430.           /* Check for .F or XF suffix; add one if necessary */
  431.           cp = *fileptr + strlen(*fileptr) - 2;
  432.           if ((*cp != '.' && *cp != 'X' && *cp != 'x') ||
  433. --- 367,373 ----
  434.           exit_stat = 0;
  435.           if (do_melt != 0) {               /* MELTING */
  436.   
  437. ! #ifdef DOS
  438.           /* Check for .F or XF suffix; add one if necessary */
  439.           cp = *fileptr + strlen(*fileptr) - 2;
  440.           if ((*cp != '.' && *cp != 'X' && *cp != 'x') ||
  441. ***************
  442. *** 360,366 ****
  443.               (void) strcat(tempname, ".F");
  444.               *fileptr = tempname;
  445.           }
  446. ! #endif /*MSDOS */
  447.   
  448.           /* Open input file for melting */
  449.   
  450. --- 396,402 ----
  451.               (void) strcat(tempname, ".F");
  452.               *fileptr = tempname;
  453.           }
  454. ! #endif /*DOS */
  455.   
  456.           /* Open input file for melting */
  457.   
  458. ***************
  459. *** 367,373 ****
  460.           if (checkstat(*fileptr))
  461.               continue;
  462.   
  463. ! #ifdef MSDOS
  464.           if ((freopen(*fileptr, "rb", stdin)) == NULL)
  465.   #else
  466.           if ((freopen(*fileptr, "r", stdin)) == NULL)
  467. --- 403,409 ----
  468.           if (checkstat(*fileptr))
  469.               continue;
  470.   
  471. ! #ifdef DOS
  472.           if ((freopen(*fileptr, "rb", stdin)) == NULL)
  473.   #else
  474.           if ((freopen(*fileptr, "r", stdin)) == NULL)
  475. ***************
  476. *** 398,410 ****
  477.           precious = 1;
  478.           (void) strcpy(ofname, *fileptr);
  479.           ofname[strlen(*fileptr) - 2] = '\0';  /* Strip off .F */
  480. ! #ifdef MSDOS
  481.           (void) strcat(ofname, tail);
  482.   #endif
  483.           } else {
  484.   
  485.               /* FREEZING */
  486. ! #ifdef MSDOS
  487.           cp = *fileptr + strlen(*fileptr) - 2;
  488.           if ((*cp == '.' || *cp == 'X' || *cp == 'x') &&
  489.               (*(++cp) == 'F' || *cp == 'f')) {
  490. --- 434,446 ----
  491.           precious = 1;
  492.           (void) strcpy(ofname, *fileptr);
  493.           ofname[strlen(*fileptr) - 2] = '\0';  /* Strip off .F */
  494. ! #ifdef DOS
  495.           (void) strcat(ofname, tail);
  496.   #endif
  497.           } else {
  498.   
  499.               /* FREEZING */
  500. ! #ifdef DOS
  501.           cp = *fileptr + strlen(*fileptr) - 2;
  502.           if ((*cp == '.' || *cp == 'X' || *cp == 'x') &&
  503.               (*(++cp) == 'F' || *cp == 'f')) {
  504. ***************
  505. *** 414,420 ****
  506.           if (strcmp(*fileptr + strlen(*fileptr) - 2, ".F") == 0) {
  507.               fprintf(stderr, "%s: already has .F suffix -- no change\n",
  508.               *fileptr);
  509. ! #endif /* MSDOS */
  510.   
  511.               continue;
  512.           }
  513. --- 450,456 ----
  514.           if (strcmp(*fileptr + strlen(*fileptr) - 2, ".F") == 0) {
  515.               fprintf(stderr, "%s: already has .F suffix -- no change\n",
  516.               *fileptr);
  517. ! #endif /* DOS */
  518.   
  519.               continue;
  520.           }
  521. ***************
  522. *** 423,429 ****
  523.           if (checkstat(*fileptr))
  524.               continue;
  525.   
  526. ! #ifdef MSDOS
  527.           if ((freopen(*fileptr, image == O_TEXT ? "rt" : "rb", stdin))
  528.               == NULL)
  529.   #else
  530. --- 459,465 ----
  531.           if (checkstat(*fileptr))
  532.               continue;
  533.   
  534. ! #ifdef DOS
  535.           if ((freopen(*fileptr, image == O_TEXT ? "rt" : "rb", stdin))
  536.               == NULL)
  537.   #else
  538. ***************
  539. *** 438,444 ****
  540.   #ifndef BSD4_2        /* Short filenames */
  541.           if ((cp = last_sep(ofname)) != NULL) cp++;
  542.           else cp = ofname;
  543. ! # ifdef MSDOS
  544.           if (topipe == 0 && (sufp = strrchr(cp, '.')) != NULL &&
  545.               strlen(sufp) > 2) fprintf(stderr,
  546.               "%s: part of filename extension will be replaced by XF\n",
  547. --- 474,480 ----
  548.   #ifndef BSD4_2        /* Short filenames */
  549.           if ((cp = last_sep(ofname)) != NULL) cp++;
  550.           else cp = ofname;
  551. ! # ifdef DOS
  552.           if (topipe == 0 && (sufp = strrchr(cp, '.')) != NULL &&
  553.               strlen(sufp) > 2) fprintf(stderr,
  554.               "%s: part of filename extension will be replaced by XF\n",
  555. ***************
  556. *** 448,457 ****
  557.               fprintf(stderr,"%s: filename too long to tack on .F\n",cp);
  558.               continue;
  559.           }
  560. ! # endif /* MSDOS */
  561.   #endif    /* BSD4_2        Long filenames allowed */
  562.                                
  563. ! #ifdef MSDOS
  564.           /* There is no difference between FOOBAR and FOOBAR. names */
  565.           if ((cp = strrchr(ofname, '.')) == NULL)
  566.               (void) strcat(ofname, ".F");
  567. --- 484,493 ----
  568.               fprintf(stderr,"%s: filename too long to tack on .F\n",cp);
  569.               continue;
  570.           }
  571. ! # endif /* DOS */
  572.   #endif    /* BSD4_2        Long filenames allowed */
  573.                                
  574. ! #ifdef DOS
  575.           /* There is no difference between FOOBAR and FOOBAR. names */
  576.           if ((cp = strrchr(ofname, '.')) == NULL)
  577.               (void) strcat(ofname, ".F");
  578. ***************
  579. *** 464,470 ****
  580.           }
  581.   #else
  582.           (void) strcat(ofname, ".F");
  583. ! #endif /* MSDOS */
  584.   
  585.           }
  586.           /* Check for overwrite of existing file */
  587. --- 500,506 ----
  588.           }
  589.   #else
  590.           (void) strcat(ofname, ".F");
  591. ! #endif /* DOS */
  592.   
  593.           }
  594.           /* Check for overwrite of existing file */
  595. ***************
  596. *** 473,479 ****
  597.               char response[2];
  598.               response[0] = 'n';
  599.               fprintf(stderr, "%s already exists;", ofname);
  600. ! #ifndef MSDOS
  601.               if (foreground()) {
  602.   #endif
  603.               fprintf(stderr,
  604. --- 509,515 ----
  605.               char response[2];
  606.               response[0] = 'n';
  607.               fprintf(stderr, "%s already exists;", ofname);
  608. ! #ifndef DOS
  609.               if (foreground()) {
  610.   #endif
  611.               fprintf(stderr,
  612. ***************
  613. *** 485,491 ****
  614.                   perror("stderr"); break;
  615.                   }
  616.               }
  617. ! #ifndef MSDOS
  618.               }
  619.   #endif
  620.               if (response[0] != 'y') {
  621. --- 521,527 ----
  622.                   perror("stderr"); break;
  623.                   }
  624.               }
  625. ! #ifndef DOS
  626.               }
  627.   #endif
  628.               if (response[0] != 'y') {
  629. ***************
  630. *** 499,505 ****
  631.   #ifdef DEBUG
  632.           if (do_melt == 0 || debug == 0) {
  633.   #endif
  634. ! #ifdef MSDOS
  635.           if (freopen(ofname, do_melt && image == O_TEXT ? "wt" : "wb",
  636.               stdout) == NULL)
  637.   #else         
  638. --- 535,541 ----
  639.   #ifdef DEBUG
  640.           if (do_melt == 0 || debug == 0) {
  641.   #endif
  642. ! #ifdef DOS
  643.           if (freopen(ofname, do_melt && image == O_TEXT ? "wt" : "wb",
  644.               stdout) == NULL)
  645.   #else         
  646. ***************
  647. *** 558,563 ****
  648. --- 594,601 ----
  649.       indc_threshold = file_length / 100;
  650.       if (indc_threshold < 4096)
  651.           indc_threshold = 4096;
  652. +     if (do_melt)
  653. +         indc_threshold *= 3;
  654.   
  655.       topipe = 1;
  656.       if (do_melt == 0) {
  657. ***************
  658. *** 671,678 ****
  659. --- 709,720 ----
  660.   #ifdef __TURBOC__
  661.   struct ftime utimbuf;
  662.   #else
  663. + #ifdef UTIMES
  664. + struct timeval timep[2];
  665. + #else
  666.   struct utimbuf timep;
  667.   #endif
  668. + #endif
  669.   
  670.       int mode;
  671.   
  672. ***************
  673. *** 696,706 ****
  674.       }
  675.   
  676.       exit_stat = 0;
  677.       mode = statbuf.st_mode & 07777;
  678.       if (chmod(ofname, mode))        /* Copy modes */
  679.           perror(ofname);
  680. ! #ifndef MSDOS
  681.       /* Copy ownership */
  682.       (void) chown(ofname, (int) statbuf.st_uid, (int) statbuf.st_gid);
  683.   #endif
  684. --- 738,754 ----
  685.       }
  686.   
  687.       exit_stat = 0;
  688. + #ifdef TOS
  689. +     Fattrib(ofname,1,Fattrib(ifname,0,0));
  690. + #else
  691.       mode = statbuf.st_mode & 07777;
  692.       if (chmod(ofname, mode))        /* Copy modes */
  693.           perror(ofname);
  694. ! #endif
  695. ! #ifndef DOS
  696.       /* Copy ownership */
  697.       (void) chown(ofname, (int) statbuf.st_uid, (int) statbuf.st_gid);
  698.   #endif
  699. ***************
  700. *** 711,716 ****
  701. --- 759,770 ----
  702.           setftime(fileno(stdout),&utimbuf);
  703.       (void) fclose(stdout);
  704.   #else
  705. + #ifdef UTIMES
  706. +     timep[0].tv_sec = statbuf.st_atime;
  707. +     timep[1].tv_sec = statbuf.st_mtime;
  708. +     timep[0].tv_usec = timep[1].tv_usec = 0;
  709. +     (void) utimes(ofname, timep);
  710. + #else
  711.       timep.actime = statbuf.st_atime;
  712.       timep.modtime = statbuf.st_mtime;
  713.   
  714. ***************
  715. *** 721,727 ****
  716.   
  717.       /* Update last accessed and modified times */
  718.       (void) utime(ofname, &timep);
  719. ! #endif
  720.       if (unlink(ifname))    /* Remove input file */
  721.           perror(ifname);
  722.       if(quiet != 1)
  723. --- 775,782 ----
  724.   
  725.       /* Update last accessed and modified times */
  726.       (void) utime(ofname, &timep);
  727. ! #endif /* UTIMES */
  728. ! #endif /* __TURBOC__ */
  729.       if (unlink(ifname))    /* Remove input file */
  730.           perror(ifname);
  731.       if(quiet != 1)
  732. ***************
  733. *** 745,763 ****
  734.           return exit_stat = 1;
  735.       }
  736.   
  737. !     /* Do NOT try to freeze /dev/null or /dev/tty ... */
  738. ! #ifndef MSDOS
  739. !     if ((statbuf.st_mode & S_IFMT) != S_IFREG) {
  740. !         fprintf(stderr, "%s: ", ifname);
  741. !         fprintf(stderr, " not a regular file -- unchanged\n");
  742. !         return exit_stat = 1;
  743.   
  744. !     } else if (statbuf.st_nlink > 1) {
  745. !         fprintf(stderr, "%s: ", ifname);
  746. !         fprintf(stderr, " has %d other links -- unchanged\n",
  747. !         statbuf.st_nlink - 1);
  748. !         return exit_stat = 1;
  749.       }
  750.   #endif /* MSDOS */
  751.   
  752. --- 800,821 ----
  753.           return exit_stat = 1;
  754.       }
  755.   
  756. !     /* Do NOT try to freeze /dev/null or /dev/tty...   */
  757. !     /* but you may freeze or melt everything to stdout */
  758.   
  759. ! #ifndef DOS
  760. !     if (!topipe) {
  761. !         if ((statbuf.st_mode & S_IFMT) != S_IFREG) {
  762. !             fprintf(stderr, "%s: ", ifname);
  763. !             fprintf(stderr, " not a regular file -- unchanged\n");
  764. !             return exit_stat = 1;
  765. !         } else if (statbuf.st_nlink > 1) {
  766. !             fprintf(stderr, "%s: ", ifname);
  767. !             fprintf(stderr, " has %d other links -- unchanged\n",
  768. !             statbuf.st_nlink - 1);
  769. !             return exit_stat = 1;
  770. !         }
  771.       }
  772.   #endif /* MSDOS */
  773.   
  774. ***************
  775. *** 766,776 ****
  776.       indc_threshold = file_length / 100;
  777.       if (indc_threshold < 4096)
  778.           indc_threshold = 4096;
  779.   
  780.       return exit_stat = 0;
  781.   }
  782.   
  783. ! #ifndef MSDOS
  784.   /*
  785.    * This routine returns 1 if we are running in the foreground and stderr
  786.    * is a tty. (as in compress(1))
  787. --- 824,836 ----
  788.       indc_threshold = file_length / 100;
  789.       if (indc_threshold < 4096)
  790.           indc_threshold = 4096;
  791. +     if (do_melt)
  792. +         indc_threshold *= 3;
  793.   
  794.       return exit_stat = 0;
  795.   }
  796.   
  797. ! #ifndef DOS
  798.   /*
  799.    * This routine returns 1 if we are running in the foreground and stderr
  800.    * is a tty. (as in compress(1))
  801. ***************
  802. *** 844,850 ****
  803.       fprintf(stderr, "Static Huffman table: %d %d %d %d %d %d %d %d\n",
  804.           Table2[1], Table2[2], Table2[3], Table2[4],
  805.           Table2[5], Table2[6], Table2[7], Table2[8]);
  806. ! #ifdef MSDOS
  807.       fprintf(stderr, "Default melted mode: %s\n",
  808.               image == O_BINARY ? "binary" : "text");
  809.   #endif
  810. --- 904,910 ----
  811.       fprintf(stderr, "Static Huffman table: %d %d %d %d %d %d %d %d\n",
  812.           Table2[1], Table2[2], Table2[3], Table2[4],
  813.           Table2[5], Table2[6], Table2[7], Table2[8]);
  814. ! #ifdef DOS
  815.       fprintf(stderr, "Default melted mode: %s\n",
  816.               image == O_BINARY ? "binary" : "text");
  817.   #endif
  818. ***************
  819. *** 898,904 ****
  820.       }
  821.   }
  822.   
  823. ! #ifdef MSDOS
  824.   
  825.   /* MSDOS typically has ':' and '\\' separators, but some command
  826.     processors (and the int 21h function handler) support '/' too.
  827. --- 958,964 ----
  828.       }
  829.   }
  830.   
  831. ! #ifdef DOS
  832.   
  833.   /* MSDOS typically has ':' and '\\' separators, but some command
  834.     processors (and the int 21h function handler) support '/' too.
  835. ***************
  836. *** 915,918 ****
  837.       return(p);
  838.   }
  839.   
  840. ! #endif    /* MSDOS */
  841. --- 975,978 ----
  842.       return(p);
  843.   }
  844.   
  845. ! #endif    /* DOS */
  846. *** ../distribution/freeze.h    Fri Jan 31 21:07:24 1992
  847. --- freeze.h    Fri Dec  6 15:21:23 1991
  848. ***************
  849. *** 11,23 ****
  850. --- 11,48 ----
  851.   # endif
  852.   #endif  /* SUN4 */
  853.   
  854. + #if !defined(MSDOS) && defined(__MSDOS__)
  855. + #define MSDOS
  856. + #endif
  857. + #ifdef MSDOS
  858. + #define DOS
  859. + # include <fcntl.h>
  860. + #endif  /* MSDOS */
  861. + #ifdef TOS
  862. + #define DOS
  863. + #define O_TEXT        0x01
  864. + #define O_BINARY    0x02
  865. + #endif
  866.   #include <ctype.h>
  867.   #include <signal.h>
  868. + #ifndef TOS
  869.   #include <sys/types.h>
  870.   #include <sys/stat.h>
  871. + #else
  872. + #include <tos.h>
  873. + #include <types.h>
  874. + #endif
  875.   
  876.   #ifndef __TURBOC__
  877. + #ifdef UTIMES
  878. + #include <sys/time.h>
  879. + #else
  880.   #include <utime.h>      /* Some systems have sys/utime.h instead of this */
  881. + #endif /* UTIMES */
  882.   #endif
  883.   
  884.   #if defined(BSD42) && !defined(BSD4_2)
  885. ***************
  886. *** 46,61 ****
  887.   #include <assert.h>
  888.   #endif  /* DEBUG */
  889.   
  890. ! #ifdef __TURBOC__
  891. ! #define MSDOS
  892. ! #include <io.h>
  893. ! #include <alloc.h>
  894. ! #endif  /* __TURBOC__ */
  895.   
  896. ! #ifdef MSDOS
  897. ! #include <stdlib.h>
  898. ! #include <fcntl.h>
  899. ! #endif  /* MSDOS */
  900.   
  901.   typedef unsigned short us_t;
  902.   typedef unsigned char uc_t;
  903. --- 71,88 ----
  904.   #include <assert.h>
  905.   #endif  /* DEBUG */
  906.   
  907. ! #ifdef DOS
  908. ! # include <stdlib.h>
  909. ! #endif  /* DOS */
  910.   
  911. ! #ifdef __TURBOC__
  912. ! # ifdef MSDOS
  913. ! #  include <io.h>
  914. ! #  include <alloc.h>
  915. ! # else /* TOS */
  916. ! #  include <ext.h>
  917. ! # endif  /* MSDOS */
  918. ! #endif /* __TURBOC__ */
  919.   
  920.   typedef unsigned short us_t;
  921.   typedef unsigned char uc_t;
  922. *** ../distribution/makefile    Fri Jan 31 21:07:27 1992
  923. --- makefile    Thu Jan 30 19:50:51 1992
  924. ***************
  925. *** 9,19 ****
  926.           lz.h\
  927.           patchlevel.h
  928.   LDFLAGS       =
  929. ! LIBS          = -lc_s   # shared library
  930.   
  931. ! CC            = gcc
  932.   
  933. ! CFLAGS        = -DBITS=16 -O -DCOMPAT -DFAST -fstrength-reduce #-DBSD42 -DSUN4
  934.   
  935.   LINTFLAGS     = -DBITS=15 -DCOMPAT -DDEBUG -DGATHER_STAT -x -DFAST
  936.   
  937. --- 9,20 ----
  938.           lz.h\
  939.           patchlevel.h
  940.   LDFLAGS       =
  941. ! LIBS          = -lc_s   # shared library, if it's SysV
  942.   
  943. ! CC            = gcc -fstrength-reduce
  944. ! # or proprietary compiler, if it's better than that
  945.   
  946. ! CFLAGS        = -DBITS=16 -O -DCOMPAT -DFAST  # -DBSD42 -DSUN4
  947.   
  948.   LINTFLAGS     = -DBITS=15 -DCOMPAT -DDEBUG -DGATHER_STAT -x -DFAST
  949.   
  950. *** ../distribution/patchlevel.h    Fri Jan 31 21:07:28 1992
  951. --- patchlevel.h    Thu Jan 30 19:29:53 1992
  952. ***************
  953. *** 1,2 ****
  954. ! #define PATCHLEVEL 1
  955. ! #define PATCHDATE "11/20/91"
  956. --- 1,2 ----
  957. ! #define PATCHLEVEL 2
  958. ! #define PATCHDATE "1/30/92"
  959. *** ../distribution/statist.c    Fri Jan 31 21:07:30 1992
  960. --- statist.c    Fri Dec  6 00:30:53 1991
  961. ***************
  962. *** 51,59 ****
  963.       }
  964.       signal(SIGINT, giveres);
  965.   
  966. ! #ifdef MSDOS
  967.       setmode(fileno(stdin), O_BINARY);       /* Oh this MS-DOS ... */
  968. ! #endif  /* MSDOS */
  969.   
  970.       freeze();
  971.       giveres();
  972. --- 51,59 ----
  973.       }
  974.       signal(SIGINT, giveres);
  975.   
  976. ! #ifdef DOS
  977.       setmode(fileno(stdin), O_BINARY);       /* Oh this MS-DOS ... */
  978. ! #endif  /* DOS */
  979.   
  980.       freeze();
  981.       giveres();
  982.  
  983. --- cut here ---
  984. -- 
  985. Leonid A. Broukhis | 89-1-95 Liberty St. | "BROUKHIS" is Hebrew for
  986. +7 095 494 6241 (h)| Moscow 123481 Russia|       "BENEDICTAE"
  987. +7 095 132 9475 (o)| (leo@s514.ipmce.su) |    { Age: 9025 days }
  988.  
  989. exit 0 # Just in case...
  990.