diff options
100 files changed, 0 insertions, 22146 deletions
diff --git a/Build/source/utils/README b/Build/source/utils/README index ac6736b9e00..e2820fa99c4 100644 --- a/Build/source/utils/README +++ b/Build/source/utils/README @@ -13,9 +13,6 @@ asymptote 1.76 - checked 8jun09 dialog 1.1-20080819 - checked 20mar09 ftp://invisible-island.net/dialog/dialog.tar.gz -gzip - (old, not built) only here so we have the sources for the Windows - binaries we distribute. - pdfopen 0.5 - checked 26nov06 (really xpdfopen) http://tex.aanhet.net/pdfopen diff --git a/Build/source/utils/gzip/COPYING b/Build/source/utils/gzip/COPYING deleted file mode 100644 index a43ea2126fb..00000000000 --- a/Build/source/utils/gzip/COPYING +++ /dev/null @@ -1,339 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 675 Mass Ave, Cambridge, MA 02139, USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - Appendix: How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - <one line to give the program's name and a brief idea of what it does.> - Copyright (C) 19yy <name of author> - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) 19yy name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - <signature of Ty Coon>, 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/Build/source/utils/gzip/ChangeLog b/Build/source/utils/gzip/ChangeLog deleted file mode 100644 index 7dd0f865165..00000000000 --- a/Build/source/utils/gzip/ChangeLog +++ /dev/null @@ -1,587 +0,0 @@ -Wed Aug 18 09:34:23 1993 Jean-loup Gailly (jloup@chorus.fr) - - * version 1.2.4 - By default, do not restore file name and timestamp from those saved - inside the .gz file (behave as 'compress'). Added the --name option - to force name and timestamp restoration. - Accept - as synonym for stdin. - Use manlinks=so or ln to support either hard links or .so in man pages - Accept foo.gz~ in zdiff. - Added support for Windows NT - Handle ENAMETOOLONG for strict Posix systems - Use --recursive instead of --recurse to comply with Webster and - the GNU stdandard. - Allow installation of shell scripts with a g prefix: make G=g install - Install by default zcat as gzcat if gzcat already exists in path. - Let zmore behave as more when invoked without parameters (give help) - Let gzip --list reject files not in gzip format even with --force. - Don't complain about non gzip files for options -rt or -rl. - Added advice in INSTALL for several systems. - Added makefile entries for NeXTstep 3.1 (if configure fails) - Avoid problem with memcpy on Pyramid (gave crc error on some files) - Support the -r option when compiled with Borland C++ on msdos. - Force lower case file names only for FAT file systems (not HPFS) - Rewrite one expression in inflate.c to avoid cc bug on Solaris x86. - In the msdos makefiles, get match.asm from the msdos subdirectory. - Catch SIGTERM and SIGHUP only if they are not ignored. - getopt.c: on Amiga, "#if !defined(const)" does not compile. - Use register parameters on Amiga. - Do not force names to lower case on Amiga. - Fix support of Atari TOS (Makefile.st and tailor.h) - In unlzw.c, do not suggest using zcat if zcat already used. - In INSTALL, suggest using bsdinst for HPUX. - Document Turbo C++ 1.0 bug in INSTALL. - Improved the documentation relative to the --no-name option. - Avoid signed/unsigned warnings in several files. - Added pointer to jka-compr19.el in README. - Added pointer to OS/2 executables in README. - Added --block-compress in tar -z example (gzip.1 and gzip.texi). - Don't keep rcsid in executable (avoid compilation warnings). - Check also the correctness of the first byte of an .Z file. - Return non zero status for an invalid option. - Remove "NEWFILES" from os2/gzip.def for Borland C++ on OS/2. - Remove "time stamp restored" message (just obey the -N request). - -Thu Jun 24 10:27:57 1993 Jean-loup Gailly (jloup@chorus.fr) - - * version 1.2.3 - Don't display the output name when decompressing except with --verbose. - Remove usage of alloca in getopt.c and all makefiles. - Use ASCPP instead of CPP to avoid breaking AC_HEADER_CHECK on RiscOS. - Added the zfile shell script in subdirectory sample. - Moved the list of compiler bugs from README to INSTALL. - Added vms/Readme.vms. - Fix DIST_BUFSIZE check in unlzh.c for 16 bit machines. - Fix REGSIGTYP macro in configure.in. - Use 'define' instead of == in vms/gzip.hlp. - Avoid warnings in unlzh.c - Allow separate installation of binaries and man pages. - Simplified handling of file names with spaces in zgrep and znew. - Fix dependencies and remove rule for trees.c in amiga/Makefile.sasc - Add missing quote in gzexe. - -Thu Jun 17 13:47:05 1993 Jean-loup Gailly (jloup@chorus.fr) - - * version 1.2.2 - Fix a compilation error in gzip.c on Sun with cc (worked with gcc). - -Wed Jun 16 11:20:27 1993 Jean-loup Gailly (jloup@chorus.fr) - - * version 1.2.1 - Let zmore act as more if the data is not gzipped. - By default, display output name only when name was actually truncated. - Use absolute path names in gzexe'd programs for better security. - In gzexe, use chmod 700 instead of 755 and don't gzexe tail,rm,etc... - Update vms/gzip.hlp. - Added a note about the fast options (-1 to -3) in algorithm.doc. - Improved man page for zgrep. - Minor fixes to gzip.texi. - Always set LC_ALL and LANG in configure (for tr on HPUX) - -Mon Jun 14 10:03:24 1993 Jean-loup Gailly (jloup@chorus.fr) - - * version 1.2 - Added the --list option to display the file characteristics. - Added the --no-name option: do not save or restore original filename - Save the original name by default. - Allow gunzip --suffix "" to attempt decompression on any file - regardless of its extension if an original name is present. - Add support for the SCO compress -H format. - gzip --fast now compresses faster (speed close to that of compress) - with degraded compression ratio (but still better than compress). - Default level changed to -6 (acts exactly as previous level -5) to - be a better indication of its placement in the speed/ratio range. - Use smart name truncation: 123456789012.c -> 123456789.c.gz - instead of 12345678901.gz - With --force, let zcat pass non gzip'ed data unchanged (zcat == cat) - Added the zgrep shell script. - Made sub.c useful for 16 bit sound, 24 bit images, etc.. - Supress warnings about suffix for gunzip -r, except with --verbose. - Moved the sample programs to a subdirectory sample. - On MSDOS, use .gz extension when possible (files without extension) - Added a "Special targets" section in INSTALL. - Use stty -g correctly in zmore.in. - Use cheaper test for gzipness in zforce.in. - Remove space before $ in match.S (no longer accepted by gas 2.x) - For the shell scripts, do not assume that gzip is in the path. - Fix syntax error and define lnk$library in vms/Makefile.mms - REGSIGTYPE is void on the Amiga. - Do not write empty line when decompressing stdin with --verbose. - Fix the 1.1.2 fix for VMS (bug in get_suffix) - Added warning in README about compiler bug on Solaris 2.1 for x86. - Added warning about 'rehash' in INSTALL. - Removed default value of read_buf in bits.c (supermax doesn't like). - In tailor.h, added support for Borland C and Zortech C on OS/2. - Added warning in gzexe about Ultrix buggy sh (use /bin/sh5 instead). - Added warning in zdiff about AIX buggy sh (use /bin/ksh instead). - In configure.in, do not try the asm code if DEFS contains NO_ASM - -Fri Jun 4 09:49:33 1993 Jean-loup Gailly (jloup@chorus.fr) - - * version 1.1.2 - Fix serious bug for VMS (-gz not removed when decompressing). - Allow suffix other than .gz in znew. - Do not display compression ratio when decompressing stdin. - In zmore.in, work around brain damaged stty -g (Ultrix). - Display a correct compression ratio for .Z files. - Added .z to .gz renaming script in INTALL. - Allow setting CFLAGS in configure. - Add warning in README about bug in Concentrix cc compiler. - Avoid || in Makefile.in (at least one make doesn't support this). - Disable useless --ascii option for the Amiga. - Add a pointer to the Primos executable in README. - Added description of extra field in algorithm.doc. - Do not redefine NULL in alloca.c. - Added check for unsupported compression methods. - Avoid getopt redeclaration on OSF/1. - -Tue Jun 1 09:07:15 1993 Jean-loup Gailly (jloup@chorus.fr) - - * version 1.1.1 - Fix serious bug in vms.c (== instead of =). - Added --ascii option. - Add workaround in configure.in for Ultrix (quote eval argument) - Do not use unset in znew (not supported on Ultrix) - Use tar.gz instead of tar.z for the distribution of gzip. - Add missing menu item in gzip.texi. - Use size_t instead of unsigned, add AC_SIZE_T in configure.in. - -Fri May 28 11:40:01 1993 Jean-loup Gailly (jloup@chorus.fr) - - * version 1.1 - Use .gz suffix by default, add --suffix option. - Let gunzip accept a "_z" suffix (used by one 'compress' on Vax/VMS). - Quit when reading garbage from stdin instead of reporting an error. - Added sub.c and add.c for compression of 8 bit images. - Added makefile for VAX/MMS and support for wildcards on VMS. - Added support for MSC under OS/2. - Added support for Prime/PRIMOS. - Display compression ratio also when decompressing. - Quit after --version (GNU standard) - Use --force to bypass isatty() check. - Accept --silent as synonym for --quiet (see longopts.table) - Accept --to-stdout as synonym for --stdout (see longopts.table) - Accept -H and -? in addition to -h and --help. - Added comparison of zip and gzip in the readme file. - Return an error code in all main compression/decompression functions. - Continue processing other files in case of recoverable error. - Add description of -f in znew.1. - Do not keep uncompressed version for znew -t if .gz already exists. - On Unix, use only st_ino and st_dev in same_file(). - Use S_IRUSR and S_IWUSR if they exist. - "test $1 = -d" -> "test x$1 = x-d" in gzexe. - In match.S, use symbol sysV68 to detect the Motorola Delta. - Do not include memory.h with gcc (conflicting declarations on Sun). - Fix more typos. - On VMS, define unlink as delete also for gcc. - In "make check", unset LANG because "wc -c" fails on Kanji. - Renamed shdir as scriptdir. - Use the 68020 code instead of 68000 code on the NeXT. - Documented --uncompress as synonym for --decompress. - Include the standard header files before gzip.h (needed on Bull). - Do not assume that _POSIX_VERSION implies dirent.h present. - Removed gzip-tar.patch since tar 1.11.2 handles gzip directly. - Use less memory when compiled with -DSMALL_MEM (for MSDOS). - Optimized updcrc(). - Don't complain if cc -E does not work correctly. - Do not attempt reading 64K bytes on 16 bit Unix systems. - Do not use the variable name 'overhead' which is reserved on Lynx! - One BULL compiler does not like *p++ in inflate.c => *p, p++. - Use casts on free and memcmp to avoid warnings. - Remove the "off by more than one minute" time stamp kludge, but - document how to avoid saving the time stamp on pipes if desired. - Include crypt.h in inflate.c (one system predefines the CRYPT symbol). - Add links to gunzip and (g)zcat in the default make rule. - Create installation directories if they do not exist. - Clarified --prefix option in INSTALL. - Use symbol mc68k in match.S for the DIAB DS90. - Guard against zero length _match.s in configure.in. - In zmore, restore all tty options using stty -g. - Added support for MacOS - Simplified makecrc.c. - Avoid warnings in getopt.c, util.c, unlzw.c. - Use autoconf 1.4, in particular for INSTALL and AC_HAVE_POUNDBANG - Use .so instead of hard links for zcat.1, gunzip.1 and zcmp.1. - Fixed declration of sig_type. - Make consistency check in fcfree. - Added ztouch. - Do not complain if utime fails on a directory (for OS/2). - -Thu Mar 18 18:56:43 1993 Jean-loup Gailly (jloup@chorus.fr) - - * version 1.0.7 - Allow zmore to read from standard input (like more). - Support the 68000 (Atari ST) in match.S. - Retry partial writes (required on Linux when gzip is suspended in - a pipe). - Allow full pathnames and renamings in gzexe. - Don't let gzexe compress setuid executables or gzip itself. - Added vms/Makefile.gcc for gcc on the Vax. - Give a pointer to Solaris and VMS executables of gzip in README. - Allow installation of binaries and shell scripts in different dirs. - Do not use alloca on the Cray. - Provide strspn and strcspn if string.h does not exist. - Define O_CREAT and O_EXCL from FCREAT and FEXCL if necessary. - Remove gzip.doc in make realclean. - Fixed many typos. (Corrections to my English are welcome.) - Put "make manext=l install" at the correct place in INSTALL. - Fix incorrect examples in INSTALL and give more examples. - Include zdiff.1 for install and uninstall. - Allows complex PAGER variable in zmore (e.g.: PAGER="col -x | more") - Avoid warning on unused indfound in getopt.c. - Cast memset arg to void* (required by some buggy compilers). - Include sys/types.h before dirent.h in acgeneral.m4. - Fix acgeneral.m4 AC_COMPILE_CHECK to avoid warnings. - Don't use alloca.c with gcc. (One NeXT user did not have alloca.h). - Change all error messages according to GNU standards. - Restore time stamp only if off by more than one minute. - Allow installation of zcat as gzcat. - Suppress help message and send compressed data to the terminal when - gzip is invoked without parameters and without redirection. - (Explicit request from Noah Friedman.) - Add compile option GNU_STANDARD to respect the GNU coding standards: - with -DGNU_STANDARD, behave as gzip even if invoked under the - name gunzip. (Complaints to /dev/null or the FSF, not to me!) - -Fri Mar 10 13:27:18 1993 Jean-loup Gailly (jloup@chorus.fr) - - * version 1.0.6 - Let gzexe detect executables that are already gzexe'd. - Don't try restoring record format on VMS (the simple 1.0.5 code - worked correctly only on fixed-512 files). Suppress text_mode. - Added asm version for 68000 in amiga/match.a. - Use asm version for Atari TT. - Fix "make clean" in vms/Makefile.vms. - For OS/2, assume HPFS by default, add flag OS2FAT if necessary. - Fixed some bugs in zdiff and define zcmp as a link to zdiff. - Added zdiff.1 - Remove configure hack for NeXT; add general fix to autoconf instead - Do not strip a ".z" extension if this results in an empty name. - Avoid array overflow in get_prefix() for extensions > 10 chars. - Accept either q or e to quit zmore. - In zmore, try restoring tty mode in all cases. - Use Motorola style for match.S on the NeXT. - configure.in: unsetenv *hangs* with the Siemens csh... - Update vms/gzip.hlp. - -Thu Mar 4 14:13:34 1993 Jean-loup Gailly (jloup@chorus.fr) - - * version 1.0.5 - For VMS, restore the file type for variable record format, otherwise - extract in fixed length format (not perfect, but better than - forcing all files to be in stream_LF format). - Use "-z" suffix for VMS. - Use only .z, .*-z, .tgz, .taz as valid gzip extensions; update - zforce accordingly. - Allow a version number in input file names for VMS. - Added sample program zread.c. - Fix "make check" for some implementations of /bin/sh. - Don't rely on stat() for filenames with extension > 3 chars - on MSDOS, OS2 and Atari. - Garbage collect files in /tmp created by gzexe. - Quote $opt in znew. - Use TOUCH env variable in znew if it exists. - Better error message for gunzip on empty or truncated file. - Allow prototypes in getopt.h when __STDC__ defined but 0. - Added "make clean" in vms/Makefile.vms. - Removed -g from default CFLAGS (with Noah's permission!) - Avoid too many HAVE_xxx_H for most systems; use common defaults. - Moved default Atari flags into tailor.h for consistency. - Use memzero() to clear the hash table. - Update vms/gzip.hlp to reflect the VMS behavior. - Fix OS_CODE (to fit in a byte). - Add utime.h for the Amiga. - Add gcc support for the Amiga. - Work around incorrect dirent.h for NeXT 2.0. - Added Makefile entry for Coherent. - -Fri Feb 22 11:20:49 1993 Jean-loup Gailly (jloup@chorus.fr) - - * version 1.0.4 - Added optimized asm version for 68020. - Add support for DJGPP. - Add support for the Atari ST. - Added zforce to rename gzip'ed files with truncated names. - Do not install with name uncompress (some systems rely on the - absence of any check in the old uncompress). - Added missing function (fcfree) in msdos/tailor.c - Let gunzip handle .tgz files, and let gzip skip them. - Added 'stty min 1' in zmore for SysV and fixed trap code. - Suppress .PHONY in Makefile.in, which breaks old makes. - Added documentation about pcat and unpack in INSTALL. - Add cast to getenv for systems without stdlib.h. - Use VAXC instead of VMS to avoid confusion for gcc. - Add -K to znew.1. - Add gzexe.1. - Try preserving file permissions in gzexe. - Added -d option for gzexe. - Guard against spaces in file names in gzexe. - Use CMP env. variable in zcmp. - Return a warning exit status for gzip of file with .z suffix. - Suppress usage of d_ino which is not portable to all systems. - Use #ifdef instead of #if for consistency. - For VMS, use "cc util.c" instead of "cc util" (pb with logical names) - Added utime() for Amiga. - Renamed gzcat.1 as zcat.1. - Include fcntl.h for Amiga (for read and write). - For VMS, add definition of symbols and links in the makefiles. - Give a VMS look to vms/gzip.hlp. - Save the original name only when necessary. - Add a mode parameter for open in read mode (required by VMS). - For VMS, remove the version suffix from the original name. - Accept both / and \ as path separator for MSDOS. - Let gunzip extract stored .zip files correctly. - Added warning about VFC format in vms/gzip.hlp. - In znew, skip a bad file but process the others. - Cleanup tailor.h. - Use GZIP_OPT for VMS to avoid conflict with program name. - Added description of GZIP variable in gzip.texi. - -Thu Feb 11 17:21:32 1993 Jean-loup Gailly (jloup@chorus.fr) - - * version 1.0.3 - Add -K option for znew to keep old .Z files if smaller. - Add -q option (quiet) to cancel -v in GZIP env variable. - For Turbo C, normalize pointers before freeing them. - Add more safety checks in add_envopt(). - Add do_exit() for uniform exit path (always free memory). - Reduce MAX_PATH_LEN for MSDOS. - Include sys/types.h before signal.h - Avoid strdup, the NeXT does not have it. - Made gzexe safer on systems with filename limitation to 14 chars. - -Fri Feb 10 09:45:49 1993 Jean-loup Gailly (jloup@chorus.fr) - - * version 1.0.2 - Added env variable GZIP for default options. - Added support for the Amiga. - znew now keeps the old .Z if it is smaller than the .z file. - Added gzexe to compress rarely used executables. - Reduce memory usage when using static allocation (no DYN_ALLOC). - Better separation of warning and error return codes. - Fix unlzw.c to make DYN_ALLOC and MAXSEG_64K independent options. - Allow INBUFSIZ to be >= 32K in unlzw (don't use sign of rsize) - Generate tar file in old format to avoid problems with old systems. - Preserve time stamp in znew -P if touch -r works. - Use ${PAGER-more} instead of ${PAGER:-more} in zmore. - Do not use unsigned instead of mode_t. - Better error message for trailing garbage in .z file; ignore this - garbage on VMS. - In zmore, use icanon instead of -cbreak on SYSV. - Add trap handler in zmore. - Use char* instead of void* for non STDC compilers. - Added makefile entry for Xenix on 286. - Return an error code when existing file was not overwritten. - Use prototype of lzw.h for lzw.c. - Fix znew with -P option alone. - Give warning for directories even without -v. - Close output file before unlink() in case of error. - Suppress all target dependent ifdef from the portable files. - Free all dynamically allocated variables upon exit. - -Thu Feb 4 18:23:56 1993 Jean-loup Gailly (jloup@chorus.fr) - - * version 1.0.1 - Fixed some trivial errors in msdos/Makefile.bor - -Thu Feb 4 10:00:59 1993 Jean-loup Gailly (jloup@chorus.fr) - - * version 1.0 - gzip now runs on Vax/VMS (Amiga support will come in next version). - Do not overwrite files without -f when using /bin/sh. - Support the test option -t for compressed (.Z) files. - Flush output for bad compressed files. Add warning in README. - Added makefiles for MSDOS. - Don't rely on presence of csh in configure - Added gunzip.1 and gzcat.1. - Updated znew.1. - Check reserved flags in unlzw(). - Return dummy value in main to avoid lint warning. - Define OF in lzw.h for lint. - Allow both "znew -v -t" and "znew -vt". - Don't overwrite the output file name for multiple parts. - Echo just a warning if configure is out of date. - Use ; instead of , in trees.c (confuses the SAS Amiga compiler). - In INSTALL, document "DEFS='-DM_XENIX' ./configure". - Use OTHER_PATH_SEP for more portability (DOS, OS2, VMS, AMIGA). - Make all directories world writable for broken versions of tar. - Use gzip -cd instead of zcat in zmore, zcmp, zdiff. - Don't use GNU tar for distributions, some systems can't untar. - Do not exit() for gzip --version. - -Mon Jan 26 10:26:42 1993 Jean-loup Gailly (jloup@chorus.fr) - - * Beta version 0.8.2 - Avoid 'far' declarations for MSDOS. - Use test -f instead of test -x in configure.in (for Ultrix) - Add empty else part to if in Makefile.in for broken shells. - Use NO_UNDERLINE instead of UNDERLINE (pb with Linux cpp) - Accept continuation files with -ff (for damage recovery) - Small patch to Makefile.os2 - Use memzero instead of bzero to avoid potential conflicts - Document restriction on extraction of zip files. - Fix quoting in ACL_HAVE_SHELL_HACK. - Do not check file size on MSDOS because of bug in DIET. - Allow zcat on a file with multiple links. - Add fix in inflate.c for compatibility with pkzip 2.04c. - Release gzip in tar.z and tar format. (No tar.Z). - -Fri Jan 22 10:04:13 1993 Jean-loup Gailly (jloup@chorus.fr) - - * Beta version 0.8.1 - Fixed Makefile.os2 - Fixed #if directives that TurboC does not like. - Don't rely on uncompress in znew, use gzip -d. - Add the pipe option -P in znew. - Add some more ideas in TODO. - Support both NDIR and SYSNDIR. - -Sat Jan 21 15:46:38 1993 Jean-loup Gailly (jloup@chorus.fr) - - * Beta version 0.8 - Support unpack. - Check for _match.o in configure.in in addition to return status. - Include <sys/types.h> in zip.c - Define local variables and functions as local. - Accept more alternative names for the program (pcat, gzcat, ...). - Accept .exe as well as .EXE. - Uncompress files with multiple links only with -f. - Better error message for gunzip of non-existent file.z. - Fix the entry for /etc/magic in INSTALL. - Use AC_HAVE_HEADERS uniformly instead of special macros. - Install the man pages as .1 by default instead of .l. - Document crypt++.el in README. - Fix for unlzw() on 16-bit machines (bitmask must be unsigned). - Complain if input and output files are identical. - Create a correct output name for files of exactly 13 chars. - Do not overwrite CPP if set - Check for i386 before trying to assemble match.s - Check for underline in external name before assembling - Add patch for tar 1.11.1. - -Mon Jan 5 10:16:24 1993 Jean-loup Gailly (jloup@chorus.fr) - - * Beta version 0.7 - Use "make check" instead of "make test". - Do not rely on dirname in znew. - Keep time stamp and pass options to gzip in znew. - Rename .l files back to .1 to avoid conflict with lex - Do not create .z.z files with gzip -r. - Use nice_match in match.asm - Unroll loops in deflate.c - Do not attempt matches beyond the window end - Allow again gunzip .zip files (was working in 0.5) - Allow again compilation with TurboC 2.0 (was working in 0.4) - -Tue Dec 30 20:00:19 1992 Jean-loup Gailly (jloup@chorus.fr) - - * Beta version 0.6 - The .z extension is used by pack, not compact (README, gzip.1) - Accept gzcat in addition to zcat. - Use PAGER in zmore if defined. - Man pages for /usr/local/man/manl should have extension .l. - Don't redefine bzero on the NeXT - Allow incomplete Huffman table if there is only one code. - Don't lookahead more than 7 bits (caused premature EOF). - Added "make test" to check for compiler bugs. - Don't rely on `i386`; try to assemble directly - Change magic header to avoid conflict with freeze 1.x. - Added entry for /etc/magic in INSTALL. - Do not destroy an input .zip file with more than one member. - Display "untested" instead of "OK" for gzip -t foo.Z - With -t, skip stdin in .Z format - Allow multiple compressed members in an input file. - Ignore a zero time stamp. - Made znew safer. - -Tue Dec 29 10:00:19 1992 Noah Friedman (friedman@gnu.ai.mit.edu) - - Added test for #!/bin/sh in configure.in. - Fix some references to $srcdir in Makefile.in - -Mon Dec 21 17:33:35 1992 Jean-Loup Gailly (jloup@chorus.fr) - - * Beta version 0.5 - Put RCS ids in all files. - Added znew to recompress old .Z files with gzip. - Avoid "already .z suffix" messages for -r and no -v. - Put back check for d_ino in treat_dir(). - Use HAVE_STRING_H instead of USG. - Added os2/Makefile.os2 - Use SYSUTIME on OS/2. - Info dir is $(prefix)/info, not $(prefix)/lib/info. - Support long options, added getopt and alloca - Support -V and -t - Reorder configure.in according to suggestions in autoconf.info - Allow links when not removing original file - Allow either .z or .Z in zdiff - -Wed Nov 25 11:40:04 1992 Jean-loup Gailly (jloup@chorus.fr) - - * Beta version 0.4.1 - Save only the original base name, don't include any directory prefix. - Don't use HAVE_LONG_FILE_NAMES (support multiple file system types). - Fix declaration of abort_gzip in gzip.h. - Include unistd.h when it exists to avoid warnings with gcc -Wall. - -Mon Nov 23 12:39:01 1992 Jean-loup Gailly (jloup@chorus.fr) - - * Beta version 0.4 - Lots of cleanup - Use autoconf generated 'configure' - Fixed the NO_MULTIPLE_DOTS code - Fixed the save_orig_name code - Support for MSDOS (Turbo C) - -Thu Nov 19 15:18:22 1992 Jean-loup Gailly (jloup@chorus.fr) - - * Beta version 0.3 - Added auto configuration. Just type "make" now. - Don't overwrite compress by default in "make install". Use - "make install_compress" to overwrite. - Add match.s for 386 boxes. - Added documentation in texinfo format. - Provide help for "gunzip" invoked without redirected input. - Save original file name when necessary. - Support OS/2 (Kai-Uwe Rommel). - -Tue Nov 17 14:32:53 1992 Jean-loup Gailly (jloup@chorus.fr) - - * Alpha version 0.2.4 - Return 0 in get_istat() when ok (caused error with zcat). - Don't update crc on compressed data (caused crc errors on - large files). - -Fri Nov 13 15:04:12 1992 Jean-loup Gailly (jloup@chorus.fr) - - * Alpha version 0.2.3 - Initialize rsize in unlzw.c - Initialize ofd for zcat. - Do not use volatile ifname as argument of treat_dir. - Add -1 to -9 in gzip.1. - -Sat Oct 31 18:30:00 1992 Jean-loup Gailly (jloup@chorus.fr) - - * Alpha version 0.2.2. - Fix error messages. - Accept gunzip on zip files. - -Sat Oct 31 17:15:00 1992 Jean-loup Gailly (jloup@chorus.fr) - - * Alpha version 0.2.1 - Use ctype.h in util.c (problem on SysV). - Create BINDIR if it does not exist. - Use cc by default. - Added zcmp, zmore, zdiff. - Fixed the man page gzip.1. - -Sat Oct 31 17:00:00 1992 Jean-loup Gailly (jloup@chorus.fr) - - * Alpha version 0.2 - Fixed compilation problems with gcc - -Sat Oct 31 12:46:00 1992 Jean-loup Gailly (jloup@chorus.fr) - - * Alpha version 0.1 released (under time pressure), so it's not - much tested, sorry. - diff --git a/Build/source/utils/gzip/INSTALL b/Build/source/utils/gzip/INSTALL deleted file mode 100644 index b20116541d5..00000000000 --- a/Build/source/utils/gzip/INSTALL +++ /dev/null @@ -1,273 +0,0 @@ -This is a generic INSTALL file for utilities distributions. -Some features specific to gzip have been added. - -To compile this package: - -1. Configure the package for your system. In the directory that this -file is in, type `./configure'. If you're using `csh' on an old -version of System V, you might need to type `sh configure' instead to -prevent `csh' from trying to execute `configure' itself. If you -are using Ultrix, you might need to type `sh5 configure' to avoid -bugs in /bin/sh. Note that 'sh -x configure' may give different results -than 'sh configure', making it difficult to debug configure scripts. - -The `configure' shell script attempts to guess correct values for -various system-dependent variables used during compilation, and -creates the Makefile(s) (one in each subdirectory of the source -directory). In some packages it creates a C header file containing -system-dependent definitions. It also creates a file `config.status' -that you can run in the future to recreate the current configuration. - -Running `configure' takes a minute or two. While it is running, it -prints some messages that tell what it is doing. If you don't want to -see the messages, run `configure' with its standard output redirected -to `/dev/null'; for example, `./configure >/dev/null'. - -To compile the package in a different directory from the one -containing the source code, you must use a version of `make' that -supports the VPATH variable, such as GNU `make'. `cd' to the directory -where you want the object files and executables to go and run -`configure'. `configure' automatically checks for the source code in -the directory that `configure' is in and in `..'. If for some reason -`configure' is not in the source code directory that you are -configuring, then it will report that it can't find the source code. -In that case, run `configure' with the option `--srcdir=DIR', where -DIR is the directory that contains the source code. - -By default, `make install' will install the package's files in -/usr/local/bin, /usr/local/lib, /usr/local/man, etc. You can specify an -installation prefix other than /usr/local by giving `configure' the option -`--prefix=PATH'. Alternately, you can do so by consistently giving a value -for the `prefix' variable when you run `make', e.g., - make prefix=/usr/gnu - make prefix=/usr/gnu install - -You can specify separate installation prefixes for -architecture-specific files and architecture-independent files. If -you give `configure' the option `--exec-prefix=PATH' or set the -`make' variable `exec_prefix' to PATH, the package will use PATH as -the prefix for installing programs and libraries. Data files and -documentation will still use the regular prefix. Normally, all files -are installed using the regular prefix. - -Another `configure' option is useful mainly in `Makefile' rules for -updating `config.status' and `Makefile'. The `--no-create' option -figures out the configuration for your system and records it in -`config.status', without actually configuring the package (creating -`Makefile's and perhaps a configuration header file). Later, you can -run `./config.status' to actually configure the package. You can also -give `config.status' the `--recheck' option, which makes it re-run -`configure' with the same arguments you used before. This option is -useful if you change `configure'. - -`configure' ignores any other arguments that you give it. - -If your system requires unusual options for compilation or linking -that `configure' doesn't know about, you can give `configure' initial -values for some variables by setting them in the environment. In -Bourne-compatible shells, you can do that on the command line like -this: - CC='gcc -traditional' DEFS=-D_POSIX_SOURCE ./configure - -For csh compatible shells, you can do something like this: - - (setenv CC 'gcc -traditional' ; ./configure) - -The `make' variables that you might want to override with environment -variables when running `configure' are: - -(For these variables, any value given in the environment overrides the -value that `configure' would choose:) -CC C compiler program. - Default is `cc', or `gcc' if `gcc' is in your PATH. -INSTALL Program to use to install files. - Default is `install' if you have it, `cp' otherwise. - If you have an non-standard `install', use INSTALL="cp -p" - -(For these variables, any value given in the environment is added to -the value that `configure' chooses:) -DEFS Configuration options, in the form `-Dfoo -Dbar ...' -CFLAGS Compiler options, such as `-O -g ...' -LIBS Libraries to link with, in the form `-lfoo -lbar ...' - -If you need to do unusual things to compile the package, we encourage -you to figure out how `configure' could check whether to do them, and -mail diffs or instructions to the address given in the README so we -can include them in the next release. - -2. Type `make' to compile the package. If you want, you can override -the `make' variables CFLAGS and LDFLAGS like this: - - make CFLAGS=-O2 LDFLAGS=-s - -3. The package comes with self-tests. If you want to run them, -type `make check'. - -4. Type `make install' to install programs, data files, and -documentation. This creates links between gzip, gunzip and zcat. -You can create additional links uncompress, ungzip and gzcat if -you prefer these names. You can also create links to unpack and pcat -if your system uses packed files by default and you want to transform -them transparently to gzip'ed files. - -If you wish to use only the name gzcat and not overwrite an existing zcat, use: - - make ZCAT=gzcat install - -The man pages are installed by default with an extension `.1' (one). -If you want the extension `.l' (lower case L) use: - - make manext=l install - -If you are using csh or tcsh, you must type `rehash' after `make install' -to make sure that the command `gzip' will invoke the new executable. - -5. You can remove the program binaries and object files from the -source directory by typing `make clean'. To also remove the -Makefile(s), the header file containing system-dependent definitions -(if the package uses one), and `config.status' (all the files that -`configure' created), type `make distclean'. - -The file `configure.in' is used as a template to create `configure' by -a program called `autoconf'. You will only need it if you want to -regenerate `configure' using a newer version of `autoconf'. - -6. You can add the following lines to your /etc/magic file so that -file(1), if your system supports it, will recognize files created by -gzip: - -0 string \037\213 gzip compressed data ->2 byte 8 - deflate method ->3 byte &0x1 , ascii ->3 byte &0x2 , continuation ->3 byte &0x4 , extra field ->3 byte &0x8 , original file name ->3 byte &0x10 , comment ->3 byte &0x20 , encrypted ->8 byte 2 , max compression ->8 byte 4 , max speed - -If your version of 'file' does not accept octal numbers in strings, replace the -first line with one of these: - -0 short 0x8b1f gzip compressed data -0 short 0105437 gzip compressed data - -0 short 0x1f8b gzip compressed data -0 short 017613 gzip compressed data - -Use the first or second form if your machine is a 386 or a Vax or a -MIPS configured in little-endian mode or any other little-endian -machine. Use the third or fourth form on big-endian machines. -On some systems, the field separators must contain only tabs (no spaces). - -7. To rename .z files with the new .gz suffix, you can use or adapt - the following shell script: - -#!/bin/sh -find . -name '*.z' -type f -print | while read i -do - new=`echo "$i" | sed 's/\.z$/.gz/'` - mv "$i" "$new" || echo Failed renaming $i to $new -done - -If you wish to keep the old .z suffix as default without setting the -GZIP environment variable to "--suffix .z", you can compile gzip with: - - make CFLAGS='-DZ_SUFFIX=\".z\"' - - -8. Special targets - -- For MSDOS, OS/2, VMS, Atari, Amiga, Primos, use the makefile or command - file provided in the appropriate subdirectory. For Turbo C++ 1.0, read - the warning at the top of Makefile.bor. - -- On some systems memcpy() may not work as expected. (Problem found on - Pyramid only so far.) If you get "crc error" on some .gz files, add - -DNOMEMCPY to CFLAGS and recompile inflate.o. For example: - rm -f inflate.o - make CFLAGS="-O2 -DNOMEMCPY" - - The memcpy problem affects only gunzip, not gzip. You can safely define - -DNOMEMCPY on all systems, but this may degrade performance of gunzip. - -- If your system is a pure BSD system but incorrectly links string.h to - strings.h, you may get undefined mem* and str* symbols. Try recompiling with - - make clean - make CFLAGS="-DNO_STRING_H" - -- On some systems (reported on Dec Ultrix), "cc -E" and /lib/cpp behave - differently. If you have trouble with the default configuration, try: - - CPP=/lib/cpp ./configure - make clean - make - -- On Ultrix, /bin/sh is too buggy. Use "sh5 configure" instead of "configure". - -- On Mips Dec Ultrix, gunzip behaves non-deterministically with regard - to some .gz files. The same command either succeeds or gives a CRC error. - This problem is still being investigated. The files produced by gzip - are correct (can reliably be extracted on other systems). - -- On Xenix, some preprocessors do not define M_XENIX. You may have to do: - - DEFS='-DM_XENIX' ./configure - -- On Xenix 2.3.2 for 286, do: make xenix_286 - -- On Coherent, do: make coherent - -- On NeXTstep 3.1, many people (but not all) have had trouble with - configure. Try first - - (setenv DEFS -DNO_UTIME_H; ./configure) - make test - - If this fails, then try "make next". configure should work correctly - on NeXTstep versions up to 3.0. - - To build a gzip package that can run on either the m68k or i386 family, - use configure then "make next-fat". - - On some versions of NeXT, either "cc -finline-functions" or "cc -O4" - is broken. gzip produces valid .gz files but they are much too large - because the string matching code misses most matches. Use "cc -O" instead. - -- There is an optimization bug in the IRIX 4.0.5 IDO 4.1 assembler which is - triggered by GCC -O. IDO 4.1.1 should fix this. If you have to use IDO 4.1 - then you can avoid the bug in one of the following ways: - - 1. Use SGI CC - 2. Add the -noasmopt flag to GCC - 3. Reconfigure GCC with the "mips-sgi-irix4loser" target which effectively - does the same as specifying "-noasmopt" all by default. - 4. Don't use -O at all with GCC. - -- On Solaris 2.1 for x86, the January 1993 "OEM" compiler release - generates bad code. This is fixed in the June 1993 "FCS" release. - -- on Sparc with SunOS 4.1.1 and the SC1.0 compiler, the optimizer - works up to -O3 but -O4 does not work. - -- MSC 5.1 with -Ox and -DDYN_ALLOC generates bad code in inflate.c. - The default is static allocation (no DYN_ALLOC) and -Ox works on inflate.c. - But -Ox does not work on util.c and unlzh.c, so you must use -Oait -Gs. - -- The exit() function in Turbo C++ 1.0 seems to be broken. gzip crashes - even if exit(0) is the first statement in main(). The problem is avoided - by adding -Dexit=_exit to CFLAGS in Makefile.bor. - -- On dnix 5.3 2.2 cc version 2.37c is buggy. Version 2.38d works. - -- On an Alliant running Concentrix, cc (even without optimization) generates - incorrect code. You have to use gcc. - -- On Cray running CSOS 1.0 with compiler version dev-125, you must compile - with the flag "-hnoopt" to avoid an optimizer bug. - -- On HPUX, configure can't find a correct install. Use: - - INSTALL=/usr/local/bin/bsdinst ./configure diff --git a/Build/source/utils/gzip/Makefile.in b/Build/source/utils/gzip/Makefile.in deleted file mode 100644 index 40906a2be81..00000000000 --- a/Build/source/utils/gzip/Makefile.in +++ /dev/null @@ -1,386 +0,0 @@ -# Makefile for gzip (GNU zip) -*- Indented-Text -*- -# Copyright (C) 1992-1993 Jean-loup Gailly and the Free Software Foundation - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -# $Id: Makefile.in,v 0.23 1993/06/24 11:51:47 jloup Exp $ - -#### Start of system configuration section. #### - - -srcdir = @srcdir@ -VPATH = @srcdir@ - -CC = @CC@ -ASCPP = @ASCPP@ - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ - -# Things you might add to DEFS (configure usually figures out what to do): -# -DGNU_STANDARD Behave as gzip even if invoked as gunzip (GNU standard) -# -DDIRENT Use <dirent.h> for recursion (-r) -# -DSYSDIR Use <sys/dir.h> for recursion (-r) -# -DSYSNDIR Use <sys/ndir.h> for recursion (-r) -# -DNDIR Use <ndir.h> for recursion (-r) -# -DSTDC_HEADERS Use <stdlib.h> -# -DHAVE_UNISTD_H Use <unistd.h> -# -DNO_FCNTL_H Don't use <fcntl.h> -# -DNO_UTIME_H Don't use <utime.h> -# -DHAVE_SYSUTIME_H Use <sys/utime.h> -# -DNO_MEMORY_H Don't use <memory.h>. Not needed if STDC_HEADERS. -# -DNO_STRING_H Use strings.h, not string.h. Not needed if STDC_HEADERS -# -DRETSIGTYPE=int Define this if signal handlers must return an int. -# -DNO_SYMLINK OS defines S_IFLNK but does not support symbolic links -# -DNO_MULTIPLE_DOTS System does not allow file names with multiple dots -# -DNO_UTIME System does not support setting file modification time -# -DNO_CHOWN System does not support setting file owner -# -DNO_DIR System does not support readdir() -# -DPROTO Force function prototypes even if __STDC__ not defined -# -DASMV Use asm version match.S -# -DMSDOS MSDOS specific -# -DOS2 OS/2 specific -# -DVAXC Vax/VMS with Vax C compiler -# -DVMS Vax/VMS with gcc -# -DDEBUG Debug code -# -DDYN_ALLOC Use dynamic allocation of large data structures -# -DMAXSEG_64K Maximum array size is 64K (for 16 bit system) -# -DRECORD_IO read() and write() are rounded to record sizes. -# -DNO_STDIN_FSTAT fstat() is not available on stdin -# -DNO_FSTAT fstat() is not available -# -DNO_SIZE_CHECK stat() does not give a reliable file size - -DEFS = @DEFS@ -LIBS = @LIBS@ - -# additional assembly sources for particular systems may be required. -OBJA = @OBJA@ - -SEDCMD = @SEDCMD@ - -CFLAGS = @CFLAGS@ -# If you want debug on by default, use: CFLAGS="-g" ./configure -LDFLAGS = $(CFLAGS) - -G=@G@ -# To install znew, zmore, etc... as gznew, gzmore... use: G=g - -ZCAT=@ZCAT@ -# To install zcat executable and man page as gzcat, use: ZCAT=gzcat - -X= -# For OS/2 or MSDOS, use: X=.exe - -O=.o -# For OS/2 or MSDOS, use: O=.obj - -prefix = /usr/local -exec_prefix = $(prefix) - -bindir = $(exec_prefix)/bin -scriptdir = $(bindir) -# scriptdir is the directory in which shell scripts should be installed -datadir = $(prefix)/lib -libdir = $(prefix)/lib -infodir = $(prefix)/info - -# Extension (not including `.') for the installed manual page filenames. -manext = 1 -# Where to install the manual pages. -mandir = $(prefix)/man/man$(manext) -# Use manlinks=so to use the .so method instead of hard links -manlinks = ln - -alldirs = $(bindir) $(scriptdir) $(datadir) $(libdir) $(infodir) $(mandir) - -#### End of system configuration section. #### - -SHELL = /bin/sh - -LOADLIBES = $(LIBS) - -TAR = tar - -SRCS = gzip.c zip.c deflate.c trees.c bits.c unzip.c inflate.c util.c crypt.c\ - lzw.c unlzw.c unpack.c unlzh.c getopt.c match.S - -OBJS = gzip$O zip$O deflate$O trees$O bits$O unzip$O inflate$O util$O \ - crypt$O lzw$O unlzw$O unpack$O unlzh$O getopt$O $(OBJA) - -HDRS = gzip.h lzw.h tailor.h revision.h crypt.h getopt.h - -GENFILES = README NEWS INSTALL Makefile.in configure.in configure COPYING \ - TODO THANKS ChangeLog $(SRCS) $(HDRS) zmore.in znew.in zdiff.in zgrep.in \ - zforce.in gzexe.in gzip.1 zdiff.1 zgrep.1 zmore.1 znew.1 gzexe.1 zforce.1 \ - gzip.doc algorithm.doc gzip.texi texinfo.tex gpl.texinfo gzip.info - -sampleFILES = sample/makecrc.c sample/zread.c sample/add.c sample/sub.c \ - sample/ztouch sample/zfile - -msdosFILES = msdos/tailor.c msdos/match.asm msdos/gzip.prj msdos/doturboc.bat \ - msdos/Makefile.msc msdos/Makefile.bor msdos/Makefile.djg - -os2FILES = os2/Makefile.os2 os2/gzip.def os2/gzip16.def - -ntFILES = nt/Makefile.nt - -vmsFILES = vms/Readme.vms vms/Makefile.vms vms/Makefile.gcc vms/makegzip.com \ - vms/Makefile.mms vms/vms.c vms/gzip.hlp - -amigaFILES = amiga/Makefile.sasc amiga/Makefile.gcc amiga/tailor.c \ - amiga/utime.h amiga/match.a - -atariFILES = atari/Makefile.st - -primosFILES = primos/readme primos/primos.c primos/ci.opts \ - primos/build.cpl primos/include/errno.h primos/include/fcntl.h \ - primos/include/stdlib.h primos/include/sysStat.h primos/include/sysTypes.h - -DISTFILES = $(GENFILES) $(sampleFILES) $(msdosFILES) $(os2FILES) $(ntFILES)\ - $(vmsFILES) $(amigaFILES) $(atariFILES) $(primosFILES) - -SCRIPTS = $(G)zdiff $(G)zgrep $(G)zmore $(G)znew $(G)zforce gzexe - -.c$O: - $(CC) -c $(DEFS) $(CFLAGS) $< - -#.PHONY: default all force test check - -default: gzip$X -all: gzip$X $(G)zdiff $(G)zgrep $(G)zmore $(G)znew $(G)zforce gzexe -force: - -#### Start of specific targets section. #### -# -# 'configure' works only on Unix systems. For other systems able to make -# sense of this makefile, you can define target specific entries here. -# For other systems such as MSDOS, separate Makefiles are -# provided in subdirectories. - -# NeXT 2.x, 3.0, 3.1 thin. For gcc, replace -bsd with -D__STRICT_BSD__. -next: - $(MAKE) all CFLAGS="-O -bsd -DASMV" \ - DEFS="-DNO_STDLIB_H -DNO_STRING_H -DNO_UTIME_H -DSYSDIR -DRETSIGTYPE=int" - -# NeXT 3.1 fat (68k + 386). For gcc, replace -bsd with -D__STRICT_BSD__. -next-fat: - $(MAKE) all OBJA=match-next.o \ - CFLAGS="-O2 -bsd -DASMV -fno-builtin -arch m68k -arch i386" \ - DEFS="-DNO_STDLIB_H -DNO_STRING_H -DNO_UTIME_H -DSYSDIR -DRETSIGTYPE=int" - -match-next.o: match.S - cat $(srcdir)/match.S > match-next.s - $(CC) -arch m68k -arch i386 -c match-next.s - rm -f match-next.s - -# gcc with emx 0.8f kit (use by preference os2/Makefile.os2) -os2_gcc: - $(MAKE) all CC=gcc CFLAGS="-O -DOS2" X=".exe" - -# Xenix 2.3.2 for 286: -xenix_286: - $(MAKE) all CFLAGS="-LARGE -M2l" - -# Coherent (with broken /bin/sh): -coherent: - $(MAKE) all OBJA=match.o DEFS=\ - "-DASMV -DSTDC_HEADERS=1 -DHAVE_UNISTD_H=1 -DDIRENT=1" - -#### End of specific targets section. #### - -install: installdirs installbin installman - -installbin: all - $(INSTALL_PROGRAM) gzip$X $(bindir)/gzip$X - for f in $(SCRIPTS); do \ - $(INSTALL_PROGRAM) $${f} $(scriptdir)/$${f}; done - rm -f $(scriptdir)/$(G)zcmp; \ - ln $(scriptdir)/$(G)zdiff $(scriptdir)/$(G)zcmp - for f in gunzip$X ungzip$X $(ZCAT)$X ; do \ - rm -f $(bindir)/$${f}; done - @if echo $(DEFS) | grep GNU_STANDARD > /dev/null; then \ - echo 'exec gzip -d $${1+"$$@"}' > $(bindir)/gunzip$X; \ - echo 'exec gzip -dc $${1+"$$@"}' > $(bindir)/$(ZCAT)$X; \ - chmod 755 $(bindir)/gunzip$X $(bindir)/$(ZCAT)$X; \ - else \ - ln $(bindir)/gzip$X $(bindir)/gunzip$X; \ - ln $(bindir)/gzip$X $(bindir)/$(ZCAT)$X; \ - fi - -installman: gzip.info - for f in gzip gunzip $(ZCAT) $(SCRIPTS) $(G)zcmp; do \ - rm -f $(mandir)/$${f}.$(manext); done - -cd $(srcdir); for f in gzip gzexe; do \ - $(INSTALL_DATA) $${f}.1 $(mandir)/$${f}.$(manext); done - -cd $(srcdir); for f in zdiff zgrep zmore znew zforce; do \ - $(INSTALL_DATA) $${f}.1 $(mandir)/$(G)$${f}.$(manext); done - -cd $(mandir); if test $(manlinks) = so; then \ - echo .so man$(manext)/gzip.$(manext) > $(ZCAT).$(manext);\ - echo .so man$(manext)/$(G)zdiff.$(manext) > $(G)zcmp.$(manext);\ - echo .so man$(manext)/gzip.$(manext) > gunzip.$(manext);\ - chmod 644 $(ZCAT).$(manext) $(G)zcmp.$(manext) gunzip.$(manext);\ - else \ - ln gzip.$(manext) $(ZCAT).$(manext);\ - ln $(G)zdiff.$(manext) $(G)zcmp.$(manext);\ - ln gzip.$(manext) gunzip.$(manext);\ - fi - -cd $(srcdir); for f in gzip.info* ; do $(INSTALL_DATA) $${f} \ - $(infodir)/$${f}; done - -uninstall: force - -cd $(bindir); rm -f gzip$X gunzip$X $(ZCAT)$X - -cd $(scriptdir); rm -f $(SCRIPTS) $(G)zcmp - -for f in gzip gunzip $(ZCAT) $(SCRIPTS) $(G)zcmp; do \ - rm -f $(mandir)/$${f}.$(manext); done - -cd $(infodir); rm -f gzip.info* - -# install all files and replace compress (not recommended) -install_compress: install - -test -f $(bindir)/compress.old || \ - mv $(bindir)/compress$X $(bindir)/compress.old - ln $(bindir)/gzip$X $(bindir)/compress$X - rm -f $(bindir)/uncompress$X - ln $(bindir)/gzip$X $(bindir)/uncompress$X - -# Make sure all installation directories, e.g. $(bindir) actually exist by -# making them if necessary. At most one level is created (except for man). -installdirs: - -if test ! -d $(prefix)/man; then \ - mkdir $(prefix)/man; fi - -for dir in $(alldirs) ; do \ - if test ! -d $${dir}; then \ - mkdir $${dir}; fi; \ - done - -test: check -check: gzip$X - ./gzip -6 < $(srcdir)/texinfo.tex > _gztest.gz - @LANG=""; export LANG; if test `wc -c < _gztest.gz` -eq 30890; then \ - true; \ - else \ - echo FAILED gzip test: incorrect size; \ - fi - rm -f _gztest - ./gzip -d _gztest.gz - @if cmp _gztest $(srcdir)/texinfo.tex; then \ - echo gzip test OK; \ - else \ - echo FAILED gzip test: incorrect decompress; \ - fi - rm -f _gztest* - -TAGS: $(SRCS) $(HDRS) - cd $(srcdir); etags $(SRCS) $(HDRS) - -Makefile: Makefile.in ./config.status - ./config.status - -./config.status: configure - $(srcdir)/configure --srcdir=$(srcdir) --no-create - -configure: configure.in - @echo Warning: configure is out of date -# cd $(srcdir); autoconf - -clean: - rm -f *$O gzip$X gunzip$X ungzip$X $(ZCAT)$X add$X sub$X a.out core - rm -f $(G)zcmp $(SCRIPTS) _gztest* - rm -f *.aux *.cp *.cps *.dvi *.fn *.fns *.ky *.kys *.log - rm -f *.pg *.pgs *.toc *.tp *.tps *.vr *.vrs - -mostlyclean: clean - -distclean: clean - rm -f Makefile config.status - -realclean: distclean - rm -f TAGS gzip.info* gzip.doc - -dist: $(DISTFILES) Makefile - d=gzip-`sed -e '/VERSION/!d' -e 's/[^0-9.]*\([0-9.]*\).*/\1/' \ - -e q revision.h` ; \ - rm -f ../$$d; \ - ln -s `pwd` ../$$d; \ - cd ..; \ - files=""; \ - for f in $(DISTFILES); do files="$$files $$d/$$f"; done; \ - GZIP=-9 $(TAR) chofz $$d/$$d.tar.gz $$files; \ - rm -f $$d - -zipdist: $(DISTFILES) Makefile - zip -u9T gzip`sed -e '/VERSION/!d' -e 's/[^0-9.]*\([0-9.]*\).*/\1/' \ - -e s/[.]//g -e q revision.h` $(DISTFILES) - -# Actual build-related targets - -gzip$X: Makefile $(OBJS) - $(CC) $(LDFLAGS) -o $@ $(OBJS) $(LIBS) - rm -f gunzip$X $(ZCAT)$X - ln gzip$X gunzip$X - ln gzip$X $(ZCAT)$X - -gzip$O zip$O deflate$O trees$O bits$O unzip$O inflate$O: gzip.h tailor.h -util$O lzw$O unlzw$O unpack$O unlzh$O crypt$O: gzip.h tailor.h - -gzip$O unlzw$O: revision.h lzw.h - -bits$O unzip$O util$O zip$O: crypt.h - -gzip$O getopt$O: getopt.h - -match$O: match.S - $(ASCPP) $(srcdir)/match.S > _match.s - $(CC) -c _match.s - mv _match$O match$O - rm -f _match.s - -$(G)zdiff: zdiff.in - sed -e "$(SEDCMD)" -e "s|BINDIR|$(bindir)|" $(srcdir)/zdiff.in > $@ - chmod 755 $@ - -$(G)zgrep: zgrep.in - sed -e "$(SEDCMD)" -e "s|BINDIR|$(bindir)|" $(srcdir)/zgrep.in > $@ - chmod 755 $@ - -$(G)zmore: zmore.in - sed -e "$(SEDCMD)" -e "s|BINDIR|$(bindir)|" $(srcdir)/zmore.in > $@ - chmod 755 $@ - -$(G)znew: znew.in - sed -e "$(SEDCMD)" -e "s|BINDIR|$(bindir)|" $(srcdir)/znew.in > $@ - chmod 755 $@ - -$(G)zforce: zforce.in - sed -e "$(SEDCMD)" -e "s|BINDIR|$(bindir)|" $(srcdir)/zforce.in > $@ - chmod 755 $@ - -gzexe: gzexe.in - sed -e "$(SEDCMD)" -e "s|BINDIR|$(bindir)|" $(srcdir)/gzexe.in > $@ - chmod 755 $@ - -gzip.info: gzip.texi - cd $(srcdir); makeinfo gzip.texi - -gzip.dvi: gzip.texi - cd $(srcdir); texi2dvi gzip.texi - -gzip.doc: gzip.1 - nroff -man $(srcdir)/gzip.1 | col -b | uniq > gzip.doc - -# Prevent GNU make v3 from overflowing arg limit on SysV. -.NOEXPORT: - -# end of file diff --git a/Build/source/utils/gzip/NEWS b/Build/source/utils/gzip/NEWS deleted file mode 100644 index ef5f83359ee..00000000000 --- a/Build/source/utils/gzip/NEWS +++ /dev/null @@ -1,221 +0,0 @@ -Current Version: 1.2.4. -See the file ChangeLog for the details of all changes. - -Major changes from 1.2.3 to 1.2.4 -* By default, do not restore file name and timestamp from those saved - inside the .gz file (behave as 'compress'). Added the --name option - to force name and timestamp restoration. -* Accept - as synonym for stdin. -* Use manlinks=so or ln to support either hard links or .so in man pages -* Accept foo.gz~ in zdiff. -* Added support for Windows NT -* Handle ENAMETOOLONG for strict Posix systems -* Use --recursive instead of --recurse to comply with Webster and - the GNU stdandard. -* Allow installation of shell scripts with a g prefix: make G=g install -* Install by default zcat as gzcat if gzcat already exists in path. -* Let zmore behave as more when invoked without parameters (give help) -* Let gzip --list reject files not in gzip format even with --force. -* Don't complain about non gzip files for options -rt or -rl. -* Added advice in INSTALL for several systems. - -Major changes from 1.2.2 to 1.2.3 -* Don't display the output name when decompressing except with --verbose. -* Remove usage of alloca in getopt.c and all makefiles. -* Added the zfile shell script in subdirectory sample. -* Moved the list of compiler bugs from README to INSTALL. -* Added vms/Readme.vms. - -Major changes from 1.2.1 to 1.2.2 -* Fix a compilation error on Sun with cc (worked with gcc). - -Major changes from 1.2 to 1.2.1 -* Let zmore act as more if the data is not gzipped. -* made gzexe more secure (don't rely on PATH). -* By default, display output name only when the name was actually truncated. - -Major changes from 1.1.2 to 1.2 -* Added the --list option to display the file characteristics. -* Added the --no-name option: do not save or restore original filename - Save the original name by default. -* Allow gunzip --suffix "" to attempt decompression on any file - regardless of its extension if an original name is present. -* Add support for the SCO compress -H format. -* gzip --fast now compresses faster (speed close to that of compress) - with degraded compression ratio (but still better than compress). - Default level changed to -6 (acts exactly as previous level -5) to - be a better indication of its placement in the speed/ratio range. -* Use smart name truncation: 123456789012.c -> 123456789.c.gz - instead of 12345678901.gz -* With --force, let zcat pass non gzip'ed data unchanged (zcat == cat) -* Added the zgrep shell script. -* Made sub.c useful for 16 bit sound, 24 bit images, etc.. -* Supress warnings about suffix for gunzip -r, except with --verbose. -* On MSDOS, use .gz extension when possible (files without extension) -* Moved the sample programs to a subdirectory sample. -* Added a "Special targets" section in INSTALL. - -Major changes from 1.1.1 to 1.1.2. -* Fix serious bug for VMS (-gz not removed when decompressing). -* Allow suffix other than .gz in znew. -* Do not display compression ratio when decompressing stdin. -* In zmore.in, work around brain damaged stty -g (Ultrix). -* Display a correct compression ratio for .Z files. -* Added .z to .gz renaming script in INTALL. -* Allow setting CFLAGS in configure. - -Major changes from 1.1 to 1.1.1. -* Fix serious bug in vms.c (affects Vax/VMS only). -* Added --ascii option. -* Add workaround in configure.in for Ultrix (quote eval argument) - -Major changes from 1.0.7 to 1.1. -* Use .gz suffix by default, add --suffix option. -* Let gunzip accept a "_z" suffix (used by one 'compress' on Vax/VMS). -* Quit when reading garbage from stdin instead of reporting an error. -* Added makefile for VAX/MMS and support for wildcards on VMS. -* Added support for MSC under OS/2. -* Added support for Prime/PRIMOS. -* Display compression ratio also when decompressing (with --verbose). -* Quit after --version (GNU standard) -* Use --force to bypass isatty() check -* Continue processing other files in case of recoverable error. -* Added comparison of zip and gzip in the readme file. -* Added small sample programs (ztouch, sub, add) -* Use less memory when compiled with -DSMALL_MEM (for MSDOS). -* Remove the "off by more than one minute" time stamp kludge - -Major changes from 1.0.6 to 1.0.7. -* Allow zmore to read from standard input (like more). -* Support the 68000 (Atari ST) in match.S. -* Retry partial writes (required on Linux when gzip is suspended in a pipe). -* Allow full pathnames and renamings in gzexe. -* Don't let gzexe compress setuid executables or gzip itself. -* Added vms/Makefile.gcc for gcc on the Vax. -* Allow installation of binaries and shell scripts in different dirs. -* Allows complex PAGER variable in zmore (e.g.: PAGER="col -x | more") -* Allow installation of zcat as gzcat. -* Several small changes for portability to old or weird systems. -* Suppress help message and send compressed data to the terminal when - gzip is invoked without parameters and without redirection. -* Add compile option GNU_STANDARD to respect the GNU coding standards: - with -DGNU_STANDARD, behave as gzip even if invoked under the name gunzip. -(I don't like the last two changes, which were requested by the FSF.) - -Major changes from 1.0.5 to 1.0.6. -* Let gzexe detect executables that are already gzexe'd. -* Keep file attributes in znew and gzexe if cpmod is available. -* Don't try restoring record format on VMS (1.0.5 did not work correctly) -* Added asm version for 68000 in amiga/match.a. - Use asm version for Atari TT and NeXT. -* For OS/2, assume HPFS by default, add flag OS2FAT if necessary. -* Fixed some bugs in zdiff and define zcmp as a link to zdiff. - - -Major changes from 1.0.4 to 1.0.5. -* For VMS, restore the file type for variable record format, otherwise - extract in fixed length format (not perfect, but better than - forcing all files to be in stream_LF format). -* For VMS, use "-z" default suffix and accept a version number in file names. -* For Unix, allow compression of files with name ending in 'z'. Use only - .z, .*-z, .tgz, .taz as valid gzip extensions. In the last two cases, - extract to .tar by default. -* On some versions of MSDOS, files with a 3 character extension could not - be compressed. -* Garbage collect files in /tmp created by gzexe. -* Fix the 'OS code' byte in the gzip header. -* For the Amiga, add the missing utime.h and add support for gcc. - - -Major changes from 1.0.3 to 1.0.4. -* Added optimized asm version for 68020. -* Add support for DJGPP. - -* Add support for the Atari ST. -* Added zforce to rename gzip'ed files with truncated names. -* Do not install with name uncompress (some systems rely on the - absence of any check in the old uncompress). -* Added missing function (fcfree) in msdos/tailor.c -* Let gunzip handle .tgz files, and let gzip skip them. -* Added -d option (decompress) for gzexe and try preserving file permissions. -* Suppress all warnings with -q. -* Use GZIP_OPT for VMS to avoid conflict with program name. -* ... and many other small changes (see ChangeLog) - - -Major changes from 1.0.2 to 1.0.3 -* Added -K option for znew to keep old .Z files if smaller -* Added -q option (quiet) to cancel -v in GZIP env variable. -* Made gzexe safer on systems with filename limitation to 14 chars. -* Fixed bugs in handling of GZIP env variable and incorrect free with Turbo C. - - -Major changes from 1.0.1 to 1.0.2 -* Added env variable GZIP for default options. Example: - for sh: GZIP="-8 -v"; export GZIP - for csh: setenv GZIP "-8 -v" -* Added support for the Amiga. -* znew now keeps the old .Z if it is smaller than the .z file. - This can happen for some large and very redundant files. -* Do not complain about trailing garbage for record oriented IO (Vax/VMS). - This implies however that multi-part gzip files are not supported - on such systems. -* Added gzexe to compress rarely used executables. -* Reduce memory usage (required for MSDOS and useful on all systems). -* Preserve time stamp in znew -P (pipe option) if touch -r works. - - -Major changes from 1.0 to 1.0.1 -* fix trivial errors in the Borland makefile (msdos/Makefile.bor) - - -Major changes from 0.8.2 to 1.0 -* gzip now runs on Vax/VMS -* gzip will not not overwrite files without -f when using /bin/sh in - background. -* Support the test option -t for compressed (.Z) files. - Allow some data recovery for bad .Z files. -* Added makefiles for MSDOS (Only tested for MSC, not Borland). -* still more changes to configure for several systems - - -Major changes from 0.8.1 to 0.8.2: -* yet more changes to configure for Linux and other systems -* Allow zcat on a file with multiple links. - - -Major changes from 0.8 to 0.8.1: -* znew has now a pipe option -P to reduce the disk space requirements, - but this option does not preserve timestamps. -* Fixed some #if directives for compilation with TurboC. - - -Major changes from 0.7 to 0.8: -* gzip can now extract .z files created by 'pack'. -* configure should no longer believe that every machine is a 386 -* Fix the entry for /etc/magic in INSTALL. -* Add patch for GNU tar 1.11.1 and a pointer to crypt++.el -* Uncompress files with multiple links only with -f. -* Fix for uncompress of .Z files on 16-bit machines -* Create a correct output name for file names of exactly N-1 chars when - the system has a limit of N chars. - - -Major changes from 0.6 to 0.7: -* Use "make check" instead of "make test". -* Keep time stamp and pass options to gzip in znew. -* Do not create .z.z files with gzip -r. -* Allow again gunzip .zip files (was working in 0.5) -* Allow again compilation with TurboC 2.0 (was working in 0.4) - - -Major changes form 0.5 to 0.6: -* gunzip reported an error when extracting certain .z files. The .z files - produced by gzip 0.5 are correct and can be read by gunzip 0.6. -* gunzip now supports multiple compressed members within a single .z file. -* Fix the check for i386 in configure. -* Added "make test" to check for compiler bugs. (gcc -finline-functions - is broken at least on the NeXT.) -* Use environment variable PAGER in zmore if it is defined. -* Accept gzcat in addition to zcat for people having /usr/bin before - /usr/local/bin in their path. diff --git a/Build/source/utils/gzip/README b/Build/source/utils/gzip/README deleted file mode 100644 index e6f425191dd..00000000000 --- a/Build/source/utils/gzip/README +++ /dev/null @@ -1,143 +0,0 @@ -This is the file README for the gzip distribution, version 1.2.4. - -gzip (GNU zip) is a compression utility designed to be a replacement -for 'compress'. Its main advantages over compress are much better -compression and freedom from patented algorithms. The GNU Project -uses it as the standard compression program for its system. - -gzip currently uses by default the LZ77 algorithm used in zip 1.9 (the -portable pkzip compatible archiver). The gzip format was however -designed to accommodate several compression algorithms. See below -for a comparison of zip and gzip. - -gunzip can currently decompress files created by gzip, compress or -pack. The detection of the input format is automatic. For the -gzip format, gunzip checks a 32 bit CRC. For pack, gunzip checks the -uncompressed length. The 'compress' format was not designed to allow -consistency checks. However gunzip is sometimes able to detect a bad -.Z file because there is some redundancy in the .Z compression format. -If you get an error when uncompressing a .Z file, do not assume that -the .Z file is correct simply because the standard uncompress does not -complain. This generally means that the standard uncompress does not -check its input, and happily generates garbage output. - -gzip produces files with a .gz extension. Previous versions of gzip -used the .z extension, which was already used by the 'pack' -Huffman encoder. gunzip is able to decompress .z files (packed -or gzip'ed). - -Several planned features are not yet supported (see the file TODO). -See the file NEWS for a summary of changes since 0.5. See the file -INSTALL for installation instructions. Some answers to frequently -asked questions are given in the file INSTALL, please read it. (In -particular, please don't ask me once more for an /etc/magic entry.) - -WARNING: on several systems, compiler bugs cause gzip to fail, in -particular when optimization options are on. See the section "Special -targets" at the end of the INSTALL file for a list of known problems. -For all machines, use "make check" to check that gzip was compiled -correctly. Try compiling gzip without any optimization if you have a -problem. - -Please send all comments and bug reports by electronic mail to -<bug-gzip@gnu.org>. - -Bug reports should ideally include: - - * The complete output of "gzip -V" (or the contents of revision.h - if you can't get gzip to compile) - * The hardware and operating system (try "uname -a") - * The compiler used to compile (if it is gcc, use "gcc -v") - * A description of the bug behavior - * The input to gzip, that triggered the bug - -If you send me patches for machines I don't have access to, please test them -very carefully. gzip is used for backups, it must be extremely reliable. - -The package crypt++.el is highly recommended to manipulate gzip'ed -file from emacs. It recognizes automatically encrypted and compressed -files when they are first visited or written. It is available via -anonymous ftp to roebling.poly.edu [128.238.5.31] in /pub/crypt++.el. -The same directory contains also patches to dired, ange-ftp and info. -GNU tar 1.11.2 has a -z option to invoke directly gzip, so you don't have to -patch it. The package ftp.uu.net:/languages/emacs-lisp/misc/jka-compr19.el.Z -also supports gzip'ed files. - -The znew and gzexe shell scripts provided with gzip benefit from -(but do not require) the cpmod utility to transfer file attributes. -It is available by anonymous ftp on gatekeeper.dec.com in -/.0/usenet/comp.sources.unix/volume11/cpmod.Z. - -The sample programs zread.c, sub.c and add.c in subdirectory sample -are provided as examples of useful complements to gzip. Read the -comments inside each source file. The perl script ztouch is also -provided as example (not installed by default since it relies on perl). - - -gzip is free software, you can redistribute it and/or modify it under -the terms of the GNU General Public License, a copy of which is -provided under the name COPYING. The latest version of gzip are always -available by ftp in prep.ai.mit.edu:/pub/gnu, or in any of the prep -mirror sites: - -- sources in gzip-*.tar (or .shar or .tar.gz). -- Solaris 2 executables in sparc-sun-solaris2/gzip-binaries-*.tar -- MSDOS lha self-extracting exe in gzip-msdos-*.exe. Once extracted, - copy gzip.exe to gunzip.exe and zcat.exe, or use "gzip -d" to decompress. - gzip386.exe runs much faster but only on 386 and above; it is compiled with - djgpp 1.10 available in directory omnigate.clarkson.edu:/pub/msdos/djgpp. - -A VMS executable is available in ftp.spc.edu:[.macro32.savesets]gzip-1-*.zip -(use [.macro32]unzip.exe to extract). A PRIMOS executable is available -in ftp.lysator.liu.se:/pub/primos/run/gzip.run. -OS/2 executables (16 and 32 bits versions) are available in -ftp.tu-muenchen.de:/pub/comp/os/os2/archiver/gz*-[16,32].zip - -Some ftp servers can automatically make a tar.Z from a tar file. If -you are getting gzip for the first time, you can ask for a tar.Z file -instead of the much larger tar file. - -Many thanks to those who provided me with bug reports and feedback. -See the files THANKS and ChangeLog for more details. - - - Note about zip vs. gzip: - -The name 'gzip' was a very unfortunate choice, because zip and gzip -are two really different programs, although the actual compression and -decompression sources were written by the same persons. A different -name should have been used for gzip, but it is too late to change now. - -zip is an archiver: it compresses several files into a single archive -file. gzip is a simple compressor: each file is compressed separately. -Both share the same compression and decompression code for the -'deflate' method. unzip can also decompress old zip archives -(implode, shrink and reduce methods). gunzip can also decompress files -created by compress and pack. zip 1.9 and gzip do not support -compression methods other than deflation. (zip 1.0 supports shrink and -implode). Better compression methods may be added in future versions -of gzip. zip will always stick to absolute compatibility with pkzip, -it is thus constrained by PKWare, which is a commercial company. The -gzip header format is deliberately different from that of pkzip to -avoid such a constraint. - -On Unix, gzip is mostly useful in combination with tar. GNU tar -1.11.2 has a -z option to invoke gzip automatically. "tar -z" -compresses better than zip, since gzip can then take advantage of -redundancy between distinct files. The drawback is that you must -scan the whole tar.gz file in order to extract a single file near -the end; unzip can directly seek to the end of the zip file. There -is no overhead when you extract the whole archive anyway. -If a member of a .zip archive is damaged, other files can still -be recovered. If a .tar.gz file is damaged, files beyond the failure -point cannot be recovered. (Future versions of gzip will have -error recovery features.) - -gzip and gunzip are distributed as a single program. zip and unzip -are, for historical reasons, two separate programs, although the -authors of these two programs work closely together in the info-zip -team. zip and unzip are not associated with the GNU project. -The sources are available by ftp in - - oak.oakland.edu:/pub/misc/unix/zip19p1.zip - oak.oakland.edu:/pub/misc/unix/unz50p1.tar-z diff --git a/Build/source/utils/gzip/THANKS b/Build/source/utils/gzip/THANKS deleted file mode 100644 index dd8f7bfd8b3..00000000000 --- a/Build/source/utils/gzip/THANKS +++ /dev/null @@ -1,276 +0,0 @@ -gzip was written by Jean-loup Gailly <gzip@gnu.org>, with portions -written by Mark Adler (inflate.c), Peter Jannesen (unlzw.c) and -Haruhiko Okumura (unlzh.c). The zip deflate format was defined by Phil Katz. -Thanks to those who reported problems and suggested various -improvements. Here is a partial list of them: - -Robert Abramovitz bromo@cougar.tandem.com -Jay Adams jka@ece.cmu.edu -Mark Adler madler@cco.caltech.edu -Edwin Allum edwin@csri.toronto.edu -Joseph Arceneaux jla@gnu.ai.mit.edu -Tim Auckland tda10@cus.cam.ac.uk -Ken-ichiro Aoki aoki@madonna.physics.ucla.edu -David Ascher da@marlowe.cog.brown.edu -Eric Backus ericb@lsid.hp.com -Becky A. Badgett badgett@cs.utexas.edu -Bo Nygaard Bai bai@iesd.auc.dk -Dave Barber dbarber@apocalypse.bbn.com -Rene Beaulieu reneb@distri.hydro.qc.ca -Neal Becker neal@ctd.comsat.com -Dieter Becker becker@med-in.uni-sb.de -Nelson H. F. Beebe beebe@geronimo.math.utah.edu -Jeff Beadles jeff@onion.rain.com -David J. N. Begley dbegley@st.nepean.uws.edu.au -Bob Beresh rberesh@rd.hydro.on.ca -Jim Bernard jbernard@iola.mines.colorado.edu -Karl Berry karl@cs.umb.edu -James W. Birdsall jwbirdsa@picarefy.picarefy.com -Scott Bolte scott@craycos.com -Wayne E. Bouchard web@paladine.hacks.arizona.edu -Marc Boucher marc@cam.org -Ola Brahammar pt90ob@pt.hk-r.se -Dave Brennan brennan@hal.com -Alan Brown dogbowl@dogbox.acme.gen.nz -Michael L. Brown brown@wi.extrel.com -Rodney Brown rdb@mel.cocam.oz.au -Bruce bde@runx.oz.au -Bill Bumgarner bbum@stone.com -Leila Burrell-Davis leilabd@syma.sussex.ac.uk -Roger Butenuth butenuth@ira.uka.de -Jon Cargille jcargill@cs.wisc.edu -Bud Carlson bud@isle.pegasus.com -Lim Fung Chai fclim@i1sin.daq.semi.harris.com -Wes Chalfant wes@kofax.com -Andrew A. Chernov ache@astral.msk.su -Paul Close pdc@lunch.wpd.sgi.com -Jeff Coffler coffler@jac.enet.dec.com -Will Colley wcc3@occs.cs.oberlin.edu -Roger Cornelius sherpa!rac@uunet.uu.net -Kevin Cosgrove kevinc@tekig6.pen.tek.com -Stephen J Cowley s.j.cowley@amtp.cam.ac.uk -Ron Cox roncox@indirect.com -Frank Crawford frank@photon.ansto.gov.au -James R. Crawford qralston@cislabs.pitt.edu -Lawrence Crowl crowl@research.cs.orst.edu -Klaus Dahlenburg kdburg@incoahe.hanse.de -William E Davidsen davidsen@ariel.crd.ge.com -John M. DeDourek dedourek@aixive2.cs.unb.ca -Jeff Deifik jdeifik@isi.edu -Vince DeMarco vince@whatnxt.cuc.ab.ca -Michael De La Rue p91152@cplab.physics.edinburgh.ac.uk -Jeff Delinck delinck@pa621a.inland.com -John DeRoo deroo@grout.adv.shr.dec.com -Jim Diamond zsd@axe.drea.dnd.ca -Stefano Diomedi sd@teculx.tecsiel.it -Lawrence R. Dodd dodd@roebling.poly.edu -Matthew Donadio donadio@mxd120.rh.psu.edu -Andy Dougherty andy@crystal.phys.lafayette.edu -Darrell Duane dduane@mason1.gmu.edu -John Eaton jwe@che.utexas.edu -Will Edgington wedgingt@ptolemy.arc.nasa.gov -Brian Edmonds edmonds@edmonds.home.cs.ubc.ca -Paul Eggert eggert@twinsun.com -Enami enami@sys.ptg.sony.co.jp -Kristoffer Eriksson ske@pkmab.se -Daniel Eriksson m91der@bellatrix.tdb.uu.se -Rik Faith faith@cs.unc.edu -Larry Fahnoe fahnoe@c1mpls.mn.org -Cristian Ferretti cfs@poincare.mat.puc.cl -Karl-Jose Filler pla_jfi@pki-nbg.philips.de -Valery Fine fine@vxcern.cern.ch -Bob Fischer bobf@milne.geology.yale.edu -Per Foreby perf@efd.lth.se -Alexander Fraser alex@cs.umb.edu -Noah Friedman friedman@gnu.ai.mit.edu -Bob Friesenhahn bfriesen@iphase.com -Gerhard Friesland-Koepke frieslan@rzdspc3.informatik.uni-hamburg.de -Andy Fyfe andy@scp.caltech.edu -Geoff geoff@frs.faxon.com -Arnd Gerns gerns@informatik.uni-hildesheim.de -Kaveh R. Ghazi ghazi@staccato.rutgers.edu -Torbjorn Granlund tege@sics.se -Carl Greco cgreco@parrot.creighton.edu -Bruno Haible haible@ma2s2.mathematik.uni-karlsruhe.de -Junio Hamano junio@shadow.twinsun.com -Harald Hanche-Olsen hanche@ams.sunysb.edu -Darrel R. Hankerson hankedr@mail.auburn.edu -Mark Hanning-Lee markhl@romeo.caltech.edu -Lars Hecking st000002@hrz1.hrz.th-darmstadt.de -Ruediger Helsch ruediger@ramz.ing.tu-bs.de -Mark C. Henderson mch@sqwest.wimsey.bc.ca -Karl Heuer karl@kelp.boston.ma.us -Jarkko Hietaniemi jhi@dol-guldur.hut.fi -Thomas Hiller hiller@fzi.de -Eiji Hirai hirai@cc.swarthmore.edu -Kjetil Torgrim Homme kjetilho@ifi.uio.no -Robert D. Houk rdh@sli.com -Jim Howard jim_howard@mentorg.com -Preston Hunt gt5708a@prism.gatech.edu -Shane C Hutchins sch@nymph.msel.unh.edu -Hutch hutchinson@wrair-emh1.army.mil -Lester Ingber ingber@alumni.caltech.edu -Ken Ishii ishii@sni-usa.com -Per Steinar Iversen iversen@vsfys1.fi.uib.no -Chris Jacobsen jacobsen@xray1.physics.sunysb.edu -Michal Jaegermann ntomczak@vm.ucs.ualberta.ca -Brian Jones brianj@skat.usc.edu -Denny de Jonge witaddj@dutrex.tudelft.nl -Arne H. Juul arnej@lise.unit.no -Dana Jacobsen jacobsd@solar.cor2.epa.gov -Peter Jannesen peter@ncs.nl -Brian D. Johnston johnstonb@med.ge.com -Walter W. Jones wwj@candela.cfr.nist.gov -Tom Judson judson@scf.usc.edu -Henry G. Juengst juengst@saph2.physik.uni-bonn.de -Sarantos Kapidakis sarantos%manteion@ics.forth.gr -Amir J. Katz amir@matis.ingr.com -Steve Kelem kelem@castor.xilinx.com -Steven Kimball kimball@shrew.sanders.lockheed.com -Randy Kirchhof rkk@posms.aus.tx.us -Ned Kittlitz kittlitz@seagoon.sw.stratus.com -Sakai Kiyotaka ksakai@mtl.t.u-tokyo.ac.jp -Philip C Kizer pckizer@gonzo.tamu.edu -Pete Klammer pklammer@ouray.denver.colorado.edu -Fritz Kleemann kleemann@informatik.uni-wuerzburg.dbp.de -Wilhelm B. Kloke wb@ifado.arb-phys.uni-dortmund.de -Tom Kloos tk@sequent.com -Carsten Koch carsten.koch@icem.de -Winfried Koenig win@in.rhein-main.de -Mathias Koerber mathias@solomon.technet.sg -Steph Konigsdorfer s.konigsdorfer@frmy.bull.fr -Leif Kornstaedt leif@rumtifsl.ruessel.sub.org -Michael D. Lawler mdlawler@bsu-cs.bsu.edu -Kevin Layer layer@franz.com -Howard D. Leadmon howardl@wb3ffv.ampr.org -Alexander Lehmann alex@hal.rhein-main.de -Simon Leinen simon@lia.di.epfl.ch -Burt Leland burt@molecular.com -Tony Leneis tony@plaza.adp.ds.com -Hugues Leroy hugues.leroy@irisa.fr -Marty Leisner leisner@eso.mc.xerox.com -Charles Levert charles@aramis.comm.polymtl.ca -Richard Levitte levitte@e.kth.se -Torbj|rn Lindh toobii@elixir.e.kth.se -David R. Linn drl@vuse.vanderbilt.edu -Antonio Lioy cat@athena.polito.it -Jamie Lokier u90jl@ecs.oxford.ac.uk -Richard Lloyd R.K.Lloyd@csc.liv.ac.uk -David J. MacKenzie djm@eng.umd.edu -John R MacMillan john@chance.gts.org -Ron Male male@eso.mc.xerox.com -Don R. Maszle maze@bea.lbl.gov -Jaye Mathisen osyjm@cs.montana.edu -Telly Mavroidis mavroidi@acf2.nyu.edu -Imed Eddine Mbarki mbarki@pacific.cmpe.psu.edu -Steeve McCauley steeve@pooh.geophys.mcgill.ca -Tom McConnell tmcconne@sedona.intel.com -Tod McQuillin mcquill@ccit05.duq.edu -Tye McQueen tye@spillman.com -Bernd Melchers melchers@chemie.fu-berlin.de -Jason Merrill jason@jarthur.claremont.edu -Dean S. Messing deanm@medulla.labs.tek.com -M. Mesturino mesturino@cselt.stet.it -Luke Mewburn zak@rmit.edu.au -Jim Meyering meyering@cs.utexas.edu -Dragan Milicic milicic@math.utah.edu -Frederic Miserey none.fred@applelink.apple.com -Marcel J.E. Mol marcel@duteca.et.tudelft.nl -Soren Juul Moller sjm@dde.dk -Chris Moore moore@src.bae.co.uk -Dan Mosedale mosedale@genome.stanford.edu -Helmut Muelner hmuelner@fiicmds04.tu-graz.ac.at -Urban D Mueller umueller@amiga.physik.unizh.ch -Ulrich Mueller ulm@vsnhdb.cern.ch -Timothy Murphy tim@maths.tcd.ie -Greg Naber greg@squally.halcyon.com -Jay Nayegandhi jayng@bbiv02.enet.dec.com -Paul K. Neville II pkn2@idsi.com -Karl L. Noell noell@informatik.fh-wiesbaden.dbp.de -Demizu Noritoshi nori-d@is.aist-nara.ac.jp -Todd Ogasawara todd@protege.pegasus.com -Helge Oldach helge.oldach@stollmann.de -Arthur David Olson ado@elsie.nci.nih.gov -Piet van Oostrum piet@cs.ruu.nl -Rafael R. Pappalardo rafapa@obelix.cica.es -Mike Pearlman canuck@masc38.rice.edu -Yves Perrenoud pyves@nuga.alphanet.ch -Hal Peterson hrp@pecan.cray.com -Pascal Petit petit@cadillac.ibp.fr -Bruno Pillard bp@chorus.fr -Franc,ois Pinard pinard@iro.umontreal.ca -Jay Pinkos pinkos@butyng.bu.edu -Thomas Plass thomas@cogsci.ed.ac.uk -Mike Polo mikep@cfsmo.honeywell.com -Francesco Potorti pot@fly.cnuce.cnr.it -Will Priest bpriest@lobby.ti.com -David Purves purves@apogee.com -Andreas Raab ar@nvmr.robin.de -Eric S. Raymond esr@snark.thyrsus.com -Klaus Reimann kr@cip.physik.uni-stuttgart.de -Michael Rendell michael@mercury.cs.mun.ca -Hal Render render@massive.uccs.edu -Julian F. Reschke julian@math.uni-muenster.de -Phil Richards Phil.Richards@prg.oxford.ac.uk -Roland B Roberts roberts@nsrl31.nsrl.rochester.edu -Arnold Robbins arnold@cc.gatech.edu -Kevin Rodgers kevin@rolling-stone.den.mmc.com -Kai Uwe Rommel rommel@informatik.tu-muenchen.de -Paul Rubin phr@america.telebit.com -Wolfgang Rupprecht wolfgang@wsrcc.com -Jonathan Ryshpan jon@amito.hitachi.com -Paul A Sand pas@unh.edu -Tony Sanders sanders@bsdi.com -Mike Sangrey mike@sojurn.lns.pa.us -Niimi Satoshi a01309@cfi.waseda.ac.jp -Marc Schaefer sysadm@alphanet.ch -Andreas Schwab schwab@lamothe.informatik.uni-dortmund.de -Eric Schenk schenk@cs.toronto.edu -Eric P. Scott eps@cs.sfsu.edu -Olaf Seibert rhialto@mbfys.kun.nl -Sunando Sen sens@fasecon.econ.nyu.edu -Harry Shamansky hts@hertz.eng.ohio-state.edu -Amos Shapira amoss@cs.huji.ac.il -Rick Sladkey jrs@world.std.com -Daniel L Smith dls@autodesk.com -Fred Smith fredex%fcshome@merk.merk.com -Stephen Soliday soliday@ncat.edu -Paul Southworth pauls@css.itd.umich.edu -Rob Spencer robbie@winkle.bhpese.oz.au -Richard Stallman rms@gnu.ai.mit.edu -Carsten Steger carsten.steger@informatik.tu-muenchen.de -David Sundstrom sunds@anon.asic.sc.ti.com -Ed Sznyter ews@babel.babel.com -Hideaki Tanabe arctanx@iyeyasu.ynl.t.u-tokyo.ac.jp -Andrew Telford ajt@peregrin.resmel.bhp.com.au -Glenn E. Thobe thobe@getunx.info.com -Kei Thomsen kt@keihh.hanse.de -Karsten Thygesen karthy@dannug.dk -Mark Towfiq towfiq@microdyne.com -Jeff Treece treece@sabbagh.com -Oliver Trepte oliver@ikaros.fysik4.kth.se -Stephane Tsacas slt@is21.isoft.fr -Stephen Tweedie sct@dcs.ed.ac.uk -John R. Vanderpool fish@daacdev1.stx.com -Sotiris Vassilopoulos vassilopoulos@virginia.edu -Pedro A. M. Vazquez vazquez@iqm.unicamp.br -Arjan de Vet devet@win.tue.nl -Larry W. Virden lvirden@cas.org -Vadim V. Vlasov vvlasov@inucres.msk.su -Eduard Vopicka eduard.vopicka@vse.cs -Theo Vosse vosse@ruls41.leidenuniv.nl -Darin Wayrynen darin@pcg.uucp -Marcel Waldvogel marcel@nice.usergroup.ethz.ch -Stephen J. Walick steve@nshore.org -Gray Watson gray@antaire.com -David Watt dmwatt@smersh.cambridge.ma.us -Scott Weikart scott@igc.apc.org -Ivo Welch iwelch@agsm.ucla.edu -Jochen Wiedmann zrawi01@zmcipdec1.zdv.uni-tuebingen.de -Gijsb. Wiesenekker wiesenecker@sara.nl -Wietze van Winden wietze@swi.psy.uva.nl -Frank Wuebbeling wuebbel@math.uni-muenster.de -Larry W. Virden lwv26@cas.org -Bill Wohler wohler@sap-ag.de -Jamie Zawinski jwz@lucid.com -Christos Zoulas christos@deshaw.com diff --git a/Build/source/utils/gzip/TODO b/Build/source/utils/gzip/TODO deleted file mode 100644 index 1335e632d18..00000000000 --- a/Build/source/utils/gzip/TODO +++ /dev/null @@ -1,58 +0,0 @@ -TODO file for gzip. - -Some of the planned features include: - -- Structure the sources so that the compression and decompression code - form a library usable by any program, and write both gzip and zip on - top of this library. This would ideally be a reentrant (thread safe) - library, but this would degrade performance. In the meantime, you can - look at the sample program zread.c. - - The library should have one mode in which compressed data is sent - as soon as input is available, instead of waiting for complete - blocks. This can be useful for sending compressed data to/from interactive - programs. - -- Make it convenient to define alternative user interfaces (in - particular for windowing environments). - -- Support in-memory compression for arbitrarily large amounts of data - (zip currently supports in-memory compression only for a single buffer.) - -- Map files in memory when possible, this is generally much faster - than read/write. (zip currently maps entire files at once, this - should be done in chunks to reduce memory usage.) - -- Add a super-fast compression method, suitable for implementing - file systems with transparent compression. One problem is that the - best candidate (lzrw1) is patented twice (Waterworth 4,701,745 - and Gibson & Graybill 5,049,881). The lzrw series of algorithms - are available by ftp in ftp.adelaide.edu.au:/pub/compression/lzrw*. - -- Add a super-tight (but slow) compression method, suitable for long - term archives. One problem is that the best versions of arithmetic - coding are patented (4,286,256 4,295,125 4,463,342 4,467,317 - 4,633,490 4,652,856 4,891,643 4,905,297 4,935,882 4,973,961 - 5,023,611 5,025,258). - - Note: I will introduce new compression methods only if they are - significantly better in either speed or compression ratio than the - existing method(s). So the total number of different methods should - reasonably not exceed 3. (The current 9 compression levels are just - tuning parameters for a single method, deflation.) - -- Add optional error correction. One problem is that the current version - of ecc cannot recover from inserted or missing bytes. It would be - nice to recover from the most common error (transfer of a binary - file in ascii mode). - -- Add a block size (-b) option to improve error recovery in case of - failure of a complete sector. Each block could be extracted - independently, but this reduces the compression ratio. - -- Use a larger window size to deal with some large redundant files that - 'compress' currently handles better than gzip. - -- Implement the -e (encrypt) option. - -Send comments to <bug-gzip@gnu.org>. diff --git a/Build/source/utils/gzip/_gztest b/Build/source/utils/gzip/_gztest deleted file mode 100644 index 203dca72c22..00000000000 --- a/Build/source/utils/gzip/_gztest +++ /dev/null @@ -1,3350 +0,0 @@ -%% TeX macros to handle texinfo files - -% Copyright (C) 1985, 1986, 1988, 1990, 1991 Free Software Foundation, Inc. - -%This texinfo.tex file is free software; you can redistribute it and/or -%modify it under the terms of the GNU General Public License as -%published by the Free Software Foundation; either version 2, or (at -%your option) any later version. - -%This texinfo.tex file is distributed in the hope that it will be -%useful, but WITHOUT ANY WARRANTY; without even the implied warranty -%of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%General Public License for more details. - -%You should have received a copy of the GNU General Public License -%along with this texinfo.tex file; see the file COPYING. If not, write -%to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, -%USA. - - -%In other words, you are welcome to use, share and improve this program. -%You are forbidden to forbid anyone else to use, share and improve -%what you give them. Help stamp out software-hoarding! - -\def\texinfoversion{2.73} -\message{Loading texinfo package [Version \texinfoversion]:} -\message{} - -% Print the version number if in a .fmt file. -\everyjob{\message{[Texinfo version \texinfoversion]}\message{}} - -% Save some parts of plain tex whose names we will redefine. - -\let\ptexlbrace=\{ -\let\ptexrbrace=\} -\let\ptexdots=\dots -\let\ptexdot=\. -\let\ptexstar=\* -\let\ptexend=\end -\let\ptexbullet=\bullet -\let\ptexb=\b -\let\ptexc=\c -\let\ptexi=\i -\let\ptext=\t -\let\ptexl=\l -\let\ptexL=\L - -\def\tie{\penalty 10000\ } % Save plain tex definition of ~. - -\message{Basics,} -\chardef\other=12 - -% If this character appears in an error message or help string, it -% starts a new line in the output. -\newlinechar = `^^J - -\hyphenation{ap-pen-dix} -\hyphenation{mini-buf-fer mini-buf-fers} -\hyphenation{eshell} - -% Margin to add to right of even pages, to left of odd pages. -\newdimen \bindingoffset \bindingoffset=0pt -\newdimen \normaloffset \normaloffset=\hoffset -\newdimen\pagewidth \newdimen\pageheight -\pagewidth=\hsize \pageheight=\vsize - -% Sometimes it is convenient to have everything in the transcript file -% and nothing on the terminal. We don't just call \tracingall here, -% since that produces some useless output on the terminal. -% -\def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}% -\def\loggingall{\tracingcommands2 \tracingstats2 - \tracingpages1 \tracingoutput1 \tracinglostchars1 - \tracingmacros2 \tracingparagraphs1 \tracingrestores1 - \showboxbreadth\maxdimen\showboxdepth\maxdimen -}% - -%---------------------Begin change----------------------- -% -%%%% For @cropmarks command. -% Dimensions to add cropmarks at corners Added by P. A. MacKay, 12 Nov. 1986 -% -\newdimen\cornerlong \newdimen\cornerthick -\newdimen \topandbottommargin -\newdimen \outerhsize \newdimen \outervsize -\cornerlong=1pc\cornerthick=.3pt % These set size of cropmarks -\outerhsize=7in -%\outervsize=9.5in -% Alternative @smallbook page size is 9.25in -\outervsize=9.25in -\topandbottommargin=.75in -% -%---------------------End change----------------------- - -% \onepageout takes a vbox as an argument. Note that \pagecontents -% does insertions itself, but you have to call it yourself. -\chardef\PAGE=255 \output={\onepageout{\pagecontents\PAGE}} -\def\onepageout#1{\hoffset=\normaloffset -\ifodd\pageno \advance\hoffset by \bindingoffset -\else \advance\hoffset by -\bindingoffset\fi -{\escapechar=`\\\relax % makes sure backslash is used in output files. -\shipout\vbox{{\let\hsize=\pagewidth \makeheadline} \pagebody{#1}% -{\let\hsize=\pagewidth \makefootline}}}% -\advancepageno \ifnum\outputpenalty>-20000 \else\dosupereject\fi} - -%%%% For @cropmarks command %%%% - -% Here is a modification of the main output routine for Near East Publications -% This provides right-angle cropmarks at all four corners. -% The contents of the page are centerlined into the cropmarks, -% and any desired binding offset is added as an \hskip on either -% site of the centerlined box. (P. A. MacKay, 12 November, 1986) -% -\def\croppageout#1{\hoffset=0pt % make sure this doesn't mess things up - \shipout - \vbox to \outervsize{\hsize=\outerhsize - \vbox{\line{\ewtop\hfill\ewtop}} - \nointerlineskip - \line{\vbox{\moveleft\cornerthick\nstop} - \hfill - \vbox{\moveright\cornerthick\nstop}} - \vskip \topandbottommargin - \centerline{\ifodd\pageno\hskip\bindingoffset\fi - \vbox{ - {\let\hsize=\pagewidth \makeheadline} - \pagebody{#1} - {\let\hsize=\pagewidth \makefootline}} - \ifodd\pageno\else\hskip\bindingoffset\fi} - \vskip \topandbottommargin plus1fill minus1fill - \boxmaxdepth\cornerthick - \line{\vbox{\moveleft\cornerthick\nsbot} - \hfill - \vbox{\moveright\cornerthick\nsbot}} - \nointerlineskip - \vbox{\line{\ewbot\hfill\ewbot}} - } - \advancepageno - \ifnum\outputpenalty>-20000 \else\dosupereject\fi} -% -% Do @cropmarks to get crop marks -\def\cropmarks{\let\onepageout=\croppageout } - -\def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}} -{\catcode`\@ =11 -\gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi -\dimen@=\dp#1 \unvbox#1 -\ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi -\ifr@ggedbottom \kern-\dimen@ \vfil \fi} -} - -% -% Here are the rules for the cropmarks. Note that they are -% offset so that the space between them is truly \outerhsize or \outervsize -% (P. A. MacKay, 12 November, 1986) -% -\def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong} -\def\nstop{\vbox - {\hrule height\cornerthick depth\cornerlong width\cornerthick}} -\def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong} -\def\nsbot{\vbox - {\hrule height\cornerlong depth\cornerthick width\cornerthick}} - -% Parse an argument, then pass it to #1. -% The argument can be delimited with [...] or with "..." or braces -% or it can be a whole line. -% #1 should be a macro which expects -% an ordinary undelimited TeX argument. - -\def\parsearg #1{\let\next=#1\begingroup\obeylines\futurelet\temp\parseargx} - -\def\parseargx{% -\ifx \obeyedspace\temp \aftergroup\parseargdiscardspace \else% -\aftergroup \parseargline % -\fi \endgroup} - -{\obeyspaces % -\gdef\parseargdiscardspace {\begingroup\obeylines\futurelet\temp\parseargx}} - -\gdef\obeyedspace{\ } - -\def\parseargline{\begingroup \obeylines \parsearglinex} -{\obeylines % -\gdef\parsearglinex #1^^M{\endgroup \next {#1}}} - -\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next} - -%% These are used to keep @begin/@end levels from running away -%% Call \inENV within environments (after a \begingroup) -\newif\ifENV \ENVfalse \def\inENV{\ifENV\relax\else\ENVtrue\fi} -\def\ENVcheck{% -\ifENV\errmessage{Still within an environment. Type Return to continue.} -\endgroup\fi} % This is not perfect, but it should reduce lossage - -% @begin foo is the same as @foo, for now. -\newhelp\EMsimple{Type <Return> to continue} - -\outer\def\begin{\parsearg\beginxxx} - -\def\beginxxx #1{% -\expandafter\ifx\csname #1\endcsname\relax -{\errhelp=\EMsimple \errmessage{Undefined command @begin #1}}\else -\csname #1\endcsname\fi} - -%% @end foo executes the definition of \Efoo. -%% foo can be delimited by doublequotes or brackets. - -\def\end{\parsearg\endxxx} - -\def\endxxx #1{% -\expandafter\ifx\csname E#1\endcsname\relax -\expandafter\ifx\csname #1\endcsname\relax -\errmessage{Undefined command @end #1}\else -\errorE{#1}\fi\fi -\csname E#1\endcsname} -\def\errorE#1{ -{\errhelp=\EMsimple \errmessage{@end #1 not within #1 environment}}} - -% Single-spacing is done by various environments. - -\newskip\singlespaceskip \singlespaceskip = \baselineskip -\def\singlespace{% -{\advance \baselineskip by -\singlespaceskip -\kern \baselineskip}% -\baselineskip=\singlespaceskip -} - -%% Simple single-character @ commands - -% @@ prints an @ -% Kludge this until the fonts are right (grr). -\def\@{{\tt \char '100}} - -% Define @` and @' to be the same as ` and ' -% but suppressing ligatures. -\def\`{{`}} -\def\'{{'}} - -% Used to generate quoted braces. - -\def\mylbrace {{\tt \char '173}} -\def\myrbrace {{\tt \char '175}} -\let\{=\mylbrace -\let\}=\myrbrace - -% @: forces normal size whitespace following. -\def\:{\spacefactor=1000 } - -% @* forces a line break. -\def\*{\hfil\break\hbox{}\ignorespaces} - -% @. is an end-of-sentence period. -\def\.{.\spacefactor=3000 } - -% @w prevents a word break. Without the \leavevmode, @w at the -% beginning of a paragraph, when TeX is still in vertical mode, would -% produce a whole line of output instead of starting the paragraph. -\def\w#1{\leavevmode\hbox{#1}} - -% @group ... @end group forces ... to be all on one page, by enclosing -% it in a TeX vbox. We use \vtop instead of \vbox to construct the box -% to keep its height that of a normal line. According to the rules for -% \topskip (p.114 of the TeXbook), the glue inserted is -% max (\topskip - \ht (first item), 0). If that height is large, -% therefore, no glue is inserted, and the space between the headline and -% the text is small, which looks bad. -% -\def\group{\begingroup - \ifnum\catcode13=\active \else - \errhelp = \groupinvalidhelp - \errmessage{@group invalid in context where filling is enabled}% - \fi - \def\Egroup{\egroup\endgroup}% - \vtop\bgroup -} -% -% TeX puts in an \escapechar (i.e., `@') at the beginning of the help -% message, so this ends up printing `@group can only ...'. -% -\newhelp\groupinvalidhelp{% -group can only be used in environments such as @example,^^J% -where each line of input produces a line of output.} - -% @need space-in-mils -% forces a page break if there is not space-in-mils remaining. - -\newdimen\mil \mil=0.001in - -\def\need{\parsearg\needx} - -% Old definition--didn't work. -%\def\needx #1{\par % -%% This method tries to make TeX break the page naturally -%% if the depth of the box does not fit. -%{\baselineskip=0pt% -%\vtop to #1\mil{\vfil}\kern -#1\mil\penalty 10000 -%\prevdepth=-1000pt -%}} - -\def\needx#1{% - % Go into vertical mode, so we don't make a big box in the middle of a - % paragraph. - \par - % - % Don't add any leading before our big empty box, but allow a page - % break, since the best break might be right here. - \allowbreak - \nointerlineskip - \vtop to #1\mil{\vfil}% - % - % TeX does not even consider page breaks if a penalty added to the - % main vertical list is 10000 or more. But in order to see if the - % empty box we just added fits on the page, we must make it consider - % page breaks. On the other hand, we don't want to actually break the - % page after the empty box. So we use a penalty of 9999. - % - % There is an extremely small chance that TeX will actually break the - % page at this \penalty, if there are no other feasible breakpoints in - % sight. (If the user is using lots of big @group commands, which - % almost-but-not-quite fill up a page, TeX will have a hard time doing - % good page breaking, for example.) However, I could not construct an - % example where a page broke at this \penalty; if it happens in a real - % document, then we can reconsider our strategy. - \penalty9999 - % - % Back up by the size of the box, whether we did a page break or not. - \kern -#1\mil - % - % Do not allow a page break right after this kern. - \nobreak -} - -% @br forces paragraph break - -\let\br = \par - -% @dots{} output some dots - -\def\dots{$\ldots$} - -% @page forces the start of a new page - -\def\page{\par\vfill\supereject} - -% @exdent text.... -% outputs text on separate line in roman font, starting at standard page margin - -% This records the amount of indent in the innermost environment. -% That's how much \exdent should take out. -\newskip\exdentamount - -% This defn is used inside fill environments such as @defun. -\def\exdent{\parsearg\exdentyyy} -\def\exdentyyy #1{{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break}} - -% This defn is used inside nofill environments such as @example. -\def\nofillexdent{\parsearg\nofillexdentyyy} -\def\nofillexdentyyy #1{{\advance \leftskip by -\exdentamount -\leftline{\hskip\leftskip{\rm#1}}}} - -%\hbox{{\rm#1}}\hfil\break}} - -% @include file insert text of that file as input. - -\def\include{\parsearg\includezzz} -\def\includezzz #1{{\def\thisfile{#1}\input #1 -}} - -\def\thisfile{} - -% @center line outputs that line, centered - -\def\center{\parsearg\centerzzz} -\def\centerzzz #1{{\advance\hsize by -\leftskip -\advance\hsize by -\rightskip -\centerline{#1}}} - -% @sp n outputs n lines of vertical space - -\def\sp{\parsearg\spxxx} -\def\spxxx #1{\par \vskip #1\baselineskip} - -% @comment ...line which is ignored... -% @c is the same as @comment -% @ignore ... @end ignore is another way to write a comment - -\def\comment{\catcode 64=\other \catcode 123=\other \catcode 125=\other% -\parsearg \commentxxx} - -\def\commentxxx #1{\catcode 64=0 \catcode 123=1 \catcode 125=2 } - -\let\c=\comment - -% Prevent errors for section commands. -% Used in @ignore and in failing conditionals. -\def\ignoresections{% -\let\chapter=\relax -\let\unnumbered=\relax -\let\top=\relax -\let\unnumberedsec=\relax -\let\unnumberedsection=\relax -\let\unnumberedsubsec=\relax -\let\unnumberedsubsection=\relax -\let\unnumberedsubsubsec=\relax -\let\unnumberedsubsubsection=\relax -\let\section=\relax -\let\subsec=\relax -\let\subsubsec=\relax -\let\subsection=\relax -\let\subsubsection=\relax -\let\appendix=\relax -\let\appendixsec=\relax -\let\appendixsection=\relax -\let\appendixsubsec=\relax -\let\appendixsubsection=\relax -\let\appendixsubsubsec=\relax -\let\appendixsubsubsection=\relax -\let\contents=\relax -\let\smallbook=\relax -\let\titlepage=\relax -} - -\def\ignore{\begingroup\ignoresections -% Make sure that spaces turn into tokens that match what \ignorexxx wants. -\catcode32=10 -\ignorexxx} -\long\def\ignorexxx #1\end ignore{\endgroup\ignorespaces} - -\def\direntry{\begingroup\direntryxxx} -\long\def\direntryxxx #1\end direntry{\endgroup\ignorespaces} - -% Conditionals to test whether a flag is set. - -\def\ifset{\begingroup\ignoresections\parsearg\ifsetxxx} - -\def\ifsetxxx #1{\endgroup -\expandafter\ifx\csname IF#1\endcsname\relax \let\temp=\ifsetfail -\else \let\temp=\relax \fi -\temp} -\def\Eifset{} -\def\ifsetfail{\begingroup\ignoresections\ifsetfailxxx} -\long\def\ifsetfailxxx #1\end ifset{\endgroup\ignorespaces} - -\def\ifclear{\begingroup\ignoresections\parsearg\ifclearxxx} - -\def\ifclearxxx #1{\endgroup -\expandafter\ifx\csname IF#1\endcsname\relax \let\temp=\relax -\else \let\temp=\ifclearfail \fi -\temp} -\def\Eifclear{} -\def\ifclearfail{\begingroup\ignoresections\ifclearfailxxx} -\long\def\ifclearfailxxx #1\end ifclear{\endgroup\ignorespaces} - -% @set foo to set the flag named foo. -% @clear foo to clear the flag named foo. -\def\set{\parsearg\setxxx} -\def\setxxx #1{ -\expandafter\let\csname IF#1\endcsname=\set} - -\def\clear{\parsearg\clearxxx} -\def\clearxxx #1{ -\expandafter\let\csname IF#1\endcsname=\relax} - -% Some texinfo constructs that are trivial in tex - -\def\iftex{} -\def\Eiftex{} -\def\ifinfo{\begingroup\ignoresections\ifinfoxxx} -\long\def\ifinfoxxx #1\end ifinfo{\endgroup\ignorespaces} - -\long\def\menu #1\end menu{} -\def\asis#1{#1} - -% @math means output in math mode. -% We don't use $'s directly in the definition of \math because control -% sequences like \math are expanded when the toc file is written. Then, -% we read the toc file back, the $'s will be normal characters (as they -% should be, according to the definition of Texinfo). So we must use a -% control sequence to switch into and out of math mode. -% -% This isn't quite enough for @math to work properly in indices, but it -% seems unlikely it will ever be needed there. -% -\let\implicitmath = $ -\def\math#1{\implicitmath #1\implicitmath} - -\def\node{\ENVcheck\parsearg\nodezzz} -\def\nodezzz#1{\nodexxx [#1,]} -\def\nodexxx[#1,#2]{\gdef\lastnode{#1}} -\let\lastnode=\relax - -\def\donoderef{\ifx\lastnode\relax\else -\expandafter\expandafter\expandafter\setref{\lastnode}\fi -\let\lastnode=\relax} - -\def\unnumbnoderef{\ifx\lastnode\relax\else -\expandafter\expandafter\expandafter\unnumbsetref{\lastnode}\fi -\let\lastnode=\relax} - -\def\appendixnoderef{\ifx\lastnode\relax\else -\expandafter\expandafter\expandafter\appendixsetref{\lastnode}\fi -\let\lastnode=\relax} - -\let\refill=\relax - -% @setfilename is done at the beginning of every texinfo file. -% So open here the files we need to have open while reading the input. -% This makes it possible to make a .fmt file for texinfo. -\def\setfilename{% - \readauxfile - \opencontents - \openindices - \fixbackslash % Turn off hack to swallow `\input texinfo'. - \global\let\setfilename=\comment % Ignore extra @setfilename cmds. - \comment % Ignore the actual filename. -} - -\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend} - -\def\inforef #1{\inforefzzz #1,,,,**} -\def\inforefzzz #1,#2,#3,#4**{See Info file \file{\losespace#3{}}, - node \samp{\losespace#1{}}} -\def\losespace #1{#1} - -\message{fonts,} - -% Font-change commands. - -% Texinfo supports the sans serif font style, which plain TeX does not. -% So we set up a \sf analogous to plain's \rm, etc. -\newfam\sffam -\def\sf{\fam=\sffam \tensf} -\let\li = \sf % Sometimes we call it \li, not \sf. - -%% Try out Computer Modern fonts at \magstephalf -\let\mainmagstep=\magstephalf - -\ifx\bigger\relax -\let\mainmagstep=\magstep1 -\font\textrm=cmr12 -\font\texttt=cmtt12 -\else -\font\textrm=cmr10 scaled \mainmagstep -\font\texttt=cmtt10 scaled \mainmagstep -\fi -% Instead of cmb10, you many want to use cmbx10. -% cmbx10 is a prettier font on its own, but cmb10 -% looks better when embedded in a line with cmr10. -\font\textbf=cmb10 scaled \mainmagstep -\font\textit=cmti10 scaled \mainmagstep -\font\textsl=cmsl10 scaled \mainmagstep -\font\textsf=cmss10 scaled \mainmagstep -\font\textsc=cmcsc10 scaled \mainmagstep -\font\texti=cmmi10 scaled \mainmagstep -\font\textsy=cmsy10 scaled \mainmagstep - -% A few fonts for @defun, etc. -\font\defbf=cmbx10 scaled \magstep1 %was 1314 -\font\deftt=cmtt10 scaled \magstep1 -\def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf} - -% Fonts for indices and small examples. -% We actually use the slanted font rather than the italic, -% because texinfo normally uses the slanted fonts for that. -% Do not make many font distinctions in general in the index, since they -% aren't very useful. -\font\ninett=cmtt9 -\font\indrm=cmr9 -\font\indit=cmsl9 -\let\indsl=\indit -\let\indtt=\ninett -\let\indsf=\indrm -\let\indbf=\indrm -\let\indsc=\indrm -\font\indi=cmmi9 -\font\indsy=cmsy9 - -% Fonts for headings -\font\chaprm=cmbx12 scaled \magstep2 -\font\chapit=cmti12 scaled \magstep2 -\font\chapsl=cmsl12 scaled \magstep2 -\font\chaptt=cmtt12 scaled \magstep2 -\font\chapsf=cmss12 scaled \magstep2 -\let\chapbf=\chaprm -\font\chapsc=cmcsc10 scaled\magstep3 -\font\chapi=cmmi12 scaled \magstep2 -\font\chapsy=cmsy10 scaled \magstep3 - -\font\secrm=cmbx12 scaled \magstep1 -\font\secit=cmti12 scaled \magstep1 -\font\secsl=cmsl12 scaled \magstep1 -\font\sectt=cmtt12 scaled \magstep1 -\font\secsf=cmss12 scaled \magstep1 -\font\secbf=cmbx12 scaled \magstep1 -\font\secsc=cmcsc10 scaled\magstep2 -\font\seci=cmmi12 scaled \magstep1 -\font\secsy=cmsy10 scaled \magstep2 - -% \font\ssecrm=cmbx10 scaled \magstep1 % This size an font looked bad. -% \font\ssecit=cmti10 scaled \magstep1 % The letters were too crowded. -% \font\ssecsl=cmsl10 scaled \magstep1 -% \font\ssectt=cmtt10 scaled \magstep1 -% \font\ssecsf=cmss10 scaled \magstep1 - -%\font\ssecrm=cmb10 scaled 1315 % Note the use of cmb rather than cmbx. -%\font\ssecit=cmti10 scaled 1315 % Also, the size is a little larger than -%\font\ssecsl=cmsl10 scaled 1315 % being scaled magstep1. -%\font\ssectt=cmtt10 scaled 1315 -%\font\ssecsf=cmss10 scaled 1315 - -%\let\ssecbf=\ssecrm - -\font\ssecrm=cmbx12 scaled \magstephalf -\font\ssecit=cmti12 scaled \magstephalf -\font\ssecsl=cmsl12 scaled \magstephalf -\font\ssectt=cmtt12 scaled \magstephalf -\font\ssecsf=cmss12 scaled \magstephalf -\font\ssecbf=cmbx12 scaled \magstephalf -\font\ssecsc=cmcsc10 scaled \magstep1 -\font\sseci=cmmi12 scaled \magstephalf -\font\ssecsy=cmsy10 scaled \magstep1 -% The smallcaps and symbol fonts should actually be scaled \magstep1.5, -% but that is not a standard magnification. - -% Fonts for title page: -\font\titlerm = cmbx12 scaled \magstep3 -\let\authorrm = \secrm - -% In order for the font changes to affect most math symbols and letters, -% we have to define the \textfont of the standard families. Since -% texinfo doesn't allow for producing subscripts and superscripts, we -% don't bother to reset \scriptfont and \scriptscriptfont (which would -% also require loading a lot more fonts). -% -\def\resetmathfonts{% - \textfont0 = \tenrm \textfont1 = \teni \textfont2 = \tensy - \textfont\itfam = \tenit \textfont\slfam = \tensl \textfont\bffam = \tenbf - \textfont\ttfam = \tentt \textfont\sffam = \tensf -} - - -% The font-changing commands redefine the meanings of \tenSTYLE, instead -% of just \STYLE. We do this so that font changes will continue to work -% in math mode, where it is the current \fam that is relevant in most -% cases, not the current. Plain TeX does, for example, -% \def\bf{\fam=\bffam \tenbf} By redefining \tenbf, we obviate the need -% to redefine \bf itself. -\def\textfonts{% - \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl - \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc - \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy - \resetmathfonts} -\def\chapfonts{% - \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl - \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc - \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy - \resetmathfonts} -\def\secfonts{% - \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl - \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc - \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy - \resetmathfonts} -\def\subsecfonts{% - \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl - \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc - \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy - \resetmathfonts} -\def\indexfonts{% - \let\tenrm=\indrm \let\tenit=\indit \let\tensl=\indsl - \let\tenbf=\indbf \let\tentt=\indtt \let\smallcaps=\indsc - \let\tensf=\indsf \let\teni=\indi \let\tensy=\indsy - \resetmathfonts} - -% Set up the default fonts, so we can use them for creating boxes. -% -\textfonts - -% Count depth in font-changes, for error checks -\newcount\fontdepth \fontdepth=0 - -% Fonts for short table of contents. -\font\shortcontrm=cmr12 -\font\shortcontbf=cmbx12 -\font\shortcontsl=cmsl12 - -%% Add scribe-like font environments, plus @l for inline lisp (usually sans -%% serif) and @ii for TeX italic - -% \smartitalic{ARG} outputs arg in italics, followed by an italic correction -% unless the following character is such as not to need one. -\def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else\/\fi\fi\fi} -\def\smartitalic#1{{\sl #1}\futurelet\next\smartitalicx} - -\let\i=\smartitalic -\let\var=\smartitalic -\let\dfn=\smartitalic -\let\emph=\smartitalic -\let\cite=\smartitalic - -\def\b#1{{\bf #1}} -\let\strong=\b - -\def\t#1{{\tt \exhyphenpenalty=10000\rawbackslash \frenchspacing #1}\null} -\let\ttfont = \t -%\def\samp #1{`{\tt \rawbackslash \frenchspacing #1}'\null} -\def\samp #1{`\tclose{#1}'\null} -\def\key #1{{\tt \exhyphenpenalty=10000\uppercase{#1}}\null} -\def\ctrl #1{{\tt \rawbackslash \hat}#1} - -\let\file=\samp - -% @code is a modification of @t, -% which makes spaces the same size as normal in the surrounding text. -\newdimen\tclosesave -\newdimen\tcloserm -\def\tclose#1{{\rm \tcloserm=\fontdimen2\font \tt \tclosesave=\fontdimen2\font -\fontdimen2\font=\tcloserm -% prevent breaking lines at hyphens. -\exhyphenpenalty=10000 -\def\ {{\fontdimen2\font=\tclosesave{} }}% - \rawbackslash \frenchspacing #1\fontdimen2\font=\tclosesave}\null} -\let\code=\tclose -%\let\exp=\tclose %Was temporary - -% @kbd is like @code, except that if the argument is just one @key command, -% then @kbd has no effect. - -\def\xkey{\key} -\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}% -\ifx\one\xkey\ifx\threex\three \key{#2}% -\else\tclose{\look}\fi -\else\tclose{\look}\fi} - -% Typeset a dimension, e.g., `in' or `pt'. The only reason for the -% argument is to make the input look right: @dmn{pt} instead of -% @dmn{}pt. -% -\def\dmn#1{\thinspace #1} - -\def\kbd#1{\def\look{#1}\expandafter\kbdfoo\look??\par} - -\def\l#1{{\li #1}\null} % - -\def\r#1{{\rm #1}} % roman font -% Use of \lowercase was suggested. -\def\sc#1{{\smallcaps#1}} % smallcaps font -\def\ii#1{{\it #1}} % italic font - -\message{page headings,} - -\newskip\titlepagetopglue \titlepagetopglue = 1.5in -\newskip\titlepagebottomglue \titlepagebottomglue = 2pc - -% First the title page. Must do @settitle before @titlepage. -\def\titlefont#1{{\titlerm #1}} - -\newtoks\realeverypar -\newif\ifseenauthor -\newif\iffinishedtitlepage - -\def\titlepage{\begingroup \parindent=0pt \textfonts - \let\subtitlerm=\tenrm -% I deinstalled the following change because \cmr12 is undefined. -% This change was not in the ChangeLog anyway. --rms. -% \let\subtitlerm=\cmr12 - \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}% - % - \def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines}% - % - % Leave some space at the very top of the page. - \vglue\titlepagetopglue - % - % Now you can print the title using @title. - \def\title{\parsearg\titlezzz}% - \def\titlezzz##1{\leftline{\titlefont{##1}} - % print a rule at the page bottom also. - \finishedtitlepagefalse - \vskip4pt \hrule height 4pt \vskip4pt}% - % No rule at page bottom unless we print one at the top with @title. - \finishedtitlepagetrue - % - % Now you can put text using @subtitle. - \def\subtitle{\parsearg\subtitlezzz}% - \def\subtitlezzz##1{{\subtitlefont \rightline{##1}}}% - % - % @author should come last, but may come many times. - \def\author{\parsearg\authorzzz}% - \def\authorzzz##1{\ifseenauthor\else\vskip 0pt plus 1filll\seenauthortrue\fi - {\authorfont \leftline{##1}}}% - % - % Most title ``pages'' are actually two pages long, with space - % at the top of the second. We don't want the ragged left on the second. - \let\oldpage = \page - \def\page{% - \iffinishedtitlepage\else - \finishtitlepage - \fi - \oldpage - \let\page = \oldpage - \hbox{}}% -% \def\page{\oldpage \hbox{}} -} - -\def\Etitlepage{% - \iffinishedtitlepage\else - \finishtitlepage - \fi - % It is important to do the page break before ending the group, - % because the headline and footline are only empty inside the group. - % If we use the new definition of \page, we always get a blank page - % after the title page, which we certainly don't want. - \oldpage - \endgroup - \HEADINGSon -} - -\def\finishtitlepage{% - \vskip4pt \hrule height 2pt - \vskip\titlepagebottomglue - \finishedtitlepagetrue -} - -%%% Set up page headings and footings. - -\let\thispage=\folio - -\newtoks \evenheadline % Token sequence for heading line of even pages -\newtoks \oddheadline % Token sequence for heading line of odd pages -\newtoks \evenfootline % Token sequence for footing line of even pages -\newtoks \oddfootline % Token sequence for footing line of odd pages - -% Now make Tex use those variables -\headline={{\textfonts\rm \ifodd\pageno \the\oddheadline - \else \the\evenheadline \fi}} -\footline={{\textfonts\rm \ifodd\pageno \the\oddfootline - \else \the\evenfootline \fi}\HEADINGShook} -\let\HEADINGShook=\relax - -% Commands to set those variables. -% For example, this is what @headings on does -% @evenheading @thistitle|@thispage|@thischapter -% @oddheading @thischapter|@thispage|@thistitle -% @evenfooting @thisfile|| -% @oddfooting ||@thisfile - -\def\evenheading{\parsearg\evenheadingxxx} -\def\oddheading{\parsearg\oddheadingxxx} -\def\everyheading{\parsearg\everyheadingxxx} - -\def\evenfooting{\parsearg\evenfootingxxx} -\def\oddfooting{\parsearg\oddfootingxxx} -\def\everyfooting{\parsearg\everyfootingxxx} - -{\catcode`\@=0 % - -\gdef\evenheadingxxx #1{\evenheadingyyy #1@|@|@|@|\finish} -\gdef\evenheadingyyy #1@|#2@|#3@|#4\finish{% -\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} - -\gdef\oddheadingxxx #1{\oddheadingyyy #1@|@|@|@|\finish} -\gdef\oddheadingyyy #1@|#2@|#3@|#4\finish{% -\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} - -\gdef\everyheadingxxx #1{\everyheadingyyy #1@|@|@|@|\finish} -\gdef\everyheadingyyy #1@|#2@|#3@|#4\finish{% -\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}} -\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} - -\gdef\evenfootingxxx #1{\evenfootingyyy #1@|@|@|@|\finish} -\gdef\evenfootingyyy #1@|#2@|#3@|#4\finish{% -\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} - -\gdef\oddfootingxxx #1{\oddfootingyyy #1@|@|@|@|\finish} -\gdef\oddfootingyyy #1@|#2@|#3@|#4\finish{% -\global\oddfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} - -\gdef\everyfootingxxx #1{\everyfootingyyy #1@|@|@|@|\finish} -\gdef\everyfootingyyy #1@|#2@|#3@|#4\finish{% -\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}} -\global\oddfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} -% -}% unbind the catcode of @. - -% @headings double turns headings on for double-sided printing. -% @headings single turns headings on for single-sided printing. -% @headings off turns them off. -% @headings on same as @headings double, retained for compatibility. -% @headings after turns on double-sided headings after this page. -% @headings doubleafter turns on double-sided headings after this page. -% @headings singleafter turns on single-sided headings after this page. -% By default, they are off. - -\def\headings #1 {\csname HEADINGS#1\endcsname} - -\def\HEADINGSoff{ -\global\evenheadline={\hfil} \global\evenfootline={\hfil} -\global\oddheadline={\hfil} \global\oddfootline={\hfil}} -\HEADINGSoff -% When we turn headings on, set the page number to 1. -% For double-sided printing, put current file name in lower left corner, -% chapter name on inside top of right hand pages, document -% title on inside top of left hand pages, and page numbers on outside top -% edge of all pages. -\def\HEADINGSdouble{ -%\pagealignmacro -\global\pageno=1 -\global\evenfootline={\hfil} -\global\oddfootline={\hfil} -\global\evenheadline={\line{\folio\hfil\thistitle}} -\global\oddheadline={\line{\thischapter\hfil\folio}} -} -% For single-sided printing, chapter title goes across top left of page, -% page number on top right. -\def\HEADINGSsingle{ -%\pagealignmacro -\global\pageno=1 -\global\evenfootline={\hfil} -\global\oddfootline={\hfil} -\global\evenheadline={\line{\thischapter\hfil\folio}} -\global\oddheadline={\line{\thischapter\hfil\folio}} -} -\def\HEADINGSon{\HEADINGSdouble} - -\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex} -\let\HEADINGSdoubleafter=\HEADINGSafter -\def\HEADINGSdoublex{% -\global\evenfootline={\hfil} -\global\oddfootline={\hfil} -\global\evenheadline={\line{\folio\hfil\thistitle}} -\global\oddheadline={\line{\thischapter\hfil\folio}} -} - -\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex} -\def\HEADINGSsinglex{% -\global\evenfootline={\hfil} -\global\oddfootline={\hfil} -\global\evenheadline={\line{\thischapter\hfil\folio}} -\global\oddheadline={\line{\thischapter\hfil\folio}} -} - -% Subroutines used in generating headings -% Produces Day Month Year style of output. -\def\today{\number\day\space -\ifcase\month\or -January\or February\or March\or April\or May\or June\or -July\or August\or September\or October\or November\or December\fi -\space\number\year} - -% Use this if you want the Month Day, Year style of output. -%\def\today{\ifcase\month\or -%January\or February\or March\or April\or May\or June\or -%July\or August\or September\or October\or November\or December\fi -%\space\number\day, \number\year} - -% @settitle line... specifies the title of the document, for headings -% It generates no output of its own - -\def\thistitle{No Title} -\def\settitle{\parsearg\settitlezzz} -\def\settitlezzz #1{\gdef\thistitle{#1}} - -\message{tables,} - -% @tabs -- simple alignment - -% These don't work. For one thing, \+ is defined as outer. -% So these macros cannot even be defined. - -%\def\tabs{\parsearg\tabszzz} -%\def\tabszzz #1{\settabs\+#1\cr} -%\def\tabline{\parsearg\tablinezzz} -%\def\tablinezzz #1{\+#1\cr} -%\def\&{&} - -% Tables -- @table, @ftable, @vtable, @item(x), @kitem(x), @xitem(x). - -% default indentation of table text -\newdimen\tableindent \tableindent=.8in -% default indentation of @itemize and @enumerate text -\newdimen\itemindent \itemindent=.3in -% margin between end of table item and start of table text. -\newdimen\itemmargin \itemmargin=.1in - -% used internally for \itemindent minus \itemmargin -\newdimen\itemmax - -% Note @table, @vtable, and @vtable define @item, @itemx, etc., with -% these defs. -% They also define \itemindex -% to index the item name in whatever manner is desired (perhaps none). - -\def\internalBitem{\smallbreak \parsearg\itemzzz} -\def\internalBitemx{\par \parsearg\itemzzz} - -\def\internalBxitem "#1"{\def\xitemsubtopix{#1} \smallbreak \parsearg\xitemzzz} -\def\internalBxitemx "#1"{\def\xitemsubtopix{#1} \par \parsearg\xitemzzz} - -\def\internalBkitem{\smallbreak \parsearg\kitemzzz} -\def\internalBkitemx{\par \parsearg\kitemzzz} - -\def\kitemzzz #1{\dosubind {kw}{\code{#1}}{for {\bf \lastfunction}}% - \itemzzz {#1}} - -\def\xitemzzz #1{\dosubind {kw}{\code{#1}}{for {\bf \xitemsubtopic}}% - \itemzzz {#1}} - -\def\itemzzz #1{\begingroup % - \advance\hsize by -\rightskip - \advance\hsize by -\tableindent - \setbox0=\hbox{\itemfont{#1}}% - \itemindex{#1}% - \nobreak % This prevents a break before @itemx. - % - % Be sure we are not still in the middle of a paragraph. - \parskip=0in - \par - % - % If the item text does not fit in the space we have, put it on a line - % by itself, and do not allow a page break either before or after that - % line. We do not start a paragraph here because then if the next - % command is, e.g., @kindex, the whatsit would get put into the - % horizontal list on a line by itself, resulting in extra blank space. - \ifdim \wd0>\itemmax - \setbox0=\hbox{\hskip \leftskip \hskip -\tableindent \unhbox0}\box0 - \nobreak - \else - % The item text fits into the space. Start a paragraph, so that the - % following text (if any) will end up on the same line. Since that - % text will be indented by \tableindent, we make the item text be in - % a zero-width box. - \noindent - \rlap{\hskip -\tableindent\box0}% - \fi - \endgroup -} - -\def\item{\errmessage{@item while not in a table}} -\def\itemx{\errmessage{@itemx while not in a table}} -\def\kitem{\errmessage{@kitem while not in a table}} -\def\kitemx{\errmessage{@kitemx while not in a table}} -\def\xitem{\errmessage{@xitem while not in a table}} -\def\xitemx{\errmessage{@xitemx while not in a table}} - -%% Contains a kludge to get @end[description] to work -\def\description{\tablez{\dontindex}{1}{}{}{}{}} - -\def\table{\begingroup\inENV\obeylines\obeyspaces\tablex} -{\obeylines\obeyspaces% -\gdef\tablex #1^^M{% -\tabley\dontindex#1 \endtabley}} - -\def\ftable{\begingroup\inENV\obeylines\obeyspaces\ftablex} -{\obeylines\obeyspaces% -\gdef\ftablex #1^^M{% -\tabley\fnitemindex#1 \endtabley -\def\Eftable{\endgraf\endgroup\afterenvbreak}% -\let\Etable=\relax}} - -\def\vtable{\begingroup\inENV\obeylines\obeyspaces\vtablex} -{\obeylines\obeyspaces% -\gdef\vtablex #1^^M{% -\tabley\vritemindex#1 \endtabley -\def\Evtable{\endgraf\endgroup\afterenvbreak}% -\let\Etable=\relax}} - -\def\dontindex #1{} -\def\fnitemindex #1{\doind {fn}{\code{#1}}}% -\def\vritemindex #1{\doind {vr}{\code{#1}}}% - -{\obeyspaces % -\gdef\tabley#1#2 #3 #4 #5 #6 #7\endtabley{\endgroup% -\tablez{#1}{#2}{#3}{#4}{#5}{#6}}} - -\def\tablez #1#2#3#4#5#6{% -\aboveenvbreak % -\begingroup % -\def\Edescription{\Etable}% Neccessary kludge. -\let\itemindex=#1% -\ifnum 0#3>0 \advance \leftskip by #3\mil \fi % -\ifnum 0#4>0 \tableindent=#4\mil \fi % -\ifnum 0#5>0 \advance \rightskip by #5\mil \fi % -\def\itemfont{#2}% -\itemmax=\tableindent % -\advance \itemmax by -\itemmargin % -\advance \leftskip by \tableindent % -\exdentamount=\tableindent -\parindent = 0pt -\parskip = \smallskipamount -\ifdim \parskip=0pt \parskip=2pt \fi% -\def\Etable{\endgraf\endgroup\afterenvbreak}% -\let\item = \internalBitem % -\let\itemx = \internalBitemx % -\let\kitem = \internalBkitem % -\let\kitemx = \internalBkitemx % -\let\xitem = \internalBxitem % -\let\xitemx = \internalBxitemx % -} - -% This is the counter used by @enumerate, which is really @itemize - -\newcount \itemno - -\def\itemize{\parsearg\itemizezzz} - -\def\itemizezzz #1{% - \begingroup % ended by the @end itemsize - \itemizey {#1}{\Eitemize} -} - -\def\itemizey #1#2{% -\aboveenvbreak % -\itemmax=\itemindent % -\advance \itemmax by -\itemmargin % -\advance \leftskip by \itemindent % -\exdentamount=\itemindent -\parindent = 0pt % -\parskip = \smallskipamount % -\ifdim \parskip=0pt \parskip=2pt \fi% -\def#2{\endgraf\endgroup\afterenvbreak}% -\def\itemcontents{#1}% -\let\item=\itemizeitem} - -\def\bullet{$\ptexbullet$} -\def\minus{$-$} - -% Set sfcode to normal for the chars that usually have another value. -% These are `.?!:;,' -\def\frenchspacing{\sfcode46=1000 \sfcode63=1000 \sfcode33=1000 - \sfcode58=1000 \sfcode59=1000 \sfcode44=1000 } - -% \splitoff TOKENS\endmark defines \first to be the first token in -% TOKENS, and \rest to be the remainder. -% -\def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}% - -% Allow an optional argument of an uppercase letter, lowercase letter, -% or number, to specify the first label in the enumerated list. No -% argument is the same as `1'. -% -\def\enumerate{\parsearg\enumeratezzz} -\def\enumeratezzz #1{\enumeratey #1 \endenumeratey} -\def\enumeratey #1 #2\endenumeratey{% - \begingroup % ended by the @end enumerate - % - % If we were given no argument, pretend we were given `1'. - \def\thearg{#1}% - \ifx\thearg\empty \def\thearg{1}\fi - % - % Detect if the argument is a single token. If so, it might be a - % letter. Otherwise, the only valid thing it can be is a number. - % (We will always have one token, because of the test we just made. - % This is a good thing, since \splitoff doesn't work given nothing at - % all -- the first parameter is undelimited.) - \expandafter\splitoff\thearg\endmark - \ifx\rest\empty - % Only one token in the argument. It could still be anything. - % A ``lowercase letter'' is one whose \lccode is nonzero. - % An ``uppercase letter'' is one whose \lccode is both nonzero, and - % not equal to itself. - % Otherwise, we assume it's a number. - % - % We need the \relax at the end of the \ifnum lines to stop TeX from - % continuing to look for a <number>. - % - \ifnum\lccode\expandafter`\thearg=0\relax - \numericenumerate % a number (we hope) - \else - % It's a letter. - \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax - \lowercaseenumerate % lowercase letter - \else - \uppercaseenumerate % uppercase letter - \fi - \fi - \else - % Multiple tokens in the argument. We hope it's a number. - \numericenumerate - \fi -} - -% An @enumerate whose labels are integers. The starting integer is -% given in \thearg. -% -\def\numericenumerate{% - \itemno = \thearg - \startenumeration{\the\itemno}% -} - -% The starting (lowercase) letter is in \thearg. -\def\lowercaseenumerate{% - \itemno = \expandafter`\thearg - \startenumeration{% - % Be sure we're not beyond the end of the alphabet. - \ifnum\itemno=0 - \errmessage{No more lowercase letters in @enumerate; get a bigger - alphabet}% - \fi - \char\lccode\itemno - }% -} - -% The starting (uppercase) letter is in \thearg. -\def\uppercaseenumerate{% - \itemno = \expandafter`\thearg - \startenumeration{% - % Be sure we're not beyond the end of the alphabet. - \ifnum\itemno=0 - \errmessage{No more uppercase letters in @enumerate; get a bigger - alphabet} - \fi - \char\uccode\itemno - }% -} - -% Call itemizey, adding a period to the first argument and supplying the -% common last two arguments. Also subtract one from the initial value in -% \itemno, since @item increments \itemno. -% -\def\startenumeration#1{% - \advance\itemno by -1 - \itemizey{#1.}\Eenumerate\flushcr -} - -% @alphaenumerate and @capsenumerate are abbreviations for giving an arg -% to @enumerate. -% -\def\alphaenumerate{\enumerate{a}} -\def\capsenumerate{\enumerate{A}} -\def\Ealphaenumerate{\Eenumerate} -\def\Ecapsenumerate{\Eenumerate} - -% Definition of @item while inside @itemize. - -\def\itemizeitem{% -\advance\itemno by 1 -{\let\par=\endgraf \smallbreak}% -\ifhmode \errmessage{\in hmode at itemizeitem}\fi -{\parskip=0in \hskip 0pt -\hbox to 0pt{\hss \itemcontents\hskip \itemmargin}% -\vadjust{\penalty 1200}}% -\flushcr} - -\message{indexing,} -% Index generation facilities - -% Define \newwrite to be identical to plain tex's \newwrite -% except not \outer, so it can be used within \newindex. -{\catcode`\@=11 -\gdef\newwrite{\alloc@7\write\chardef\sixt@@n}} - -% \newindex {foo} defines an index named foo. -% It automatically defines \fooindex such that -% \fooindex ...rest of line... puts an entry in the index foo. -% It also defines \fooindfile to be the number of the output channel for -% the file that accumulates this index. The file's extension is foo. -% The name of an index should be no more than 2 characters long -% for the sake of vms. - -\def\newindex #1{ -\expandafter\newwrite \csname#1indfile\endcsname% Define number for output file -\openout \csname#1indfile\endcsname \jobname.#1 % Open the file -\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex -\noexpand\doindex {#1}} -} - -% @defindex foo == \newindex{foo} - -\def\defindex{\parsearg\newindex} - -% Define @defcodeindex, like @defindex except put all entries in @code. - -\def\newcodeindex #1{ -\expandafter\newwrite \csname#1indfile\endcsname% Define number for output file -\openout \csname#1indfile\endcsname \jobname.#1 % Open the file -\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex -\noexpand\docodeindex {#1}} -} - -\def\defcodeindex{\parsearg\newcodeindex} - -% @synindex foo bar makes index foo feed into index bar. -% Do this instead of @defindex foo if you don't want it as a separate index. -\def\synindex #1 #2 {% -\expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname -\expandafter\let\csname#1indfile\endcsname=\synindexfoo -\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex -\noexpand\doindex {#2}}% -} - -% @syncodeindex foo bar similar, but put all entries made for index foo -% inside @code. -\def\syncodeindex #1 #2 {% -\expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname -\expandafter\let\csname#1indfile\endcsname=\synindexfoo -\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex -\noexpand\docodeindex {#2}}% -} - -% Define \doindex, the driver for all \fooindex macros. -% Argument #1 is generated by the calling \fooindex macro, -% and it is "foo", the name of the index. - -% \doindex just uses \parsearg; it calls \doind for the actual work. -% This is because \doind is more useful to call from other macros. - -% There is also \dosubind {index}{topic}{subtopic} -% which makes an entry in a two-level index such as the operation index. - -\def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer} -\def\singleindexer #1{\doind{\indexname}{#1}} - -% like the previous two, but they put @code around the argument. -\def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer} -\def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}} - -\def\indexdummies{% -\def\_{{\realbackslash _}}% -\def\w{\realbackslash w }% -\def\bf{\realbackslash bf }% -\def\rm{\realbackslash rm }% -\def\sl{\realbackslash sl }% -\def\sf{\realbackslash sf}% -\def\tt{\realbackslash tt}% -\def\gtr{\realbackslash gtr}% -\def\less{\realbackslash less}% -\def\hat{\realbackslash hat}% -\def\char{\realbackslash char}% -\def\TeX{\realbackslash TeX}% -\def\dots{\realbackslash dots }% -\def\copyright{\realbackslash copyright }% -\def\tclose##1{\realbackslash tclose {##1}}% -\def\code##1{\realbackslash code {##1}}% -\def\samp##1{\realbackslash samp {##1}}% -\def\t##1{\realbackslash r {##1}}% -\def\r##1{\realbackslash r {##1}}% -\def\i##1{\realbackslash i {##1}}% -\def\b##1{\realbackslash b {##1}}% -\def\cite##1{\realbackslash cite {##1}}% -\def\key##1{\realbackslash key {##1}}% -\def\file##1{\realbackslash file {##1}}% -\def\var##1{\realbackslash var {##1}}% -\def\kbd##1{\realbackslash kbd {##1}}% -} - -% \indexnofonts no-ops all font-change commands. -% This is used when outputting the strings to sort the index by. -\def\indexdummyfont#1{#1} -\def\indexdummytex{TeX} -\def\indexdummydots{...} - -\def\indexnofonts{% -\let\w=\indexdummyfont -\let\t=\indexdummyfont -\let\r=\indexdummyfont -\let\i=\indexdummyfont -\let\b=\indexdummyfont -\let\emph=\indexdummyfont -\let\strong=\indexdummyfont -\let\cite=\indexdummyfont -\let\sc=\indexdummyfont -%Don't no-op \tt, since it isn't a user-level command -% and is used in the definitions of the active chars like <, >, |... -%\let\tt=\indexdummyfont -\let\tclose=\indexdummyfont -\let\code=\indexdummyfont -\let\file=\indexdummyfont -\let\samp=\indexdummyfont -\let\kbd=\indexdummyfont -\let\key=\indexdummyfont -\let\var=\indexdummyfont -\let\TeX=\indexdummytex -\let\dots=\indexdummydots -} - -% To define \realbackslash, we must make \ not be an escape. -% We must first make another character (@) an escape -% so we do not become unable to do a definition. - -{\catcode`\@=0 \catcode`\\=\other -@gdef@realbackslash{\}} - -\let\indexbackslash=0 %overridden during \printindex. - -\def\doind #1#2{% -{\count10=\lastpenalty % -{\indexdummies % Must do this here, since \bf, etc expand at this stage -\escapechar=`\\% -{\let\folio=0% Expand all macros now EXCEPT \folio -\def\rawbackslashxx{\indexbackslash}% \indexbackslash isn't defined now -% so it will be output as is; and it will print as backslash in the indx. -% -% Now process the index-string once, with all font commands turned off, -% to get the string to sort the index by. -{\indexnofonts -\xdef\temp1{#2}% -}% -% Now produce the complete index entry. We process the index-string again, -% this time with font commands expanded, to get what to print in the index. -\edef\temp{% -\write \csname#1indfile\endcsname{% -\realbackslash entry {\temp1}{\folio}{#2}}}% -\temp }% -}\penalty\count10}} - -\def\dosubind #1#2#3{% -{\count10=\lastpenalty % -{\indexdummies % Must do this here, since \bf, etc expand at this stage -\escapechar=`\\% -{\let\folio=0% -\def\rawbackslashxx{\indexbackslash}% -% -% Now process the index-string once, with all font commands turned off, -% to get the string to sort the index by. -{\indexnofonts -\xdef\temp1{#2 #3}% -}% -% Now produce the complete index entry. We process the index-string again, -% this time with font commands expanded, to get what to print in the index. -\edef\temp{% -\write \csname#1indfile\endcsname{% -\realbackslash entry {\temp1}{\folio}{#2}{#3}}}% -\temp }% -}\penalty\count10}} - -% The index entry written in the file actually looks like -% \entry {sortstring}{page}{topic} -% or -% \entry {sortstring}{page}{topic}{subtopic} -% The texindex program reads in these files and writes files -% containing these kinds of lines: -% \initial {c} -% before the first topic whose initial is c -% \entry {topic}{pagelist} -% for a topic that is used without subtopics -% \primary {topic} -% for the beginning of a topic that is used with subtopics -% \secondary {subtopic}{pagelist} -% for each subtopic. - -% Define the user-accessible indexing commands -% @findex, @vindex, @kindex, @cindex. - -\def\findex {\fnindex} -\def\kindex {\kyindex} -\def\cindex {\cpindex} -\def\vindex {\vrindex} -\def\tindex {\tpindex} -\def\pindex {\pgindex} - -\def\cindexsub {\begingroup\obeylines\cindexsub} -{\obeylines % -\gdef\cindexsub "#1" #2^^M{\endgroup % -\dosubind{cp}{#2}{#1}}} - -% Define the macros used in formatting output of the sorted index material. - -% This is what you call to cause a particular index to get printed. -% Write -% @unnumbered Function Index -% @printindex fn - -\def\printindex{\parsearg\doprintindex} - -\def\doprintindex#1{% - \tex - \dobreak \chapheadingskip {10000} - \catcode`\%=\other\catcode`\&=\other\catcode`\#=\other - \catcode`\$=\other\catcode`\_=\other - \catcode`\~=\other - % - % The following don't help, since the chars were translated - % when the raw index was written, and their fonts were discarded - % due to \indexnofonts. - %\catcode`\"=\active - %\catcode`\^=\active - %\catcode`\_=\active - %\catcode`\|=\active - %\catcode`\<=\active - %\catcode`\>=\active - % % - \def\indexbackslash{\rawbackslashxx} - \indexfonts\rm \tolerance=9500 \advance\baselineskip -1pt - \begindoublecolumns - % - % See if the index file exists and is nonempty. - \openin 1 \jobname.#1s - \ifeof 1 - % \enddoublecolumns gets confused if there is no text in the index, - % and it loses the chapter title and the aux file entries for the - % index. The easiest way to prevent this problem is to make sure - % there is some text. - (Index is nonexistent) - \else - % - % If the index file exists but is empty, then \openin leaves \ifeof - % false. We have to make TeX try to read something from the file, so - % it can discover if there is anything in it. - \read 1 to \temp - \ifeof 1 - (Index is empty) - \else - \input \jobname.#1s - \fi - \fi - \closein 1 - \enddoublecolumns - \Etex -} - -% These macros are used by the sorted index file itself. -% Change them to control the appearance of the index. - -% Same as \bigskipamount except no shrink. -% \balancecolumns gets confused if there is any shrink. -\newskip\initialskipamount \initialskipamount 12pt plus4pt - -\def\initial #1{% -{\let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt -\ifdim\lastskip<\initialskipamount -\removelastskip \penalty-200 \vskip \initialskipamount\fi -\line{\secbf#1\hfill}\kern 2pt\penalty10000}} - -\def\entry #1#2{\begingroup - \parfillskip=0in \parskip=0in \parindent=0in - % - % \hangindent is only relevant when the page number and the entry text - % don't fit on one line. In that case, bob suggests starting the dots - % pretty far over on the line. - % \hangafter is reset to 1 at the start of each paragraph. - \hangindent=.75\hsize - \noindent - % - % Don't break the text of the index entry. - \hbox{#1}% - % - % If we must, put the page number on a line of its own, and fill out - % this line with blank space. (The \hfil is overwhelmed with the - % fill leaders glue in \indexdotfill if the page number does fit.) - \hfil\penalty50 - \null\nobreak\indexdotfill % Have leaders before the page number. - % - % The `\ ' here is removed by the implicit \unskip that TeX does as - % part of (the primitive) \par. Without, a spurious underfull \hbox ensues. - \ #2% The page number ends the paragraph. - \par -\endgroup} - -% Like \dotfill except takes at least 1 em. -\def\indexdotfill{\cleaders - \hbox{$\mathsurround=0pt \mkern1.5mu . \mkern1.5mu$}\hskip 1em plus 1fill} - -\def\primary #1{\line{#1\hfil}} - -\newskip\secondaryindent \secondaryindent=0.5cm - -\def\secondary #1#2{ -{\parfillskip=0in \parskip=0in -\hangindent =1in \hangafter=1 -\noindent\hskip\secondaryindent\hbox{#1}\indexdotfill #2\par -}} - -%% Define two-column mode, which is used in indexes. -%% Adapted from the TeXBook, page 416 -\catcode `\@=11 - -\newbox\partialpage - -\newdimen\doublecolumnhsize \doublecolumnhsize = 3.11in -\newdimen\doublecolumnvsize \doublecolumnvsize = 19.1in -\newdimen\availdimen@ - -\def\begindoublecolumns{\begingroup - \output={\global\setbox\partialpage= - \vbox{\unvbox255\kern -\topskip \kern \baselineskip}}\eject - \output={\doublecolumnout}% - \hsize=\doublecolumnhsize \vsize=\doublecolumnvsize} -\def\enddoublecolumns{\output={\balancecolumns}\eject - \endgroup \pagegoal=\vsize} - -\def\doublecolumnout{\splittopskip=\topskip \splitmaxdepth=\maxdepth - \dimen@=\pageheight \advance\dimen@ by-\ht\partialpage - \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@ - \onepageout\pagesofar \unvbox255 \penalty\outputpenalty} -\def\pagesofar{\unvbox\partialpage % - \hsize=\doublecolumnhsize % have to restore this since output routine -% changes it to set cropmarks (P. A. MacKay, 12 Nov. 1986) - \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}} -\def\balancecolumns{% -% Unset the glue. - \setbox255=\vbox{\unvbox255} - \dimen@=\ht255 - \advance\dimen@ by\topskip \advance\dimen@ by-\baselineskip - \divide\dimen@ by2 - \availdimen@=\pageheight \advance\availdimen@ by-\ht\partialpage -% If the remaining data is too big for one page, -% output one page normally, then work with what remains. - \ifdim \dimen@>\availdimen@ - { - \splittopskip=\topskip \splitmaxdepth=\maxdepth - \dimen@=\pageheight \advance\dimen@ by-\ht\partialpage - \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@ - \onepageout\pagesofar - } -% Recompute size of what remains, in case we just output some of it. - \dimen@=\ht255 - \advance\dimen@ by\topskip \advance\dimen@ by-\baselineskip - \divide\dimen@ by2 - \fi - \setbox0=\vbox{\unvbox255} - \splittopskip=\topskip - {\vbadness=10000 \loop \global\setbox3=\copy0 - \global\setbox1=\vsplit3 to\dimen@ - \ifdim\ht3>\dimen@ \global\advance\dimen@ by1pt \repeat} - \setbox0=\vbox to\dimen@{\unvbox1} \setbox2=\vbox to\dimen@{\unvbox3} - \pagesofar} - -\catcode `\@=\other -\message{sectioning,} -% Define chapters, sections, etc. - -\newcount \chapno -\newcount \secno \secno=0 -\newcount \subsecno \subsecno=0 -\newcount \subsubsecno \subsubsecno=0 - -% This counter is funny since it counts through charcodes of letters A, B, ... -\newcount \appendixno \appendixno = `\@ -\def\appendixletter{\char\the\appendixno} - -\newwrite \contentsfile -% This is called from \setfilename. -\def\opencontents{\openout \contentsfile = \jobname.toc} - -% Each @chapter defines this as the name of the chapter. -% page headings and footings can use it. @section does likewise - -\def\thischapter{} \def\thissection{} -\def\seccheck#1{\if \pageno<0 % -\errmessage{@#1 not allowed after generating table of contents}\fi -% -} - -\def\chapternofonts{% -\let\rawbackslash=\relax% -\let\frenchspacing=\relax% -\def\result{\realbackslash result} -\def\equiv{\realbackslash equiv} -\def\expansion{\realbackslash expansion} -\def\print{\realbackslash print} -\def\TeX{\realbackslash TeX} -\def\dots{\realbackslash dots} -\def\copyright{\realbackslash copyright} -\def\tt{\realbackslash tt} -\def\bf{\realbackslash bf } -\def\w{\realbackslash w} -\def\less{\realbackslash less} -\def\gtr{\realbackslash gtr} -\def\hat{\realbackslash hat} -\def\char{\realbackslash char} -\def\tclose##1{\realbackslash tclose {##1}} -\def\code##1{\realbackslash code {##1}} -\def\samp##1{\realbackslash samp {##1}} -\def\r##1{\realbackslash r {##1}} -\def\b##1{\realbackslash b {##1}} -\def\key##1{\realbackslash key {##1}} -\def\file##1{\realbackslash file {##1}} -\def\kbd##1{\realbackslash kbd {##1}} -% These are redefined because @smartitalic wouldn't work inside xdef. -\def\i##1{\realbackslash i {##1}} -\def\cite##1{\realbackslash cite {##1}} -\def\var##1{\realbackslash var {##1}} -\def\emph##1{\realbackslash emph {##1}} -\def\dfn##1{\realbackslash dfn {##1}} -} - -\def\thischaptername{No Chapter Title} -\outer\def\chapter{\parsearg\chapterzzz} -\def\chapterzzz #1{\seccheck{chapter}% -\secno=0 \subsecno=0 \subsubsecno=0 -\global\advance \chapno by 1 \message{Chapter \the\chapno}% -\chapmacro {#1}{\the\chapno}% -\gdef\thissection{#1}% -\gdef\thischaptername{#1}% -% We don't substitute the actual chapter name into \thischapter -% because we don't want its macros evaluated now. -\xdef\thischapter{Chapter \the\chapno: \noexpand\thischaptername}% -{\chapternofonts% -\edef\temp{{\realbackslash chapentry {#1}{\the\chapno}{\noexpand\folio}}}% -\escapechar=`\\% -\write \contentsfile \temp % -\donoderef % -\global\let\section = \numberedsec -\global\let\subsection = \numberedsubsec -\global\let\subsubsection = \numberedsubsubsec -}} - -\outer\def\appendix{\parsearg\appendixzzz} -\def\appendixzzz #1{\seccheck{appendix}% -\secno=0 \subsecno=0 \subsubsecno=0 -\global\advance \appendixno by 1 \message{Appendix \appendixletter}% -\chapmacro {#1}{Appendix \appendixletter}% -\gdef\thissection{#1}% -\gdef\thischaptername{#1}% -\xdef\thischapter{Appendix \appendixletter: \noexpand\thischaptername}% -{\chapternofonts% -\edef\temp{{\realbackslash chapentry - {#1}{Appendix \appendixletter}{\noexpand\folio}}}% -\escapechar=`\\% -\write \contentsfile \temp % -\appendixnoderef % -\global\let\section = \appendixsec -\global\let\subsection = \appendixsubsec -\global\let\subsubsection = \appendixsubsubsec -}} - -\outer\def\top{\parsearg\unnumberedzzz} -\outer\def\unnumbered{\parsearg\unnumberedzzz} -\def\unnumberedzzz #1{\seccheck{unnumbered}% -\secno=0 \subsecno=0 \subsubsecno=0 \message{(#1)} -\unnumbchapmacro {#1}% -\gdef\thischapter{#1}\gdef\thissection{#1}% -{\chapternofonts% -\edef\temp{{\realbackslash unnumbchapentry {#1}{\noexpand\folio}}}% -\escapechar=`\\% -\write \contentsfile \temp % -\unnumbnoderef % -\global\let\section = \unnumberedsec -\global\let\subsection = \unnumberedsubsec -\global\let\subsubsection = \unnumberedsubsubsec -}} - -\outer\def\numberedsec{\parsearg\seczzz} -\def\seczzz #1{\seccheck{section}% -\subsecno=0 \subsubsecno=0 \global\advance \secno by 1 % -\gdef\thissection{#1}\secheading {#1}{\the\chapno}{\the\secno}% -{\chapternofonts% -\edef\temp{{\realbackslash secentry % -{#1}{\the\chapno}{\the\secno}{\noexpand\folio}}}% -\escapechar=`\\% -\write \contentsfile \temp % -\donoderef % -\penalty 10000 % -}} - -\outer\def\appendixsection{\parsearg\appendixsectionzzz} -\outer\def\appendixsec{\parsearg\appendixsectionzzz} -\def\appendixsectionzzz #1{\seccheck{appendixsection}% -\subsecno=0 \subsubsecno=0 \global\advance \secno by 1 % -\gdef\thissection{#1}\secheading {#1}{\appendixletter}{\the\secno}% -{\chapternofonts% -\edef\temp{{\realbackslash secentry % -{#1}{\appendixletter}{\the\secno}{\noexpand\folio}}}% -\escapechar=`\\% -\write \contentsfile \temp % -\appendixnoderef % -\penalty 10000 % -}} - -\outer\def\unnumberedsec{\parsearg\unnumberedseczzz} -\def\unnumberedseczzz #1{\seccheck{unnumberedsec}% -\plainsecheading {#1}\gdef\thissection{#1}% -{\chapternofonts% -\edef\temp{{\realbackslash unnumbsecentry{#1}{\noexpand\folio}}}% -\escapechar=`\\% -\write \contentsfile \temp % -\unnumbnoderef % -\penalty 10000 % -}} - -\outer\def\numberedsubsec{\parsearg\numberedsubseczzz} -\def\numberedsubseczzz #1{\seccheck{subsection}% -\gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 % -\subsecheading {#1}{\the\chapno}{\the\secno}{\the\subsecno}% -{\chapternofonts% -\edef\temp{{\realbackslash subsecentry % -{#1}{\the\chapno}{\the\secno}{\the\subsecno}{\noexpand\folio}}}% -\escapechar=`\\% -\write \contentsfile \temp % -\donoderef % -\penalty 10000 % -}} - -\outer\def\appendixsubsec{\parsearg\appendixsubseczzz} -\def\appendixsubseczzz #1{\seccheck{appendixsubsec}% -\gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 % -\subsecheading {#1}{\appendixletter}{\the\secno}{\the\subsecno}% -{\chapternofonts% -\edef\temp{{\realbackslash subsecentry % -{#1}{\appendixletter}{\the\secno}{\the\subsecno}{\noexpand\folio}}}% -\escapechar=`\\% -\write \contentsfile \temp % -\appendixnoderef % -\penalty 10000 % -}} - -\outer\def\unnumberedsubsec{\parsearg\unnumberedsubseczzz} -\def\unnumberedsubseczzz #1{\seccheck{unnumberedsubsec}% -\plainsecheading {#1}\gdef\thissection{#1}% -{\chapternofonts% -\edef\temp{{\realbackslash unnumbsubsecentry{#1}{\noexpand\folio}}}% -\escapechar=`\\% -\write \contentsfile \temp % -\unnumbnoderef % -\penalty 10000 % -}} - -\outer\def\numberedsubsubsec{\parsearg\numberedsubsubseczzz} -\def\numberedsubsubseczzz #1{\seccheck{subsubsection}% -\gdef\thissection{#1}\global\advance \subsubsecno by 1 % -\subsubsecheading {#1} - {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}% -{\chapternofonts% -\edef\temp{{\realbackslash subsubsecentry % - {#1} - {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno} - {\noexpand\folio}}}% -\escapechar=`\\% -\write \contentsfile \temp % -\donoderef % -\penalty 10000 % -}} - -\outer\def\appendixsubsubsec{\parsearg\appendixsubsubseczzz} -\def\appendixsubsubseczzz #1{\seccheck{appendixsubsubsec}% -\gdef\thissection{#1}\global\advance \subsubsecno by 1 % -\subsubsecheading {#1} - {\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}% -{\chapternofonts% -\edef\temp{{\realbackslash subsubsecentry{#1}% - {\appendixletter} - {\the\secno}{\the\subsecno}{\the\subsubsecno}{\noexpand\folio}}}% -\escapechar=`\\% -\write \contentsfile \temp % -\appendixnoderef % -\penalty 10000 % -}} - -\outer\def\unnumberedsubsubsec{\parsearg\unnumberedsubsubseczzz} -\def\unnumberedsubsubseczzz #1{\seccheck{unnumberedsubsubsec}% -\plainsecheading {#1}\gdef\thissection{#1}% -{\chapternofonts% -\edef\temp{{\realbackslash unnumbsubsubsecentry{#1}{\noexpand\folio}}}% -\escapechar=`\\% -\write \contentsfile \temp % -\unnumbnoderef % -\penalty 10000 % -}} - -% These are variants which are not "outer", so they can appear in @ifinfo. -% Actually, they should now be obsolete; ordinary section commands should work. -\def\infotop{\parsearg\unnumberedzzz} -\def\infounnumbered{\parsearg\unnumberedzzz} -\def\infounnumberedsec{\parsearg\unnumberedseczzz} -\def\infounnumberedsubsec{\parsearg\unnumberedsubseczzz} -\def\infounnumberedsubsubsec{\parsearg\unnumberedsubsubseczzz} - -\def\infoappendix{\parsearg\appendixzzz} -\def\infoappendixsec{\parsearg\appendixseczzz} -\def\infoappendixsubsec{\parsearg\appendixsubseczzz} -\def\infoappendixsubsubsec{\parsearg\appendixsubsubseczzz} - -\def\infochapter{\parsearg\chapterzzz} -\def\infosection{\parsearg\sectionzzz} -\def\infosubsection{\parsearg\subsectionzzz} -\def\infosubsubsection{\parsearg\subsubsectionzzz} - -% These macros control what the section commands do, according -% to what kind of chapter we are in (ordinary, appendix, or unnumbered). -% Define them by default for a numbered chapter. -\global\let\section = \numberedsec -\global\let\subsection = \numberedsubsec -\global\let\subsubsection = \numberedsubsubsec - -% Define @majorheading, @heading and @subheading - -% NOTE on use of \vbox for chapter headings, section headings, and -% such: -% 1) We use \vbox rather than the earlier \line to permit -% overlong headings to fold. -% 2) \hyphenpenalty is set to 10000 because hyphenation in a -% heading is obnoxious; this forbids it. -% 3) Likewise, headings look best if no \parindent is used, and -% if justification is not attempted. Hence \raggedright. - - -\def\majorheading{\parsearg\majorheadingzzz} -\def\majorheadingzzz #1{% -{\advance\chapheadingskip by 10pt \chapbreak }% -{\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 - \parindent=0pt\raggedright - \rm #1\hfill}}\bigskip \par\penalty 200} - -\def\chapheading{\parsearg\chapheadingzzz} -\def\chapheadingzzz #1{\chapbreak % -{\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 - \parindent=0pt\raggedright - \rm #1\hfill}}\bigskip \par\penalty 200} - -\def\heading{\parsearg\secheadingi} - -\def\subheading{\parsearg\subsecheadingi} - -\def\subsubheading{\parsearg\subsubsecheadingi} - -% These macros generate a chapter, section, etc. heading only -% (including whitespace, linebreaking, etc. around it), -% given all the information in convenient, parsed form. - -%%% Args are the skip and penalty (usually negative) -\def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi} - -\def\setchapterstyle #1 {\csname CHAPF#1\endcsname} - -%%% Define plain chapter starts, and page on/off switching for it -% Parameter controlling skip before chapter headings (if needed) - -\newskip \chapheadingskip \chapheadingskip = 30pt plus 8pt minus 4pt - -\def\chapbreak{\dobreak \chapheadingskip {-4000}} -\def\chappager{\par\vfill\supereject} -\def\chapoddpage{\chappager \ifodd\pageno \else \hbox to 0pt{} \chappager\fi} - -\def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname} - -\def\CHAPPAGoff{ -\global\let\pchapsepmacro=\chapbreak -\global\let\pagealignmacro=\chappager} - -\def\CHAPPAGon{ -\global\let\pchapsepmacro=\chappager -\global\let\pagealignmacro=\chappager -\global\def\HEADINGSon{\HEADINGSsingle}} - -\def\CHAPPAGodd{ -\global\let\pchapsepmacro=\chapoddpage -\global\let\pagealignmacro=\chapoddpage -\global\def\HEADINGSon{\HEADINGSdouble}} - -\CHAPPAGon - -\def\CHAPFplain{ -\global\let\chapmacro=\chfplain -\global\let\unnumbchapmacro=\unnchfplain} - -\def\chfplain #1#2{% - \pchapsepmacro - {% - \chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 - \parindent=0pt\raggedright - \rm #2\enspace #1}% - }% - \bigskip - \penalty5000 -} - -\def\unnchfplain #1{% -\pchapsepmacro % -{\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 - \parindent=0pt\raggedright - \rm #1\hfill}}\bigskip \par\penalty 10000 % -} -\CHAPFplain % The default - -\def\unnchfopen #1{% -\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 - \parindent=0pt\raggedright - \rm #1\hfill}}\bigskip \par\penalty 10000 % -} - -\def\chfopen #1#2{\chapoddpage {\chapfonts -\vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}% -\par\penalty 5000 % -} - -\def\CHAPFopen{ -\global\let\chapmacro=\chfopen -\global\let\unnumbchapmacro=\unnchfopen} - -% Parameter controlling skip before section headings. - -\newskip \subsecheadingskip \subsecheadingskip = 17pt plus 8pt minus 4pt -\def\subsecheadingbreak{\dobreak \subsecheadingskip {-500}} - -\newskip \secheadingskip \secheadingskip = 21pt plus 8pt minus 4pt -\def\secheadingbreak{\dobreak \secheadingskip {-1000}} - -% @paragraphindent is defined for the Info formatting commands only. -\let\paragraphindent=\comment - -% Section fonts are the base font at magstep2, which produces -% a size a bit more than 14 points in the default situation. - -\def\secheading #1#2#3{\secheadingi {#2.#3\enspace #1}} -\def\plainsecheading #1{\secheadingi {#1}} -\def\secheadingi #1{{\advance \secheadingskip by \parskip % -\secheadingbreak}% -{\secfonts \vbox{\hyphenpenalty=10000\tolerance=5000 - \parindent=0pt\raggedright - \rm #1\hfill}}% -\ifdim \parskip<10pt \kern 10pt\kern -\parskip\fi \penalty 10000 } - - -% Subsection fonts are the base font at magstep1, -% which produces a size of 12 points. - -\def\subsecheading #1#2#3#4{\subsecheadingi {#2.#3.#4\enspace #1}} -\def\subsecheadingi #1{{\advance \subsecheadingskip by \parskip % -\subsecheadingbreak}% -{\subsecfonts \vbox{\hyphenpenalty=10000\tolerance=5000 - \parindent=0pt\raggedright - \rm #1\hfill}}% -\ifdim \parskip<10pt \kern 10pt\kern -\parskip\fi \penalty 10000 } - -\def\subsubsecfonts{\subsecfonts} % Maybe this should change: - % Perhaps make sssec fonts scaled - % magstep half -\def\subsubsecheading #1#2#3#4#5{\subsubsecheadingi {#2.#3.#4.#5\enspace #1}} -\def\subsubsecheadingi #1{{\advance \subsecheadingskip by \parskip % -\subsecheadingbreak}% -{\subsubsecfonts \vbox{\hyphenpenalty=10000\tolerance=5000 - \parindent=0pt\raggedright - \rm #1\hfill}}% -\ifdim \parskip<10pt \kern 10pt\kern -\parskip\fi \penalty 10000} - - -\message{toc printing,} - -% Finish up the main text and prepare to read what we've written -% to \contentsfile. - -\newskip\contentsrightmargin \contentsrightmargin=1in -\def\startcontents#1{% - \pagealignmacro - \immediate\closeout \contentsfile - \ifnum \pageno>0 - \pageno = -1 % Request roman numbered pages. - \fi - % Don't need to put `Contents' or `Short Contents' in the headline. - % It is abundantly clear what they are. - \unnumbchapmacro{#1}\def\thischapter{}% - \begingroup % Set up to handle contents files properly. - \catcode`\\=0 \catcode`\{=1 \catcode`\}=2 \catcode`\@=11 - \raggedbottom % Worry more about breakpoints than the bottom. - \advance\hsize by -\contentsrightmargin % Don't use the full line length. -} - - -% Normal (long) toc. -\outer\def\contents{% - \startcontents{Table of Contents}% - \input \jobname.toc - \endgroup - \vfill \eject -} - -% And just the chapters. -\outer\def\summarycontents{% - \startcontents{Short Contents}% - % - \let\chapentry = \shortchapentry - \let\unnumbchapentry = \shortunnumberedentry - % We want a true roman here for the page numbers. - \secfonts - \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl - \rm - \advance\baselineskip by 1pt % Open it up a little. - \def\secentry ##1##2##3##4{} - \def\unnumbsecentry ##1##2{} - \def\subsecentry ##1##2##3##4##5{} - \def\unnumbsubsecentry ##1##2{} - \def\subsubsecentry ##1##2##3##4##5##6{} - \def\unnumbsubsubsecentry ##1##2{} - \input \jobname.toc - \endgroup - \vfill \eject -} -\let\shortcontents = \summarycontents - -% These macros generate individual entries in the table of contents. -% The first argument is the chapter or section name. -% The last argument is the page number. -% The arguments in between are the chapter number, section number, ... - -% Chapter-level things, for both the long and short contents. -\def\chapentry#1#2#3{\dochapentry{#2\labelspace#1}{#3}} - -% See comments in \dochapentry re vbox and related settings -\def\shortchapentry#1#2#3{% - \vbox{\hyphenpenalty=10000\tolerance=5000 - \parindent=0pt\strut\raggedright - {#2\labelspace #1}\dotfill\doshortpageno{#3}}% -} - -\def\unnumbchapentry#1#2{\dochapentry{#1}{#2}} -\def\shortunnumberedentry#1#2{% - \vbox{\hyphenpenalty=10000\tolerance=5000 - \parindent=0pt\strut\raggedright - #1\dotfill\doshortpageno{#2}}% -} - -% Sections. -\def\secentry#1#2#3#4{\dosecentry{#2.#3\labelspace#1}{#4}} -\def\unnumbsecentry#1#2{\dosecentry{#1}{#2}} - -% Subsections. -\def\subsecentry#1#2#3#4#5{\dosubsecentry{#2.#3.#4\labelspace#1}{#5}} -\def\unnumbsubsecentry#1#2{\dosubsecentry{#1}{#2}} - -% And subsubsections. -\def\subsubsecentry#1#2#3#4#5#6{% - \dosubsubsecentry{#2.#3.#4.#5\labelspace#1}{#6}} -\def\unnumbsubsubsecentry#1#2{\dosubsubsecentry{#1}{#2}} - - -% This parameter controls the indentation of the various levels. -\newdimen\tocindent \tocindent = 3pc - -% Now for the actual typesetting. In all these, #1 is the text and #2 is the -% page number. -% -% If the toc has to be broken over pages, we would want to be at chapters -% if at all possible; hence the \penalty. -\def\dochapentry#1#2{% - \penalty-300 \vskip\baselineskip - % This \vbox (and similar ones in dosecentry etc.) used to be a - % \line; changed to permit linebreaks for long headings. See - % comments above \majorheading. Here we also use \strut to - % keep the top end of the vbox from jamming up against the previous - % entry in the table of contents. - \vbox{\chapentryfonts - \hyphenpenalty=10000\tolerance=5000 % this line and next introduced - \parindent=0pt\strut\raggedright % with \line -> \vbox change - #1\dotfill - \dopageno{#2}}% - \nobreak\vskip .25\baselineskip -} - -\def\dosecentry#1#2{% - \vbox{\secentryfonts \leftskip=\tocindent - \hyphenpenalty=10000\tolerance=5000 - \parindent=0pt\strut\raggedright #1\dotfill - \dopageno{#2}}% -} - -\def\dosubsecentry#1#2{% - \vbox{\subsecentryfonts \leftskip=2\tocindent - \hyphenpenalty=10000\tolerance=5000 - \parindent=0pt\strut\raggedright #1\dotfill - \dopageno{#2}}% -} - -\def\dosubsubsecentry#1#2{% - \vbox{\subsubsecentryfonts \leftskip=3\tocindent - \hyphenpenalty=10000\tolerance=5000 - \parindent=0pt\strut\raggedright #1\dotfill - \dopageno{#2}}% -} - -% Space between chapter (or whatever) number and the title. -\def\labelspace{\hskip1em \relax} - -\def\dopageno#1{{\rm #1}} -\def\doshortpageno#1{{\rm #1}} - -\def\chapentryfonts{\secfonts \rm} -\def\secentryfonts{\textfonts} -\let\subsecentryfonts = \textfonts -\let\subsubsecentryfonts = \textfonts - - -\message{environments,} - -% Since these characters are used in examples, it should be an even number of -% \tt widths. Each \tt character is 1en, so two makes it 1em. -% Furthermore, these definitions must come after we define our fonts. -\newbox\dblarrowbox \newbox\longdblarrowbox -\newbox\pushcharbox \newbox\bullbox -\newbox\equivbox \newbox\errorbox - -\let\ptexequiv = \equiv - -%{\tentt -%\global\setbox\dblarrowbox = \hbox to 1em{\hfil$\Rightarrow$\hfil} -%\global\setbox\longdblarrowbox = \hbox to 1em{\hfil$\mapsto$\hfil} -%\global\setbox\pushcharbox = \hbox to 1em{\hfil$\dashv$\hfil} -%\global\setbox\equivbox = \hbox to 1em{\hfil$\ptexequiv$\hfil} -% Adapted from the manmac format (p.420 of TeXbook) -%\global\setbox\bullbox = \hbox to 1em{\kern.15em\vrule height .75ex width .85ex -% depth .1ex\hfil} -%} - -\def\point{$\star$} - -\def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}} -\def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}} -\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}} - -\def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}} - -% Adapted from the TeXbook's \boxit. -{\tentt \global\dimen0 = 3em}% Width of the box. -\dimen2 = .55pt % Thickness of rules -% The text. (`r' is open on the right, `e' somewhat less so on the left.) -\setbox0 = \hbox{\kern-.75pt \tensf error\kern-1.5pt} - -\global\setbox\errorbox=\hbox to \dimen0{\hfil - \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right. - \advance\hsize by -2\dimen2 % Rules. - \vbox{ - \hrule height\dimen2 - \hbox{\vrule width\dimen2 \kern3pt % Space to left of text. - \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below. - \kern3pt\vrule width\dimen2}% Space to right. - \hrule height\dimen2} - \hfil} - -% The @error{} command. -\def\error{\leavevmode\lower.7ex\copy\errorbox} - -% @tex ... @end tex escapes into raw Tex temporarily. -% One exception: @ is still an escape character, so that @end tex works. -% But \@ or @@ will get a plain tex @ character. - -\def\tex{\begingroup -\catcode `\\=0 \catcode `\{=1 \catcode `\}=2 -\catcode `\$=3 \catcode `\&=4 \catcode `\#=6 -\catcode `\^=7 \catcode `\_=8 \catcode `\~=13 \let~=\tie -\catcode `\%=14 -\catcode 43=12 -\catcode`\"=12 -\catcode`\==12 -\catcode`\|=12 -\catcode`\<=12 -\catcode`\>=12 -\escapechar=`\\ -% -\let\{=\ptexlbrace -\let\}=\ptexrbrace -\let\.=\ptexdot -\let\*=\ptexstar -\let\dots=\ptexdots -\def\@{@}% -\let\bullet=\ptexbullet -\let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext \let\l=\ptexl -\let\L=\ptexL -% -\let\Etex=\endgroup} - -% Define @lisp ... @endlisp. -% @lisp does a \begingroup so it can rebind things, -% including the definition of @endlisp (which normally is erroneous). - -% Amount to narrow the margins by for @lisp. -\newskip\lispnarrowing \lispnarrowing=0.4in - -% This is the definition that ^M gets inside @lisp -% phr: changed space to \null, to avoid overfull hbox problems. -{\obeyspaces% -\gdef\lisppar{\null\endgraf}} - -% Cause \obeyspaces to make each Space cause a word-separation -% rather than the default which is that it acts punctuation. -% This is because space in tt font looks funny. -{\obeyspaces % -\gdef\sepspaces{\def {\ }}} - -\newskip\aboveenvskipamount \aboveenvskipamount= 0pt -\def\aboveenvbreak{{\advance\aboveenvskipamount by \parskip -\endgraf \ifdim\lastskip<\aboveenvskipamount -\removelastskip \penalty-50 \vskip\aboveenvskipamount \fi}} - -\def\afterenvbreak{\endgraf \ifdim\lastskip<\aboveenvskipamount -\removelastskip \penalty-50 \vskip\aboveenvskipamount \fi} - -% \nonarrowing is a flag. If "set", @lisp etc don't narrow margins. -\let\nonarrowing=\relax - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% \cartouche: draw rectangle w/rounded corners around argument -\font\circle=lcircle10 -\newdimen\circthick -\newdimen\cartouter\newdimen\cartinner -\newskip\normbskip\newskip\normpskip\newskip\normlskip -\circthick=\fontdimen8\circle -% -\def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth -\def\ctr{{\hskip 6pt\circle\char'010}} -\def\cbl{{\circle\char'012\hskip -6pt}} -\def\cbr{{\hskip 6pt\circle\char'011}} -\def\carttop{\hbox to \cartouter{\hskip\lskip - \ctl\leaders\hrule height\circthick\hfil\ctr - \hskip\rskip}} -\def\cartbot{\hbox to \cartouter{\hskip\lskip - \cbl\leaders\hrule height\circthick\hfil\cbr - \hskip\rskip}} -% -\newskip\lskip\newskip\rskip - -\long\def\cartouche{% -\begingroup - \lskip=\leftskip \rskip=\rightskip - \leftskip=0pt\rightskip=0pt %we want these *outside*. - \cartinner=\hsize \advance\cartinner by-\lskip - \advance\cartinner by-\rskip - \cartouter=\hsize - \advance\cartouter by 18pt % allow for 3pt kerns on either -% side, and for 6pt waste from -% each corner char - \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip - % Flag to tell @lisp, etc., not to narrow margin. - \let\nonarrowing=\comment - \vbox\bgroup - \baselineskip=0pt\parskip=0pt\lineskip=0pt - \carttop - \hbox\bgroup - \hskip\lskip - \vrule\kern3pt - \vbox\bgroup - \hsize=\cartinner - \kern3pt - \begingroup - \baselineskip=\normbskip - \lineskip=\normlskip - \parskip=\normpskip - \vskip -\parskip -\def\Ecartouche{% - \endgroup - \kern3pt - \egroup - \kern3pt\vrule - \hskip\rskip - \egroup - \cartbot - \egroup -\endgroup -}} - -\def\lisp{\aboveenvbreak -\begingroup\inENV % This group ends at the end of the @lisp body -\hfuzz=12truept % Don't be fussy -% Make spaces be word-separators rather than space tokens. -\sepspaces % -% Single space lines -\singlespace % -% The following causes blank lines not to be ignored -% by adding a space to the end of each line. -\let\par=\lisppar -\def\Elisp{\endgroup\afterenvbreak}% -\parskip=0pt -% @cartouche defines \nonarrowing to inhibit narrowing -% at next level down. -\ifx\nonarrowing\relax -\advance \leftskip by \lispnarrowing -\exdentamount=\lispnarrowing -\let\exdent=\nofillexdent -\let\nonarrowing=\relax -\fi -\parindent=0pt -\obeyspaces \obeylines \tt \rawbackslash -\def\next##1{}\next} - - -\let\example=\lisp -\def\Eexample{\Elisp} - -\let\smallexample=\lisp -\def\Esmallexample{\Elisp} - -% Macro for 9 pt. examples, necessary to print with 5" lines. -% From Pavel@xerox. This is not really used unless the -% @smallbook command is given. - -\def\smalllispx{\aboveenvbreak\begingroup\inENV -% This group ends at the end of the @lisp body -\hfuzz=12truept % Don't be fussy -% Make spaces be word-separators rather than space tokens. -\sepspaces % -% Single space lines -\singlespace % -% The following causes blank lines not to be ignored -% by adding a space to the end of each line. -\let\par=\lisppar -\def\Esmalllisp{\endgroup\afterenvbreak}% -%%%% Smaller baseline skip for small examples. -\baselineskip 10pt -\parskip=0pt -% @cartouche defines \nonarrowing to inhibit narrowing -% at next level down. -\ifx\nonarrowing\relax -\advance \leftskip by \lispnarrowing -\exdentamount=\lispnarrowing -\let\exdent=\nofillexdent -\let\nonarrowing=\relax -\fi -\parindent=0pt -\obeyspaces \obeylines \ninett \indexfonts \rawbackslash -\def\next##1{}\next} - -% This is @display; same as @lisp except use roman font. - -\def\display{\begingroup\inENV %This group ends at the end of the @display body -\aboveenvbreak -% Make spaces be word-separators rather than space tokens. -\sepspaces % -% Single space lines -\singlespace % -% The following causes blank lines not to be ignored -% by adding a space to the end of each line. -\let\par=\lisppar -\def\Edisplay{\endgroup\afterenvbreak}% -\parskip=0pt -% @cartouche defines \nonarrowing to inhibit narrowing -% at next level down. -\ifx\nonarrowing\relax -\advance \leftskip by \lispnarrowing -\exdentamount=\lispnarrowing -\let\exdent=\nofillexdent -\let\nonarrowing=\relax -\fi -\parindent=0pt -\obeyspaces \obeylines -\def\next##1{}\next} - -% This is @format; same as @lisp except use roman font and don't narrow margins - -\def\format{\begingroup\inENV %This group ends at the end of the @format body -\aboveenvbreak -% Make spaces be word-separators rather than space tokens. -\sepspaces % -\singlespace % -% The following causes blank lines not to be ignored -% by adding a space to the end of each line. -\let\par=\lisppar -\def\Eformat{\endgroup\afterenvbreak} -\parskip=0pt \parindent=0pt -\obeyspaces \obeylines -\def\next##1{}\next} - -% @flushleft and @flushright - -\def\flushleft{% -\begingroup\inENV %This group ends at the end of the @format body -\aboveenvbreak -% Make spaces be word-separators rather than space tokens. -\sepspaces % -% The following causes blank lines not to be ignored -% by adding a space to the end of each line. -% This also causes @ to work when the directive name -% is terminated by end of line. -\let\par=\lisppar -\def\Eflushleft{\endgroup\afterenvbreak}% -\parskip=0pt \parindent=0pt -\obeyspaces \obeylines -\def\next##1{}\next} - -\def\flushright{% -\begingroup\inENV %This group ends at the end of the @format body -\aboveenvbreak -% Make spaces be word-separators rather than space tokens. -\sepspaces % -% The following causes blank lines not to be ignored -% by adding a space to the end of each line. -% This also causes @ to work when the directive name -% is terminated by end of line. -\let\par=\lisppar -\def\Eflushright{\endgroup\afterenvbreak}% -\parskip=0pt \parindent=0pt -\advance \leftskip by 0pt plus 1fill -\obeyspaces \obeylines -\def\next##1{}\next} - -% @quotation - narrow the margins. - -\def\quotation{% -\begingroup\inENV %This group ends at the end of the @quotation body -{\parskip=0pt % because we will skip by \parskip too, later -\aboveenvbreak}% -\singlespace -\parindent=0pt -\def\Equotation{\par\endgroup\afterenvbreak}% -% @cartouche defines \nonarrowing to inhibit narrowing -% at next level down. -\ifx\nonarrowing\relax -\advance \leftskip by \lispnarrowing -\advance \rightskip by \lispnarrowing -\exdentamount=\lispnarrowing -\let\nonarrowing=\relax -\fi} - -\message{defuns,} -% Define formatter for defuns -% First, allow user to change definition object font (\df) internally -\def\setdeffont #1 {\csname DEF#1\endcsname} - -\newskip\defbodyindent \defbodyindent=.4in -\newskip\defargsindent \defargsindent=50pt -\newskip\deftypemargin \deftypemargin=12pt -\newskip\deflastargmargin \deflastargmargin=18pt - -\newcount\parencount -% define \functionparens, which makes ( and ) and & do special things. -% \functionparens affects the group it is contained in. -\def\activeparens{% -\catcode`\(=\active \catcode`\)=\active \catcode`\&=\active -\catcode`\[=\active \catcode`\]=\active} -{\activeparens % Now, smart parens don't turn on until &foo (see \amprm) -\gdef\functionparens{\boldbrax\let&=\amprm\parencount=0 } -\gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb} - -% Definitions of (, ) and & used in args for functions. -% This is the definition of ( outside of all parentheses. -\gdef\oprm#1 {{\rm\char`\(}#1 \bf \let(=\opnested % -\global\advance\parencount by 1 } -% -% This is the definition of ( when already inside a level of parens. -\gdef\opnested{\char`\(\global\advance\parencount by 1 } -% -\gdef\clrm{% Print a paren in roman if it is taking us back to depth of 0. -% also in that case restore the outer-level definition of (. -\ifnum \parencount=1 {\rm \char `\)}\sl \let(=\oprm \else \char `\) \fi -\global\advance \parencount by -1 } -% If we encounter &foo, then turn on ()-hacking afterwards -\gdef\amprm#1 {{\rm\}\let(=\oprm \let)=\clrm\ } -% -\gdef\normalparens{\boldbrax\let&=\ampnr} -} % End of definition inside \activeparens -%% These parens (in \boldbrax) actually are a little bolder than the -%% contained text. This is especially needed for [ and ] -\def\opnr{{\sf\char`\(}} \def\clnr{{\sf\char`\)}} \def\ampnr{\&} -\def\lbrb{{\bf\char`\[}} \def\rbrb{{\bf\char`\]}} - -% First, defname, which formats the header line itself. -% #1 should be the function name. -% #2 should be the type of definition, such as "Function". - -\def\defname #1#2{% -% Get the values of \leftskip and \rightskip as they were -% outside the @def... -\dimen2=\leftskip -\advance\dimen2 by -\defbodyindent -\dimen3=\rightskip -\advance\dimen3 by -\defbodyindent -\noindent % -\setbox0=\hbox{\hskip \deflastargmargin{\rm #2}\hskip \deftypemargin}% -\dimen0=\hsize \advance \dimen0 by -\wd0 % compute size for first line -\dimen1=\hsize \advance \dimen1 by -\defargsindent %size for continuations -\parshape 2 0in \dimen0 \defargsindent \dimen1 % -% Now output arg 2 ("Function" or some such) -% ending at \deftypemargin from the right margin, -% but stuck inside a box of width 0 so it does not interfere with linebreaking -{% Adjust \hsize to exclude the ambient margins, -% so that \rightline will obey them. -\advance \hsize by -\dimen2 \advance \hsize by -\dimen3 -\rlap{\rightline{{\rm #2}\hskip \deftypemargin}}}% -% Make all lines underfull and no complaints: -\tolerance=10000 \hbadness=10000 -\advance\leftskip by -\defbodyindent -\exdentamount=\defbodyindent -{\df #1}\enskip % Generate function name -} - -% Actually process the body of a definition -% #1 should be the terminating control sequence, such as \Edefun. -% #2 should be the "another name" control sequence, such as \defunx. -% #3 should be the control sequence that actually processes the header, -% such as \defunheader. - -\def\defparsebody #1#2#3{\begingroup\inENV% Environment for definitionbody -\medbreak % -% Define the end token that this defining construct specifies -% so that it will exit this group. -\def#1{\endgraf\endgroup\medbreak}% -\def#2{\begingroup\obeylines\activeparens\spacesplit#3}% -\parindent=0in -\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent -\exdentamount=\defbodyindent -\begingroup % -\catcode 61=\active % -\obeylines\activeparens\spacesplit#3} - -\def\defmethparsebody #1#2#3#4 {\begingroup\inENV % -\medbreak % -% Define the end token that this defining construct specifies -% so that it will exit this group. -\def#1{\endgraf\endgroup\medbreak}% -\def#2##1 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}}}% -\parindent=0in -\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent -\exdentamount=\defbodyindent -\begingroup\obeylines\activeparens\spacesplit{#3{#4}}} - -\def\defopparsebody #1#2#3#4#5 {\begingroup\inENV % -\medbreak % -% Define the end token that this defining construct specifies -% so that it will exit this group. -\def#1{\endgraf\endgroup\medbreak}% -\def#2##1 ##2 {\def#4{##1}% -\begingroup\obeylines\activeparens\spacesplit{#3{##2}}}% -\parindent=0in -\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent -\exdentamount=\defbodyindent -\begingroup\obeylines\activeparens\spacesplit{#3{#5}}} - -% These parsing functions are similar to the preceding ones -% except that they do not make parens into active characters. -% These are used for "variables" since they have no arguments. - -\def\defvarparsebody #1#2#3{\begingroup\inENV% Environment for definitionbody -\medbreak % -% Define the end token that this defining construct specifies -% so that it will exit this group. -\def#1{\endgraf\endgroup\medbreak}% -\def#2{\begingroup\obeylines\spacesplit#3}% -\parindent=0in -\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent -\exdentamount=\defbodyindent -\begingroup % -\catcode 61=\active % -\obeylines\spacesplit#3} - -\def\defvrparsebody #1#2#3#4 {\begingroup\inENV % -\medbreak % -% Define the end token that this defining construct specifies -% so that it will exit this group. -\def#1{\endgraf\endgroup\medbreak}% -\def#2##1 {\begingroup\obeylines\spacesplit{#3{##1}}}% -\parindent=0in -\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent -\exdentamount=\defbodyindent -\begingroup\obeylines\spacesplit{#3{#4}}} - -\def\defopvarparsebody #1#2#3#4#5 {\begingroup\inENV % -\medbreak % -% Define the end token that this defining construct specifies -% so that it will exit this group. -\def#1{\endgraf\endgroup\medbreak}% -\def#2##1 ##2 {\def#4{##1}% -\begingroup\obeylines\spacesplit{#3{##2}}}% -\parindent=0in -\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent -\exdentamount=\defbodyindent -\begingroup\obeylines\spacesplit{#3{#5}}} - -% Split up #2 at the first space token. -% call #1 with two arguments: -% the first is all of #2 before the space token, -% the second is all of #2 after that space token. -% If #2 contains no space token, all of it is passed as the first arg -% and the second is passed as empty. - -{\obeylines -\gdef\spacesplit#1#2^^M{\endgroup\spacesplitfoo{#1}#2 \relax\spacesplitfoo}% -\long\gdef\spacesplitfoo#1#2 #3#4\spacesplitfoo{% -\ifx\relax #3% -#1{#2}{}\else #1{#2}{#3#4}\fi}} - -% So much for the things common to all kinds of definitions. - -% Define @defun. - -% First, define the processing that is wanted for arguments of \defun -% Use this to expand the args and terminate the paragraph they make up - -\def\defunargs #1{\functionparens \sl -% Expand, preventing hyphenation at `-' chars. -% Note that groups don't affect changes in \hyphenchar. -\hyphenchar\tensl=0 -#1% -\hyphenchar\tensl=45 -\ifnum\parencount=0 \else \errmessage{unbalanced parens in @def arguments}\fi% -\interlinepenalty=10000 -\advance\rightskip by 0pt plus 1fil -\endgraf\penalty 10000\vskip -\parskip\penalty 10000% -} - -\def\deftypefunargs #1{% -% Expand, preventing hyphenation at `-' chars. -% Note that groups don't affect changes in \hyphenchar. -\functionparens -\code{#1}% -\interlinepenalty=10000 -\advance\rightskip by 0pt plus 1fil -\endgraf\penalty 10000\vskip -\parskip\penalty 10000% -} - -% Do complete processing of one @defun or @defunx line already parsed. - -% @deffn Command forward-char nchars - -\def\deffn{\defmethparsebody\Edeffn\deffnx\deffnheader} - -\def\deffnheader #1#2#3{\doind {fn}{\code{#2}}% -\begingroup\defname {#2}{#1}\defunargs{#3}\endgroup % -\catcode 61=\other % Turn off change made in \defparsebody -} - -% @defun == @deffn Function - -\def\defun{\defparsebody\Edefun\defunx\defunheader} - -\def\defunheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index -\begingroup\defname {#1}{Function}% -\defunargs {#2}\endgroup % -\catcode 61=\other % Turn off change made in \defparsebody -} - -% @deftypefun int foobar (int @var{foo}, float @var{bar}) - -\def\deftypefun{\defparsebody\Edeftypefun\deftypefunx\deftypefunheader} - -% #1 is the data type. #2 is the name and args. -\def\deftypefunheader #1#2{\deftypefunheaderx{#1}#2 \relax} -% #1 is the data type, #2 the name, #3 the args. -\def\deftypefunheaderx #1#2 #3\relax{% -\doind {fn}{\code{#2}}% Make entry in function index -\begingroup\defname {\code{#1} #2}{Function}% -\deftypefunargs {#3}\endgroup % -\catcode 61=\other % Turn off change made in \defparsebody -} - -% @deftypefn {Library Function} int foobar (int @var{foo}, float @var{bar}) - -\def\deftypefn{\defmethparsebody\Edeftypefn\deftypefnx\deftypefnheader} - -% #1 is the classification. #2 is the data type. #3 is the name and args. -\def\deftypefnheader #1#2#3{\deftypefnheaderx{#1}{#2}#3 \relax} -% #1 is the classification, #2 the data type, #3 the name, #4 the args. -\def\deftypefnheaderx #1#2#3 #4\relax{% -\doind {fn}{\code{#3}}% Make entry in function index -\begingroup\defname {\code{#2} #3}{#1}% -\deftypefunargs {#4}\endgroup % -\catcode 61=\other % Turn off change made in \defparsebody -} - -% @defmac == @deffn Macro - -\def\defmac{\defparsebody\Edefmac\defmacx\defmacheader} - -\def\defmacheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index -\begingroup\defname {#1}{Macro}% -\defunargs {#2}\endgroup % -\catcode 61=\other % Turn off change made in \defparsebody -} - -% @defspec == @deffn Special Form - -\def\defspec{\defparsebody\Edefspec\defspecx\defspecheader} - -\def\defspecheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index -\begingroup\defname {#1}{Special Form}% -\defunargs {#2}\endgroup % -\catcode 61=\other % Turn off change made in \defparsebody -} - -% This definition is run if you use @defunx -% anywhere other than immediately after a @defun or @defunx. - -\def\deffnx #1 {\errmessage{@deffnx in invalid context}} -\def\defunx #1 {\errmessage{@defunx in invalid context}} -\def\defmacx #1 {\errmessage{@defmacx in invalid context}} -\def\defspecx #1 {\errmessage{@defspecx in invalid context}} -\def\deftypefnx #1 {\errmessage{@deftypefnx in invalid context}} -\def\deftypeunx #1 {\errmessage{@deftypeunx in invalid context}} - -% @defmethod, and so on - -% @defop {Funny Method} foo-class frobnicate argument - -\def\defop #1 {\def\defoptype{#1}% -\defopparsebody\Edefop\defopx\defopheader\defoptype} - -\def\defopheader #1#2#3{% -\dosubind {fn}{\code{#2}}{on #1}% Make entry in function index -\begingroup\defname {#2}{\defoptype{} on #1}% -\defunargs {#3}\endgroup % -} - -% @defmethod == @defop Method - -\def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader} - -\def\defmethodheader #1#2#3{% -\dosubind {fn}{\code{#2}}{on #1}% entry in function index -\begingroup\defname {#2}{Method on #1}% -\defunargs {#3}\endgroup % -} - -% @defcv {Class Option} foo-class foo-flag - -\def\defcv #1 {\def\defcvtype{#1}% -\defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype} - -\def\defcvarheader #1#2#3{% -\dosubind {vr}{\code{#2}}{of #1}% Make entry in var index -\begingroup\defname {#2}{\defcvtype{} of #1}% -\defvarargs {#3}\endgroup % -} - -% @defivar == @defcv {Instance Variable} - -\def\defivar{\defvrparsebody\Edefivar\defivarx\defivarheader} - -\def\defivarheader #1#2#3{% -\dosubind {vr}{\code{#2}}{of #1}% Make entry in var index -\begingroup\defname {#2}{Instance Variable of #1}% -\defvarargs {#3}\endgroup % -} - -% These definitions are run if you use @defmethodx, etc., -% anywhere other than immediately after a @defmethod, etc. - -\def\defopx #1 {\errmessage{@defopx in invalid context}} -\def\defmethodx #1 {\errmessage{@defmethodx in invalid context}} -\def\defcvx #1 {\errmessage{@defcvx in invalid context}} -\def\defivarx #1 {\errmessage{@defivarx in invalid context}} - -% Now @defvar - -% First, define the processing that is wanted for arguments of @defvar. -% This is actually simple: just print them in roman. -% This must expand the args and terminate the paragraph they make up -\def\defvarargs #1{\normalparens #1% -\interlinepenalty=10000 -\endgraf\penalty 10000\vskip -\parskip\penalty 10000} - -% @defvr Counter foo-count - -\def\defvr{\defvrparsebody\Edefvr\defvrx\defvrheader} - -\def\defvrheader #1#2#3{\doind {vr}{\code{#2}}% -\begingroup\defname {#2}{#1}\defvarargs{#3}\endgroup} - -% @defvar == @defvr Variable - -\def\defvar{\defvarparsebody\Edefvar\defvarx\defvarheader} - -\def\defvarheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index -\begingroup\defname {#1}{Variable}% -\defvarargs {#2}\endgroup % -} - -% @defopt == @defvr {User Option} - -\def\defopt{\defvarparsebody\Edefopt\defoptx\defoptheader} - -\def\defoptheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index -\begingroup\defname {#1}{User Option}% -\defvarargs {#2}\endgroup % -} - -% @deftypevar int foobar - -\def\deftypevar{\defvarparsebody\Edeftypevar\deftypevarx\deftypevarheader} - -% #1 is the data type. #2 is the name. -\def\deftypevarheader #1#2{% -\doind {vr}{\code{#2}}% Make entry in variables index -\begingroup\defname {\code{#1} #2}{Variable}% -\interlinepenalty=10000 -\endgraf\penalty 10000\vskip -\parskip\penalty 10000 -\endgroup} - -% @deftypevr {Global Flag} int enable - -\def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader} - -\def\deftypevrheader #1#2#3{\doind {vr}{\code{#3}}% -\begingroup\defname {\code{#2} #3}{#1} -\interlinepenalty=10000 -\endgraf\penalty 10000\vskip -\parskip\penalty 10000 -\endgroup} - -% This definition is run if you use @defvarx -% anywhere other than immediately after a @defvar or @defvarx. - -\def\defvrx #1 {\errmessage{@defvrx in invalid context}} -\def\defvarx #1 {\errmessage{@defvarx in invalid context}} -\def\defoptx #1 {\errmessage{@defoptx in invalid context}} -\def\deftypevarx #1 {\errmessage{@deftypevarx in invalid context}} -\def\deftypevrx #1 {\errmessage{@deftypevrx in invalid context}} - -% Now define @deftp -% Args are printed in bold, a slight difference from @defvar. - -\def\deftpargs #1{\bf \defvarargs{#1}} - -% @deftp Class window height width ... - -\def\deftp{\defvrparsebody\Edeftp\deftpx\deftpheader} - -\def\deftpheader #1#2#3{\doind {tp}{\code{#2}}% -\begingroup\defname {#2}{#1}\deftpargs{#3}\endgroup} - -% This definition is run if you use @deftpx, etc -% anywhere other than immediately after a @deftp, etc. - -\def\deftpx #1 {\errmessage{@deftpx in invalid context}} - -\message{cross reference,} -% Define cross-reference macros -\newwrite \auxfile - -\newif\ifhavexrefs % True if xref values are known. -\newif\ifwarnedxrefs % True if we warned once that they aren't known. - -% \setref{foo} defines a cross-reference point named foo. - -\def\setref#1{% -%\dosetq{#1-title}{Ytitle}% -\dosetq{#1-pg}{Ypagenumber}% -\dosetq{#1-snt}{Ysectionnumberandtype}} - -\def\unnumbsetref#1{% -%\dosetq{#1-title}{Ytitle}% -\dosetq{#1-pg}{Ypagenumber}% -\dosetq{#1-snt}{Ynothing}} - -\def\appendixsetref#1{% -%\dosetq{#1-title}{Ytitle}% -\dosetq{#1-pg}{Ypagenumber}% -\dosetq{#1-snt}{Yappendixletterandtype}} - -% \xref, \pxref, and \ref generate cross-references to specified points. -% For \xrefX, #1 is the node name, #2 the name of the Info -% cross-reference, #3 the printed node name, #4 the name of the Info -% file, #5 the name of the printed manual. All but the node name can be -% omitted. -% -\def\pxref#1{see \xrefX[#1,,,,,,,]} -\def\xref#1{See \xrefX[#1,,,,,,,]} -\def\ref#1{\xrefX[#1,,,,,,,]} -\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup% -\def\printedmanual{\ignorespaces #5}% -\def\printednodename{\ignorespaces #3}% -% -\setbox1=\hbox{\printedmanual}% -\setbox0=\hbox{\printednodename}% -\ifdim \wd0=0pt% -\def\printednodename{\ignorespaces #1}% -%%% Uncommment the following line to make the actual chapter or section title -%%% appear inside the square brackets. -%\def\printednodename{#1-title}% -\fi% -% -% -% If we use \unhbox0 and \unhbox1 to print the node names, TeX does -% not insert empty discretionaries after hyphens, which means that it -% will not find a line break at a hyphen in a node names. Since some -% manuals are best written with fairly long node names, containing -% hyphens, this is a loss. Therefore, we simply give the text of -% the node name again, so it is as if TeX is seeing it for the first -% time. -\ifdim \wd1>0pt -section ``\printednodename'' in \cite{\printedmanual}% -\else% -\turnoffactive% -\refx{#1-snt}{} [\printednodename], page\tie\refx{#1-pg}{}% -\fi -\endgroup} - -% \dosetq is the interface for calls from other macros - -% Use \turnoffactive so that punctuation chars such as underscore -% work in node names. -\def\dosetq #1#2{{\let\folio=0 \turnoffactive% -\edef\next{\write\auxfile{\internalsetq {#1}{#2}}}% -\next}} - -% \internalsetq {foo}{page} expands into -% CHARACTERS 'xrdef {foo}{...expansion of \Ypage...} -% When the aux file is read, ' is the escape character - -\def\internalsetq #1#2{'xrdef {#1}{\csname #2\endcsname}} - -% Things to be expanded by \internalsetq - -\def\Ypagenumber{\folio} - -\def\Ytitle{\thischapter} - -\def\Ynothing{} - -\def\Ysectionnumberandtype{% -\ifnum\secno=0 Chapter\xreftie\the\chapno % -\else \ifnum \subsecno=0 Section\xreftie\the\chapno.\the\secno % -\else \ifnum \subsubsecno=0 % -Section\xreftie\the\chapno.\the\secno.\the\subsecno % -\else % -Section\xreftie\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno % -\fi \fi \fi } - -\def\Yappendixletterandtype{% -\ifnum\secno=0 Appendix\xreftie'char\the\appendixno{}% -\else \ifnum \subsecno=0 Section\xreftie'char\the\appendixno.\the\secno % -\else \ifnum \subsubsecno=0 % -Section\xreftie'char\the\appendixno.\the\secno.\the\subsecno % -\else % -Section\xreftie'char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno % -\fi \fi \fi } - -\gdef\xreftie{'tie} - -% Use TeX 3.0's \inputlineno to get the line number, for better error -% messages, but if we're using an old version of TeX, don't do anything. -% -\ifx\inputlineno\thisisundefined - \let\linenumber = \empty % Non-3.0. -\else - \def\linenumber{\the\inputlineno:\space} -\fi - -% Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME. -% If its value is nonempty, SUFFIX is output afterward. - -\def\refx#1#2{% - \expandafter\ifx\csname X#1\endcsname\relax - % If not defined, say something at least. - $\langle$un\-de\-fined$\rangle$% - \ifhavexrefs - \message{\linenumber Undefined cross reference `#1'.}% - \else - \ifwarnedxrefs\else - \global\warnedxrefstrue - \message{Cross reference values unknown; you must run TeX again.}% - \fi - \fi - \else - % It's defined, so just use it. - \csname X#1\endcsname - \fi - #2% Output the suffix in any case. -} - -% Read the last existing aux file, if any. No error if none exists. - -% This is the macro invoked by entries in the aux file. -\def\xrdef #1#2{ -{\catcode`\'=\other\expandafter \gdef \csname X#1\endcsname {#2}}} - -\def\readauxfile{% -\begingroup -\catcode `\^^@=\other -\catcode `\=\other -\catcode `\=\other -\catcode `\^^C=\other -\catcode `\^^D=\other -\catcode `\^^E=\other -\catcode `\^^F=\other -\catcode `\^^G=\other -\catcode `\^^H=\other -\catcode `\=\other -\catcode `\^^L=\other -\catcode `\=\other -\catcode `\=\other -\catcode `\=\other -\catcode `\=\other -\catcode `\=\other -\catcode `\=\other -\catcode `\=\other -\catcode `\=\other -\catcode `\=\other -\catcode `\=\other -\catcode `\=\other -\catcode `\=\other -\catcode 26=\other -\catcode `\^^[=\other -\catcode `\^^\=\other -\catcode `\^^]=\other -\catcode `\^^^=\other -\catcode `\^^_=\other -\catcode `\@=\other -\catcode `\^=\other -\catcode `\~=\other -\catcode `\[=\other -\catcode `\]=\other -\catcode`\"=\other -\catcode`\_=\other -\catcode`\|=\other -\catcode`\<=\other -\catcode`\>=\other -\catcode `\$=\other -\catcode `\#=\other -\catcode `\&=\other -% the aux file uses ' as the escape. -% Turn off \ as an escape so we do not lose on -% entries which were dumped with control sequences in their names. -% For example, 'xrdef {$\leq $-fun}{page ...} made by @defun ^^ -% Reference to such entries still does not work the way one would wish, -% but at least they do not bomb out when the aux file is read in. -\catcode `\{=1 \catcode `\}=2 -\catcode `\%=\other -\catcode `\'=0 -\catcode `\\=\other -\openin 1 \jobname.aux -\ifeof 1 \else \closein 1 \input \jobname.aux \global\havexrefstrue -\fi -% Open the new aux file. Tex will close it automatically at exit. -\openout \auxfile=\jobname.aux -\endgroup} - - -% Footnotes. - -\newcount \footnoteno - -% The trailing space in the following definition for supereject is -% vital for proper filling; pages come out unaligned when you do a -% pagealignmacro call if that space before the closing brace is -% removed. -\def\supereject{\par\penalty -20000\footnoteno =0 } - -% @footnotestyle is meaningful for info output only.. -\let\footnotestyle=\comment - -\let\ptexfootnote=\footnote - -{\catcode `\@=11 -\long\gdef\footnote #1{\global\advance \footnoteno by \@ne -\unskip -\edef\thisfootno{$^{\the\footnoteno}$}% -\let\@sf\empty -\ifhmode\edef\@sf{\spacefactor\the\spacefactor}\/\fi -\thisfootno\@sf \footnotezzz{#1}} -% \parsearg\footnotezzz} - -\long\gdef\footnotezzz #1{\insert\footins{ -\interlinepenalty\interfootnotelinepenalty -\splittopskip\ht\strutbox % top baseline for broken footnotes -\splitmaxdepth\dp\strutbox \floatingpenalty\@MM -\leftskip\z@skip \rightskip\z@skip \spaceskip\z@skip \xspaceskip\z@skip -\footstrut\parindent=\defaultparindent\hang\textindent{\thisfootno}#1\strut}} - -}%end \catcode `\@=11 - -% End of control word definitions. - -\message{and turning on texinfo input format.} - -\def\openindices{% - \newindex{cp}% - \newcodeindex{fn}% - \newcodeindex{vr}% - \newcodeindex{tp}% - \newcodeindex{ky}% - \newcodeindex{pg}% -} - -% Set some numeric style parameters, for 8.5 x 11 format. - -%\hsize = 6.5in -\newdimen\defaultparindent \defaultparindent = 15pt -\parindent = \defaultparindent -\parskip 18pt plus 1pt -\baselineskip 15pt -\advance\topskip by 1.2cm - -% Prevent underfull vbox error messages. -\vbadness=10000 - -% Following George Bush, just get rid of widows and orphans. -\widowpenalty=10000 -\clubpenalty=10000 - -% Use TeX 3.0's \emergencystretch to help line breaking, but if we're -% using an old version of TeX, don't do anything. We want the amount of -% stretch added to depend on the line length, hence the dependence on -% \hsize. This makes it come to about 9pt for the 8.5x11 format. -% -\ifx\emergencystretch\thisisundefined \else - \emergencystretch = \hsize - \divide\emergencystretch by 45 -\fi - -% Use @smallbook to reset parameters for 7x9.5 format (or else 7x9.25) -\def\smallbook{ -\global\lispnarrowing = 0.3in -\global\baselineskip 12pt -\advance\topskip by -1cm -\global\parskip 3pt plus 1pt -\global\hsize = 5in -\global\doublecolumnhsize=2.4in \global\doublecolumnvsize=15.0in -\global\vsize=7.5in -\global\tolerance=700 -\global\hfuzz=1pt -\global\contentsrightmargin=0pt - -\global\pagewidth=\hsize -\global\pageheight=\vsize - -\global\let\smalllisp=\smalllispx -\global\let\smallexample=\smalllispx -\global\def\Esmallexample{\Esmalllisp} -} - -% Use @afourpaper to print on European A4 paper. -\def\afourpaper{ -\global\tolerance=700 -\global\hfuzz=1pt -\global\baselineskip=12pt -\global\parskip 15pt plus 1pt - -\global\vsize= 53\baselineskip -\advance\vsize by \topskip -%\global\hsize= 5.85in % A4 wide 10pt -\global\hsize= 6.5in -\global\outerhsize=\hsize -\global\advance\outerhsize by 0.5in -\global\outervsize=\vsize -\global\advance\outervsize by 0.6in -\global\doublecolumnhsize=\hsize -\global\divide\doublecolumnhsize by 2 -\global\advance\doublecolumnhsize by -0.1in -\global\doublecolumnvsize=\vsize -\global\multiply\doublecolumnvsize by 2 -\global\advance\doublecolumnvsize by 0.1in - -\global\pagewidth=\hsize -\global\pageheight=\vsize -} - -%% For a final copy, take out the rectangles -%% that mark overfull boxes (in case you have decided -%% that the text looks ok even though it passes the margin). -\def\finalout{\overfullrule=0pt} - -% Define macros to output various characters with catcode for normal text. -\catcode`\"=\other -\catcode`\~=\other -\catcode`\^=\other -\catcode`\_=\other -\catcode`\|=\other -\catcode`\<=\other -\catcode`\>=\other -\catcode`\+=\other -\def\normaldoublequote{"} -\def\normaltilde{~} -\def\normalcaret{^} -\def\normalunderscore{_} -\def\normalverticalbar{|} -\def\normalless{<} -\def\normalgreater{>} -\def\normalplus{+} - -% This macro is used to make a character print one way in ttfont -% where it can probably just be output, and another way in other fonts, -% where something hairier probably needs to be done. -% -% #1 is what to print if we are indeed using \tt; #2 is what to print -% otherwise. Since all the Computer Modern typewriter fonts have zero -% interword stretch (and shrink), and it is reasonable to expect all -% typewriter fonts to have this, we can check that font parameter. -% -\def\ifusingtt#1#2{\ifdim \fontdimen3\the\font=0pt #1\else #2\fi} - -% Turn off all special characters except @ -% (and those which the user can use as if they were ordinary). -% Most of these we simply print from the \tt font, but for some, we can -% use math or other variants that look better in normal text. - -\catcode`\"=\active -\def\activedoublequote{{\tt \char '042}} -\let"=\activedoublequote -\catcode`\~=\active -\def~{{\tt \char '176}} -\chardef\hat=`\^ -\catcode`\^=\active -\def^{{\tt \hat}} - -\catcode`\_=\active -\def_{\ifusingtt\normalunderscore\_} -% Subroutine for the previous macro. -\def\_{\lvvmode \kern.06em \vbox{\hrule width.3em height.1ex}} - -% \lvvmode is equivalent in function to \leavevmode. -% Using \leavevmode runs into trouble when written out to -% an index file due to the expansion of \leavevmode into ``\unhbox -% \voidb@x'' ---which looks to TeX like ``\unhbox \voidb\x'' due to our -% magic tricks with @. -\def\lvvmode{\vbox to 0pt{}} - -\catcode`\|=\active -\def|{{\tt \char '174}} -\chardef \less=`\< -\catcode`\<=\active -\def<{{\tt \less}} -\chardef \gtr=`\> -\catcode`\>=\active -\def>{{\tt \gtr}} -\catcode`\+=\active -\def+{{\tt \char 43}} -%\catcode 27=\active -%\def^^[{$\diamondsuit$} - -% Used sometimes to turn off (effectively) the active characters -% even after parsing them. -\def\turnoffactive{\let"=\normaldoublequote -\let~=\normaltilde -\let^=\normalcaret -\let_=\normalunderscore -\let|=\normalverticalbar -\let<=\normalless -\let>=\normalgreater -\let+=\normalplus} - -% Set up an active definition for =, but don't enable it most of the time. -{\catcode`\==\active -\global\def={{\tt \char 61}}} - -\catcode`\@=0 - -% \rawbackslashxx output one backslash character in current font -\global\chardef\rawbackslashxx=`\\ -%{\catcode`\\=\other -%@gdef@rawbackslashxx{\}} - -% \rawbackslash redefines \ as input to do \rawbackslashxx. -{\catcode`\\=\active -@gdef@rawbackslash{@let\=@rawbackslashxx }} - -% \normalbackslash outputs one backslash in fixed width font. -\def\normalbackslash{{\tt\rawbackslashxx}} - -% Say @foo, not \foo, in error messages. -\escapechar=`\@ - -% \catcode 17=0 % Define control-q -\catcode`\\=\active - -% If a .fmt file is being used, we don't want the `\input texinfo' to show up. -% That is what \eatinput is for; after that, the `\' should revert to printing -% a backslash. -% -@gdef@eatinput input texinfo{@fixbackslash} -@global@let\ = @eatinput - -% On the other hand, perhaps the file did not have a `\input texinfo'. Then -% the first `\{ in the file would cause an error. This macro tries to fix -% that, assuming it is called before the first `\' could plausibly occur. -% -@gdef@fixbackslash{@ifx\@eatinput @let\ = @normalbackslash @fi} - -%% These look ok in all fonts, so just make them not special. The @rm below -%% makes sure that the current font starts out as the newly loaded cmr10 -@catcode`@$=@other @catcode`@%=@other @catcode`@&=@other @catcode`@#=@other - -@textfonts -@rm - -@c Local variables: -@c page-delimiter: "^\\\\message" -@c End: diff --git a/Build/source/utils/gzip/algorithm.doc b/Build/source/utils/gzip/algorithm.doc deleted file mode 100644 index 1e371c246c5..00000000000 --- a/Build/source/utils/gzip/algorithm.doc +++ /dev/null @@ -1,164 +0,0 @@ -1. Algorithm - -The deflation algorithm used by zip and gzip is a variation of LZ77 -(Lempel-Ziv 1977, see reference below). It finds duplicated strings in -the input data. The second occurrence of a string is replaced by a -pointer to the previous string, in the form of a pair (distance, -length). Distances are limited to 32K bytes, and lengths are limited -to 258 bytes. When a string does not occur anywhere in the previous -32K bytes, it is emitted as a sequence of literal bytes. (In this -description, 'string' must be taken as an arbitrary sequence of bytes, -and is not restricted to printable characters.) - -Literals or match lengths are compressed with one Huffman tree, and -match distances are compressed with another tree. The trees are stored -in a compact form at the start of each block. The blocks can have any -size (except that the compressed data for one block must fit in -available memory). A block is terminated when zip determines that it -would be useful to start another block with fresh trees. (This is -somewhat similar to compress.) - -Duplicated strings are found using a hash table. All input strings of -length 3 are inserted in the hash table. A hash index is computed for -the next 3 bytes. If the hash chain for this index is not empty, all -strings in the chain are compared with the current input string, and -the longest match is selected. - -The hash chains are searched starting with the most recent strings, to -favor small distances and thus take advantage of the Huffman encoding. -The hash chains are singly linked. There are no deletions from the -hash chains, the algorithm simply discards matches that are too old. - -To avoid a worst-case situation, very long hash chains are arbitrarily -truncated at a certain length, determined by a runtime option (zip -1 -to -9). So zip does not always find the longest possible match but -generally finds a match which is long enough. - -zip also defers the selection of matches with a lazy evaluation -mechanism. After a match of length N has been found, zip searches for a -longer match at the next input byte. If a longer match is found, the -previous match is truncated to a length of one (thus producing a single -literal byte) and the longer match is emitted afterwards. Otherwise, -the original match is kept, and the next match search is attempted only -N steps later. - -The lazy match evaluation is also subject to a runtime parameter. If -the current match is long enough, zip reduces the search for a longer -match, thus speeding up the whole process. If compression ratio is more -important than speed, zip attempts a complete second search even if -the first match is already long enough. - -The lazy match evaluation is not performed for the fastest compression -modes (speed options -1 to -3). For these fast modes, new strings -are inserted in the hash table only when no match was found, or -when the match is not too long. This degrades the compression ratio -but saves time since there are both fewer insertions and fewer searches. - - -2. gzip file format - -The pkzip format imposes a lot of overhead in various headers, which -are useful for an archiver but not necessary when only one file is -compressed. gzip uses a much simpler structure. Numbers are in little -endian format, and bit 0 is the least significant bit. -A gzip file is a sequence of compressed members. Each member has the -following structure: - -2 bytes magic header 0x1f, 0x8b (\037 \213) -1 byte compression method (0..7 reserved, 8 = deflate) -1 byte flags - bit 0 set: file probably ascii text - bit 1 set: continuation of multi-part gzip file - bit 2 set: extra field present - bit 3 set: original file name present - bit 4 set: file comment present - bit 5 set: file is encrypted - bit 6,7: reserved -4 bytes file modification time in Unix format -1 byte extra flags (depend on compression method) -1 byte operating system on which compression took place - -2 bytes optional part number (second part=1) -2 bytes optional extra field length -? bytes optional extra field -? bytes optional original file name, zero terminated -? bytes optional file comment, zero terminated -12 bytes optional encryption header -? bytes compressed data -4 bytes crc32 -4 bytes uncompressed input size modulo 2^32 - -The format was designed to allow single pass compression without any -backwards seek, and without a priori knowledge of the uncompressed -input size or the available size on the output media. If input does -not come from a regular disk file, the file modification time is set -to the time at which compression started. - -The time stamp is useful mainly when one gzip file is transferred over -a network. In this case it would not help to keep ownership -attributes. In the local case, the ownership attributes are preserved -by gzip when compressing/decompressing the file. A time stamp of zero -is ignored. - -Bit 0 in the flags is only an optional indication, which can be set by -a small lookahead in the input data. In case of doubt, the flag is -cleared indicating binary data. For systems which have different -file formats for ascii text and binary data, the decompressor can -use the flag to choose the appropriate format. - -The extra field, if present, must consist of one or more subfields, -each with the following format: - - subfield id : 2 bytes - subfield size : 2 bytes (little-endian format) - subfield data - -The subfield id can consist of two letters with some mnemonic value. -Please send any such id to <gzip@gnu.org>. Ids with a zero second -byte are reserved for future use. The following ids are defined: - - Ap (0x41, 0x70) : Apollo file type information - -The subfield size is the size of the subfield data and does not -include the id and the size itself. The field 'extra field length' is -the total size of the extra field, including subfield ids and sizes. - -It must be possible to detect the end of the compressed data with any -compression format, regardless of the actual size of the compressed -data. If the compressed data cannot fit in one file (in particular for -diskettes), each part starts with a header as described above, but -only the last part has the crc32 and uncompressed size. A decompressor -may prompt for additional data for multipart compressed files. It is -desirable but not mandatory that multiple parts be extractable -independently so that partial data can be recovered if one of the -parts is damaged. This is possible only if no compression state is -kept from one part to the other. The compression-type dependent flags -can indicate this. - -If the file being compressed is on a file system with case insensitive -names, the original name field must be forced to lower case. There is -no original file name if the data was compressed from standard input. - -Compression is always performed, even if the compressed file is -slightly larger than the original. The worst case expansion is -a few bytes for the gzip file header, plus 5 bytes every 32K block, -or an expansion ratio of 0.015% for large files. Note that the actual -number of used disk blocks almost never increases. - -The encryption is that of zip 1.9. For the encryption check, the -last byte of the decoded encryption header must be zero. The time -stamp of an encrypted file might be set to zero to avoid giving a clue -about the construction of the random header. - -Jean-loup Gailly -gzip@gnu.org - -References: - -[LZ77] Ziv J., Lempel A., "A Universal Algorithm for Sequential Data -Compression", IEEE Transactions on Information Theory", Vol. 23, No. 3, -pp. 337-343. - -APPNOTE.TXT documentation file in PKZIP 1.93a. It is available by -ftp in ftp.cso.uiuc.edu:/pc/exec-pc/pkz193a.exe [128.174.5.59] -Use "unzip pkz193a.exe APPNOTE.TXT" to extract (note: unzip, not gunzip). diff --git a/Build/source/utils/gzip/amiga/Makefile.gcc b/Build/source/utils/gzip/amiga/Makefile.gcc deleted file mode 100644 index 98635c1ae4e..00000000000 --- a/Build/source/utils/gzip/amiga/Makefile.gcc +++ /dev/null @@ -1,62 +0,0 @@ -# Makefile for gzip (GNU zip) -*- Indented-Text -*- -# Copyright (C) 1992-1993 Jean-loup Gailly and the Free Software Foundation - -# Amiga GCC version, written by Preston Hunt <gt5708a@prism.gatech.edu> - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -CC = gcc -CPP = cpp - -CFLAGS = -m68020 -m68881 -O2 -#CFLAGS = -m68000 -O2 -#for the 68000, set below: OBJA= -CPPFLAGS = -Dmc68020 -LDFLAGS = -O = .o - -SRCS = gzip.c zip.c deflate.c trees.c bits.c unzip.c inflate.c util.c crypt.c\ - lzw.c unlzw.c unpack.c unlzh.c makecrc.c getopt.c match.S - -OBJA = match$O - -OBJS = gzip$O zip$O deflate$O trees$O bits$O unzip$O inflate$O util$O \ - crypt$O lzw$O unlzw$O unpack$O unlzh$O getopt$O match$O - -HDRS = gzip.h lzw.h tailor.h revision.h crypt.h getopt.h - -.c.o: - $(CC) -c $(DEFS) $(CFLAGS) $< - -.PHONY: default all -all: gzip - -gzip: $(OBJS) - $(CC) $(LDFLAGS) -o $@ $(OBJS) $(LIBS) - -gzip$O zip$O deflate$O trees$O bits$O unzip$O inflate$O: gzip.h tailor.h -util$O lzw$O unlzw$O unpack$O unlzh$O crypt$O: gzip.h tailor.h - -gzip$O unlzw$O: revision.h lzw.h - -bits$O unzip$O util$O zip$O: crypt.h - -gzip$O getopt$O: getopt.h - -match$O: match.S - $(CPP) $(CPPFLAGS) match.S > _match.s - $(CC) -c _match.s - mv _match$O match$O - rm -f _match.s diff --git a/Build/source/utils/gzip/amiga/Makefile.sasc b/Build/source/utils/gzip/amiga/Makefile.sasc deleted file mode 100644 index faf15fd3e87..00000000000 --- a/Build/source/utils/gzip/amiga/Makefile.sasc +++ /dev/null @@ -1,59 +0,0 @@ -# Makefile for gzip (GNU zip) -*- Indented-Text -*- -# This Makefile is for SAS/C 6.3 on the Amiga -# Don't use it with SAS/C 6.2 or earlier versions. These versions will -# produce incorrect code for trees.c because of a bug in the optimizer. -# Made by Carsten Steger (carsten.steger@informatik.tu-muenchen.de) - -# Some notes on gzip for the Amiga: -# Due to a strange implementation of the RAM-Disk on Commodore's part -# you should not use gzip -r on a directory in the RAM-Disk. To zip all -# files in a directory 'dir' in the RAM-Disk use something like -# gzip ram:dir/#? ram:dir/#?/#? ... -# where the number of '#?'s reflects the depth of the directory 'dir'. -# -# Alas, the program has it's full functionality only if you have -# Kickstart 2.0 or higher installed. This affects the expansion of -# wildcards and the preservation of file access times. You should use -# a shell that does wildcard expansion under Kickstart 1.3. - - -CC = sc - -# If you have a 68020 or more you can define UNALIGNED_OK below -DEFS = DEF=AMIGA -LIBS = LIB LIB:scnb.lib - -CFLAGS = DATA=FAR NOSTKCHK PARM=R IDIR= -OPTFLAGS = OPT OPTGO OPTPEEP OPTCOMP=3 OPTDEP=3 OPTRDEP=3 -LDFLAGS = FROM LIB:c.o - -OBJS = gzip.o zip.o deflate.o trees.o bits.o unzip.o inflate.o util.o \ - crypt.o lzw.o unlzw.o unpack.o unlzh.o getopt.o tailor.o match.o - -.c.o: - $(CC) $(DEFS) $(CFLAGS) $(OPTFLAGS) $< -.a.o: - $(CC) $(DEFS) $(CFLAGS) $< - -all: gzip - -gzip: $(OBJS) - slink $(LDFLAGS) $(OBJS) TO $@ $(LIBS) - -gzip.o: gzip.c gzip.h tailor.h revision.h lzw.h getopt.h -zip.o: zip.c gzip.h tailor.h crypt.h -deflate.o: deflate.c gzip.h tailor.h lzw.h -trees.o: trees.c gzip.h tailor.h -bits.o: bits.c gzip.h tailor.h crypt.h -unzip.o: unzip.c gzip.h tailor.h crypt.h -inflate.o: inflate.c gzip.h tailor.h -util.o: util.c gzip.h tailor.h crypt.h -lzw.o: lzw.c lzw.h gzip.h tailor.h -unlzw.o: unlzw.c gzip.h tailor.h lzw.h -unpack.o: unpack.c gzip.h tailor.h crypt.h -unlzh.o: unlzh.c gzip.h tailor.h lzw.h -crypt.o: crypt.c -getopt.o: getopt.c getopt.h -tailor.o: tailor.c - -match.o: match.a diff --git a/Build/source/utils/gzip/amiga/match.a b/Build/source/utils/gzip/amiga/match.a deleted file mode 100644 index 0b458d2bf61..00000000000 --- a/Build/source/utils/gzip/amiga/match.a +++ /dev/null @@ -1,175 +0,0 @@ -; match.a -- optional optimized asm version of longest match in deflate.c -; Copyright (C) 1992-1993 Jean-loup Gailly -; This is free software; you can redistribute it and/or modify it under the -; terms of the GNU General Public License, see the file COPYING. - -; $Id: match.a,v 1.1 1993/03/11 16:05:57 jloup Exp $ -; -; Adapted for the Amiga by Carsten Steger <stegerc@informatik.tu-muenchen.de> -; using the code in match.S. -; The major change in this code consists of removing all unaligned -; word accesses, because they cause 68000-based Amigas to crash. -; For maximum speed, UNALIGNED_OK can be defined in Makefile.sasc. -; The program will then only run on 68020-based Amigas, though. -; -; This code will run with registerized parameters too, unless SAS -; changes parameter passing conventions between new releases of SAS/C. - - -Cur_Match reg d0 ; Must be in d0! -Best_Len reg d1 -Loop_Counter reg d2 -Scan_Start reg d3 -Scan_End reg d4 -Limit reg d5 -Chain_Length reg d6 -Scan_Test reg d7 -Scan reg a0 -Match reg a1 -Prev_Address reg a2 -Scan_Ini reg a3 -Match_Ini reg a4 - -MAX_MATCH equ 258 -MIN_MATCH equ 3 -WSIZE equ 32768 -MAX_DIST equ WSIZE-MAX_MATCH-MIN_MATCH-1 - - - xref _max_chain_length - xref _prev_length - xref _prev - xref _window - xref _strstart - xref _good_match - xref _match_start - xref _nice_match - - - section match,code - - xdef _match_init - xdef @match_init - xdef _longest_match - xdef @longest_match - - -_match_init: -@match_init: - rts - - -_longest_match: - move.l 4(sp),Cur_Match -@longest_match: - ifd UNALIGNED_OK - movem.l d2-d6/a2-a4,-(sp) - else - movem.l d2-d7/a2-a4,-(sp) - endc - move.l _max_chain_length,Chain_Length - move.l _prev_length,Best_Len - lea _prev,Prev_Address - lea _window+MIN_MATCH,Match_Ini - move.l _strstart,Limit - move.l Match_Ini,Scan_Ini - add.l Limit,Scan_Ini - subi.w #MAX_DIST,Limit - bhi.b limit_ok - moveq #0,Limit -limit_ok: - cmp.l _good_match,Best_Len - bcs.b length_ok - lsr.l #2,Chain_Length -length_ok: - subq.l #1,Chain_Length - - ifd UNALIGNED_OK - - move.w -MIN_MATCH(Scan_Ini),Scan_Start - move.w -MIN_MATCH-1(Scan_Ini,Best_Len),Scan_End - - else - - move.b -MIN_MATCH(Scan_Ini),Scan_Start - lsl.w #8,Scan_Start - move.b -MIN_MATCH+1(Scan_Ini),Scan_Start - move.b -MIN_MATCH-1(Scan_Ini,Best_Len),Scan_End - lsl.w #8,Scan_End - move.b -MIN_MATCH(Scan_Ini,Best_Len),Scan_End - - endc - - bra.b do_scan - -long_loop: - - ifd UNALIGNED_OK - - move.w -MIN_MATCH-1(Scan_Ini,Best_Len),Scan_End - - else - - move.b -MIN_MATCH-1(Scan_Ini,Best_Len),Scan_End - lsl.w #8,Scan_End - move.b -MIN_MATCH(Scan_Ini,Best_Len),Scan_End - - endc - -short_loop: - lsl.w #1,Cur_Match - move.w 0(Prev_Address,Cur_Match),Cur_Match - cmp.w Limit,Cur_Match - dbls Chain_Length,do_scan - bra.b return - -do_scan: - move.l Match_Ini,Match - add.l Cur_Match,Match - - ifd UNALIGNED_OK - - cmp.w -MIN_MATCH-1(Match,Best_Len),Scan_End - bne.b short_loop - cmp.w -MIN_MATCH(Match),Scan_Start - bne.b short_loop - - else - - move.b -MIN_MATCH-1(Match,Best_Len),Scan_Test - lsl.w #8,Scan_Test - move.b -MIN_MATCH(Match,Best_Len),Scan_Test - cmp.w Scan_Test,Scan_End - bne.b short_loop - move.b -MIN_MATCH(Match),Scan_Test - lsl.w #8,Scan_Test - move.b -MIN_MATCH+1(Match),Scan_Test - cmp.w Scan_Test,Scan_Start - bne.b short_loop - - endc - - move.w #(MAX_MATCH-MIN_MATCH),Loop_Counter - move.l Scan_Ini,Scan -scan_loop: - cmpm.b (Match)+,(Scan)+ - dbne Loop_Counter,scan_loop - - sub.l Scan_Ini,Scan - addq.l #(MIN_MATCH-1),Scan - cmp.l Best_Len,Scan - bls.b short_loop - move.l Scan,Best_Len - move.l Cur_Match,_match_start - cmp.l _nice_match,Best_Len - bcs.b long_loop -return: - move.l Best_Len,d0 - ifd UNALIGNED_OK - movem.l (sp)+,d2-d6/a2-a4 - else - movem.l (sp)+,d2-d7/a2-a4 - endc - rts - - end diff --git a/Build/source/utils/gzip/amiga/tailor.c b/Build/source/utils/gzip/amiga/tailor.c deleted file mode 100644 index 9f14cc45b6c..00000000000 --- a/Build/source/utils/gzip/amiga/tailor.c +++ /dev/null @@ -1,183 +0,0 @@ -/* tailor.c -- target dependent functions - * Copyright (C) 1993 Carsten Steger (carsten.steger@informatik.tu-muenchen.de) - * This is free software; you can redistribute it and/or modify it under the - * terms of the GNU General Public License, see the file COPYING. - */ - -/* - * This file contains Amiga specific functions for gzip. - */ - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <error.h> -#include <time.h> -#include <utime.h> -#include <exec/types.h> -#include <dos/dos.h> -#include <dos/dosextens.h> -#include <dos/dosasl.h> -#include <proto/dos.h> - -#define MAXPATH 1024 -#define MAXARGS 512 - -extern struct DosLibrary *DOSBase; - -extern void *xmalloc(unsigned int size); - -static char *expand_next_file (char *pattern); -static int in_prev_args (char *arg, char **argv, int argc); -extern void _expand_args (int *oargc, char ***oargv); - - -static char *expand_next_file (pattern) - char *pattern; -{ - long err; - char *pathname; - static struct AnchorPath *an = NULL; - - pathname = NULL; - if (pattern == NULL) - err = -1; - else - do - { - if (an == NULL) - { - an = xmalloc (sizeof (struct AnchorPath) + MAXPATH); - memset (an, 0, sizeof (struct AnchorPath) + MAXPATH); - an->ap_BreakBits = SIGBREAKF_CTRL_C; - an->ap_Strlen = MAXPATH; - an->ap_Flags = APF_DOWILD; - err = MatchFirst (pattern, an); - } - else - err = MatchNext (an); - - pathname = an->ap_Buf; - } while (err == 0 && pathname == NULL); - - if (err) - { - MatchEnd (an); - free (an); - an = NULL; - return NULL; - } - else - return pathname; -} - - -static int in_prev_args (arg, argv, argc) - char *arg, **argv; - int argc; -{ - int i, is_in_args; - - is_in_args = 0; - for (i = 1; i < argc - 1; i++) - if (stricmp (arg, argv[i]) == 0) - is_in_args = 1; - return is_in_args; -} - - -void _expand_args (oargc, oargv) - int *oargc; - char ***oargv; -{ - int i; - char *str, **argv; - static char buf[MAXPATH]; - int argc, no_match_at_all, num_matches, contains_wildcards; - - /* With Kickstart 1.3 wildcards can't be expanded. */ - if (DOSBase->dl_lib.lib_Version < 37) return; - - no_match_at_all = 1; - contains_wildcards = 0; - argc = 0; - argv = xmalloc (MAXARGS * sizeof (char *)); - - argv[argc++] = (*oargv)[0]; - for (i = 1; i < *oargc; i++) - { - if (ParsePattern ((*oargv)[i], buf, MAXPATH)) - { - contains_wildcards = 1; - num_matches = 0; - while (str = expand_next_file ((*oargv)[i])) - if (argc >= MAXARGS) - { - expand_next_file (NULL); - fprintf (stderr,"Too many files.\n"); - exit (20); - } - else - { - /* Avoid duplicate entries */ - if (!in_prev_args (str, argv, argc)) - { - argv[argc++] = strdup (str); - num_matches++; - } - } - if (num_matches != 0) - no_match_at_all = 0; - } - else - if (argc >= MAXARGS) - { - fprintf (stderr,"Too many files.\n"); - exit (20); - } - else - { - if (!in_prev_args ((*oargv)[i], argv, argc)) - argv[argc++] = (*oargv)[i]; - } - } - *oargc = argc; - *oargv = argv; - if (no_match_at_all && contains_wildcards) { - fprintf (stderr,"No match.\n"); - exit (20); - } -} - - -int utime (path, times) - char *path; - struct utimbuf *times; -{ - struct DateStamp date; - LONG error; - time_t modtime; - - /* With Kickstart 1.3 setting the filedate could be done, I guess. - * Maybe someone else will implement and test the code for this - * case (I don't have Kickstart 1.3). */ - if (DOSBase->dl_lib.lib_Version < 37) return 0; - - /* Amiga dates are counted from 1. Jan 1978 as opposed to 1. Jan 1970 - * on Unix. Therefore we have to subtract 2922 days (8*365+2). We also - * have to subtract the value of __timezone since SAS/C uses "CST+06" - * as the default value. */ - modtime = times->modtime - __timezone; - date.ds_Days = (modtime / 86400) - 2922; - modtime %= 86400; - date.ds_Minute = modtime / 60; - modtime %= 60; - date.ds_Tick = modtime * TICKS_PER_SECOND; - error = SetFileDate (path, &date); - if (error == DOSFALSE) - { - errno = EOSERR; - return -1; - } - return 0; -} diff --git a/Build/source/utils/gzip/amiga/utime.h b/Build/source/utils/gzip/amiga/utime.h deleted file mode 100644 index 8c35a1aac09..00000000000 --- a/Build/source/utils/gzip/amiga/utime.h +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef _UTIME_H -#define _UTIME_H 1 - -#ifndef _TIME_H -#include <time.h> -#endif - -struct utimbuf { - time_t actime; - time_t modtime; -}; - -extern int utime (char *path, struct utimbuf *times); - -#endif diff --git a/Build/source/utils/gzip/atari/Makefile.st b/Build/source/utils/gzip/atari/Makefile.st deleted file mode 100644 index c32fe9a4b51..00000000000 --- a/Build/source/utils/gzip/atari/Makefile.st +++ /dev/null @@ -1,48 +0,0 @@ -# Makefile for gzip (GNU zip) -*- Indented-Text -*- -# This is free software; you can redistribute it and/or modify it under the -# terms of the GNU General Public License, see the file COPYING. - -# Simple Atari-specific makefile for gcc. -# Written by Daniel Eriksson <den@hgs.se> -# Modified by Andreas Schwab <schwab@ls5.informatik.uni-dortmund.de> -# and Robert Fischer <fischer-robert@cs.yale.edu>. - -# This Makefile is configured by default for the Atari ST using the -# Minix filesytem. It can be modified (for efficiency) for an Atari TT -# according to the instructions given below. It must be modified -# for building a TOS-filesystem version. - -CC=gcc -BASIC_FLAGS = -O2 -DATARI - -# Use this for a TT-only version -#TT_FLAGS = -m68020 - -# CFLAGS for building a Minix-filesystem version -CFLAGS = $(BASIC_FLAGS) $(TT_FLAGS) - -# CFLAGS for building a TOS-filesystem version -#CFLAGS = $(BASIC_FLAGS) $(TT_FLAGS) -DTOSFS - -AS=$(CC) -c -ASFLAGS = $(CFLAGS) -LDFLAGS = - -OBJA = match.o -OBJS = bits.o crypt.o deflate.o getopt.o gzip.o inflate.o lzw.o \ - trees.o unlzw.o unpack.o unlzh.o unzip.o util.o zip.o $(OBJA) - -gzip.ttp: $(OBJS) - $(CC) $(LDFLAGS) -o gzip.ttp $(OBJS) - -gzip.o zip.o deflate.o trees.o bits.o unzip.o inflate.o: gzip.h tailor.h -util.o lzw.o unlzw.o unpack.o unlzh.o crypt.o: gzip.h tailor.h - -gzip.o unlzw.o: revision.h lzw.h - -bits.o unzip.o util.o zip.o: crypt.h - -gzip.o getopt.o: getopt.h - -match.o: match.S - $(AS) $(ASLAGS) match.S diff --git a/Build/source/utils/gzip/bits.c b/Build/source/utils/gzip/bits.c deleted file mode 100644 index 544d6da9d39..00000000000 --- a/Build/source/utils/gzip/bits.c +++ /dev/null @@ -1,205 +0,0 @@ -/* bits.c -- output variable-length bit strings - * Copyright (C) 1992-1993 Jean-loup Gailly - * This is free software; you can redistribute it and/or modify it under the - * terms of the GNU General Public License, see the file COPYING. - */ - - -/* - * PURPOSE - * - * Output variable-length bit strings. Compression can be done - * to a file or to memory. (The latter is not supported in this version.) - * - * DISCUSSION - * - * The PKZIP "deflate" file format interprets compressed file data - * as a sequence of bits. Multi-bit strings in the file may cross - * byte boundaries without restriction. - * - * The first bit of each byte is the low-order bit. - * - * The routines in this file allow a variable-length bit value to - * be output right-to-left (useful for literal values). For - * left-to-right output (useful for code strings from the tree routines), - * the bits must have been reversed first with bi_reverse(). - * - * For in-memory compression, the compressed bit stream goes directly - * into the requested output buffer. The input data is read in blocks - * by the mem_read() function. The buffer is limited to 64K on 16 bit - * machines. - * - * INTERFACE - * - * void bi_init (FILE *zipfile) - * Initialize the bit string routines. - * - * void send_bits (int value, int length) - * Write out a bit string, taking the source bits right to - * left. - * - * int bi_reverse (int value, int length) - * Reverse the bits of a bit string, taking the source bits left to - * right and emitting them right to left. - * - * void bi_windup (void) - * Write out any remaining bits in an incomplete byte. - * - * void copy_block(char *buf, unsigned len, int header) - * Copy a stored block to the zip file, storing first the length and - * its one's complement if requested. - * - */ - -#include "tailor.h" -#include "gzip.h" -#include "crypt.h" - -#ifdef DEBUG -# include <stdio.h> -#endif - -#ifdef RCSID -static char rcsid[] = "$Id: bits.c,v 0.9 1993/06/11 10:16:58 jloup Exp $"; -#endif - -/* =========================================================================== - * Local data used by the "bit string" routines. - */ - -local file_t zfile; /* output gzip file */ - -local unsigned short bi_buf; -/* Output buffer. bits are inserted starting at the bottom (least significant - * bits). - */ - -#define Buf_size (8 * 2*sizeof(char)) -/* Number of bits used within bi_buf. (bi_buf might be implemented on - * more than 16 bits on some systems.) - */ - -local int bi_valid; -/* Number of valid bits in bi_buf. All bits above the last valid bit - * are always zero. - */ - -int (*read_buf) OF((char *buf, unsigned size)); -/* Current input function. Set to mem_read for in-memory compression */ - -#ifdef DEBUG - ulg bits_sent; /* bit length of the compressed data */ -#endif - -/* =========================================================================== - * Initialize the bit string routines. - */ -void bi_init (zipfile) - file_t zipfile; /* output zip file, NO_FILE for in-memory compression */ -{ - zfile = zipfile; - bi_buf = 0; - bi_valid = 0; -#ifdef DEBUG - bits_sent = 0L; -#endif - - /* Set the defaults for file compression. They are set by memcompress - * for in-memory compression. - */ - if (zfile != NO_FILE) { - read_buf = file_read; - } -} - -/* =========================================================================== - * Send a value on a given number of bits. - * IN assertion: length <= 16 and value fits in length bits. - */ -void send_bits(value, length) - int value; /* value to send */ - int length; /* number of bits */ -{ -#ifdef DEBUG - Tracev((stderr," l %2d v %4x ", length, value)); - Assert(length > 0 && length <= 15, "invalid length"); - bits_sent += (ulg)length; -#endif - /* If not enough room in bi_buf, use (valid) bits from bi_buf and - * (16 - bi_valid) bits from value, leaving (width - (16-bi_valid)) - * unused bits in value. - */ - if (bi_valid > (int)Buf_size - length) { - bi_buf |= (value << bi_valid); - put_short(bi_buf); - bi_buf = (ush)value >> (Buf_size - bi_valid); - bi_valid += length - Buf_size; - } else { - bi_buf |= value << bi_valid; - bi_valid += length; - } -} - -/* =========================================================================== - * Reverse the first len bits of a code, using straightforward code (a faster - * method would use a table) - * IN assertion: 1 <= len <= 15 - */ -unsigned bi_reverse(code, len) - unsigned code; /* the value to invert */ - int len; /* its bit length */ -{ - register unsigned res = 0; - do { - res |= code & 1; - code >>= 1, res <<= 1; - } while (--len > 0); - return res >> 1; -} - -/* =========================================================================== - * Write out any remaining bits in an incomplete byte. - */ -void bi_windup() -{ - if (bi_valid > 8) { - put_short(bi_buf); - } else if (bi_valid > 0) { - put_byte(bi_buf); - } - bi_buf = 0; - bi_valid = 0; -#ifdef DEBUG - bits_sent = (bits_sent+7) & ~7; -#endif -} - -/* =========================================================================== - * Copy a stored block to the zip file, storing first the length and its - * one's complement if requested. - */ -void copy_block(buf, len, header) - char *buf; /* the input data */ - unsigned len; /* its length */ - int header; /* true if block header must be written */ -{ - bi_windup(); /* align on byte boundary */ - - if (header) { - put_short((ush)len); - put_short((ush)~len); -#ifdef DEBUG - bits_sent += 2*16; -#endif - } -#ifdef DEBUG - bits_sent += (ulg)len<<3; -#endif - while (len--) { -#ifdef CRYPT - int t; - if (key) zencode(*buf, t); -#endif - put_byte(*buf++); - } -} diff --git a/Build/source/utils/gzip/configure b/Build/source/utils/gzip/configure deleted file mode 100755 index df9eab3615e..00000000000 --- a/Build/source/utils/gzip/configure +++ /dev/null @@ -1,826 +0,0 @@ -#!/bin/sh -# Guess values for system-dependent variables and create Makefiles. -# Generated automatically using autoconf. -# Copyright (C) 1991, 1992, 1993 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -# Usage: configure [--srcdir=DIR] [--host=HOST] [--gas] [--nfp] [--no-create] -# [--prefix=PREFIX] [--exec-prefix=PREFIX] [--with-PACKAGE] [TARGET] -# Ignores all args except --srcdir, --prefix, --exec-prefix, --no-create, and -# --with-PACKAGE unless this script has special code to handle it. - - -for arg -do - # Handle --exec-prefix with a space before the argument. - if test x$next_exec_prefix = xyes; then exec_prefix=$arg; next_exec_prefix= - # Handle --host with a space before the argument. - elif test x$next_host = xyes; then next_host= - # Handle --prefix with a space before the argument. - elif test x$next_prefix = xyes; then prefix=$arg; next_prefix= - # Handle --srcdir with a space before the argument. - elif test x$next_srcdir = xyes; then srcdir=$arg; next_srcdir= - else - case $arg in - # For backward compatibility, also recognize exact --exec_prefix. - -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* | --exec=* | --exe=* | --ex=* | --e=*) - exec_prefix=`echo $arg | sed 's/[-a-z_]*=//'` ;; - -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- | --exec | --exe | --ex | --e) - next_exec_prefix=yes ;; - - -gas | --gas | --ga | --g) ;; - - -host=* | --host=* | --hos=* | --ho=* | --h=*) ;; - -host | --host | --hos | --ho | --h) - next_host=yes ;; - - -nfp | --nfp | --nf) ;; - - -no-create | --no-create | --no-creat | --no-crea | --no-cre | --no-cr | --no-c | --no- | --no) - no_create=1 ;; - - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix=`echo $arg | sed 's/[-a-z_]*=//'` ;; - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - next_prefix=yes ;; - - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=* | --s=*) - srcdir=`echo $arg | sed 's/[-a-z_]*=//'` ;; - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr | --s) - next_srcdir=yes ;; - - -with-* | --with-*) - package=`echo $arg|sed 's/-*with-//'` - # Delete all the valid chars; see if any are left. - if test -n "`echo $package|sed 's/[-a-zA-Z0-9_]*//g'`"; then - echo "configure: $package: invalid package name" >&2; exit 1 - fi - eval "with_`echo $package|sed s/-/_/g`=1" ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb | --ver | --ve | --v) - verbose=yes ;; - - *) ;; - esac - fi -done - -trap 'rm -f conftest* core; exit 1' 1 3 15 - -# Needed for some versions of `tr' so that character classes in `[]' work. -if test "${LANG+set}" = "set" ; then - LANG=C - LC_ALL=C - export LANG LC_ALL -fi - -rm -f conftest* -compile='${CC-cc} $CFLAGS $DEFS conftest.c -o conftest $LIBS >/dev/null 2>&1' - -# A filename unique to this package, relative to the directory that -# configure is in, which we can look for to find out if srcdir is correct. -unique_file=gzip.c - -# Find the source files, if location was not specified. -if test -z "$srcdir"; then - srcdirdefaulted=yes - # Try the directory containing this script, then `..'. - prog=$0 - confdir=`echo $prog|sed 's%/[^/][^/]*$%%'` - test "X$confdir" = "X$prog" && confdir=. - srcdir=$confdir - if test ! -r $srcdir/$unique_file; then - srcdir=.. - fi -fi -if test ! -r $srcdir/$unique_file; then - if test x$srcdirdefaulted = xyes; then - echo "configure: Can not find sources in \`${confdir}' or \`..'." 1>&2 - else - echo "configure: Can not find sources in \`${srcdir}'." 1>&2 - fi - exit 1 -fi -# Preserve a srcdir of `.' to avoid automounter screwups with pwd. -# But we can't avoid them for `..', to make subdirectories work. -case $srcdir in - .|/*|~*) ;; - *) srcdir=`cd $srcdir; pwd` ;; # Make relative path absolute. -esac - -if test -z "$CC"; then - # Extract the first word of `gcc', so it can be a program name with args. - set dummy gcc; word=$2 - echo checking for $word - IFS="${IFS= }"; saveifs="$IFS"; IFS="${IFS}:" - for dir in $PATH; do - test -z "$dir" && dir=. - if test -f $dir/$word; then - CC="gcc" - break - fi - done - IFS="$saveifs" -fi -test -z "$CC" && CC="cc" -test -n "$CC" -a -n "$verbose" && echo " setting CC to $CC" - -# Find out if we are using GNU C, under whatever name. -cat > conftest.c <<EOF -#ifdef __GNUC__ - yes -#endif -EOF -${CC-cc} -E conftest.c > conftest.out 2>&1 -if egrep yes conftest.out >/dev/null 2>&1; then - GCC=1 # For later tests. - CFLAGS="${CFLAGS--O}" -fi -rm -f conftest* - -echo checking how to run the C preprocessor -if test -z "$CPP"; then - CPP='${CC-cc} -E' - cat > conftest.c <<EOF -#include <stdio.h> -EOF -err=`eval "($CPP \$DEFS conftest.c >/dev/null) 2>&1"` -if test -z "$err"; then - : -else - CPP=/lib/cpp -fi -rm -f conftest* -fi - -echo checking for underline in external names -test -z "$ASCPP" -a -f /lib/cpp && ASCPP=/lib/cpp -test -z "$ASCPP" && ASCPP="$CC -E" -cat > conftest.c <<EOF -int foo() {return 0;} -EOF -eval "$CC -c conftest.c > /dev/null 2>&1" -if nm conftest.o | grep _foo > /dev/null 2>&1 ; then - : -else - ASCPP="${ASCPP} -DNO_UNDERLINE" -fi -rm -f _match.o conftest.c conftest.o -if echo "$DEFS" | grep NO_ASM >/dev/null; then - : -else - echo checking for assembler - OBJA="" - if eval "$ASCPP $srcdir/match.S > _match.s 2>/dev/null"; then - if test ! -s _match.s || grep error < _match.s > /dev/null; then - : - elif eval "$CC -c _match.s >/dev/null 2>&1" && test -f _match.o; then - DEFS="${DEFS} -DASMV" - OBJA=match.o - fi - fi - rm -f _match.s _match.o -fi -# Make sure to not get the incompatible SysV /etc/install and -# /usr/sbin/install, which might be in PATH before a BSD-like install, -# or the SunOS /usr/etc/install directory, or the AIX /bin/install, -# or the AFS install, which mishandles nonexistent args, or -# /usr/ucb/install on SVR4, which tries to use the nonexistent group -# `staff'. On most BSDish systems install is in /usr/bin, not /usr/ucb -# anyway. Sigh. -if test "z${INSTALL}" = "z" ; then - echo checking for install - IFS="${IFS= }"; saveifs="$IFS"; IFS="${IFS}:" - for dir in $PATH; do - test -z "$dir" && dir=. - case $dir in - /etc|/usr/sbin|/usr/etc|/usr/afsws/bin|/usr/ucb) ;; - *) - if test -f $dir/installbsd; then - INSTALL="$dir/installbsd -c" # OSF1 - INSTALL_PROGRAM='$(INSTALL)' - INSTALL_DATA='$(INSTALL) -m 644' - break - fi - if test -f $dir/install; then - if grep dspmsg $dir/install >/dev/null 2>&1; then - : # AIX - else - INSTALL="$dir/install -c" - INSTALL_PROGRAM='$(INSTALL)' - INSTALL_DATA='$(INSTALL) -m 644' - break - fi - fi - ;; - esac - done - IFS="$saveifs" -fi -INSTALL=${INSTALL-cp} -INSTALL_PROGRAM=${INSTALL_PROGRAM-'$(INSTALL)'} -INSTALL_DATA=${INSTALL_DATA-'$(INSTALL)'} - -echo checking for AIX -cat > conftest.c <<EOF -#ifdef _AIX - yes -#endif - -EOF -eval "$CPP \$DEFS conftest.c > conftest.out 2>&1" -if egrep "yes" conftest.out >/dev/null 2>&1; then - { -test -n "$verbose" && \ -echo ' defining' _ALL_SOURCE -DEFS="$DEFS -D_ALL_SOURCE=1" -} - -fi -rm -f conftest* - - -echo checking for minix/config.h -cat > conftest.c <<EOF -#include <minix/config.h> -EOF -err=`eval "($CPP \$DEFS conftest.c >/dev/null) 2>&1"` -if test -z "$err"; then - MINIX=1 -fi -rm -f conftest* - -# The Minix shell can't assign to the same variable on the same line! -if test -n "$MINIX"; then - { -test -n "$verbose" && \ -echo ' defining' _POSIX_SOURCE -DEFS="$DEFS -D_POSIX_SOURCE=1" -} - - { -test -n "$verbose" && \ -echo ' defining' _POSIX_1_SOURCE to be '2' -DEFS="$DEFS -D_POSIX_1_SOURCE=2" -} - - { -test -n "$verbose" && \ -echo ' defining' _MINIX -DEFS="$DEFS -D_MINIX=1" -} - -fi - -echo checking for POSIXized ISC -if test -d /etc/conf/kconfig.d && - grep _POSIX_VERSION /usr/include/sys/unistd.h >/dev/null 2>&1 -then - ISC=1 # If later tests want to check for ISC. - { -test -n "$verbose" && \ -echo ' defining' _POSIX_SOURCE -DEFS="$DEFS -D_POSIX_SOURCE=1" -} - - if test -n "$GCC"; then - CC="$CC -posix" - else - CC="$CC -Xp" - fi -fi - -echo checking for DYNIX/ptx libseq -cat > conftest.c <<EOF -#if defined(_SEQUENT_) - yes -#endif - -EOF -eval "$CPP \$DEFS conftest.c > conftest.out 2>&1" -if egrep "yes" conftest.out >/dev/null 2>&1; then - SEQUENT=1 -fi -rm -f conftest* - -test -n "$SEQUENT" && test -f /usr/lib/libseq.a && - LIBS="$LIBS -lseq" - -echo checking for ANSI C header files -cat > conftest.c <<EOF -#include <stdlib.h> -#include <stdarg.h> -#include <string.h> -#include <float.h> -EOF -err=`eval "($CPP \$DEFS conftest.c >/dev/null) 2>&1"` -if test -z "$err"; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. -echo '#include <string.h>' > conftest.c -eval "$CPP \$DEFS conftest.c > conftest.out 2>&1" -if egrep "memchr" conftest.out >/dev/null 2>&1; then - # SGI's /bin/cc from Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. -cat > conftest.c <<EOF -#include <ctype.h> -#define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -#define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#define XOR(e,f) (((e) && !(f)) || (!(e) && (f))) -int main () { int i; for (i = 0; i < 256; i++) -if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); -exit (0); } - -EOF -eval $compile -if test -s conftest && (./conftest; exit) 2>/dev/null; then - { -test -n "$verbose" && \ -echo ' defining' STDC_HEADERS -DEFS="$DEFS -DSTDC_HEADERS=1" -} - -fi -rm -f conftest* -fi -rm -f conftest* - -fi -rm -f conftest* - -echo checking for string.h -cat > conftest.c <<EOF -#include <string.h> -EOF -err=`eval "($CPP \$DEFS conftest.c >/dev/null) 2>&1"` -if test -z "$err"; then - : -else - { -test -n "$verbose" && \ -echo ' defining' NO_STRING_H -DEFS="$DEFS -DNO_STRING_H=1" -} - -fi -rm -f conftest* - -echo checking for stdlib.h -cat > conftest.c <<EOF -#include <stdlib.h> -EOF -err=`eval "($CPP \$DEFS conftest.c >/dev/null) 2>&1"` -if test -z "$err"; then - : -else - { -test -n "$verbose" && \ -echo ' defining' NO_STDLIB_H -DEFS="$DEFS -DNO_STDLIB_H=1" -} - -fi -rm -f conftest* - -echo checking for memory.h -cat > conftest.c <<EOF -#include <memory.h> -EOF -err=`eval "($CPP \$DEFS conftest.c >/dev/null) 2>&1"` -if test -z "$err"; then - : -else - { -test -n "$verbose" && \ -echo ' defining' NO_MEMORY_H -DEFS="$DEFS -DNO_MEMORY_H=1" -} - -fi -rm -f conftest* - -echo checking for fcntl.h -cat > conftest.c <<EOF -#include <fcntl.h> -EOF -err=`eval "($CPP \$DEFS conftest.c >/dev/null) 2>&1"` -if test -z "$err"; then - : -else - { -test -n "$verbose" && \ -echo ' defining' NO_FCNTL_H -DEFS="$DEFS -DNO_FCNTL_H=1" -} - -fi -rm -f conftest* - -echo checking for time.h -cat > conftest.c <<EOF -#include <time.h> -EOF -err=`eval "($CPP \$DEFS conftest.c >/dev/null) 2>&1"` -if test -z "$err"; then - : -else - { -test -n "$verbose" && \ -echo ' defining' NO_TIME_H -DEFS="$DEFS -DNO_TIME_H=1" -} - -fi -rm -f conftest* - -for hdr in unistd.h -do -trhdr=HAVE_`echo $hdr | tr '[a-z]./' '[A-Z]__'` -echo checking for ${hdr} -cat > conftest.c <<EOF -#include <${hdr}> -EOF -err=`eval "($CPP \$DEFS conftest.c >/dev/null) 2>&1"` -if test -z "$err"; then - { -test -n "$verbose" && \ -echo ' defining' ${trhdr} -DEFS="$DEFS -D${trhdr}=1" -} - -fi -rm -f conftest* -done - -utime=0 -echo checking for utime.h -cat > conftest.c <<EOF -#include <utime.h> -EOF -err=`eval "($CPP \$DEFS conftest.c >/dev/null) 2>&1"` -if test -z "$err"; then - utime=1 -else - { -test -n "$verbose" && \ -echo ' defining' NO_UTIME_H -DEFS="$DEFS -DNO_UTIME_H=1" -} - -fi -rm -f conftest* - -if test $utime -eq 0; then - for hdr in sys/utime.h -do -trhdr=HAVE_`echo $hdr | tr '[a-z]./' '[A-Z]__'` -echo checking for ${hdr} -cat > conftest.c <<EOF -#include <${hdr}> -EOF -err=`eval "($CPP \$DEFS conftest.c >/dev/null) 2>&1"` -if test -z "$err"; then - { -test -n "$verbose" && \ -echo ' defining' ${trhdr} -DEFS="$DEFS -D${trhdr}=1" -} - -fi -rm -f conftest* -done - -fi -echo checking for directory library header -dirheader= -if test -z "$dirheader"; then - echo checking for dirent.h -cat > conftest.c <<EOF -#include <sys/types.h> -#include <dirent.h> -int main() { exit(0); } -int t() { DIR *dirp = opendir ("/"); } -EOF -if eval $compile; then - { -test -n "$verbose" && \ -echo ' defining' DIRENT -DEFS="$DEFS -DDIRENT=1" -} - dirheader=dirent.h -fi -rm -f conftest* -fi -if test -z "$dirheader"; then - echo checking for sys/ndir.h -cat > conftest.c <<EOF -#include <sys/types.h> -#include <sys/ndir.h> -int main() { exit(0); } -int t() { DIR *dirp = opendir ("/"); } -EOF -if eval $compile; then - { -test -n "$verbose" && \ -echo ' defining' SYSNDIR -DEFS="$DEFS -DSYSNDIR=1" -} - dirheader=sys/ndir.h -fi -rm -f conftest* -fi -if test -z "$dirheader"; then - echo checking for sys/dir.h -cat > conftest.c <<EOF -#include <sys/types.h> -#include <sys/dir.h> -int main() { exit(0); } -int t() { DIR *dirp = opendir ("/"); } -EOF -if eval $compile; then - { -test -n "$verbose" && \ -echo ' defining' SYSDIR -DEFS="$DEFS -DSYSDIR=1" -} - dirheader=sys/dir.h -fi -rm -f conftest* -fi -if test -z "$dirheader"; then - echo checking for ndir.h -cat > conftest.c <<EOF -#include <sys/types.h> -#include <ndir.h> -int main() { exit(0); } -int t() { DIR *dirp = opendir ("/"); } -EOF -if eval $compile; then - { -test -n "$verbose" && \ -echo ' defining' NDIR -DEFS="$DEFS -DNDIR=1" -} - dirheader=ndir.h -fi -rm -f conftest* -fi - -echo checking for closedir return value -cat > conftest.c <<EOF -#include <sys/types.h> -#include <$dirheader> -int closedir(); main() { exit(closedir(opendir(".")) != 0); } -EOF -eval $compile -if test -s conftest && (./conftest; exit) 2>/dev/null; then - : -else - { -test -n "$verbose" && \ -echo ' defining' VOID_CLOSEDIR -DEFS="$DEFS -DVOID_CLOSEDIR=1" -} - -fi -rm -f conftest* - -echo checking for Xenix -cat > conftest.c <<EOF -#if defined(M_XENIX) && !defined(M_UNIX) - yes -#endif - -EOF -eval "$CPP \$DEFS conftest.c > conftest.out 2>&1" -if egrep "yes" conftest.out >/dev/null 2>&1; then - XENIX=1 -fi -rm -f conftest* - -if test -n "$XENIX"; then - LIBS="$LIBS -lx" - case "$DEFS" in - *SYSNDIR*) ;; - *) LIBS="-ldir $LIBS" ;; # Make sure -ldir precedes any -lx. - esac -fi - -echo checking for return type of signal handlers -cat > conftest.c <<EOF -#include <sys/types.h> -#include <signal.h> -#ifdef signal -#undef signal -#endif -extern void (*signal ()) (); -int main() { exit(0); } -int t() { int i; } -EOF -if eval $compile; then - : -else - { -test -n "$verbose" && \ -echo ' defining' RETSIGTYPE to be 'int' -DEFS="$DEFS -DRETSIGTYPE=int" -} - -fi -rm -f conftest* - - -echo checking for size_t in sys/types.h -echo '#include <sys/types.h>' > conftest.c -eval "$CPP \$DEFS conftest.c > conftest.out 2>&1" -if egrep "size_t" conftest.out >/dev/null 2>&1; then - : -else - { -test -n "$verbose" && \ -echo ' defining' size_t to be 'unsigned' -DEFS="$DEFS -Dsize_t=unsigned" -} - -fi -rm -f conftest* - -echo '#include <sys/types.h>' > conftest.c -eval "$CPP \$DEFS conftest.c > conftest.out 2>&1" -if egrep "off_t" conftest.out >/dev/null 2>&1; then - : -else - { -test -n "$verbose" && \ -echo ' defining' NO_OFF_T -DEFS="$DEFS -DNO_OFF_T=1" -} - -fi -rm -f conftest* - -echo "checking if \`#!' works in shell scripts" -cat <<'__EOF__' > conftest.csh -#!/bin/csh -f -setenv SHELL /bin/csh -# Avoid tcsh bug 'Bad Hertz Value': -setenv HZ 60 -# Make sure foo doesn't get exported into the environment -# Astoundingly, some versions of csh don't have unsetenv. -if (${?foo}) unsetenv foo >& /dev/null -if (${?foo}) unset foo -set output="`./conftest.sh`" -if ( "$output" == "foo=bar" ) then - exit 0 -endif -exit 1 -__EOF__ -cat <<'__EOF__' > conftest.sh -#!/bin/sh -set foo=bar -echo "$*" -__EOF__ -chmod 777 conftest.csh conftest.sh -(csh -f ./conftest.csh) 2> /dev/null -if test $? = 0 ; then - :; SEDCMD="1d" -else - :; SEDCMD="" -fi -rm -f conftest.csh conftest.sh - -if test -z "$prefix" -then - echo checking for gzip to derive installation directory prefix - IFS="${IFS= }"; saveifs="$IFS"; IFS="$IFS:" - for dir in $PATH; do - test -z "$dir" && dir=. - if test $dir != . && test -f $dir/gzip; then - # Not all systems have dirname. - prefix=`echo $dir|sed 's%/[^/][^/]*$%%'` - break - fi - done - IFS="$saveifs" - echo " chose installation directory prefix ${prefix}" -fi - -if test -z "$G" -a -n "$prefix" -a -f $prefix/bin/gznew; then - G=g -fi -if test -z "$ZCAT"; then - if test -n "$prefix" -a -f $prefix/bin/gzcat; then - ZCAT=gzcat - else - ZCAT=${G}zcat - fi -fi -if test -n "$prefix"; then - test -z "$exec_prefix" && exec_prefix='${prefix}' - prsub="s%^prefix\\([ ]*\\)=\\([ ]*\\).*$%prefix\\1=\\2$prefix%" -fi -if test -n "$exec_prefix"; then - prsub="$prsub -s%^exec_prefix\\([ ]*\\)=\\([ ]*\\).*$%\ -exec_prefix\\1=\\2$exec_prefix%" -fi -cat >conftest.def <<EOF -$DEFS -EOF -escape_ampersand_and_backslash='s%[&\\]%\\&%g' -DEFS=`sed "$escape_ampersand_and_backslash" <conftest.def` -rm -f conftest.def - -trap 'rm -f config.status; exit 1' 1 3 15 -echo creating config.status -rm -f config.status -cat > config.status <<EOF -#!/bin/sh -# Generated automatically by configure. -# Run this file to recreate the current configuration. -# This directory was configured as follows, -# on host `(hostname || uname -n) 2>/dev/null | sed 1q`: -# -# $0 $* - -for arg -do - case "\$arg" in - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - exec /bin/sh $0 $* ;; - *) echo "Usage: config.status --recheck" 2>&1; exit 1 ;; - esac -done - -trap 'rm -f Makefile; exit 1' 1 3 15 -CC='$CC' -CPP='$CPP' -INSTALL='$INSTALL' -INSTALL_PROGRAM='$INSTALL_PROGRAM' -INSTALL_DATA='$INSTALL_DATA' -ZCAT='$ZCAT' -G='$G' -CFLAGS='$CFLAGS' -ASCPP='$ASCPP' -OBJA='$OBJA' -SEDCMD='$SEDCMD' -LIBS='$LIBS' -srcdir='$srcdir' -DEFS='$DEFS' -prefix='$prefix' -exec_prefix='$exec_prefix' -prsub='$prsub' -EOF -cat >> config.status <<\EOF - -top_srcdir=$srcdir - -# Allow make-time overrides of the generated file list. -test -n "$gen_files" || gen_files="Makefile" - -for file in .. $gen_files; do if [ "x$file" != "x.." ]; then - srcdir=$top_srcdir - # Remove last slash and all that follows it. Not all systems have dirname. - dir=`echo $file|sed 's%/[^/][^/]*$%%'` - if test "$dir" != "$file"; then - test "$top_srcdir" != . && srcdir=$top_srcdir/$dir - test ! -d $dir && mkdir $dir - fi - echo creating $file - rm -f $file - echo "# Generated automatically from `echo $file|sed 's|.*/||'`.in by configure." > $file - sed -e " -$prsub -s%@CC@%$CC%g -s%@CPP@%$CPP%g -s%@INSTALL@%$INSTALL%g -s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g -s%@INSTALL_DATA@%$INSTALL_DATA%g -s%@ZCAT@%$ZCAT%g -s%@G@%$G%g -s%@CFLAGS@%$CFLAGS%g -s%@ASCPP@%$ASCPP%g -s%@OBJA@%$OBJA%g -s%@SEDCMD@%$SEDCMD%g -s%@LIBS@%$LIBS%g -s%@srcdir@%$srcdir%g -s%@DEFS@%$DEFS% -" $top_srcdir/${file}.in >> $file -fi; done - -exit 0 -EOF -chmod +x config.status -test -n "$no_create" || ./config.status - diff --git a/Build/source/utils/gzip/configure.in b/Build/source/utils/gzip/configure.in deleted file mode 100644 index 7f8a4535b15..00000000000 --- a/Build/source/utils/gzip/configure.in +++ /dev/null @@ -1,98 +0,0 @@ -dnl Process this file with autoconf to produce a configure script for gzip -dnl -dnl Same as AC_RETSIGTYPE, but use a void default. -dnl -define(AC_RETSIGTYP, -[AC_COMPILE_CHECK([return type of signal handlers], -[#include <sys/types.h> -#include <signal.h> -#ifdef signal -#undef signal -#endif -extern void (*signal ()) ();], -[int i;], -[], -[AC_DEFINE(RETSIGTYPE, int)], -)] -)dnl -dnl -dnl End of local macros -dnl -AC_INIT(gzip.c) -AC_PROG_CC -AC_PROG_CPP -dnl -dnl Try to assemble match.S with and without leading underline. -dnl cc -E produces incorrect asm files on SVR4, we must use /lib/cpp. -dnl Also, "gcc -E match.s" ignores -E, so we must use match.S. -echo checking for underline in external names -test -z "$ASCPP" -a -f /lib/cpp && ASCPP=/lib/cpp -test -z "$ASCPP" && ASCPP="$CC -E" -cat > conftest.c <<EOF -int foo() {return 0;} -EOF -eval "$CC -c conftest.c > /dev/null 2>&1" -if nm conftest.o | grep _foo > /dev/null 2>&1 ; then - : -else - ASCPP="${ASCPP} -DNO_UNDERLINE" -fi -rm -f _match.o conftest.c conftest.o -if echo "$DEFS" | grep NO_ASM >/dev/null; then - : -else - echo checking for assembler - OBJA="" - if eval "$ASCPP $srcdir/match.S > _match.s 2>/dev/null"; then - if test ! -s _match.s || grep error < _match.s > /dev/null; then - : - elif eval "$CC -c _match.s >/dev/null 2>&1" && test -f _match.o; then - DEFS="${DEFS} -DASMV" - OBJA=match.o - fi - fi - rm -f _match.s _match.o -fi -dnl -AC_PROG_INSTALL -AC_AIX -AC_MINIX -AC_ISC_POSIX -AC_DYNIX_SEQ -AC_STDC_HEADERS -dnl if STDC_HEADERS can't be defined, look for special files: -AC_HEADER_CHECK(string.h, ,AC_DEFINE(NO_STRING_H)) -AC_HEADER_CHECK(stdlib.h, ,AC_DEFINE(NO_STDLIB_H)) -AC_HEADER_CHECK(memory.h, ,AC_DEFINE(NO_MEMORY_H)) -AC_HEADER_CHECK(fcntl.h, ,AC_DEFINE(NO_FCNTL_H)) -AC_HEADER_CHECK(time.h, ,AC_DEFINE(NO_TIME_H)) -AC_HAVE_HEADERS(unistd.h) -utime=0 -AC_HEADER_CHECK(utime.h, utime=1 ,AC_DEFINE(NO_UTIME_H)) -if test $utime -eq 0; then - AC_HAVE_HEADERS(sys/utime.h) -fi -AC_DIR_HEADER -AC_XENIX_DIR -AC_RETSIGTYP -AC_SIZE_T -AC_HEADER_EGREP(off_t, sys/types.h, ,AC_DEFINE(NO_OFF_T)) -AC_HAVE_POUNDBANG([SEDCMD="1d"], [SEDCMD=""]) -AC_PREFIX(gzip) -if test -z "$G" -a -n "$prefix" -a -f $prefix/bin/gznew; then - G=g -fi -if test -z "$ZCAT"; then - if test -n "$prefix" -a -f $prefix/bin/gzcat; then - ZCAT=gzcat - else - ZCAT=${G}zcat - fi -fi -AC_SUBST(ZCAT)dnl -AC_SUBST(G)dnl -AC_SUBST(CFLAGS)dnl -AC_SUBST(ASCPP)dnl -AC_SUBST(OBJA)dnl -AC_SUBST(SEDCMD)dnl -AC_OUTPUT(Makefile) diff --git a/Build/source/utils/gzip/crypt.c b/Build/source/utils/gzip/crypt.c deleted file mode 100644 index cbce024a01a..00000000000 --- a/Build/source/utils/gzip/crypt.c +++ /dev/null @@ -1,6 +0,0 @@ -/* crypt.c (dummy version) -- do not perform encryption - * Hardly worth copyrighting :-) - */ -#ifdef RCSID -static char rcsid[] = "$Id: crypt.c,v 0.6 1993/03/22 09:48:47 jloup Exp $"; -#endif diff --git a/Build/source/utils/gzip/crypt.h b/Build/source/utils/gzip/crypt.h deleted file mode 100644 index 2a4c203caa7..00000000000 --- a/Build/source/utils/gzip/crypt.h +++ /dev/null @@ -1,12 +0,0 @@ -/* crypt.h (dummy version) -- do not perform encryption - * Hardly worth copyrighting :-) - */ - -#ifdef CRYPT -# undef CRYPT /* dummy version */ -#endif - -#define RAND_HEAD_LEN 12 /* length of encryption random header */ - -#define zencode -#define zdecode diff --git a/Build/source/utils/gzip/deflate.c b/Build/source/utils/gzip/deflate.c deleted file mode 100644 index 7f52b64fa75..00000000000 --- a/Build/source/utils/gzip/deflate.c +++ /dev/null @@ -1,763 +0,0 @@ -/* deflate.c -- compress data using the deflation algorithm - * Copyright (C) 1992-1993 Jean-loup Gailly - * This is free software; you can redistribute it and/or modify it under the - * terms of the GNU General Public License, see the file COPYING. - */ - -/* - * PURPOSE - * - * Identify new text as repetitions of old text within a fixed- - * length sliding window trailing behind the new text. - * - * DISCUSSION - * - * The "deflation" process depends on being able to identify portions - * of the input text which are identical to earlier input (within a - * sliding window trailing behind the input currently being processed). - * - * The most straightforward technique turns out to be the fastest for - * most input files: try all possible matches and select the longest. - * The key feature of this algorithm is that insertions into the string - * dictionary are very simple and thus fast, and deletions are avoided - * completely. Insertions are performed at each input character, whereas - * string matches are performed only when the previous match ends. So it - * is preferable to spend more time in matches to allow very fast string - * insertions and avoid deletions. The matching algorithm for small - * strings is inspired from that of Rabin & Karp. A brute force approach - * is used to find longer strings when a small match has been found. - * A similar algorithm is used in comic (by Jan-Mark Wams) and freeze - * (by Leonid Broukhis). - * A previous version of this file used a more sophisticated algorithm - * (by Fiala and Greene) which is guaranteed to run in linear amortized - * time, but has a larger average cost, uses more memory and is patented. - * However the F&G algorithm may be faster for some highly redundant - * files if the parameter max_chain_length (described below) is too large. - * - * ACKNOWLEDGEMENTS - * - * The idea of lazy evaluation of matches is due to Jan-Mark Wams, and - * I found it in 'freeze' written by Leonid Broukhis. - * Thanks to many info-zippers for bug reports and testing. - * - * REFERENCES - * - * APPNOTE.TXT documentation file in PKZIP 1.93a distribution. - * - * A description of the Rabin and Karp algorithm is given in the book - * "Algorithms" by R. Sedgewick, Addison-Wesley, p252. - * - * Fiala,E.R., and Greene,D.H. - * Data Compression with Finite Windows, Comm.ACM, 32,4 (1989) 490-595 - * - * INTERFACE - * - * void lm_init (int pack_level, ush *flags) - * Initialize the "longest match" routines for a new file - * - * ulg deflate (void) - * Processes a new input file and return its compressed length. Sets - * the compressed length, crc, deflate flags and internal file - * attributes. - */ - -#include <stdio.h> - -#include "tailor.h" -#include "gzip.h" -#include "lzw.h" /* just for consistency checking */ - -#ifdef RCSID -static char rcsid[] = "$Id: deflate.c,v 0.15 1993/06/24 10:53:53 jloup Exp $"; -#endif - -/* =========================================================================== - * Configuration parameters - */ - -/* Compile with MEDIUM_MEM to reduce the memory requirements or - * with SMALL_MEM to use as little memory as possible. Use BIG_MEM if the - * entire input file can be held in memory (not possible on 16 bit systems). - * Warning: defining these symbols affects HASH_BITS (see below) and thus - * affects the compression ratio. The compressed output - * is still correct, and might even be smaller in some cases. - */ - -#ifdef SMALL_MEM -# define HASH_BITS 13 /* Number of bits used to hash strings */ -#endif -#ifdef MEDIUM_MEM -# define HASH_BITS 14 -#endif -#ifndef HASH_BITS -# define HASH_BITS 15 - /* For portability to 16 bit machines, do not use values above 15. */ -#endif - -/* To save space (see unlzw.c), we overlay prev+head with tab_prefix and - * window with tab_suffix. Check that we can do this: - */ -#if (WSIZE<<1) > (1<<BITS) - error: cannot overlay window with tab_suffix and prev with tab_prefix0 -#endif -#if HASH_BITS > BITS-1 - error: cannot overlay head with tab_prefix1 -#endif - -#define HASH_SIZE (unsigned)(1<<HASH_BITS) -#define HASH_MASK (HASH_SIZE-1) -#define WMASK (WSIZE-1) -/* HASH_SIZE and WSIZE must be powers of two */ - -#define NIL 0 -/* Tail of hash chains */ - -#define FAST 4 -#define SLOW 2 -/* speed options for the general purpose bit flag */ - -#ifndef TOO_FAR -# define TOO_FAR 4096 -#endif -/* Matches of length 3 are discarded if their distance exceeds TOO_FAR */ - -/* =========================================================================== - * Local data used by the "longest match" routines. - */ - -typedef ush Pos; -typedef unsigned IPos; -/* A Pos is an index in the character window. We use short instead of int to - * save space in the various tables. IPos is used only for parameter passing. - */ - -/* DECLARE(uch, window, 2L*WSIZE); */ -/* Sliding window. Input bytes are read into the second half of the window, - * and move to the first half later to keep a dictionary of at least WSIZE - * bytes. With this organization, matches are limited to a distance of - * WSIZE-MAX_MATCH bytes, but this ensures that IO is always - * performed with a length multiple of the block size. Also, it limits - * the window size to 64K, which is quite useful on MSDOS. - * To do: limit the window size to WSIZE+BSZ if SMALL_MEM (the code would - * be less efficient). - */ - -/* DECLARE(Pos, prev, WSIZE); */ -/* Link to older string with same hash index. To limit the size of this - * array to 64K, this link is maintained only for the last 32K strings. - * An index in this array is thus a window index modulo 32K. - */ - -/* DECLARE(Pos, head, 1<<HASH_BITS); */ -/* Heads of the hash chains or NIL. */ - -ulg window_size = (ulg)2*WSIZE; -/* window size, 2*WSIZE except for MMAP or BIG_MEM, where it is the - * input file length plus MIN_LOOKAHEAD. - */ - -long block_start; -/* window position at the beginning of the current output block. Gets - * negative when the window is moved backwards. - */ - -local unsigned ins_h; /* hash index of string to be inserted */ - -#define H_SHIFT ((HASH_BITS+MIN_MATCH-1)/MIN_MATCH) -/* Number of bits by which ins_h and del_h must be shifted at each - * input step. It must be such that after MIN_MATCH steps, the oldest - * byte no longer takes part in the hash key, that is: - * H_SHIFT * MIN_MATCH >= HASH_BITS - */ - -unsigned int near prev_length; -/* Length of the best match at previous step. Matches not greater than this - * are discarded. This is used in the lazy match evaluation. - */ - - unsigned near strstart; /* start of string to insert */ - unsigned near match_start; /* start of matching string */ -local int eofile; /* flag set at end of input file */ -local unsigned lookahead; /* number of valid bytes ahead in window */ - -unsigned near max_chain_length; -/* To speed up deflation, hash chains are never searched beyond this length. - * A higher limit improves compression ratio but degrades the speed. - */ - -local unsigned int max_lazy_match; -/* Attempt to find a better match only when the current match is strictly - * smaller than this value. This mechanism is used only for compression - * levels >= 4. - */ -#define max_insert_length max_lazy_match -/* Insert new strings in the hash table only if the match length - * is not greater than this length. This saves time but degrades compression. - * max_insert_length is used only for compression levels <= 3. - */ - -local int compr_level; -/* compression level (1..9) */ - -unsigned near good_match; -/* Use a faster search when the previous match is longer than this */ - - -/* Values for max_lazy_match, good_match and max_chain_length, depending on - * the desired pack level (0..9). The values given below have been tuned to - * exclude worst case performance for pathological files. Better values may be - * found for specific files. - */ - -typedef struct config { - ush good_length; /* reduce lazy search above this match length */ - ush max_lazy; /* do not perform lazy search above this match length */ - ush nice_length; /* quit search above this match length */ - ush max_chain; -} config; - -#ifdef FULL_SEARCH -# define nice_match MAX_MATCH -#else - int near nice_match; /* Stop searching when current match exceeds this */ -#endif - -local config configuration_table[10] = { -/* good lazy nice chain */ -/* 0 */ {0, 0, 0, 0}, /* store only */ -/* 1 */ {4, 4, 8, 4}, /* maximum speed, no lazy matches */ -/* 2 */ {4, 5, 16, 8}, -/* 3 */ {4, 6, 32, 32}, - -/* 4 */ {4, 4, 16, 16}, /* lazy matches */ -/* 5 */ {8, 16, 32, 32}, -/* 6 */ {8, 16, 128, 128}, -/* 7 */ {8, 32, 128, 256}, -/* 8 */ {32, 128, 258, 1024}, -/* 9 */ {32, 258, 258, 4096}}; /* maximum compression */ - -/* Note: the deflate() code requires max_lazy >= MIN_MATCH and max_chain >= 4 - * For deflate_fast() (levels <= 3) good is ignored and lazy has a different - * meaning. - */ - -#define EQUAL 0 -/* result of memcmp for equal strings */ - -/* =========================================================================== - * Prototypes for local functions. - */ -local void fill_window OF((void)); -local ulg deflate_fast OF((void)); - - int longest_match OF((IPos cur_match)); -#ifdef ASMV - void match_init OF((void)); /* asm code initialization */ -#endif - -#ifdef DEBUG -local void check_match OF((IPos start, IPos match, int length)); -#endif - -/* =========================================================================== - * Update a hash value with the given input byte - * IN assertion: all calls to to UPDATE_HASH are made with consecutive - * input characters, so that a running hash key can be computed from the - * previous key instead of complete recalculation each time. - */ -#define UPDATE_HASH(h,c) (h = (((h)<<H_SHIFT) ^ (c)) & HASH_MASK) - -/* =========================================================================== - * Insert string s in the dictionary and set match_head to the previous head - * of the hash chain (the most recent string with same hash key). Return - * the previous length of the hash chain. - * IN assertion: all calls to to INSERT_STRING are made with consecutive - * input characters and the first MIN_MATCH bytes of s are valid - * (except for the last MIN_MATCH-1 bytes of the input file). - */ -#define INSERT_STRING(s, match_head) \ - (UPDATE_HASH(ins_h, window[(s) + MIN_MATCH-1]), \ - prev[(s) & WMASK] = match_head = head[ins_h], \ - head[ins_h] = (s)) - -/* =========================================================================== - * Initialize the "longest match" routines for a new file - */ -void lm_init (pack_level, flags) - int pack_level; /* 0: store, 1: best speed, 9: best compression */ - ush *flags; /* general purpose bit flag */ -{ - register unsigned j; - - if (pack_level < 1 || pack_level > 9) error("bad pack level"); - compr_level = pack_level; - - /* Initialize the hash table. */ -#if defined(MAXSEG_64K) && HASH_BITS == 15 - for (j = 0; j < HASH_SIZE; j++) head[j] = NIL; -#else - memzero((char*)head, HASH_SIZE*sizeof(*head)); -#endif - /* prev will be initialized on the fly */ - - /* Set the default configuration parameters: - */ - max_lazy_match = configuration_table[pack_level].max_lazy; - good_match = configuration_table[pack_level].good_length; -#ifndef FULL_SEARCH - nice_match = configuration_table[pack_level].nice_length; -#endif - max_chain_length = configuration_table[pack_level].max_chain; - if (pack_level == 1) { - *flags |= FAST; - } else if (pack_level == 9) { - *flags |= SLOW; - } - /* ??? reduce max_chain_length for binary files */ - - strstart = 0; - block_start = 0L; -#ifdef ASMV - match_init(); /* initialize the asm code */ -#endif - - lookahead = read_buf((char*)window, - sizeof(int) <= 2 ? (unsigned)WSIZE : 2*WSIZE); - - if (lookahead == 0 || lookahead == (unsigned)EOF) { - eofile = 1, lookahead = 0; - return; - } - eofile = 0; - /* Make sure that we always have enough lookahead. This is important - * if input comes from a device such as a tty. - */ - while (lookahead < MIN_LOOKAHEAD && !eofile) fill_window(); - - ins_h = 0; - for (j=0; j<MIN_MATCH-1; j++) UPDATE_HASH(ins_h, window[j]); - /* If lookahead < MIN_MATCH, ins_h is garbage, but this is - * not important since only literal bytes will be emitted. - */ -} - -/* =========================================================================== - * Set match_start to the longest match starting at the given string and - * return its length. Matches shorter or equal to prev_length are discarded, - * in which case the result is equal to prev_length and match_start is - * garbage. - * IN assertions: cur_match is the head of the hash chain for the current - * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1 - */ -#ifndef ASMV -/* For MSDOS, OS/2 and 386 Unix, an optimized version is in match.asm or - * match.s. The code is functionally equivalent, so you can use the C version - * if desired. - */ -int longest_match(cur_match) - IPos cur_match; /* current match */ -{ - unsigned chain_length = max_chain_length; /* max hash chain length */ - register uch *scan = window + strstart; /* current string */ - register uch *match; /* matched string */ - register int len; /* length of current match */ - int best_len = prev_length; /* best match length so far */ - IPos limit = strstart > (IPos)MAX_DIST ? strstart - (IPos)MAX_DIST : NIL; - /* Stop when cur_match becomes <= limit. To simplify the code, - * we prevent matches with the string of window index 0. - */ - -/* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16. - * It is easy to get rid of this optimization if necessary. - */ -#if HASH_BITS < 8 || MAX_MATCH != 258 - error: Code too clever -#endif - -#ifdef UNALIGNED_OK - /* Compare two bytes at a time. Note: this is not always beneficial. - * Try with and without -DUNALIGNED_OK to check. - */ - register uch *strend = window + strstart + MAX_MATCH - 1; - register ush scan_start = *(ush*)scan; - register ush scan_end = *(ush*)(scan+best_len-1); -#else - register uch *strend = window + strstart + MAX_MATCH; - register uch scan_end1 = scan[best_len-1]; - register uch scan_end = scan[best_len]; -#endif - - /* Do not waste too much time if we already have a good match: */ - if (prev_length >= good_match) { - chain_length >>= 2; - } - Assert(strstart <= window_size-MIN_LOOKAHEAD, "insufficient lookahead"); - - do { - Assert(cur_match < strstart, "no future"); - match = window + cur_match; - - /* Skip to next match if the match length cannot increase - * or if the match length is less than 2: - */ -#if (defined(UNALIGNED_OK) && MAX_MATCH == 258) - /* This code assumes sizeof(unsigned short) == 2. Do not use - * UNALIGNED_OK if your compiler uses a different size. - */ - if (*(ush*)(match+best_len-1) != scan_end || - *(ush*)match != scan_start) continue; - - /* It is not necessary to compare scan[2] and match[2] since they are - * always equal when the other bytes match, given that the hash keys - * are equal and that HASH_BITS >= 8. Compare 2 bytes at a time at - * strstart+3, +5, ... up to strstart+257. We check for insufficient - * lookahead only every 4th comparison; the 128th check will be made - * at strstart+257. If MAX_MATCH-2 is not a multiple of 8, it is - * necessary to put more guard bytes at the end of the window, or - * to check more often for insufficient lookahead. - */ - scan++, match++; - do { - } while (*(ush*)(scan+=2) == *(ush*)(match+=2) && - *(ush*)(scan+=2) == *(ush*)(match+=2) && - *(ush*)(scan+=2) == *(ush*)(match+=2) && - *(ush*)(scan+=2) == *(ush*)(match+=2) && - scan < strend); - /* The funny "do {}" generates better code on most compilers */ - - /* Here, scan <= window+strstart+257 */ - Assert(scan <= window+(unsigned)(window_size-1), "wild scan"); - if (*scan == *match) scan++; - - len = (MAX_MATCH - 1) - (int)(strend-scan); - scan = strend - (MAX_MATCH-1); - -#else /* UNALIGNED_OK */ - - if (match[best_len] != scan_end || - match[best_len-1] != scan_end1 || - *match != *scan || - *++match != scan[1]) continue; - - /* The check at best_len-1 can be removed because it will be made - * again later. (This heuristic is not always a win.) - * It is not necessary to compare scan[2] and match[2] since they - * are always equal when the other bytes match, given that - * the hash keys are equal and that HASH_BITS >= 8. - */ - scan += 2, match++; - - /* We check for insufficient lookahead only every 8th comparison; - * the 256th check will be made at strstart+258. - */ - do { - } while (*++scan == *++match && *++scan == *++match && - *++scan == *++match && *++scan == *++match && - *++scan == *++match && *++scan == *++match && - *++scan == *++match && *++scan == *++match && - scan < strend); - - len = MAX_MATCH - (int)(strend - scan); - scan = strend - MAX_MATCH; - -#endif /* UNALIGNED_OK */ - - if (len > best_len) { - match_start = cur_match; - best_len = len; - if (len >= nice_match) break; -#ifdef UNALIGNED_OK - scan_end = *(ush*)(scan+best_len-1); -#else - scan_end1 = scan[best_len-1]; - scan_end = scan[best_len]; -#endif - } - } while ((cur_match = prev[cur_match & WMASK]) > limit - && --chain_length != 0); - - return best_len; -} -#endif /* ASMV */ - -#ifdef DEBUG -/* =========================================================================== - * Check that the match at match_start is indeed a match. - */ -local void check_match(start, match, length) - IPos start, match; - int length; -{ - /* check that the match is indeed a match */ - if (memcmp((char*)window + match, - (char*)window + start, length) != EQUAL) { - fprintf(stderr, - " start %d, match %d, length %d\n", - start, match, length); - error("invalid match"); - } - if (verbose > 1) { - fprintf(stderr,"\\[%d,%d]", start-match, length); - do { putc(window[start++], stderr); } while (--length != 0); - } -} -#else -# define check_match(start, match, length) -#endif - -/* =========================================================================== - * Fill the window when the lookahead becomes insufficient. - * Updates strstart and lookahead, and sets eofile if end of input file. - * IN assertion: lookahead < MIN_LOOKAHEAD && strstart + lookahead > 0 - * OUT assertions: at least one byte has been read, or eofile is set; - * file reads are performed for at least two bytes (required for the - * translate_eol option). - */ -local void fill_window() -{ - register unsigned n, m; - unsigned more = (unsigned)(window_size - (ulg)lookahead - (ulg)strstart); - /* Amount of free space at the end of the window. */ - - /* If the window is almost full and there is insufficient lookahead, - * move the upper half to the lower one to make room in the upper half. - */ - if (more == (unsigned)EOF) { - /* Very unlikely, but possible on 16 bit machine if strstart == 0 - * and lookahead == 1 (input done one byte at time) - */ - more--; - } else if (strstart >= WSIZE+MAX_DIST) { - /* By the IN assertion, the window is not empty so we can't confuse - * more == 0 with more == 64K on a 16 bit machine. - */ - Assert(window_size == (ulg)2*WSIZE, "no sliding with BIG_MEM"); - - memcpy((char*)window, (char*)window+WSIZE, (unsigned)WSIZE); - match_start -= WSIZE; - strstart -= WSIZE; /* we now have strstart >= MAX_DIST: */ - - block_start -= (long) WSIZE; - - for (n = 0; n < HASH_SIZE; n++) { - m = head[n]; - head[n] = (Pos)(m >= WSIZE ? m-WSIZE : NIL); - } - for (n = 0; n < WSIZE; n++) { - m = prev[n]; - prev[n] = (Pos)(m >= WSIZE ? m-WSIZE : NIL); - /* If n is not on any hash chain, prev[n] is garbage but - * its value will never be used. - */ - } - more += WSIZE; - } - /* At this point, more >= 2 */ - if (!eofile) { - n = read_buf((char*)window+strstart+lookahead, more); - if (n == 0 || n == (unsigned)EOF) { - eofile = 1; - } else { - lookahead += n; - } - } -} - -/* =========================================================================== - * Flush the current block, with given end-of-file flag. - * IN assertion: strstart is set to the end of the current match. - */ -#define FLUSH_BLOCK(eof) \ - flush_block(block_start >= 0L ? (char*)&window[(unsigned)block_start] : \ - (char*)NULL, (long)strstart - block_start, (eof)) - -/* =========================================================================== - * Processes a new input file and return its compressed length. This - * function does not perform lazy evaluationof matches and inserts - * new strings in the dictionary only for unmatched strings or for short - * matches. It is used only for the fast compression options. - */ -local ulg deflate_fast() -{ - IPos hash_head; /* head of the hash chain */ - int flush; /* set if current block must be flushed */ - unsigned match_length = 0; /* length of best match */ - - prev_length = MIN_MATCH-1; - while (lookahead != 0) { - /* Insert the string window[strstart .. strstart+2] in the - * dictionary, and set hash_head to the head of the hash chain: - */ - INSERT_STRING(strstart, hash_head); - - /* Find the longest match, discarding those <= prev_length. - * At this point we have always match_length < MIN_MATCH - */ - if (hash_head != NIL && strstart - hash_head <= MAX_DIST) { - /* To simplify the code, we prevent matches with the string - * of window index 0 (in particular we have to avoid a match - * of the string with itself at the start of the input file). - */ - match_length = longest_match (hash_head); - /* longest_match() sets match_start */ - if (match_length > lookahead) match_length = lookahead; - } - if (match_length >= MIN_MATCH) { - check_match(strstart, match_start, match_length); - - flush = ct_tally(strstart-match_start, match_length - MIN_MATCH); - - lookahead -= match_length; - - /* Insert new strings in the hash table only if the match length - * is not too large. This saves time but degrades compression. - */ - if (match_length <= max_insert_length) { - match_length--; /* string at strstart already in hash table */ - do { - strstart++; - INSERT_STRING(strstart, hash_head); - /* strstart never exceeds WSIZE-MAX_MATCH, so there are - * always MIN_MATCH bytes ahead. If lookahead < MIN_MATCH - * these bytes are garbage, but it does not matter since - * the next lookahead bytes will be emitted as literals. - */ - } while (--match_length != 0); - strstart++; - } else { - strstart += match_length; - match_length = 0; - ins_h = window[strstart]; - UPDATE_HASH(ins_h, window[strstart+1]); -#if MIN_MATCH != 3 - Call UPDATE_HASH() MIN_MATCH-3 more times -#endif - } - } else { - /* No match, output a literal byte */ - Tracevv((stderr,"%c",window[strstart])); - flush = ct_tally (0, window[strstart]); - lookahead--; - strstart++; - } - if (flush) FLUSH_BLOCK(0), block_start = strstart; - - /* Make sure that we always have enough lookahead, except - * at the end of the input file. We need MAX_MATCH bytes - * for the next match, plus MIN_MATCH bytes to insert the - * string following the next match. - */ - while (lookahead < MIN_LOOKAHEAD && !eofile) fill_window(); - - } - return FLUSH_BLOCK(1); /* eof */ -} - -/* =========================================================================== - * Same as above, but achieves better compression. We use a lazy - * evaluation for matches: a match is finally adopted only if there is - * no better match at the next window position. - */ -ulg deflate() -{ - IPos hash_head; /* head of hash chain */ - IPos prev_match; /* previous match */ - int flush; /* set if current block must be flushed */ - int match_available = 0; /* set if previous match exists */ - register unsigned match_length = MIN_MATCH-1; /* length of best match */ -#ifdef DEBUG - extern long isize; /* byte length of input file, for debug only */ -#endif - - if (compr_level <= 3) return deflate_fast(); /* optimized for speed */ - - /* Process the input block. */ - while (lookahead != 0) { - /* Insert the string window[strstart .. strstart+2] in the - * dictionary, and set hash_head to the head of the hash chain: - */ - INSERT_STRING(strstart, hash_head); - - /* Find the longest match, discarding those <= prev_length. - */ - prev_length = match_length, prev_match = match_start; - match_length = MIN_MATCH-1; - - if (hash_head != NIL && prev_length < max_lazy_match && - strstart - hash_head <= MAX_DIST) { - /* To simplify the code, we prevent matches with the string - * of window index 0 (in particular we have to avoid a match - * of the string with itself at the start of the input file). - */ - match_length = longest_match (hash_head); - /* longest_match() sets match_start */ - if (match_length > lookahead) match_length = lookahead; - - /* Ignore a length 3 match if it is too distant: */ - if (match_length == MIN_MATCH && strstart-match_start > TOO_FAR){ - /* If prev_match is also MIN_MATCH, match_start is garbage - * but we will ignore the current match anyway. - */ - match_length--; - } - } - /* If there was a match at the previous step and the current - * match is not better, output the previous match: - */ - if (prev_length >= MIN_MATCH && match_length <= prev_length) { - - check_match(strstart-1, prev_match, prev_length); - - flush = ct_tally(strstart-1-prev_match, prev_length - MIN_MATCH); - - /* Insert in hash table all strings up to the end of the match. - * strstart-1 and strstart are already inserted. - */ - lookahead -= prev_length-1; - prev_length -= 2; - do { - strstart++; - INSERT_STRING(strstart, hash_head); - /* strstart never exceeds WSIZE-MAX_MATCH, so there are - * always MIN_MATCH bytes ahead. If lookahead < MIN_MATCH - * these bytes are garbage, but it does not matter since the - * next lookahead bytes will always be emitted as literals. - */ - } while (--prev_length != 0); - match_available = 0; - match_length = MIN_MATCH-1; - strstart++; - if (flush) FLUSH_BLOCK(0), block_start = strstart; - - } else if (match_available) { - /* If there was no match at the previous position, output a - * single literal. If there was a match but the current match - * is longer, truncate the previous match to a single literal. - */ - Tracevv((stderr,"%c",window[strstart-1])); - if (ct_tally (0, window[strstart-1])) { - FLUSH_BLOCK(0), block_start = strstart; - } - strstart++; - lookahead--; - } else { - /* There is no previous match to compare with, wait for - * the next step to decide. - */ - match_available = 1; - strstart++; - lookahead--; - } - Assert (strstart <= isize && lookahead <= isize, "a bit too far"); - - /* Make sure that we always have enough lookahead, except - * at the end of the input file. We need MAX_MATCH bytes - * for the next match, plus MIN_MATCH bytes to insert the - * string following the next match. - */ - while (lookahead < MIN_LOOKAHEAD && !eofile) fill_window(); - } - if (match_available) ct_tally (0, window[strstart-1]); - - return FLUSH_BLOCK(1); /* eof */ -} diff --git a/Build/source/utils/gzip/getopt.c b/Build/source/utils/gzip/getopt.c deleted file mode 100644 index d7831eac11a..00000000000 --- a/Build/source/utils/gzip/getopt.c +++ /dev/null @@ -1,757 +0,0 @@ -/* Getopt for GNU. - NOTE: getopt is now part of the C library, so if you don't know what - "Keep this file name-space clean" means, talk to roland@gnu.ai.mit.edu - before changing it! - - Copyright (C) 1987, 88, 89, 90, 91, 92, 1993 - Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2, or (at your option) any - later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#ifndef __STDC__ -# ifndef const -# define const -# endif -#endif - -/* This tells Alpha OSF/1 not to define a getopt prototype in <stdio.h>. */ -#ifndef _NO_PROTO -#define _NO_PROTO -#endif - -#include <stdio.h> -#include "tailor.h" - -/* Comment out all this code if we are using the GNU C Library, and are not - actually compiling the library itself. This code is part of the GNU C - Library, but also included in many other GNU distributions. Compiling - and linking in this code is a waste when using the GNU C library - (especially if it is a shared library). Rather than having every GNU - program understand `configure --with-gnu-libc' and omit the object files, - it is simpler to just do this in the source for each such file. */ - -#if defined (_LIBC) || !defined (__GNU_LIBRARY__) - - -/* This needs to come after some library #include - to get __GNU_LIBRARY__ defined. */ -#ifdef __GNU_LIBRARY__ -/* Don't include stdlib.h for non-GNU C libraries because some of them - contain conflicting prototypes for getopt. */ -#include <stdlib.h> -#endif /* GNU C library. */ - -/* If GETOPT_COMPAT is defined, `+' as well as `--' can introduce a - long-named option. Because this is not POSIX.2 compliant, it is - being phased out. */ -/* #define GETOPT_COMPAT */ - -/* This version of `getopt' appears to the caller like standard Unix `getopt' - but it behaves differently for the user, since it allows the user - to intersperse the options with the other arguments. - - As `getopt' works, it permutes the elements of ARGV so that, - when it is done, all the options precede everything else. Thus - all application programs are extended to handle flexible argument order. - - Setting the environment variable POSIXLY_CORRECT disables permutation. - Then the behavior is completely standard. - - GNU application programs can use a third alternative mode in which - they can distinguish the relative order of options and other arguments. */ - -#include "getopt.h" - -/* For communication from `getopt' to the caller. - When `getopt' finds an option that takes an argument, - the argument value is returned here. - Also, when `ordering' is RETURN_IN_ORDER, - each non-option ARGV-element is returned here. */ - -char *optarg = 0; - -/* Index in ARGV of the next element to be scanned. - This is used for communication to and from the caller - and for communication between successive calls to `getopt'. - - On entry to `getopt', zero means this is the first call; initialize. - - When `getopt' returns EOF, this is the index of the first of the - non-option elements that the caller should itself scan. - - Otherwise, `optind' communicates from one call to the next - how much of ARGV has been scanned so far. */ - -/* XXX 1003.2 says this must be 1 before any call. */ -int optind = 0; - -/* The next char to be scanned in the option-element - in which the last option character we returned was found. - This allows us to pick up the scan where we left off. - - If this is zero, or a null string, it means resume the scan - by advancing to the next ARGV-element. */ - -static char *nextchar; - -/* Callers store zero here to inhibit the error message - for unrecognized options. */ - -int opterr = 1; - -/* Set to an option character which was unrecognized. - This must be initialized on some systems to avoid linking in the - system's own getopt implementation. */ - -#define BAD_OPTION '\0' -int optopt = BAD_OPTION; - -/* Describe how to deal with options that follow non-option ARGV-elements. - - If the caller did not specify anything, - the default is REQUIRE_ORDER if the environment variable - POSIXLY_CORRECT is defined, PERMUTE otherwise. - - REQUIRE_ORDER means don't recognize them as options; - stop option processing when the first non-option is seen. - This is what Unix does. - This mode of operation is selected by either setting the environment - variable POSIXLY_CORRECT, or using `+' as the first character - of the list of option characters. - - PERMUTE is the default. We permute the contents of ARGV as we scan, - so that eventually all the non-options are at the end. This allows options - to be given in any order, even with programs that were not written to - expect this. - - RETURN_IN_ORDER is an option available to programs that were written - to expect options and other ARGV-elements in any order and that care about - the ordering of the two. We describe each non-option ARGV-element - as if it were the argument of an option with character code 1. - Using `-' as the first character of the list of option characters - selects this mode of operation. - - The special argument `--' forces an end of option-scanning regardless - of the value of `ordering'. In the case of RETURN_IN_ORDER, only - `--' can cause `getopt' to return EOF with `optind' != ARGC. */ - -static enum -{ - REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER -} ordering; - -#ifdef __GNU_LIBRARY__ -/* We want to avoid inclusion of string.h with non-GNU libraries - because there are many ways it can cause trouble. - On some systems, it contains special magic macros that don't work - in GCC. */ -#include <string.h> -#define my_index strchr -#define my_strlen strlen -#else - -/* Avoid depending on library functions or files - whose names are inconsistent. */ - -#if __STDC__ || defined(PROTO) -#ifndef WIN32 -extern char *getenv(const char *name); -extern int strcmp (const char *s1, const char *s2); -extern int strncmp(const char *s1, const char *s2, int n); -#endif - -static int my_strlen(const char *s); -static char *my_index (const char *str, int chr); -#else -extern char *getenv (); -#endif - -static int -my_strlen (str) - const char *str; -{ - int n = 0; - while (*str++) - n++; - return n; -} - -static char * -my_index (str, chr) - const char *str; - int chr; -{ - while (*str) - { - if (*str == chr) - return (char *) str; - str++; - } - return 0; -} - -#endif /* GNU C library. */ - -/* Handle permutation of arguments. */ - -/* Describe the part of ARGV that contains non-options that have - been skipped. `first_nonopt' is the index in ARGV of the first of them; - `last_nonopt' is the index after the last of them. */ - -static int first_nonopt; -static int last_nonopt; - -/* Exchange two adjacent subsequences of ARGV. - One subsequence is elements [first_nonopt,last_nonopt) - which contains all the non-options that have been skipped so far. - The other is elements [last_nonopt,optind), which contains all - the options processed since those non-options were skipped. - - `first_nonopt' and `last_nonopt' are relocated so that they describe - the new indices of the non-options in ARGV after they are moved. - - To perform the swap, we first reverse the order of all elements. So - all options now come before all non options, but they are in the - wrong order. So we put back the options and non options in original - order by reversing them again. For example: - original input: a b c -x -y - reverse all: -y -x c b a - reverse options: -x -y c b a - reverse non options: -x -y a b c -*/ - -#if __STDC__ || defined(PROTO) -static void exchange (char **argv); -#endif - -static void -exchange (argv) - char **argv; -{ - char *temp, **first, **last; - - /* Reverse all the elements [first_nonopt, optind) */ - first = &argv[first_nonopt]; - last = &argv[optind-1]; - while (first < last) { - temp = *first; *first = *last; *last = temp; first++; last--; - } - /* Put back the options in order */ - first = &argv[first_nonopt]; - first_nonopt += (optind - last_nonopt); - last = &argv[first_nonopt - 1]; - while (first < last) { - temp = *first; *first = *last; *last = temp; first++; last--; - } - - /* Put back the non options in order */ - first = &argv[first_nonopt]; - last_nonopt = optind; - last = &argv[last_nonopt-1]; - while (first < last) { - temp = *first; *first = *last; *last = temp; first++; last--; - } -} - -/* Scan elements of ARGV (whose length is ARGC) for option characters - given in OPTSTRING. - - If an element of ARGV starts with '-', and is not exactly "-" or "--", - then it is an option element. The characters of this element - (aside from the initial '-') are option characters. If `getopt' - is called repeatedly, it returns successively each of the option characters - from each of the option elements. - - If `getopt' finds another option character, it returns that character, - updating `optind' and `nextchar' so that the next call to `getopt' can - resume the scan with the following option character or ARGV-element. - - If there are no more option characters, `getopt' returns `EOF'. - Then `optind' is the index in ARGV of the first ARGV-element - that is not an option. (The ARGV-elements have been permuted - so that those that are not options now come last.) - - OPTSTRING is a string containing the legitimate option characters. - If an option character is seen that is not listed in OPTSTRING, - return BAD_OPTION after printing an error message. If you set `opterr' to - zero, the error message is suppressed but we still return BAD_OPTION. - - If a char in OPTSTRING is followed by a colon, that means it wants an arg, - so the following text in the same ARGV-element, or the text of the following - ARGV-element, is returned in `optarg'. Two colons mean an option that - wants an optional arg; if there is text in the current ARGV-element, - it is returned in `optarg', otherwise `optarg' is set to zero. - - If OPTSTRING starts with `-' or `+', it requests different methods of - handling the non-option ARGV-elements. - See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above. - - Long-named options begin with `--' instead of `-'. - Their names may be abbreviated as long as the abbreviation is unique - or is an exact match for some defined option. If they have an - argument, it follows the option name in the same ARGV-element, separated - from the option name by a `=', or else the in next ARGV-element. - When `getopt' finds a long-named option, it returns 0 if that option's - `flag' field is nonzero, the value of the option's `val' field - if the `flag' field is zero. - - The elements of ARGV aren't really const, because we permute them. - But we pretend they're const in the prototype to be compatible - with other systems. - - LONGOPTS is a vector of `struct option' terminated by an - element containing a name which is zero. - - LONGIND returns the index in LONGOPT of the long-named option found. - It is only valid when a long-named option has been found by the most - recent call. - - If LONG_ONLY is nonzero, '-' as well as '--' can introduce - long-named options. */ - -int -_getopt_internal (argc, argv, optstring, longopts, longind, long_only) - int argc; - char *const *argv; - const char *optstring; - const struct option *longopts; - int *longind; - int long_only; -{ - int option_index; - - optarg = 0; - - /* Initialize the internal data when the first call is made. - Start processing options with ARGV-element 1 (since ARGV-element 0 - is the program name); the sequence of previously skipped - non-option ARGV-elements is empty. */ - - if (optind == 0) - { - first_nonopt = last_nonopt = optind = 1; - - nextchar = NULL; - - /* Determine how to handle the ordering of options and nonoptions. */ - - if (optstring[0] == '-') - { - ordering = RETURN_IN_ORDER; - ++optstring; - } - else if (optstring[0] == '+') - { - ordering = REQUIRE_ORDER; - ++optstring; - } - else if (getenv ("POSIXLY_CORRECT") != NULL) - ordering = REQUIRE_ORDER; - else - ordering = PERMUTE; - } - - if (nextchar == NULL || *nextchar == '\0') - { - if (ordering == PERMUTE) - { - /* If we have just processed some options following some non-options, - exchange them so that the options come first. */ - - if (first_nonopt != last_nonopt && last_nonopt != optind) - exchange ((char **) argv); - else if (last_nonopt != optind) - first_nonopt = optind; - - /* Now skip any additional non-options - and extend the range of non-options previously skipped. */ - - while (optind < argc - && (argv[optind][0] != '-' || argv[optind][1] == '\0') -#ifdef GETOPT_COMPAT - && (longopts == NULL - || argv[optind][0] != '+' || argv[optind][1] == '\0') -#endif /* GETOPT_COMPAT */ - ) - optind++; - last_nonopt = optind; - } - - /* Special ARGV-element `--' means premature end of options. - Skip it like a null option, - then exchange with previous non-options as if it were an option, - then skip everything else like a non-option. */ - - if (optind != argc && !strcmp (argv[optind], "--")) - { - optind++; - - if (first_nonopt != last_nonopt && last_nonopt != optind) - exchange ((char **) argv); - else if (first_nonopt == last_nonopt) - first_nonopt = optind; - last_nonopt = argc; - - optind = argc; - } - - /* If we have done all the ARGV-elements, stop the scan - and back over any non-options that we skipped and permuted. */ - - if (optind == argc) - { - /* Set the next-arg-index to point at the non-options - that we previously skipped, so the caller will digest them. */ - if (first_nonopt != last_nonopt) - optind = first_nonopt; - return EOF; - } - - /* If we have come to a non-option and did not permute it, - either stop the scan or describe it to the caller and pass it by. */ - - if ((argv[optind][0] != '-' || argv[optind][1] == '\0') -#ifdef GETOPT_COMPAT - && (longopts == NULL - || argv[optind][0] != '+' || argv[optind][1] == '\0') -#endif /* GETOPT_COMPAT */ - ) - { - if (ordering == REQUIRE_ORDER) - return EOF; - optarg = argv[optind++]; - return 1; - } - - /* We have found another option-ARGV-element. - Start decoding its characters. */ - - nextchar = (argv[optind] + 1 - + (longopts != NULL && argv[optind][1] == '-')); - } - - if (longopts != NULL - && ((argv[optind][0] == '-' - && (argv[optind][1] == '-' || long_only)) -#ifdef GETOPT_COMPAT - || argv[optind][0] == '+' -#endif /* GETOPT_COMPAT */ - )) - { - const struct option *p; - char *s = nextchar; - int exact = 0; - int ambig = 0; - const struct option *pfound = NULL; - int indfound = 0; - - while (*s && *s != '=') - s++; - - /* Test all options for either exact match or abbreviated matches. */ - for (p = longopts, option_index = 0; p->name; - p++, option_index++) - if (!strncmp (p->name, nextchar, s - nextchar)) - { - if (s - nextchar == my_strlen (p->name)) - { - /* Exact match found. */ - pfound = p; - indfound = option_index; - exact = 1; - break; - } - else if (pfound == NULL) - { - /* First nonexact match found. */ - pfound = p; - indfound = option_index; - } - else - /* Second nonexact match found. */ - ambig = 1; - } - - if (ambig && !exact) - { - if (opterr) - fprintf (stderr, "%s: option `%s' is ambiguous\n", - argv[0], argv[optind]); - nextchar += my_strlen (nextchar); - optind++; - return BAD_OPTION; - } - - if (pfound != NULL) - { - option_index = indfound; - optind++; - if (*s) - { - /* Don't test has_arg with >, because some C compilers don't - allow it to be used on enums. */ - if (pfound->has_arg) - optarg = s + 1; - else - { - if (opterr) - { - if (argv[optind - 1][1] == '-') - /* --option */ - fprintf (stderr, - "%s: option `--%s' doesn't allow an argument\n", - argv[0], pfound->name); - else - /* +option or -option */ - fprintf (stderr, - "%s: option `%c%s' doesn't allow an argument\n", - argv[0], argv[optind - 1][0], pfound->name); - } - nextchar += my_strlen (nextchar); - return BAD_OPTION; - } - } - else if (pfound->has_arg == 1) - { - if (optind < argc) - optarg = argv[optind++]; - else - { - if (opterr) - fprintf (stderr, "%s: option `%s' requires an argument\n", - argv[0], argv[optind - 1]); - nextchar += my_strlen (nextchar); - return optstring[0] == ':' ? ':' : BAD_OPTION; - } - } - nextchar += my_strlen (nextchar); - if (longind != NULL) - *longind = option_index; - if (pfound->flag) - { - *(pfound->flag) = pfound->val; - return 0; - } - return pfound->val; - } - /* Can't find it as a long option. If this is not getopt_long_only, - or the option starts with '--' or is not a valid short - option, then it's an error. - Otherwise interpret it as a short option. */ - if (!long_only || argv[optind][1] == '-' -#ifdef GETOPT_COMPAT - || argv[optind][0] == '+' -#endif /* GETOPT_COMPAT */ - || my_index (optstring, *nextchar) == NULL) - { - if (opterr) - { - if (argv[optind][1] == '-') - /* --option */ - fprintf (stderr, "%s: unrecognized option `--%s'\n", - argv[0], nextchar); - else - /* +option or -option */ - fprintf (stderr, "%s: unrecognized option `%c%s'\n", - argv[0], argv[optind][0], nextchar); - } - nextchar = (char *) ""; - optind++; - return BAD_OPTION; - } - } - - /* Look at and handle the next option-character. */ - - { - char c = *nextchar++; - char *temp = my_index (optstring, c); - - /* Increment `optind' when we start to process its last character. */ - if (*nextchar == '\0') - ++optind; - - if (temp == NULL || c == ':') - { - if (opterr) - { -#if 0 - if (c < 040 || c >= 0177) - fprintf (stderr, "%s: unrecognized option, character code 0%o\n", - argv[0], c); - else - fprintf (stderr, "%s: unrecognized option `-%c'\n", argv[0], c); -#else - /* 1003.2 specifies the format of this message. */ - fprintf (stderr, "%s: illegal option -- %c\n", argv[0], c); -#endif - } - optopt = c; - return BAD_OPTION; - } - if (temp[1] == ':') - { - if (temp[2] == ':') - { - /* This is an option that accepts an argument optionally. */ - if (*nextchar != '\0') - { - optarg = nextchar; - optind++; - } - else - optarg = 0; - nextchar = NULL; - } - else - { - /* This is an option that requires an argument. */ - if (*nextchar != '\0') - { - optarg = nextchar; - /* If we end this ARGV-element by taking the rest as an arg, - we must advance to the next element now. */ - optind++; - } - else if (optind == argc) - { - if (opterr) - { -#if 0 - fprintf (stderr, "%s: option `-%c' requires an argument\n", - argv[0], c); -#else - /* 1003.2 specifies the format of this message. */ - fprintf (stderr, "%s: option requires an argument -- %c\n", - argv[0], c); -#endif - } - optopt = c; - if (optstring[0] == ':') - c = ':'; - else - c = BAD_OPTION; - } - else - /* We already incremented `optind' once; - increment it again when taking next ARGV-elt as argument. */ - optarg = argv[optind++]; - nextchar = NULL; - } - } - return c; - } -} - -int -getopt (argc, argv, optstring) - int argc; - char *const *argv; - const char *optstring; -{ - return _getopt_internal (argc, argv, optstring, - (const struct option *) 0, - (int *) 0, - 0); -} - -int -getopt_long (argc, argv, options, long_options, opt_index) - int argc; - char *const *argv; - const char *options; - const struct option *long_options; - int *opt_index; -{ - return _getopt_internal (argc, argv, options, long_options, opt_index, 0); -} - -#endif /* _LIBC or not __GNU_LIBRARY__. */ - -#ifdef TEST - -/* Compile with -DTEST to make an executable for use in testing - the above definition of `getopt'. */ - -int -main (argc, argv) - int argc; - char **argv; -{ - int c; - int digit_optind = 0; - - while (1) - { - int this_option_optind = optind ? optind : 1; - - c = getopt (argc, argv, "abc:d:0123456789"); - if (c == EOF) - break; - - switch (c) - { - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - if (digit_optind != 0 && digit_optind != this_option_optind) - printf ("digits occur in two different argv-elements.\n"); - digit_optind = this_option_optind; - printf ("option %c\n", c); - break; - - case 'a': - printf ("option a\n"); - break; - - case 'b': - printf ("option b\n"); - break; - - case 'c': - printf ("option c with value `%s'\n", optarg); - break; - - case BAD_OPTION: - break; - - default: - printf ("?? getopt returned character code 0%o ??\n", c); - } - } - - if (optind < argc) - { - printf ("non-option ARGV-elements: "); - while (optind < argc) - printf ("%s ", argv[optind++]); - printf ("\n"); - } - - exit (0); -} - -#endif /* TEST */ diff --git a/Build/source/utils/gzip/getopt.h b/Build/source/utils/gzip/getopt.h deleted file mode 100644 index 0abce6e921d..00000000000 --- a/Build/source/utils/gzip/getopt.h +++ /dev/null @@ -1,127 +0,0 @@ -/* Declarations for getopt. - Copyright (C) 1989, 1990, 1991, 1992, 1993 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2, or (at your option) any - later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ - -#ifndef _GETOPT_H -#define _GETOPT_H 1 - -#ifdef __cplusplus -extern "C" { -#endif - -/* For communication from `getopt' to the caller. - When `getopt' finds an option that takes an argument, - the argument value is returned here. - Also, when `ordering' is RETURN_IN_ORDER, - each non-option ARGV-element is returned here. */ - -extern char *optarg; - -/* Index in ARGV of the next element to be scanned. - This is used for communication to and from the caller - and for communication between successive calls to `getopt'. - - On entry to `getopt', zero means this is the first call; initialize. - - When `getopt' returns EOF, this is the index of the first of the - non-option elements that the caller should itself scan. - - Otherwise, `optind' communicates from one call to the next - how much of ARGV has been scanned so far. */ - -extern int optind; - -/* Callers store zero here to inhibit the error message `getopt' prints - for unrecognized options. */ - -extern int opterr; - -/* Set to an option character which was unrecognized. */ - -extern int optopt; - -/* Describe the long-named options requested by the application. - The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector - of `struct option' terminated by an element containing a name which is - zero. - - The field `has_arg' is: - no_argument (or 0) if the option does not take an argument, - required_argument (or 1) if the option requires an argument, - optional_argument (or 2) if the option takes an optional argument. - - If the field `flag' is not NULL, it points to a variable that is set - to the value given in the field `val' when the option is found, but - left unchanged if the option is not found. - - To have a long-named option do something other than set an `int' to - a compiled-in constant, such as set a value from `optarg', set the - option's `flag' field to zero and its `val' field to a nonzero - value (the equivalent single-letter option character, if there is - one). For long options that have a zero `flag' field, `getopt' - returns the contents of the `val' field. */ - -struct option -{ -#if __STDC__ - const char *name; -#else - char *name; -#endif - /* has_arg can't be an enum because some compilers complain about - type mismatches in all the code that assumes it is an int. */ - int has_arg; - int *flag; - int val; -}; - -/* Names for the values of the `has_arg' field of `struct option'. */ - -#define no_argument 0 -#define required_argument 1 -#define optional_argument 2 - -#if __STDC__ || defined(PROTO) -#if defined(__GNU_LIBRARY__) -/* Many other libraries have conflicting prototypes for getopt, with - differences in the consts, in stdlib.h. To avoid compilation - errors, only prototype getopt for the GNU C library. */ -extern int getopt (int argc, char *const *argv, const char *shortopts); -#endif /* not __GNU_LIBRARY__ */ -extern int getopt_long (int argc, char *const *argv, const char *shortopts, - const struct option *longopts, int *longind); -extern int getopt_long_only (int argc, char *const *argv, - const char *shortopts, - const struct option *longopts, int *longind); - -/* Internal only. Users should not call this directly. */ -extern int _getopt_internal (int argc, char *const *argv, - const char *shortopts, - const struct option *longopts, int *longind, - int long_only); -#else /* not __STDC__ */ -extern int getopt (); -extern int getopt_long (); -extern int getopt_long_only (); - -extern int _getopt_internal (); -#endif /* not __STDC__ */ - -#ifdef __cplusplus -} -#endif - -#endif /* _GETOPT_H */ diff --git a/Build/source/utils/gzip/gpl.texinfo b/Build/source/utils/gzip/gpl.texinfo deleted file mode 100644 index 6fb0afb4c06..00000000000 --- a/Build/source/utils/gzip/gpl.texinfo +++ /dev/null @@ -1,394 +0,0 @@ -@setfilename gpl.info - -@unnumbered GNU GENERAL PUBLIC LICENSE -@center Version 2, June 1991 - -@display -Copyright @copyright{} 1989, 1991 Free Software Foundation, Inc. -675 Mass Ave, Cambridge, MA 02139, USA - -Everyone is permitted to copy and distribute verbatim copies -of this license document, but changing it is not allowed. -@end display - -@unnumberedsec Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software---to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - -@iftex -@unnumberedsec TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION -@end iftex -@ifinfo -@center TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION -@end ifinfo - -@enumerate -@item -This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The ``Program'', below, -refers to any such program or work, and a ``work based on the Program'' -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term ``modification''.) Each licensee is addressed as ``you''. - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - -@item -You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - -@item -You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - -@enumerate a -@item -You must cause the modified files to carry prominent notices -stating that you changed the files and the date of any change. - -@item -You must cause any work that you distribute or publish, that in -whole or in part contains or is derived from the Program or any -part thereof, to be licensed as a whole at no charge to all third -parties under the terms of this License. - -@item -If the modified program normally reads commands interactively -when run, you must cause it, when started running for such -interactive use in the most ordinary way, to print or display an -announcement including an appropriate copyright notice and a -notice that there is no warranty (or else, saying that you provide -a warranty) and that users may redistribute the program under -these conditions, and telling the user how to view a copy of this -License. (Exception: if the Program itself is interactive but -does not normally print such an announcement, your work based on -the Program is not required to print an announcement.) -@end enumerate - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - -@item -You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - -@enumerate a -@item -Accompany it with the complete corresponding machine-readable -source code, which must be distributed under the terms of Sections -1 and 2 above on a medium customarily used for software interchange; or, - -@item -Accompany it with a written offer, valid for at least three -years, to give any third party, for a charge no more than your -cost of physically performing source distribution, a complete -machine-readable copy of the corresponding source code, to be -distributed under the terms of Sections 1 and 2 above on a medium -customarily used for software interchange; or, - -@item -Accompany it with the information you received as to the offer -to distribute corresponding source code. (This alternative is -allowed only for noncommercial distribution and only if you -received the program in object code or executable form with such -an offer, in accord with Subsection b above.) -@end enumerate - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - -@item -You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - -@item -You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - -@item -Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - -@item -If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - -@item -If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - -@item -The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and ``any -later version'', you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - -@item -If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - -@iftex -@heading NO WARRANTY -@end iftex -@ifinfo -@center NO WARRANTY -@end ifinfo - -@item -BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM ``AS IS'' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - -@item -IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. -@end enumerate - -@iftex -@heading END OF TERMS AND CONDITIONS -@end iftex -@ifinfo -@center END OF TERMS AND CONDITIONS -@end ifinfo - -@page -@unnumberedsec How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the ``copyright'' line and a pointer to where the full notice is found. - -@smallexample -@var{one line to give the program's name and an idea of what it does.} -Copyright (C) 19@var{yy} @var{name of author} - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -@end smallexample - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - -@smallexample -Gnomovision version 69, Copyright (C) 19@var{yy} @var{name of author} -Gnomovision comes with ABSOLUTELY NO WARRANTY; for details -type `show w'. This is free software, and you are welcome -to redistribute it under certain conditions; type `show c' -for details. -@end smallexample - -The hypothetical commands @samp{show w} and @samp{show c} should show -the appropriate parts of the General Public License. Of course, the -commands you use may be called something other than @samp{show w} and -@samp{show c}; they could even be mouse-clicks or menu items---whatever -suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a ``copyright disclaimer'' for the program, if -necessary. Here is a sample; alter the names: - -@example -Yoyodyne, Inc., hereby disclaims all copyright -interest in the program `Gnomovision' -(which makes passes at compilers) written -by James Hacker. - -@var{signature of Ty Coon}, 1 April 1989 -Ty Coon, President of Vice -@end example - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/Build/source/utils/gzip/gzexe.1 b/Build/source/utils/gzip/gzexe.1 deleted file mode 100644 index 8b62cd60637..00000000000 --- a/Build/source/utils/gzip/gzexe.1 +++ /dev/null @@ -1,43 +0,0 @@ -.TH GZEXE 1 -.SH NAME -gzexe \- compress executable files in place -.SH SYNOPSIS -.B gzexe -[ name ... ] -.SH DESCRIPTION -The -.I gzexe -utility allows you to compress executables in place and have them -automatically uncompress and execute when you run them (at a penalty -in performance). For example if you execute ``gzexe /bin/cat'' it -will create the following two files: -.nf -.br - -r-xr-xr-x 1 root bin 9644 Feb 11 11:16 /bin/cat - -r-xr-xr-x 1 bin bin 24576 Nov 23 13:21 /bin/cat~ -.fi -/bin/cat~ is the original file and /bin/cat is the self-uncompressing -executable file. You can remove /bin/cat~ once you are sure that -/bin/cat works properly. -.PP -This utility is most useful on systems with very small disks. -.SH OPTIONS -.TP -.B \-d -Decompress the given executables instead of compressing them. -.SH "SEE ALSO" -gzip(1), znew(1), zmore(1), zcmp(1), zforce(1) -.SH CAVEATS -The compressed executable is a shell script. This may create some -security holes. In particular, the compressed executable relies -on the PATH environment variable to find -.I gzip -and some other utilities -.I (tail, chmod, ln, sleep). -.SH "BUGS" -.I gzexe -attempts to retain the original file attributes on the compressed executable, -but you may have to fix them manually in some cases, using -.I chmod -or -.I chown. diff --git a/Build/source/utils/gzip/gzexe.in b/Build/source/utils/gzip/gzexe.in deleted file mode 100644 index fcba5afe15c..00000000000 --- a/Build/source/utils/gzip/gzexe.in +++ /dev/null @@ -1,151 +0,0 @@ -: -#!/bin/sh -# gzexe: compressor for Unix executables. -# Use this only for binaries that you do not use frequently. -# -# The compressed version is a shell script which decompresses itself after -# skipping $skip lines of shell commands. We try invoking the compressed -# executable with the original name (for programs looking at their name). -# We also try to retain the original file permissions on the compressed file. -# For safety reasons, gzexe will not create setuid or setgid shell scripts. - -# WARNING: the first line of this file must be either : or #!/bin/sh -# The : is required for some old versions of csh. -# On Ultrix, /bin/sh is too buggy, change the first line to: #!/bin/sh5 - -x=`basename $0` -if test $# = 0; then - echo compress executables. original file foo is renamed to foo~ - echo usage: ${x} [-d] files... - echo " -d decompress the executables" - exit 1 -fi - -tmp=gz$$ -trap "rm -f $tmp; exit 1" 1 2 3 5 10 13 15 - -decomp=0 -res=0 -test "$x" = "ungzexe" && decomp=1 -if test "x$1" = "x-d"; then - decomp=1 - shift -fi - -echo hi > zfoo1$$ -echo hi > zfoo2$$ -if test -z "`(${CPMOD-cpmod} zfoo1$$ zfoo2$$) 2>&1`"; then - cpmod=${CPMOD-cpmod} -fi -rm -f zfoo[12]$$ - -tail="" -IFS="${IFS= }"; saveifs="$IFS"; IFS="${IFS}:" -for dir in $PATH; do - test -z "$dir" && dir=. - if test -f $dir/tail; then - tail="$dir/tail" - break - fi -done -IFS="$saveifs" -if test -z "$tail"; then - echo cannot find tail - exit 1 -fi - -for i do - if test ! -f "$i" ; then - echo ${x}: $i not a file - res=1 - continue - fi - if test $decomp -eq 0; then - if sed -e 1d -e 2q "$i" | grep "^skip=[0-9]*$" >/dev/null; then - echo "${x}: $i is already gzexe'd" - continue - fi - fi - if ls -l "$i" | grep '^...[sS]' > /dev/null; then - echo "${x}: $i has setuid permission, unchanged" - continue - fi - if ls -l "$i" | grep '^......[sS]' > /dev/null; then - echo "${x}: $i has setgid permission, unchanged" - continue - fi - case "`basename $i`" in - gzip | tail | chmod | ln | sleep | rm) - echo "${x}: $i would depend on itself"; continue ;; - esac - if test -z "$cpmod"; then - cp -p "$i" $tmp 2>/dev/null || cp "$i" $tmp - if test -w $tmp 2>/dev/null; then - writable=1 - else - writable=0 - chmod u+w $tmp 2>/dev/null - fi - fi - if test $decomp -eq 0; then - sed 1q $0 > $tmp - sed "s|^if tail|if $tail|" >> $tmp <<'EOF' -skip=18 -if tail +$skip $0 | "BINDIR"/gzip -cd > /tmp/gztmp$$; then - /bin/chmod 700 /tmp/gztmp$$ - prog="`echo $0 | /bin/sed 's|^.*/||'`" - if /bin/ln /tmp/gztmp$$ "/tmp/$prog" 2>/dev/null; then - trap '/bin/rm -f /tmp/gztmp$$ "/tmp/$prog"; exit $res' 0 - (/bin/sleep 5; /bin/rm -f /tmp/gztmp$$ "/tmp/$prog") 2>/dev/null & - /tmp/"$prog" ${1+"$@"}; res=$? - else - trap '/bin/rm -f /tmp/gztmp$$; exit $res' 0 - (/bin/sleep 5; /bin/rm -f /tmp/gztmp$$) 2>/dev/null & - /tmp/gztmp$$ ${1+"$@"}; res=$? - fi -else - echo Cannot decompress $0; exit 1 -fi; exit $res -EOF - "BINDIR"/gzip -cv9 "$i" >> $tmp || { - /bin/rm -f $tmp - echo ${x}: compression not possible for $i, file unchanged. - res=1 - continue - } - - else - # decompression - skip=18 - if sed -e 1d -e 2q "$i" | grep "^skip=[0-9]*$" >/dev/null; then - eval `sed -e 1d -e 2q "$i"` - fi - if tail +$skip "$i" | "BINDIR"/gzip -cd > $tmp; then - : - else - echo ${x}: $i probably not in gzexe format, file unchanged. - res=1 - continue - fi - fi - rm -f "$i~" - mv "$i" "$i~" || { - echo ${x}: cannot backup $i as $i~ - rm -f $tmp - res=1 - continue - } - mv $tmp "$i" || cp -p $tmp "$i" 2>/dev/null || cp $tmp "$i" || { - echo ${x}: cannot create $i - rm -f $tmp - res=1 - continue - } - rm -f $tmp - if test -n "$cpmod"; then - $cpmod "$i~" "$i" 2>/dev/null - elif test $writable -eq 0; then - chmod u-w $i 2>/dev/null - fi -done -exit $res diff --git a/Build/source/utils/gzip/gzip.1 b/Build/source/utils/gzip/gzip.1 deleted file mode 100644 index 6fa79862bfc..00000000000 --- a/Build/source/utils/gzip/gzip.1 +++ /dev/null @@ -1,478 +0,0 @@ -.PU -.TH GZIP 1 local -.SH NAME -gzip, gunzip, zcat \- compress or expand files -.SH SYNOPSIS -.ll +8 -.B gzip -.RB [ " \-acdfhlLnNrtvV19 " ] -.RB [ \-S\ suffix ] -[ -.I "name \&..." -] -.ll -8 -.br -.B gunzip -.RB [ " \-acfhlLnNrtvV " ] -.RB [ \-S\ suffix ] -[ -.I "name \&..." -] -.br -.B zcat -.RB [ " \-fhLV " ] -[ -.I "name \&..." -] -.SH DESCRIPTION -.I Gzip -reduces the size of the named files using Lempel-Ziv coding (LZ77). -Whenever possible, -each file is replaced by one with the extension -.B "\&.gz," -while keeping the same ownership modes, access and modification times. -(The default extension is -.B "\-gz" -for VMS, -.B "z" -for MSDOS, OS/2 FAT, Windows NT FAT and Atari.) -If no files are specified, or if a file name is "-", the standard input is -compressed to the standard output. -.I Gzip -will only attempt to compress regular files. -In particular, it will ignore symbolic links. -.PP -If the compressed file name is too long for its file system, -.I gzip -truncates it. -.I Gzip -attempts to truncate only the parts of the file name longer than 3 characters. -(A part is delimited by dots.) If the name consists of small parts only, -the longest parts are truncated. For example, if file names are limited -to 14 characters, gzip.msdos.exe is compressed to gzi.msd.exe.gz. -Names are not truncated on systems which do not have a limit on file name -length. -.PP -By default, -.I gzip -keeps the original file name and timestamp in the compressed file. These -are used when decompressing the file with the -.B \-N -option. This is useful when the compressed file name was truncated or -when the time stamp was not preserved after a file transfer. -.PP -Compressed files can be restored to their original form using -.I gzip -d -or -.I gunzip -or -.I zcat. -If the original name saved in the compressed file is not suitable for its -file system, a new name is constructed from the original one to make it -legal. -.PP -.I gunzip -takes a list of files on its command line and replaces each -file whose name ends with .gz, -gz, .z, -z, _z or .Z -and which begins with the correct magic number with an uncompressed -file without the original extension. -.I gunzip -also recognizes the special extensions -.B "\&.tgz" -and -.B "\&.taz" -as shorthands for -.B "\&.tar.gz" -and -.B "\&.tar.Z" -respectively. -When compressing, -.I gzip -uses the -.B "\&.tgz" -extension if necessary instead of truncating a file with a -.B "\&.tar" -extension. -.PP -.I gunzip -can currently decompress files created by -.I gzip, zip, compress, compress -H -or -.I pack. -The detection of the input format is automatic. When using -the first two formats, -.I gunzip -checks a 32 bit CRC. For -.I pack, gunzip -checks the uncompressed length. The standard -.I compress -format was not designed to allow consistency checks. However -.I gunzip -is sometimes able to detect a bad .Z file. If you get an error -when uncompressing a .Z file, do not assume that the .Z file is -correct simply because the standard -.I uncompress -does not complain. This generally means that the standard -.I uncompress -does not check its input, and happily generates garbage output. -The SCO compress -H format (lzh compression method) does not include a CRC -but also allows some consistency checks. -.PP -Files created by -.I zip -can be uncompressed by gzip only if they have a single member compressed -with the 'deflation' method. This feature is only intended to help -conversion of tar.zip files to the tar.gz format. To extract zip files -with several members, use -.I unzip -instead of -.I gunzip. -.PP -.I zcat -is identical to -.I gunzip -.B \-c. -(On some systems, -.I zcat -may be installed as -.I gzcat -to preserve the original link to -.I compress.) -.I zcat -uncompresses either a list of files on the command line or its -standard input and writes the uncompressed data on standard output. -.I zcat -will uncompress files that have the correct magic number whether -they have a -.B "\&.gz" -suffix or not. -.PP -.I Gzip -uses the Lempel-Ziv algorithm used in -.I zip -and PKZIP. -The amount of compression obtained depends on the size of the -input and the distribution of common substrings. -Typically, text such as source code or English -is reduced by 60\-70%. -Compression is generally much better than that achieved by -LZW (as used in -.IR compress ), -Huffman coding (as used in -.IR pack ), -or adaptive Huffman coding -.RI ( compact ). -.PP -Compression is always performed, even if the compressed file is -slightly larger than the original. The worst case expansion is -a few bytes for the gzip file header, plus 5 bytes every 32K block, -or an expansion ratio of 0.015% for large files. Note that the actual -number of used disk blocks almost never increases. -.I gzip -preserves the mode, ownership and timestamps of files when compressing -or decompressing. - -.SH OPTIONS -.TP -.B \-a --ascii -Ascii text mode: convert end-of-lines using local conventions. This option -is supported only on some non-Unix systems. For MSDOS, CR LF is converted -to LF when compressing, and LF is converted to CR LF when decompressing. -.TP -.B \-c --stdout --to-stdout -Write output on standard output; keep original files unchanged. -If there are several input files, the output consists of a sequence of -independently compressed members. To obtain better compression, -concatenate all input files before compressing them. -.TP -.B \-d --decompress --uncompress -Decompress. -.TP -.B \-f --force -Force compression or decompression even if the file has multiple links -or the corresponding file already exists, or if the compressed data -is read from or written to a terminal. If the input data is not in -a format recognized by -.I gzip, -and if the option --stdout is also given, copy the input data without change -to the standard ouput: let -.I zcat -behave as -.I cat. -If -.B \-f -is not given, -and when not running in the background, -.I gzip -prompts to verify whether an existing file should be overwritten. -.TP -.B \-h --help -Display a help screen and quit. -.TP -.B \-l --list -For each compressed file, list the following fields: - - compressed size: size of the compressed file - uncompressed size: size of the uncompressed file - ratio: compression ratio (0.0% if unknown) - uncompressed_name: name of the uncompressed file - -The uncompressed size is given as -1 for files not in gzip format, -such as compressed .Z files. To get the uncompressed size for such a file, -you can use: - - zcat file.Z | wc -c - -In combination with the --verbose option, the following fields are also -displayed: - - method: compression method - crc: the 32-bit CRC of the uncompressed data - date & time: time stamp for the uncompressed file - -The compression methods currently supported are deflate, compress, lzh -(SCO compress -H) and pack. The crc is given as ffffffff for a file -not in gzip format. - -With --name, the uncompressed name, date and time are -those stored within the compress file if present. - -With --verbose, the size totals and compression ratio for all files -is also displayed, unless some sizes are unknown. With --quiet, -the title and totals lines are not displayed. -.TP -.B \-L --license -Display the -.I gzip -license and quit. -.TP -.B \-n --no-name -When compressing, do not save the original file name and time stamp by -default. (The original name is always saved if the name had to be -truncated.) When decompressing, do not restore the original file name -if present (remove only the -.I gzip -suffix from the compressed file name) and do not restore the original -time stamp if present (copy it from the compressed file). This option -is the default when decompressing. -.TP -.B \-N --name -When compressing, always save the original file name and time stamp; this -is the default. When decompressing, restore the original file name and -time stamp if present. This option is useful on systems which have -a limit on file name length or when the time stamp has been lost after -a file transfer. -.TP -.B \-q --quiet -Suppress all warnings. -.TP -.B \-r --recursive -Travel the directory structure recursively. If any of the file names -specified on the command line are directories, -.I gzip -will descend into the directory and compress all the files it finds there -(or decompress them in the case of -.I gunzip -). -.TP -.B \-S .suf --suffix .suf -Use suffix .suf instead of .gz. Any suffix can be given, but suffixes -other than .z and .gz should be avoided to avoid confusion when files -are transferred to other systems. A null suffix forces gunzip to try -decompression on all given files regardless of suffix, as in: - - gunzip -S "" * (*.* for MSDOS) - -Previous versions of gzip used -the .z suffix. This was changed to avoid a conflict with -.IR pack "(1)". -.TP -.B \-t --test -Test. Check the compressed file integrity. -.TP -.B \-v --verbose -Verbose. Display the name and percentage reduction for each file compressed -or decompressed. -.TP -.B \-V --version -Version. Display the version number and compilation options then quit. -.TP -.B \-# --fast --best -Regulate the speed of compression using the specified digit -.IR # , -where -.B \-1 -or -.B \-\-fast -indicates the fastest compression method (less compression) -and -.B \-9 -or -.B \-\-best -indicates the slowest compression method (best compression). -The default compression level is -.BR \-6 -(that is, biased towards high compression at expense of speed). -.SH "ADVANCED USAGE" -Multiple compressed files can be concatenated. In this case, -.I gunzip -will extract all members at once. For example: - - gzip -c file1 > foo.gz - gzip -c file2 >> foo.gz - -Then - gunzip -c foo - -is equivalent to - - cat file1 file2 - -In case of damage to one member of a .gz file, other members can -still be recovered (if the damaged member is removed). However, -you can get better compression by compressing all members at once: - - cat file1 file2 | gzip > foo.gz - -compresses better than - - gzip -c file1 file2 > foo.gz - -If you want to recompress concatenated files to get better compression, do: - - gzip -cd old.gz | gzip > new.gz - -If a compressed file consists of several members, the uncompressed -size and CRC reported by the --list option applies to the last member -only. If you need the uncompressed size for all members, you can use: - - gzip -cd file.gz | wc -c - -If you wish to create a single archive file with multiple members so -that members can later be extracted independently, use an archiver -such as tar or zip. GNU tar supports the -z option to invoke gzip -transparently. gzip is designed as a complement to tar, not as a -replacement. -.SH "ENVIRONMENT" -The environment variable -.B GZIP -can hold a set of default options for -.I gzip. -These options are interpreted first and can be overwritten by -explicit command line parameters. For example: - for sh: GZIP="-8v --name"; export GZIP - for csh: setenv GZIP "-8v --name" - for MSDOS: set GZIP=-8v --name - -On Vax/VMS, the name of the environment variable is GZIP_OPT, to -avoid a conflict with the symbol set for invocation of the program. -.SH "SEE ALSO" -znew(1), zcmp(1), zmore(1), zforce(1), gzexe(1), zip(1), unzip(1), compress(1), -pack(1), compact(1) -.SH "DIAGNOSTICS" -Exit status is normally 0; -if an error occurs, exit status is 1. If a warning occurs, exit status is 2. -.PP -Usage: gzip [-cdfhlLnNrtvV19] [-S suffix] [file ...] -.in +8 -Invalid options were specified on the command line. -.in -8 -.IR file : -not in gzip format -.in +8 -The file specified to -.I gunzip -has not been compressed. -.in -8 -.IR file: -Corrupt input. Use zcat to recover some data. -.in +8 -The compressed file has been damaged. The data up to the point of failure -can be recovered using -.in +8 -zcat file > recover -.in -16 -.IR file : -compressed with -.I xx -bits, can only handle -.I yy -bits -.in +8 -.I File -was compressed (using LZW) by a program that could deal with -more -.I bits -than the decompress code on this machine. -Recompress the file with gzip, which compresses better and uses -less memory. -.in -8 -.IR file : -already has .gz suffix -- no change -.in +8 -The file is assumed to be already compressed. -Rename the file and try again. -.in -8 -.I file -already exists; do you wish to overwrite (y or n)? -.in +8 -Respond "y" if you want the output file to be replaced; "n" if not. -.in -8 -gunzip: corrupt input -.in +8 -A SIGSEGV violation was detected which usually means that the input file has -been corrupted. -.in -8 -.I "xx.x%" -.in +8 -Percentage of the input saved by compression. -(Relevant only for -.BR \-v -and -.BR \-l \.) -.in -8 --- not a regular file or directory: ignored -.in +8 -When the input file is not a regular file or directory, -(e.g. a symbolic link, socket, FIFO, device file), it is -left unaltered. -.in -8 --- has -.I xx -other links: unchanged -.in +8 -The input file has links; it is left unchanged. See -.IR ln "(1)" -for more information. Use the -.B \-f -flag to force compression of multiply-linked files. -.in -8 -.SH CAVEATS -When writing compressed data to a tape, it is generally necessary to -pad the output with zeroes up to a block boundary. When the data is -read and the whole block is passed to -.I gunzip -for decompression, -.I gunzip -detects that there is extra trailing garbage after the compressed data -and emits a warning by default. You have to use the --quiet option to -suppress the warning. This option can be set in the -.B GZIP -environment variable as in: - for sh: GZIP="-q" tar -xfz --block-compress /dev/rst0 - for csh: (setenv GZIP -q; tar -xfz --block-compr /dev/rst0 - -In the above example, gzip is invoked implicitly by the -z option of -GNU tar. Make sure that the same block size (-b option of tar) is used -for reading and writing compressed data on tapes. (This example -assumes you are using the GNU version of tar.) -.SH BUGS -The --list option reports incorrect sizes if they exceed 2 gigabytes. -The --list option reports sizes as -1 and crc as ffffffff if the -compressed file is on a non seekable media. - -In some rare cases, the --best option gives worse compression than -the default compression level (-6). On some highly redundant files, -.I compress -compresses better than -.I gzip. diff --git a/Build/source/utils/gzip/gzip.c b/Build/source/utils/gzip/gzip.c deleted file mode 100644 index 68f0c36d67c..00000000000 --- a/Build/source/utils/gzip/gzip.c +++ /dev/null @@ -1,1744 +0,0 @@ -/* gzip (GNU zip) -- compress files with zip algorithm and 'compress' interface - * Copyright (C) 1992-1993 Jean-loup Gailly - * The unzip code was written and put in the public domain by Mark Adler. - * Portions of the lzw code are derived from the public domain 'compress' - * written by Spencer Thomas, Joe Orost, James Woods, Jim McKie, Steve Davies, - * Ken Turkowski, Dave Mack and Peter Jannesen. - * - * See the license_msg below and the file COPYING for the software license. - * See the file algorithm.doc for the compression algorithms and file formats. - */ - -static char *license_msg[] = { -" Copyright (C) 1992-1993 Jean-loup Gailly", -" This program is free software; you can redistribute it and/or modify", -" it under the terms of the GNU General Public License as published by", -" the Free Software Foundation; either version 2, or (at your option)", -" any later version.", -"", -" This program is distributed in the hope that it will be useful,", -" but WITHOUT ANY WARRANTY; without even the implied warranty of", -" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the", -" GNU General Public License for more details.", -"", -" You should have received a copy of the GNU General Public License", -" along with this program; if not, write to the Free Software", -" Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.", -0}; - -/* Compress files with zip algorithm and 'compress' interface. - * See usage() and help() functions below for all options. - * Outputs: - * file.gz: compressed file with same mode, owner, and utimes - * or stdout with -c option or if stdin used as input. - * If the output file name had to be truncated, the original name is kept - * in the compressed file. - * On MSDOS, file.tmp -> file.tmz. On VMS, file.tmp -> file.tmp-gz. - * - * Using gz on MSDOS would create too many file name conflicts. For - * example, foo.txt -> foo.tgz (.tgz must be reserved as shorthand for - * tar.gz). Similarly, foo.dir and foo.doc would both be mapped to foo.dgz. - * I also considered 12345678.txt -> 12345txt.gz but this truncates the name - * too heavily. There is no ideal solution given the MSDOS 8+3 limitation. - * - * For the meaning of all compilation flags, see comments in Makefile.in. - */ - -#ifdef RCSID -static char rcsid[] = "$Id: gzip.c,v 0.24 1993/06/24 10:52:07 jloup Exp $"; -#endif - -#include <ctype.h> -#include <sys/types.h> -#include <signal.h> -#include <sys/stat.h> -#include <errno.h> - -#include "tailor.h" -#include "gzip.h" -#include "lzw.h" -#include "revision.h" -#include "getopt.h" - - /* configuration */ - -#ifdef NO_TIME_H -# include <sys/time.h> -#else -# include <time.h> -#endif - -#ifndef NO_FCNTL_H -# include <fcntl.h> -#endif - -#ifdef HAVE_UNISTD_H -# include <unistd.h> -#endif - -#if defined(STDC_HEADERS) || !defined(NO_STDLIB_H) -# include <stdlib.h> -#else - extern int errno; -#endif - -#if defined(DIRENT) -# include <dirent.h> - typedef struct dirent dir_type; -# define NLENGTH(dirent) ((int)strlen((dirent)->d_name)) -# define DIR_OPT "DIRENT" -#else -# define NLENGTH(dirent) ((dirent)->d_namlen) -# ifdef SYSDIR -# include <sys/dir.h> - typedef struct direct dir_type; -# define DIR_OPT "SYSDIR" -# else -# ifdef SYSNDIR -# include <sys/ndir.h> - typedef struct direct dir_type; -# define DIR_OPT "SYSNDIR" -# else -# ifdef NDIR -# include <ndir.h> - typedef struct direct dir_type; -# define DIR_OPT "NDIR" -# else -# define NO_DIR -# define DIR_OPT "NO_DIR" -# endif -# endif -# endif -#endif - -#ifndef NO_UTIME -# ifndef NO_UTIME_H -# include <utime.h> -# define TIME_OPT "UTIME" -# else -# ifdef HAVE_SYS_UTIME_H -# include <sys/utime.h> -# define TIME_OPT "SYS_UTIME" -# else - struct utimbuf { - time_t actime; - time_t modtime; - }; -# define TIME_OPT "" -# endif -# endif -#else -# define TIME_OPT "NO_UTIME" -#endif - -#if !defined(S_ISDIR) && defined(S_IFDIR) -# define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) -#endif -#if !defined(S_ISREG) && defined(S_IFREG) -# define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) -#endif - -typedef RETSIGTYPE (__cdecl *sig_type) OF((int)); - -#ifndef O_BINARY -# define O_BINARY 0 /* creation mode for open() */ -#endif - -#ifndef O_CREAT - /* Pure BSD system? */ -# include <sys/file.h> -# ifndef O_CREAT -# define O_CREAT FCREAT -# endif -# ifndef O_EXCL -# define O_EXCL FEXCL -# endif -#endif - -#ifndef S_IRUSR -# define S_IRUSR 0400 -#endif -#ifndef S_IWUSR -# define S_IWUSR 0200 -#endif -#define RW_USER (S_IRUSR | S_IWUSR) /* creation mode for open() */ - -#ifndef MAX_PATH_LEN -# define MAX_PATH_LEN 1024 /* max pathname length */ -#endif - -#ifndef SEEK_END -# define SEEK_END 2 -#endif - -#ifdef NO_OFF_T - typedef long off_t; - off_t lseek OF((int fd, off_t offset, int whence)); -#endif - -/* Separator for file name parts (see shorten_name()) */ -#ifdef NO_MULTIPLE_DOTS -# define PART_SEP "-" -#else -# define PART_SEP "." -#endif - - /* global buffers */ - -DECLARE(uch, inbuf, INBUFSIZ +INBUF_EXTRA); -DECLARE(uch, outbuf, OUTBUFSIZ+OUTBUF_EXTRA); -DECLARE(ush, d_buf, DIST_BUFSIZE); -DECLARE(uch, window, 2L*WSIZE); -#ifndef MAXSEG_64K - DECLARE(ush, tab_prefix, 1L<<BITS); -#else - DECLARE(ush, tab_prefix0, 1L<<(BITS-1)); - DECLARE(ush, tab_prefix1, 1L<<(BITS-1)); -#endif - - /* local variables */ - -int ascii = 0; /* convert end-of-lines to local OS conventions */ -int to_stdout = 0; /* output to stdout (-c) */ -int decompress = 0; /* decompress (-d) */ -int force = 0; /* don't ask questions, compress links (-f) */ -int no_name = -1; /* don't save or restore the original file name */ -int no_time = -1; /* don't save or restore the original file time */ -int recursive = 0; /* recurse through directories (-r) */ -int list = 0; /* list the file contents (-l) */ -int verbose = 0; /* be verbose (-v) */ -int quiet = 0; /* be very quiet (-q) */ -int do_lzw = 0; /* generate output compatible with old compress (-Z) */ -int test = 0; /* test .gz file integrity */ -int foreground; /* set if program run in foreground */ -char *progname; /* program name */ -int maxbits = BITS; /* max bits per code for LZW */ -int method = DEFLATED;/* compression method */ -int level = 6; /* compression level */ -int exit_code = OK; /* program exit code */ -int save_orig_name; /* set if original name must be saved */ -int last_member; /* set for .zip and .Z files */ -int part_nb; /* number of parts in .gz file */ -long time_stamp; /* original time stamp (modification time) */ -long ifile_size; /* input file size, -1 for devices (debug only) */ -char *env; /* contents of GZIP env variable */ -char **args = NULL; /* argv pointer if GZIP env variable defined */ -char z_suffix[MAX_SUFFIX+1]; /* default suffix (can be set with --suffix) */ -int z_len; /* strlen(z_suffix) */ - -long bytes_in; /* number of input bytes */ -long bytes_out; /* number of output bytes */ -long total_in = 0; /* input bytes for all files */ -long total_out = 0; /* output bytes for all files */ -char ifname[MAX_PATH_LEN]; /* input file name */ -char ofname[MAX_PATH_LEN]; /* output file name */ -int remove_ofname = 0; /* remove output file on error */ -struct stat istat; /* status for input file */ -int ifd; /* input file descriptor */ -int ofd; /* output file descriptor */ -unsigned insize; /* valid bytes in inbuf */ -unsigned inptr; /* index of next byte to be processed in inbuf */ -unsigned outcnt; /* bytes in output buffer */ - -struct option longopts[] = -{ - /* { name has_arg *flag val } */ - {"ascii", 0, 0, 'a'}, /* ascii text mode */ - {"to-stdout", 0, 0, 'c'}, /* write output on standard output */ - {"stdout", 0, 0, 'c'}, /* write output on standard output */ - {"decompress", 0, 0, 'd'}, /* decompress */ - {"uncompress", 0, 0, 'd'}, /* decompress */ - /* {"encrypt", 0, 0, 'e'}, encrypt */ - {"force", 0, 0, 'f'}, /* force overwrite of output file */ - {"help", 0, 0, 'h'}, /* give help */ - /* {"pkzip", 0, 0, 'k'}, force output in pkzip format */ - {"list", 0, 0, 'l'}, /* list .gz file contents */ - {"license", 0, 0, 'L'}, /* display software license */ - {"no-name", 0, 0, 'n'}, /* don't save or restore original name & time */ - {"name", 0, 0, 'N'}, /* save or restore original name & time */ - {"quiet", 0, 0, 'q'}, /* quiet mode */ - {"silent", 0, 0, 'q'}, /* quiet mode */ - {"recursive", 0, 0, 'r'}, /* recurse through directories */ - {"suffix", 1, 0, 'S'}, /* use given suffix instead of .gz */ - {"test", 0, 0, 't'}, /* test compressed file integrity */ - {"no-time", 0, 0, 'T'}, /* don't save or restore the time stamp */ - {"verbose", 0, 0, 'v'}, /* verbose mode */ - {"version", 0, 0, 'V'}, /* display version number */ - {"fast", 0, 0, '1'}, /* compress faster */ - {"best", 0, 0, '9'}, /* compress better */ - {"lzw", 0, 0, 'Z'}, /* make output compatible with old compress */ - {"bits", 1, 0, 'b'}, /* max number of bits per code (implies -Z) */ - { 0, 0, 0, 0 } -}; - -/* local functions */ - -local void usage OF((void)); -local void help OF((void)); -local void license OF((void)); -local void version OF((void)); -local void treat_stdin OF((void)); -local void treat_file OF((char *iname)); -local int create_outfile OF((void)); -local int do_stat OF((char *name, struct stat *sbuf)); -local char *get_suffix OF((char *name)); -local int get_istat OF((char *iname, struct stat *sbuf)); -local int make_ofname OF((void)); -local int same_file OF((struct stat *stat1, struct stat *stat2)); -local int name_too_long OF((char *name, struct stat *statb)); -local void shorten_name OF((char *name)); -local int get_method OF((int in)); -local void do_list OF((int ifd, int method)); -local int check_ofname OF((void)); -local void copy_stat OF((struct stat *ifstat)); -local void do_exit OF((int exitcode)); - int main OF((int argc, char **argv)); -int (*work) OF((int infile, int outfile)) = zip; /* function to call */ - -#ifndef NO_DIR -local void treat_dir OF((char *dir)); -#endif -#ifndef NO_UTIME -local void reset_times OF((char *name, struct stat *statb)); -#endif - -#define strequ(s1, s2) (strcmp((s1),(s2)) == 0) - -/* ======================================================================== */ -local void usage() -{ - fprintf(stderr, "usage: %s [-%scdfhlLnN%stvV19] [-S suffix] [file ...]\n", - progname, -#if O_BINARY - "a", -#else - "", -#endif -#ifdef NO_DIR - "" -#else - "r" -#endif - ); -} - -/* ======================================================================== */ -local void help() -{ - static char *help_msg[] = { -#if O_BINARY - " -a --ascii ascii text; convert end-of-lines using local conventions", -#endif - " -c --stdout write on standard output, keep original files unchanged", - " -d --decompress decompress", -/* -e --encrypt encrypt */ - " -f --force force overwrite of output file and compress links", - " -h --help give this help", -/* -k --pkzip force output in pkzip format */ - " -l --list list compressed file contents", - " -L --license display software license", -#ifdef UNDOCUMENTED - " -m --no-time do not save or restore the original modification time", - " -M --time save or restore the original modification time", -#endif - " -n --no-name do not save or restore the original name and time stamp", - " -N --name save or restore the original name and time stamp", - " -q --quiet suppress all warnings", -#ifndef NO_DIR - " -r --recursive operate recursively on directories", -#endif - " -S .suf --suffix .suf use suffix .suf on compressed files", - " -t --test test compressed file integrity", - " -v --verbose verbose mode", - " -V --version display version number", - " -1 --fast compress faster", - " -9 --best compress better", -#ifdef LZW - " -Z --lzw produce output compatible with old compress", - " -b --bits maxbits max number of bits per code (implies -Z)", -#endif - " file... files to (de)compress. If none given, use standard input.", - 0}; - char **p = help_msg; - - fprintf(stderr,"%s %s (%s)\n", progname, VERSION, REVDATE); - usage(); - while (*p) fprintf(stderr, "%s\n", *p++); -} - -/* ======================================================================== */ -local void license() -{ - char **p = license_msg; - - fprintf(stderr,"%s %s (%s)\n", progname, VERSION, REVDATE); - while (*p) fprintf(stderr, "%s\n", *p++); -} - -/* ======================================================================== */ -local void version() -{ - fprintf(stderr,"%s %s (%s)\n", progname, VERSION, REVDATE); - - fprintf(stderr, "Compilation options:\n%s %s ", DIR_OPT, TIME_OPT); -#ifdef STDC_HEADERS - fprintf(stderr, "STDC_HEADERS "); -#endif -#ifdef HAVE_UNISTD_H - fprintf(stderr, "HAVE_UNISTD_H "); -#endif -#ifdef NO_MEMORY_H - fprintf(stderr, "NO_MEMORY_H "); -#endif -#ifdef NO_STRING_H - fprintf(stderr, "NO_STRING_H "); -#endif -#ifdef NO_SYMLINK - fprintf(stderr, "NO_SYMLINK "); -#endif -#ifdef NO_MULTIPLE_DOTS - fprintf(stderr, "NO_MULTIPLE_DOTS "); -#endif -#ifdef NO_CHOWN - fprintf(stderr, "NO_CHOWN "); -#endif -#ifdef PROTO - fprintf(stderr, "PROTO "); -#endif -#ifdef ASMV - fprintf(stderr, "ASMV "); -#endif -#ifdef DEBUG - fprintf(stderr, "DEBUG "); -#endif -#ifdef DYN_ALLOC - fprintf(stderr, "DYN_ALLOC "); -#endif -#ifdef MAXSEG_64K - fprintf(stderr, "MAXSEG_64K"); -#endif - fprintf(stderr, "\n"); -} - -/* ======================================================================== */ -int main (argc, argv) - int argc; - char **argv; -{ - int file_count; /* number of files to precess */ - int proglen; /* length of progname */ - int optc; /* current option */ - - EXPAND(argc, argv); /* wild card expansion if necessary */ - - progname = basename(argv[0]); - proglen = strlen(progname); - - /* Suppress .exe for MSDOS, OS/2 and VMS: */ - if (proglen > 4 && strequ(progname+proglen-4, ".exe")) { - progname[proglen-4] = '\0'; - } - - /* Add options in GZIP environment variable if there is one */ - env = add_envopt(&argc, &argv, OPTIONS_VAR); - if (env != NULL) args = argv; - - foreground = signal(SIGINT, SIG_IGN) != SIG_IGN; - if (foreground) { - (void) signal (SIGINT, (sig_type)abort_gzip); - } -#ifdef SIGTERM - if (signal(SIGTERM, SIG_IGN) != SIG_IGN) { - (void) signal(SIGTERM, (sig_type)abort_gzip); - } -#endif -#ifdef SIGHUP - if (signal(SIGHUP, SIG_IGN) != SIG_IGN) { - (void) signal(SIGHUP, (sig_type)abort_gzip); - } -#endif - -#ifndef GNU_STANDARD - /* For compatibility with old compress, use program name as an option. - * If you compile with -DGNU_STANDARD, this program will behave as - * gzip even if it is invoked under the name gunzip or zcat. - * - * Systems which do not support links can still use -d or -dc. - * Ignore an .exe extension for MSDOS, OS/2 and VMS. - */ - if ( strncmp(progname, "un", 2) == 0 /* ungzip, uncompress */ - || strncmp(progname, "gun", 3) == 0) { /* gunzip */ - decompress = 1; - } else if (strequ(progname+1, "cat") /* zcat, pcat, gcat */ - || strequ(progname, "gzcat")) { /* gzcat */ - decompress = to_stdout = 1; - } -#endif - - strncpy(z_suffix, Z_SUFFIX, sizeof(z_suffix)-1); - z_len = strlen(z_suffix); - - while ((optc = getopt_long (argc, argv, "ab:cdfhH?lLmMnNqrS:tvVZ123456789", - longopts, (int *)0)) != EOF) { - switch (optc) { - case 'a': - ascii = 1; break; - case 'b': - maxbits = atoi(optarg); - break; - case 'c': - to_stdout = 1; break; - case 'd': - decompress = 1; break; - case 'f': - force++; break; - case 'h': case 'H': case '?': - help(); do_exit(OK); break; - case 'l': - list = decompress = to_stdout = 1; break; - case 'L': - license(); do_exit(OK); break; - case 'm': /* undocumented, may change later */ - no_time = 1; break; - case 'M': /* undocumented, may change later */ - no_time = 0; break; - case 'n': - no_name = no_time = 1; break; - case 'N': - no_name = no_time = 0; break; - case 'q': - quiet = 1; verbose = 0; break; - case 'r': -#ifdef NO_DIR - fprintf(stderr, "%s: -r not supported on this system\n", progname); - usage(); - do_exit(ERROR); break; -#else - recursive = 1; break; -#endif - case 'S': -#ifdef NO_MULTIPLE_DOTS - if (*optarg == '.') optarg++; -#endif - z_len = strlen(optarg); - strcpy(z_suffix, optarg); - break; - case 't': - test = decompress = to_stdout = 1; - break; - case 'v': - verbose++; quiet = 0; break; - case 'V': - version(); do_exit(OK); break; - case 'Z': -#ifdef LZW - do_lzw = 1; break; -#else - fprintf(stderr, "%s: -Z not supported in this version\n", - progname); - usage(); - do_exit(ERROR); break; -#endif - case '1': case '2': case '3': case '4': - case '5': case '6': case '7': case '8': case '9': - level = optc - '0'; - break; - default: - /* Error message already emitted by getopt_long. */ - usage(); - do_exit(ERROR); - } - } /* loop on all arguments */ - - /* By default, save name and timestamp on compression but do not - * restore them on decompression. - */ - if (no_time < 0) no_time = decompress; - if (no_name < 0) no_name = decompress; - - file_count = argc - optind; - -#if O_BINARY -#else - if (ascii && !quiet) { - fprintf(stderr, "%s: option --ascii ignored on this system\n", - progname); - } -#endif - if ((z_len == 0 && !decompress) || z_len > MAX_SUFFIX) { - fprintf(stderr, "%s: incorrect suffix '%s'\n", - progname, optarg); - do_exit(ERROR); - } - if (do_lzw && !decompress) work = lzw; - - /* Allocate all global buffers (for DYN_ALLOC option) */ - ALLOC(uch, inbuf, INBUFSIZ +INBUF_EXTRA); - ALLOC(uch, outbuf, OUTBUFSIZ+OUTBUF_EXTRA); - ALLOC(ush, d_buf, DIST_BUFSIZE); - ALLOC(uch, window, 2L*WSIZE); -#ifndef MAXSEG_64K - ALLOC(ush, tab_prefix, 1L<<BITS); -#else - ALLOC(ush, tab_prefix0, 1L<<(BITS-1)); - ALLOC(ush, tab_prefix1, 1L<<(BITS-1)); -#endif - - /* And get to work */ - if (file_count != 0) { - if (to_stdout && !test && !list && (!decompress || !ascii)) { - SET_BINARY_MODE(fileno(stdout)); - } - while (optind < argc) { - treat_file(argv[optind++]); - } - } else { /* Standard input */ - treat_stdin(); - } - if (list && !quiet && file_count > 1) { - do_list(-1, -1); /* print totals */ - } - do_exit(exit_code); - return exit_code; /* just to avoid lint warning */ -} - -/* ======================================================================== - * Compress or decompress stdin - */ -local void treat_stdin() -{ - if (!force && !list && - isatty(fileno((FILE *)(decompress ? stdin : stdout)))) { - /* Do not send compressed data to the terminal or read it from - * the terminal. We get here when user invoked the program - * without parameters, so be helpful. According to the GNU standards: - * - * If there is one behavior you think is most useful when the output - * is to a terminal, and another that you think is most useful when - * the output is a file or a pipe, then it is usually best to make - * the default behavior the one that is useful with output to a - * terminal, and have an option for the other behavior. - * - * Here we use the --force option to get the other behavior. - */ - fprintf(stderr, - "%s: compressed data not %s a terminal. Use -f to force %scompression.\n", - progname, decompress ? "read from" : "written to", - decompress ? "de" : ""); - fprintf(stderr,"For help, type: %s -h\n", progname); - do_exit(ERROR); - } - - if (decompress || !ascii) { - SET_BINARY_MODE(fileno(stdin)); - } - if (!test && !list && (!decompress || !ascii)) { - SET_BINARY_MODE(fileno(stdout)); - } - strcpy(ifname, "stdin"); - strcpy(ofname, "stdout"); - - /* Get the time stamp on the input file. */ - time_stamp = 0; /* time unknown by default */ - -#ifndef NO_STDIN_FSTAT - if (list || !no_time) { - if (fstat(fileno(stdin), &istat) != 0) { - error("fstat(stdin)"); - } -# ifdef NO_PIPE_TIMESTAMP - if (S_ISREG(istat.st_mode)) -# endif - time_stamp = istat.st_mtime; -#endif /* NO_STDIN_FSTAT */ - } - ifile_size = -1L; /* convention for unknown size */ - - clear_bufs(); /* clear input and output buffers */ - to_stdout = 1; - part_nb = 0; - - if (decompress) { - method = get_method(ifd); - if (method < 0) { - do_exit(exit_code); /* error message already emitted */ - } - } - if (list) { - do_list(ifd, method); - return; - } - - /* Actually do the compression/decompression. Loop over zipped members. - */ - for (;;) { - if ((*work)(fileno(stdin), fileno(stdout)) != OK) return; - - if (!decompress || last_member || inptr == insize) break; - /* end of file */ - - method = get_method(ifd); - if (method < 0) return; /* error message already emitted */ - bytes_out = 0; /* required for length check */ - } - - if (verbose) { - if (test) { - fprintf(stderr, " OK\n"); - - } else if (!decompress) { - display_ratio(bytes_in-(bytes_out-header_bytes), bytes_in, stderr); - fprintf(stderr, "\n"); -#ifdef DISPLAY_STDIN_RATIO - } else { - display_ratio(bytes_out-(bytes_in-header_bytes), bytes_out,stderr); - fprintf(stderr, "\n"); -#endif - } - } -} - -/* ======================================================================== - * Compress or decompress the given file - */ -local void treat_file(iname) - char *iname; -{ - /* Accept "-" as synonym for stdin */ - if (strequ(iname, "-")) { - int cflag = to_stdout; - treat_stdin(); - to_stdout = cflag; - return; - } - - /* Check if the input file is present, set ifname and istat: */ - if (get_istat(iname, &istat) != OK) return; - - /* If the input name is that of a directory, recurse or ignore: */ - if (S_ISDIR(istat.st_mode)) { -#ifndef NO_DIR - if (recursive) { - struct stat st; - st = istat; - treat_dir(iname); - /* Warning: ifname is now garbage */ -# ifndef NO_UTIME - reset_times (iname, &st); -# endif - } else -#endif - WARN((stderr,"%s: %s is a directory -- ignored\n", progname, ifname)); - return; - } - if (!S_ISREG(istat.st_mode)) { - WARN((stderr, - "%s: %s is not a directory or a regular file - ignored\n", - progname, ifname)); - return; - } - if (istat.st_nlink > 1 && !to_stdout && !force) { - WARN((stderr, "%s: %s has %d other link%c -- unchanged\n", - progname, ifname, - (int)istat.st_nlink - 1, istat.st_nlink > 2 ? 's' : ' ')); - return; - } - - ifile_size = istat.st_size; - time_stamp = no_time && !list ? 0 : istat.st_mtime; - - /* Generate output file name. For -r and (-t or -l), skip files - * without a valid gzip suffix (check done in make_ofname). - */ - if (to_stdout && !list && !test) { - strcpy(ofname, "stdout"); - - } else if (make_ofname() != OK) { - return; - } - - /* Open the input file and determine compression method. The mode - * parameter is ignored but required by some systems (VMS) and forbidden - * on other systems (MacOS). - */ - ifd = OPEN(ifname, ascii && !decompress ? O_RDONLY : O_RDONLY | O_BINARY, - RW_USER); - if (ifd == -1) { - fprintf(stderr, "%s: ", progname); - perror(ifname); - exit_code = ERROR; - return; - } - clear_bufs(); /* clear input and output buffers */ - part_nb = 0; - - if (decompress) { - method = get_method(ifd); /* updates ofname if original given */ - if (method < 0) { - close(ifd); - return; /* error message already emitted */ - } - } - if (list) { - do_list(ifd, method); - close(ifd); - return; - } - - /* If compressing to a file, check if ofname is not ambiguous - * because the operating system truncates names. Otherwise, generate - * a new ofname and save the original name in the compressed file. - */ - if (to_stdout) { - ofd = fileno(stdout); - /* keep remove_ofname as zero */ - } else { - if (create_outfile() != OK) return; - - if (!decompress && save_orig_name && !verbose && !quiet) { - fprintf(stderr, "%s: %s compressed to %s\n", - progname, ifname, ofname); - } - } - /* Keep the name even if not truncated except with --no-name: */ - if (!save_orig_name) save_orig_name = !no_name; - - if (verbose) { - fprintf(stderr, "%s:\t%s", ifname, (int)strlen(ifname) >= 15 ? - "" : ((int)strlen(ifname) >= 7 ? "\t" : "\t\t")); - } - - /* Actually do the compression/decompression. Loop over zipped members. - */ - for (;;) { - if ((*work)(ifd, ofd) != OK) { - method = -1; /* force cleanup */ - break; - } - if (!decompress || last_member || inptr == insize) break; - /* end of file */ - - method = get_method(ifd); - if (method < 0) break; /* error message already emitted */ - bytes_out = 0; /* required for length check */ - } - - close(ifd); - if (!to_stdout && close(ofd)) { - write_error(); - } - if (method == -1) { - if (!to_stdout) unlink (ofname); - return; - } - /* Display statistics */ - if(verbose) { - if (test) { - fprintf(stderr, " OK"); - } else if (decompress) { - display_ratio(bytes_out-(bytes_in-header_bytes), bytes_out,stderr); - } else { - display_ratio(bytes_in-(bytes_out-header_bytes), bytes_in, stderr); - } - if (!test && !to_stdout) { - fprintf(stderr, " -- replaced with %s", ofname); - } - fprintf(stderr, "\n"); - } - /* Copy modes, times, ownership, and remove the input file */ - if (!to_stdout) { - copy_stat(&istat); - } -} - -/* ======================================================================== - * Create the output file. Return OK or ERROR. - * Try several times if necessary to avoid truncating the z_suffix. For - * example, do not create a compressed file of name "1234567890123." - * Sets save_orig_name to true if the file name has been truncated. - * IN assertions: the input file has already been open (ifd is set) and - * ofname has already been updated if there was an original name. - * OUT assertions: ifd and ofd are closed in case of error. - */ -local int create_outfile() -{ - struct stat ostat; /* stat for ofname */ - int flags = O_WRONLY | O_CREAT | O_EXCL | O_BINARY; - - if (ascii && decompress) { - flags &= ~O_BINARY; /* force ascii text mode */ - } - for (;;) { - /* Make sure that ofname is not an existing file */ - if (check_ofname() != OK) { - close(ifd); - return ERROR; - } - /* Create the output file */ - remove_ofname = 1; - ofd = OPEN(ofname, flags, RW_USER); - if (ofd == -1) { - perror(ofname); - close(ifd); - exit_code = ERROR; - return ERROR; - } - - /* Check for name truncation on new file (1234567890123.gz) */ -#ifdef NO_FSTAT - if (stat(ofname, &ostat) != 0) { -#else - if (fstat(ofd, &ostat) != 0) { -#endif - fprintf(stderr, "%s: ", progname); - perror(ofname); - close(ifd); close(ofd); - unlink(ofname); - exit_code = ERROR; - return ERROR; - } - if (!name_too_long(ofname, &ostat)) return OK; - - if (decompress) { - /* name might be too long if an original name was saved */ - WARN((stderr, "%s: %s: warning, name truncated\n", - progname, ofname)); - return OK; - } - close(ofd); - unlink(ofname); -#ifdef NO_MULTIPLE_DOTS - /* Should never happen, see check_ofname() */ - fprintf(stderr, "%s: %s: name too long\n", progname, ofname); - do_exit(ERROR); -#endif - shorten_name(ofname); - } -} - -/* ======================================================================== - * Use lstat if available, except for -c or -f. Use stat otherwise. - * This allows links when not removing the original file. - */ -local int do_stat(name, sbuf) - char *name; - struct stat *sbuf; -{ - errno = 0; -#if (defined(S_IFLNK) || defined (S_ISLNK)) && !defined(NO_SYMLINK) - if (!to_stdout && !force) { - return lstat(name, sbuf); - } -#endif - return stat(name, sbuf); -} - -/* ======================================================================== - * Return a pointer to the 'z' suffix of a file name, or NULL. For all - * systems, ".gz", ".z", ".Z", ".taz", ".tgz", "-gz", "-z" and "_z" are - * accepted suffixes, in addition to the value of the --suffix option. - * ".tgz" is a useful convention for tar.z files on systems limited - * to 3 characters extensions. On such systems, ".?z" and ".??z" are - * also accepted suffixes. For Unix, we do not want to accept any - * .??z suffix as indicating a compressed file; some people use .xyz - * to denote volume data. - * On systems allowing multiple versions of the same file (such as VMS), - * this function removes any version suffix in the given name. - */ -local char *get_suffix(name) - char *name; -{ - int nlen, slen; - char suffix[MAX_SUFFIX+3]; /* last chars of name, forced to lower case */ - static char *known_suffixes[] = - {z_suffix, ".gz", ".z", ".taz", ".tgz", "-gz", "-z", "_z", -#ifdef MAX_EXT_CHARS - "z", -#endif - NULL}; - char **suf = known_suffixes; - - if (strequ(z_suffix, "z")) suf++; /* check long suffixes first */ - -#ifdef SUFFIX_SEP - /* strip a version number from the file name */ - { - char *v = strrchr(name, SUFFIX_SEP); - if (v != NULL) *v = '\0'; - } -#endif - nlen = strlen(name); - if (nlen <= MAX_SUFFIX+2) { - strcpy(suffix, name); - } else { - strcpy(suffix, name+nlen-MAX_SUFFIX-2); - } - strlwr(suffix); - slen = strlen(suffix); - do { - int s = strlen(*suf); - if (slen > s && suffix[slen-s-1] != PATH_SEP - && strequ(suffix + slen - s, *suf)) { - return name+nlen-s; - } - } while (*++suf != NULL); - - return NULL; -} - - -/* ======================================================================== - * Set ifname to the input file name (with a suffix appended if necessary) - * and istat to its stats. For decompression, if no file exists with the - * original name, try adding successively z_suffix, .gz, .z, -z and .Z. - * For MSDOS, we try only z_suffix and z. - * Return OK or ERROR. - */ -local int get_istat(iname, sbuf) - char *iname; - struct stat *sbuf; -{ - int ilen; /* strlen(ifname) */ - static char *suffixes[] = {z_suffix, ".gz", ".z", "-z", ".Z", NULL}; - char **suf = suffixes; - char *s; -#ifdef NO_MULTIPLE_DOTS - char *dot; /* pointer to ifname extension, or NULL */ -#endif - - strcpy(ifname, iname); - - /* If input file exists, return OK. */ - if (do_stat(ifname, sbuf) == 0) return OK; - - if (!decompress || errno != ENOENT) { - perror(ifname); - exit_code = ERROR; - return ERROR; - } - /* file.ext doesn't exist, try adding a suffix (after removing any - * version number for VMS). - */ - s = get_suffix(ifname); - if (s != NULL) { - perror(ifname); /* ifname already has z suffix and does not exist */ - exit_code = ERROR; - return ERROR; - } -#ifdef NO_MULTIPLE_DOTS - dot = strrchr(ifname, '.'); - if (dot == NULL) { - strcat(ifname, "."); - dot = strrchr(ifname, '.'); - } -#endif - ilen = strlen(ifname); - if (strequ(z_suffix, ".gz")) suf++; - - /* Search for all suffixes */ - do { - s = *suf; -#ifdef NO_MULTIPLE_DOTS - if (*s == '.') s++; -#endif -#ifdef MAX_EXT_CHARS - strcpy(ifname, iname); - /* Needed if the suffixes are not sorted by increasing length */ - - if (*dot == '\0') strcpy(dot, "."); - dot[MAX_EXT_CHARS+1-strlen(s)] = '\0'; -#endif - strcat(ifname, s); - if (do_stat(ifname, sbuf) == 0) return OK; - ifname[ilen] = '\0'; - } while (*++suf != NULL); - - /* No suffix found, complain using z_suffix: */ -#ifdef MAX_EXT_CHARS - strcpy(ifname, iname); - if (*dot == '\0') strcpy(dot, "."); - dot[MAX_EXT_CHARS+1-z_len] = '\0'; -#endif - strcat(ifname, z_suffix); - perror(ifname); - exit_code = ERROR; - return ERROR; -} - -/* ======================================================================== - * Generate ofname given ifname. Return OK, or WARNING if file must be skipped. - * Sets save_orig_name to true if the file name has been truncated. - */ -local int make_ofname() -{ - char *suff; /* ofname z suffix */ - - strcpy(ofname, ifname); - /* strip a version number if any and get the gzip suffix if present: */ - suff = get_suffix(ofname); - - if (decompress) { - if (suff == NULL) { - /* Whith -t or -l, try all files (even without .gz suffix) - * except with -r (behave as with just -dr). - */ - if (!recursive && (list || test)) return OK; - - /* Avoid annoying messages with -r */ - if (verbose || (!recursive && !quiet)) { - WARN((stderr,"%s: %s: unknown suffix -- ignored\n", - progname, ifname)); - } - return WARNING; - } - /* Make a special case for .tgz and .taz: */ - strlwr(suff); - if (strequ(suff, ".tgz") || strequ(suff, ".taz")) { - strcpy(suff, ".tar"); - } else { - *suff = '\0'; /* strip the z suffix */ - } - /* ofname might be changed later if infile contains an original name */ - - } else if (suff != NULL) { - /* Avoid annoying messages with -r (see treat_dir()) */ - if (verbose || (!recursive && !quiet)) { - fprintf(stderr, "%s: %s already has %s suffix -- unchanged\n", - progname, ifname, suff); - } - if (exit_code == OK) exit_code = WARNING; - return WARNING; - } else { - save_orig_name = 0; - -#ifdef NO_MULTIPLE_DOTS - suff = strrchr(ofname, '.'); - if (suff == NULL) { - strcat(ofname, "."); -# ifdef MAX_EXT_CHARS - if (strequ(z_suffix, "z")) { - strcat(ofname, "gz"); /* enough room */ - return OK; - } - /* On the Atari and some versions of MSDOS, name_too_long() - * does not work correctly because of a bug in stat(). So we - * must truncate here. - */ - } else if (strlen(suff)-1 + z_len > MAX_SUFFIX) { - suff[MAX_SUFFIX+1-z_len] = '\0'; - save_orig_name = 1; -# endif - } -#endif /* NO_MULTIPLE_DOTS */ - strcat(ofname, z_suffix); - - } /* decompress ? */ - return OK; -} - - -/* ======================================================================== - * Check the magic number of the input file and update ofname if an - * original name was given and to_stdout is not set. - * Return the compression method, -1 for error, -2 for warning. - * Set inptr to the offset of the next byte to be processed. - * Updates time_stamp if there is one and --no-time is not used. - * This function may be called repeatedly for an input file consisting - * of several contiguous gzip'ed members. - * IN assertions: there is at least one remaining compressed member. - * If the member is a zip file, it must be the only one. - */ -local int get_method(in) - int in; /* input file descriptor */ -{ - uch flags; /* compression flags */ - char magic[2]; /* magic header */ - ulg stamp; /* time stamp */ - - /* If --force and --stdout, zcat == cat, so do not complain about - * premature end of file: use try_byte instead of get_byte. - */ - if (force && to_stdout) { - magic[0] = (char)try_byte(); - magic[1] = (char)try_byte(); - /* If try_byte returned EOF, magic[1] == 0xff */ - } else { - magic[0] = (char)get_byte(); - magic[1] = (char)get_byte(); - } - method = -1; /* unknown yet */ - part_nb++; /* number of parts in gzip file */ - header_bytes = 0; - last_member = RECORD_IO; - /* assume multiple members in gzip file except for record oriented I/O */ - - if (memcmp(magic, GZIP_MAGIC, 2) == 0 - || memcmp(magic, OLD_GZIP_MAGIC, 2) == 0) { - - method = (int)get_byte(); - if (method != DEFLATED) { - fprintf(stderr, - "%s: %s: unknown method %d -- get newer version of gzip\n", - progname, ifname, method); - exit_code = ERROR; - return -1; - } - work = unzip; - flags = (uch)get_byte(); - - if ((flags & ENCRYPTED) != 0) { - fprintf(stderr, - "%s: %s is encrypted -- get newer version of gzip\n", - progname, ifname); - exit_code = ERROR; - return -1; - } - if ((flags & CONTINUATION) != 0) { - fprintf(stderr, - "%s: %s is a a multi-part gzip file -- get newer version of gzip\n", - progname, ifname); - exit_code = ERROR; - if (force <= 1) return -1; - } - if ((flags & RESERVED) != 0) { - fprintf(stderr, - "%s: %s has flags 0x%x -- get newer version of gzip\n", - progname, ifname, flags); - exit_code = ERROR; - if (force <= 1) return -1; - } - stamp = (ulg)get_byte(); - stamp |= ((ulg)get_byte()) << 8; - stamp |= ((ulg)get_byte()) << 16; - stamp |= ((ulg)get_byte()) << 24; - if (stamp != 0 && !no_time) time_stamp = stamp; - - (void)get_byte(); /* Ignore extra flags for the moment */ - (void)get_byte(); /* Ignore OS type for the moment */ - - if ((flags & CONTINUATION) != 0) { - unsigned part = (unsigned)get_byte(); - part |= ((unsigned)get_byte())<<8; - if (verbose) { - fprintf(stderr,"%s: %s: part number %u\n", - progname, ifname, part); - } - } - if ((flags & EXTRA_FIELD) != 0) { - unsigned len = (unsigned)get_byte(); - len |= ((unsigned)get_byte())<<8; - if (verbose) { - fprintf(stderr,"%s: %s: extra field of %u bytes ignored\n", - progname, ifname, len); - } - while (len--) (void)get_byte(); - } - - /* Get original file name if it was truncated */ - if ((flags & ORIG_NAME) != 0) { - if (no_name || (to_stdout && !list) || part_nb > 1) { - /* Discard the old name */ - char c; /* dummy used for NeXTstep 3.0 cc optimizer bug */ - do {c=get_byte();} while (c != 0); - } else { - /* Copy the base name. Keep a directory prefix intact. */ - char *p = basename(ofname); - char *base = p; - for (;;) { - *p = (char)get_char(); - if (*p++ == '\0') break; - if (p >= ofname+sizeof(ofname)) { - error("corrupted input -- file name too large"); - } - } - /* If necessary, adapt the name to local OS conventions: */ - if (!list) { - MAKE_LEGAL_NAME(base); - if (base) list=0; /* avoid warning about unused variable */ - } - } /* no_name || to_stdout */ - } /* ORIG_NAME */ - - /* Discard file comment if any */ - if ((flags & COMMENT) != 0) { - while (get_char() != 0) /* null */ ; - } - if (part_nb == 1) { - header_bytes = inptr + 2*sizeof(long); /* include crc and size */ - } - - } else if (memcmp(magic, PKZIP_MAGIC, 2) == 0 && inptr == 2 - && memcmp((char*)inbuf, PKZIP_MAGIC, 4) == 0) { - /* To simplify the code, we support a zip file when alone only. - * We are thus guaranteed that the entire local header fits in inbuf. - */ - inptr = 0; - work = unzip; - if (check_zipfile(in) != OK) return -1; - /* check_zipfile may get ofname from the local header */ - last_member = 1; - - } else if (memcmp(magic, PACK_MAGIC, 2) == 0) { - work = unpack; - method = PACKED; - - } else if (memcmp(magic, LZW_MAGIC, 2) == 0) { - work = unlzw; - method = COMPRESSED; - last_member = 1; - - } else if (memcmp(magic, LZH_MAGIC, 2) == 0) { - work = unlzh; - method = LZHED; - last_member = 1; - - } else if (force && to_stdout && !list) { /* pass input unchanged */ - method = STORED; - work = copy; - inptr = 0; - last_member = 1; - } - if (method >= 0) return method; - - if (part_nb == 1) { - fprintf(stderr, "\n%s: %s: not in gzip format\n", progname, ifname); - exit_code = ERROR; - return -1; - } else { - WARN((stderr, "\n%s: %s: decompression OK, trailing garbage ignored\n", - progname, ifname)); - return -2; - } -} - -/* ======================================================================== - * Display the characteristics of the compressed file. - * If the given method is < 0, display the accumulated totals. - * IN assertions: time_stamp, header_bytes and ifile_size are initialized. - */ -local void do_list(ifd, method) - int ifd; /* input file descriptor */ - int method; /* compression method */ -{ - ulg crc; /* original crc */ - static int first_time = 1; - static char* methods[MAX_METHODS] = { - "store", /* 0 */ - "compr", /* 1 */ - "pack ", /* 2 */ - "lzh ", /* 3 */ - "", "", "", "", /* 4 to 7 reserved */ - "defla"}; /* 8 */ - char *date; - - if (first_time && method >= 0) { - first_time = 0; - if (verbose) { - printf("method crc date time "); - } - if (!quiet) { - printf("compressed uncompr. ratio uncompressed_name\n"); - } - } else if (method < 0) { - if (total_in <= 0 || total_out <= 0) return; - if (verbose) { - printf(" %9lu %9lu ", - total_in, total_out); - } else if (!quiet) { - printf("%9ld %9ld ", total_in, total_out); - } - display_ratio(total_out-(total_in-header_bytes), total_out, stdout); - /* header_bytes is not meaningful but used to ensure the same - * ratio if there is a single file. - */ - printf(" (totals)\n"); - return; - } - crc = (ulg)~0; /* unknown */ - bytes_out = -1L; - bytes_in = ifile_size; - -#if RECORD_IO == 0 - if (method == DEFLATED && !last_member) { - /* Get the crc and uncompressed size for gzip'ed (not zip'ed) files. - * If the lseek fails, we could use read() to get to the end, but - * --list is used to get quick results. - * Use "gunzip < foo.gz | wc -c" to get the uncompressed size if - * you are not concerned about speed. - */ - bytes_in = (long)lseek(ifd, (off_t)(-8), SEEK_END); - if (bytes_in != -1L) { - uch buf[8]; - bytes_in += 8L; - if (read(ifd, (char*)buf, sizeof(buf)) != sizeof(buf)) { - read_error(); - } - crc = LG(buf); - bytes_out = LG(buf+4); - } - } -#endif /* RECORD_IO */ - date = ctime((time_t*)&time_stamp) + 4; /* skip the day of the week */ - date[12] = '\0'; /* suppress the 1/100sec and the year */ - if (verbose) { - printf("%5s %08lx %11s ", methods[method], crc, date); - } - printf("%9ld %9ld ", bytes_in, bytes_out); - if (bytes_in == -1L) { - total_in = -1L; - bytes_in = bytes_out = header_bytes = 0; - } else if (total_in >= 0) { - total_in += bytes_in; - } - if (bytes_out == -1L) { - total_out = -1L; - bytes_in = bytes_out = header_bytes = 0; - } else if (total_out >= 0) { - total_out += bytes_out; - } - display_ratio(bytes_out-(bytes_in-header_bytes), bytes_out, stdout); - printf(" %s\n", ofname); -} - -/* ======================================================================== - * Return true if the two stat structures correspond to the same file. - */ -local int same_file(stat1, stat2) - struct stat *stat1; - struct stat *stat2; -{ - return stat1->st_ino == stat2->st_ino - && stat1->st_dev == stat2->st_dev -#ifdef NO_ST_INO - /* Can't rely on st_ino and st_dev, use other fields: */ - && stat1->st_mode == stat2->st_mode - && stat1->st_uid == stat2->st_uid - && stat1->st_gid == stat2->st_gid - && stat1->st_size == stat2->st_size - && stat1->st_atime == stat2->st_atime - && stat1->st_mtime == stat2->st_mtime - && stat1->st_ctime == stat2->st_ctime -#endif - ; -} - -/* ======================================================================== - * Return true if a file name is ambiguous because the operating system - * truncates file names. - */ -local int name_too_long(name, statb) - char *name; /* file name to check */ - struct stat *statb; /* stat buf for this file name */ -{ - int s = strlen(name); - char c = name[s-1]; - struct stat tstat; /* stat for truncated name */ - int res; - - tstat = *statb; /* Just in case OS does not fill all fields */ - name[s-1] = '\0'; - res = stat(name, &tstat) == 0 && same_file(statb, &tstat); - name[s-1] = c; - Trace((stderr, " too_long(%s) => %d\n", name, res)); - return res; -} - -/* ======================================================================== - * Shorten the given name by one character, or replace a .tar extension - * with .tgz. Truncate the last part of the name which is longer than - * MIN_PART characters: 1234.678.012.gz -> 123.678.012.gz. If the name - * has only parts shorter than MIN_PART truncate the longest part. - * For decompression, just remove the last character of the name. - * - * IN assertion: for compression, the suffix of the given name is z_suffix. - */ -local void shorten_name(name) - char *name; -{ - int len; /* length of name without z_suffix */ - char *trunc = NULL; /* character to be truncated */ - int plen; /* current part length */ - int min_part = MIN_PART; /* current minimum part length */ - char *p; - - len = strlen(name); - if (decompress) { - if (len <= 1) error("name too short"); - name[len-1] = '\0'; - return; - } - p = get_suffix(name); - if (p == NULL) error("can't recover suffix\n"); - *p = '\0'; - save_orig_name = 1; - - /* compress 1234567890.tar to 1234567890.tgz */ - if (len > 4 && strequ(p-4, ".tar")) { - strcpy(p-4, ".tgz"); - return; - } - /* Try keeping short extensions intact: - * 1234.678.012.gz -> 123.678.012.gz - */ - do { - p = strrchr(name, PATH_SEP); - p = p ? p+1 : name; - while (*p) { - plen = strcspn(p, PART_SEP); - p += plen; - if (plen > min_part) trunc = p-1; - if (*p) p++; - } - } while (trunc == NULL && --min_part != 0); - - if (trunc != NULL) { - do { - trunc[0] = trunc[1]; - } while (*trunc++); - trunc--; - } else { - trunc = strrchr(name, PART_SEP[0]); - if (trunc == NULL) error("internal error in shorten_name"); - if (trunc[1] == '\0') trunc--; /* force truncation */ - } - strcpy(trunc, z_suffix); -} - -/* ======================================================================== - * If compressing to a file, check if ofname is not ambiguous - * because the operating system truncates names. Otherwise, generate - * a new ofname and save the original name in the compressed file. - * If the compressed file already exists, ask for confirmation. - * The check for name truncation is made dynamically, because different - * file systems on the same OS might use different truncation rules (on SVR4 - * s5 truncates to 14 chars and ufs does not truncate). - * This function returns -1 if the file must be skipped, and - * updates save_orig_name if necessary. - * IN assertions: save_orig_name is already set if ofname has been - * already truncated because of NO_MULTIPLE_DOTS. The input file has - * already been open and istat is set. - */ -local int check_ofname() -{ - struct stat ostat; /* stat for ofname */ - -#ifdef ENAMETOOLONG - /* Check for strictly conforming Posix systems (which return ENAMETOOLONG - * instead of silently truncating filenames). - */ - errno = 0; - while (stat(ofname, &ostat) != 0) { - if (errno != ENAMETOOLONG) return 0; /* ofname does not exist */ - shorten_name(ofname); - } -#else - if (stat(ofname, &ostat) != 0) return 0; -#endif - /* Check for name truncation on existing file. Do this even on systems - * defining ENAMETOOLONG, because on most systems the strict Posix - * behavior is disabled by default (silent name truncation allowed). - */ - if (!decompress && name_too_long(ofname, &ostat)) { - shorten_name(ofname); - if (stat(ofname, &ostat) != 0) return 0; - } - - /* Check that the input and output files are different (could be - * the same by name truncation or links). - */ - if (same_file(&istat, &ostat)) { - if (strequ(ifname, ofname)) { - fprintf(stderr, "%s: %s: cannot %scompress onto itself\n", - progname, ifname, decompress ? "de" : ""); - } else { - fprintf(stderr, "%s: %s and %s are the same file\n", - progname, ifname, ofname); - } - exit_code = ERROR; - return ERROR; - } - /* Ask permission to overwrite the existing file */ - if (!force) { - char response[80]; - strcpy(response,"n"); - fprintf(stderr, "%s: %s already exists;", progname, ofname); - if (foreground && isatty(fileno(stdin))) { - fprintf(stderr, " do you wish to overwrite (y or n)? "); - fflush(stderr); - (void)fgets(response, sizeof(response)-1, stdin); - } - if (tolow(*response) != 'y') { - fprintf(stderr, "\tnot overwritten\n"); - if (exit_code == OK) exit_code = WARNING; - return ERROR; - } - } - (void) chmod(ofname, 0777); - if (unlink(ofname)) { - fprintf(stderr, "%s: ", progname); - perror(ofname); - exit_code = ERROR; - return ERROR; - } - return OK; -} - - -#ifndef NO_UTIME -/* ======================================================================== - * Set the access and modification times from the given stat buffer. - */ -local void reset_times (name, statb) - char *name; - struct stat *statb; -{ - struct utimbuf timep; - - /* Copy the time stamp */ - timep.actime = statb->st_atime; - timep.modtime = statb->st_mtime; - - /* Some systems (at least OS/2) do not support utime on directories */ - if (utime(name, &timep) && !S_ISDIR(statb->st_mode)) { - WARN((stderr, "%s: ", progname)); - if (!quiet) perror(ofname); - } -} -#endif - - -/* ======================================================================== - * Copy modes, times, ownership from input file to output file. - * IN assertion: to_stdout is false. - */ -local void copy_stat(ifstat) - struct stat *ifstat; -{ -#ifndef NO_UTIME - if (decompress && time_stamp != 0 && ifstat->st_mtime != time_stamp) { - ifstat->st_mtime = time_stamp; - if (verbose > 1) { - fprintf(stderr, "%s: time stamp restored\n", ofname); - } - } - reset_times(ofname, ifstat); -#endif - /* Copy the protection modes */ - if (chmod(ofname, ifstat->st_mode & 07777)) { - WARN((stderr, "%s: ", progname)); - if (!quiet) perror(ofname); - } -#ifndef NO_CHOWN - chown(ofname, ifstat->st_uid, ifstat->st_gid); /* Copy ownership */ -#endif - remove_ofname = 0; - /* It's now safe to remove the input file: */ - (void) chmod(ifname, 0777); - if (unlink(ifname)) { - WARN((stderr, "%s: ", progname)); - if (!quiet) perror(ifname); - } -} - -#ifndef NO_DIR - -/* ======================================================================== - * Recurse through the given directory. This code is taken from ncompress. - */ -local void treat_dir(dir) - char *dir; -{ - dir_type *dp; - DIR *dirp; - char nbuf[MAX_PATH_LEN]; - int len; - - dirp = opendir(dir); - - if (dirp == NULL) { - fprintf(stderr, "%s: %s unreadable\n", progname, dir); - exit_code = ERROR; - return ; - } - /* - ** WARNING: the following algorithm could occasionally cause - ** compress to produce error warnings of the form "<filename>.gz - ** already has .gz suffix - ignored". This occurs when the - ** .gz output file is inserted into the directory below - ** readdir's current pointer. - ** These warnings are harmless but annoying, so they are suppressed - ** with option -r (except when -v is on). An alternative - ** to allowing this would be to store the entire directory - ** list in memory, then compress the entries in the stored - ** list. Given the depth-first recursive algorithm used here, - ** this could use up a tremendous amount of memory. I don't - ** think it's worth it. -- Dave Mack - ** (An other alternative might be two passes to avoid depth-first.) - */ - - while ((dp = readdir(dirp)) != NULL) { - - if (strequ(dp->d_name,".") || strequ(dp->d_name,"..")) { - continue; - } - len = strlen(dir); - if (len + NLENGTH(dp) + 1 < MAX_PATH_LEN - 1) { - strcpy(nbuf,dir); - if (len != 0 /* dir = "" means current dir on Amiga */ -#ifdef PATH_SEP2 - && dir[len-1] != PATH_SEP2 -#endif -#ifdef PATH_SEP3 - && dir[len-1] != PATH_SEP3 -#endif - ) { - nbuf[len++] = PATH_SEP; - } - strcpy(nbuf+len, dp->d_name); - treat_file(nbuf); - } else { - fprintf(stderr,"%s: %s/%s: pathname too long\n", - progname, dir, dp->d_name); - exit_code = ERROR; - } - } - closedir(dirp); -} -#endif /* ? NO_DIR */ - -/* ======================================================================== - * Free all dynamically allocated variables and exit with the given code. - */ -local void do_exit(exitcode) - int exitcode; -{ - static int in_exit = 0; - - if (in_exit) exit(exitcode); - in_exit = 1; - if (env != NULL) free(env), env = NULL; - if (args != NULL) free((char*)args), args = NULL; - FREE(inbuf); - FREE(outbuf); - FREE(d_buf); - FREE(window); -#ifndef MAXSEG_64K - FREE(tab_prefix); -#else - FREE(tab_prefix0); - FREE(tab_prefix1); -#endif - exit(exitcode); -} - -/* ======================================================================== - * Signal and error handler. - */ -RETSIGTYPE abort_gzip() -{ - if (remove_ofname) { - close(ofd); - unlink (ofname); - } - do_exit(ERROR); -} diff --git a/Build/source/utils/gzip/gzip.doc b/Build/source/utils/gzip/gzip.doc deleted file mode 100644 index 5b2238b6831..00000000000 --- a/Build/source/utils/gzip/gzip.doc +++ /dev/null @@ -1,350 +0,0 @@ - -GZIP(1) USER COMMANDS GZIP(1) - -NAME - gzip, gunzip, zcat - compress or expand files - -SYNOPSIS - gzip [ -acdfhlLnNrtvV19 ] [-S suffix] [ name ... ] - gunzip [ -acfhlLnNrtvV ] [-S suffix] [ name ... ] - zcat [ -fhLV ] [ name ... ] - -DESCRIPTION - Gzip reduces the size of the named files using Lempel-Ziv - coding (LZ77). Whenever possible, each file is replaced by - one with the extension .gz, while keeping the same ownership - modes, access and modification times. (The default exten- - sion is -gz for VMS, z for MSDOS, OS/2 FAT, Windows NT FAT - and Atari.) If no files are specified, or if a file name is - "-", the standard input is compressed to the standard out- - put. Gzip will only attempt to compress regular files. In - particular, it will ignore symbolic links. - - If the compressed file name is too long for its file system, - gzip truncates it. Gzip attempts to truncate only the parts - of the file name longer than 3 characters. (A part is del- - imited by dots.) If the name consists of small parts only, - the longest parts are truncated. For example, if file names - are limited to 14 characters, gzip.msdos.exe is compressed - to gzi.msd.exe.gz. Names are not truncated on systems which - do not have a limit on file name length. - - By default, gzip keeps the original file name and timestamp - in the compressed file. These are used when decompressing - the file with the -N option. This is useful when the - compressed file name was truncated or when the time stamp - was not preserved after a file transfer. - - Compressed files can be restored to their original form - using gzip -d or gunzip or zcat. If the original name saved - in the compressed file is not suitable for its file system, - a new name is constructed from the original one to make it - legal. - - gunzip takes a list of files on its command line and - replaces each file whose name ends with .gz, -gz, .z, -z, _z - or .Z and which begins with the correct magic number with an - uncompressed file without the original extension. gunzip - also recognizes the special extensions .tgz and .taz as - shorthands for .tar.gz and .tar.Z respectively. When - compressing, gzip uses the .tgz extension if necessary - instead of truncating a file with a .tar extension. - - gunzip can currently decompress files created by gzip, zip, - compress, compress -H or pack. The detection of the input - format is automatic. When using the first two formats, - gunzip checks a 32 bit CRC. For pack, gunzip checks the - uncompressed length. The standard compress format was not - designed to allow consistency checks. However gunzip is - sometimes able to detect a bad .Z file. If you get an error - when uncompressing a .Z file, do not assume that the .Z file - is correct simply because the standard uncompress does not - complain. This generally means that the standard uncompress - does not check its input, and happily generates garbage out- - put. The SCO compress -H format (lzh compression method) - does not include a CRC but also allows some consistency - checks. - - Files created by zip can be uncompressed by gzip only if - they have a single member compressed with the 'deflation' - method. This feature is only intended to help conversion of - tar.zip files to the tar.gz format. To extract zip files - with several members, use unzip instead of gunzip. - - zcat is identical to gunzip -c. (On some systems, zcat may - be installed as gzcat to preserve the original link to - compress.) zcat uncompresses either a list of files on the - command line or its standard input and writes the - uncompressed data on standard output. zcat will uncompress - files that have the correct magic number whether they have a - .gz suffix or not. - - Gzip uses the Lempel-Ziv algorithm used in zip and PKZIP. - The amount of compression obtained depends on the size of - the input and the distribution of common substrings. Typi- - cally, text such as source code or English is reduced by - 60-70%. Compression is generally much better than that - achieved by LZW (as used in compress), Huffman coding (as - used in pack), or adaptive Huffman coding (compact). - - Compression is always performed, even if the compressed file - is slightly larger than the original. The worst case expan- - sion is a few bytes for the gzip file header, plus 5 bytes - every 32K block, or an expansion ratio of 0.015% for large - files. Note that the actual number of used disk blocks - almost never increases. gzip preserves the mode, ownership - and timestamps of files when compressing or decompressing. - -OPTIONS - -a --ascii - Ascii text mode: convert end-of-lines using local con- - ventions. This option is supported only on some non- - Unix systems. For MSDOS, CR LF is converted to LF when - compressing, and LF is converted to CR LF when - decompressing. - - -c --stdout --to-stdout - Write output on standard output; keep original files - unchanged. If there are several input files, the out- - put consists of a sequence of independently compressed - members. To obtain better compression, concatenate all - input files before compressing them. - - -d --decompress --uncompress - Decompress. - - -f --force - Force compression or decompression even if the file has - multiple links or the corresponding file already - exists, or if the compressed data is read from or writ- - ten to a terminal. If the input data is not in a format - recognized by gzip, and if the option --stdout is also - given, copy the input data without change to the stan- - dard ouput: let zcat behave as cat. If -f is not given, - and when not running in the background, gzip prompts to - verify whether an existing file should be overwritten. - - -h --help - Display a help screen and quit. - - -l --list - For each compressed file, list the following fields: - - compressed size: size of the compressed file - uncompressed size: size of the uncompressed file - ratio: compression ratio (0.0% if unknown) - uncompressed_name: name of the uncompressed file - - The uncompressed size is given as -1 for files not in - gzip format, such as compressed .Z files. To get the - uncompressed size for such a file, you can use: - - zcat file.Z | wc -c - - In combination with the --verbose option, the following - fields are also displayed: - - method: compression method - crc: the 32-bit CRC of the uncompressed data - date & time: time stamp for the uncompressed file - - The compression methods currently supported are - deflate, compress, lzh (SCO compress -H) and pack. The - crc is given as ffffffff for a file not in gzip format. - - With --name, the uncompressed name, date and time are - those stored within the compress file if present. - - With --verbose, the size totals and compression ratio - for all files is also displayed, unless some sizes are - unknown. With --quiet, the title and totals lines are - not displayed. - - -L --license - Display the gzip license and quit. - - -n --no-name - When compressing, do not save the original file name - and time stamp by default. (The original name is always - saved if the name had to be truncated.) When - decompressing, do not restore the original file name if - present (remove only the gzip suffix from the - compressed file name) and do not restore the original - time stamp if present (copy it from the compressed - file). This option is the default when decompressing. - - -N --name - When compressing, always save the original file name - and time stamp; this is the default. When decompress- - ing, restore the original file name and time stamp if - present. This option is useful on systems which have a - limit on file name length or when the time stamp has - been lost after a file transfer. - - -q --quiet - Suppress all warnings. - - -r --recursive - Travel the directory structure recursively. If any of - the file names specified on the command line are direc- - tories, gzip will descend into the directory and - compress all the files it finds there (or decompress - them in the case of gunzip ). - - -S .suf --suffix .suf - Use suffix .suf instead of .gz. Any suffix can be - given, but suffixes other than .z and .gz should be - avoided to avoid confusion when files are transferred - to other systems. A null suffix forces gunzip to try - decompression on all given files regardless of suffix, - as in: - - gunzip -S "" * (*.* for MSDOS) - - Previous versions of gzip used the .z suffix. This was - changed to avoid a conflict with pack(1). - - -t --test - Test. Check the compressed file integrity. - - -v --verbose - Verbose. Display the name and percentage reduction for - each file compressed or decompressed. - - -V --version - Version. Display the version number and compilation - options then quit. - - -# --fast --best - Regulate the speed of compression using the specified - digit #, where -1 or --fast indicates the fastest - compression method (less compression) and -9 or --best - indicates the slowest compression method (best compres- - sion). The default compression level is -6 (that is, - biased towards high compression at expense of speed). - -ADVANCED USAGE - Multiple compressed files can be concatenated. In this case, - gunzip will extract all members at once. For example: - - gzip -c file1 > foo.gz - gzip -c file2 >> foo.gz - - Then - gunzip -c foo - - is equivalent to - - cat file1 file2 - - In case of damage to one member of a .gz file, other members - can still be recovered (if the damaged member is removed). - However, you can get better compression by compressing all - members at once: - - cat file1 file2 | gzip > foo.gz - - compresses better than - - gzip -c file1 file2 > foo.gz - - If you want to recompress concatenated files to get better - compression, do: - - gzip -cd old.gz | gzip > new.gz - - If a compressed file consists of several members, the - uncompressed size and CRC reported by the --list option - applies to the last member only. If you need the - uncompressed size for all members, you can use: - - gzip -cd file.gz | wc -c - - If you wish to create a single archive file with multiple - members so that members can later be extracted indepen- - dently, use an archiver such as tar or zip. GNU tar supports - the -z option to invoke gzip transparently. gzip is designed - as a complement to tar, not as a replacement. - -ENVIRONMENT - The environment variable GZIP can hold a set of default - options for gzip. These options are interpreted first and - can be overwritten by explicit command line parameters. For - example: - for sh: GZIP="-8v --name"; export GZIP - for csh: setenv GZIP "-8v --name" - for MSDOS: set GZIP=-8v --name - - On Vax/VMS, the name of the environment variable is - GZIP_OPT, to avoid a conflict with the symbol set for invo- - cation of the program. - -SEE ALSO - znew(1), zcmp(1), zmore(1), zforce(1), gzexe(1), zip(1), - unzip(1), compress(1), pack(1), compact(1) - -DIAGNOSTICS - Exit status is normally 0; if an error occurs, exit status - is 1. If a warning occurs, exit status is 2. - - Usage: gzip [-cdfhlLnNrtvV19] [-S suffix] [file ...] - Invalid options were specified on the command line. - file: not in gzip format - The file specified to gunzip has not been - compressed. - file: Corrupt input. Use zcat to recover some data. - The compressed file has been damaged. The data up to - the point of failure can be recovered using - zcat file > recover - file: compressed with xx bits, can only handle yy bits - File was compressed (using LZW) by a program that - could deal with more bits than the decompress code - on this machine. Recompress the file with gzip, - which compresses better and uses less memory. - file: already has .gz suffix -- no change - The file is assumed to be already compressed. - Rename the file and try again. - file already exists; do you wish to overwrite (y or n)? - Respond "y" if you want the output file to be - replaced; "n" if not. - gunzip: corrupt input - A SIGSEGV violation was detected which usually means - that the input file has been corrupted. - xx.x% - Percentage of the input saved by compression. - (Relevant only for -v and -l.) - -- not a regular file or directory: ignored - When the input file is not a regular file or direc- - tory, (e.g. a symbolic link, socket, FIFO, device - file), it is left unaltered. - -- has xx other links: unchanged - The input file has links; it is left unchanged. See - ln(1) for more information. Use the -f flag to force - compression of multiply-linked files. - -CAVEATS - When writing compressed data to a tape, it is generally - necessary to pad the output with zeroes up to a block boun- - dary. When the data is read and the whole block is passed to - gunzip for decompression, gunzip detects that there is extra - trailing garbage after the compressed data and emits a warn- - ing by default. You have to use the --quiet option to - suppress the warning. This option can be set in the GZIP - environment variable as in: - for sh: GZIP="-q" tar -xfz --block-compress /dev/rst0 - for csh: (setenv GZIP -q; tar -xfz --block-compr /dev/rst0 - - In the above example, gzip is invoked implicitly by the -z - option of GNU tar. Make sure that the same block size (-b - option of tar) is used for reading and writing compressed - data on tapes. (This example assumes you are using the GNU - version of tar.) - -BUGS - The --list option reports incorrect sizes if they exceed 2 - gigabytes. The --list option reports sizes as -1 and crc as - ffffffff if the compressed file is on a non seekable media. - - In some rare cases, the --best option gives worse compres- - sion than the default compression level (-6). On some highly - redundant files, compress compresses better than gzip. diff --git a/Build/source/utils/gzip/gzip.h b/Build/source/utils/gzip/gzip.h deleted file mode 100644 index 25297ef4eb5..00000000000 --- a/Build/source/utils/gzip/gzip.h +++ /dev/null @@ -1,319 +0,0 @@ -/* gzip.h -- common declarations for all gzip modules - * Copyright (C) 1992-1993 Jean-loup Gailly. - * This is free software; you can redistribute it and/or modify it under the - * terms of the GNU General Public License, see the file COPYING. - */ - -#if defined(__STDC__) || defined(PROTO) -# define OF(args) args -#else -# define OF(args) () -#endif - -#ifdef __STDC__ - typedef void *voidp; -#else - typedef char *voidp; -#endif - -/* I don't like nested includes, but the string and io functions are used - * too often - */ -#include <stdio.h> -#if !defined(NO_STRING_H) || defined(STDC_HEADERS) -# include <string.h> -# if !defined(STDC_HEADERS) && !defined(NO_MEMORY_H) && !defined(__GNUC__) -# include <memory.h> -# endif -# define memzero(s, n) memset ((voidp)(s), 0, (n)) -#else -# include <strings.h> -# define strchr index -# define strrchr rindex -# define memcpy(d, s, n) bcopy((s), (d), (n)) -# define memcmp(s1, s2, n) bcmp((s1), (s2), (n)) -# define memzero(s, n) bzero((s), (n)) -#endif - -#ifndef RETSIGTYPE -# define RETSIGTYPE void -#endif - -#define local static - -typedef unsigned char uch; -typedef unsigned short ush; -typedef unsigned long ulg; - -/* Return codes from gzip */ -#define OK 0 -#define ERROR 1 -#define WARNING 2 - -/* Compression methods (see algorithm.doc) */ -#define STORED 0 -#define COMPRESSED 1 -#define PACKED 2 -#define LZHED 3 -/* methods 4 to 7 reserved */ -#define DEFLATED 8 -#define MAX_METHODS 9 -extern int method; /* compression method */ - -/* To save memory for 16 bit systems, some arrays are overlaid between - * the various modules: - * deflate: prev+head window d_buf l_buf outbuf - * unlzw: tab_prefix tab_suffix stack inbuf outbuf - * inflate: window inbuf - * unpack: window inbuf prefix_len - * unlzh: left+right window c_table inbuf c_len - * For compression, input is done in window[]. For decompression, output - * is done in window except for unlzw. - */ - -#ifndef INBUFSIZ -# ifdef SMALL_MEM -# define INBUFSIZ 0x2000 /* input buffer size */ -# else -# define INBUFSIZ 0x8000 /* input buffer size */ -# endif -#endif -#define INBUF_EXTRA 64 /* required by unlzw() */ - -#ifndef OUTBUFSIZ -# ifdef SMALL_MEM -# define OUTBUFSIZ 8192 /* output buffer size */ -# else -# define OUTBUFSIZ 16384 /* output buffer size */ -# endif -#endif -#define OUTBUF_EXTRA 2048 /* required by unlzw() */ - -#ifndef DIST_BUFSIZE -# ifdef SMALL_MEM -# define DIST_BUFSIZE 0x2000 /* buffer for distances, see trees.c */ -# else -# define DIST_BUFSIZE 0x8000 /* buffer for distances, see trees.c */ -# endif -#endif - -#ifdef DYN_ALLOC -# define EXTERN(type, array) extern type * near array -# define DECLARE(type, array, size) type * near array -# define ALLOC(type, array, size) { \ - array = (type*)fcalloc((size_t)(((size)+1L)/2), 2*sizeof(type)); \ - if (array == NULL) error("insufficient memory"); \ - } -# define FREE(array) {if (array != NULL) fcfree(array), array=NULL;} -#else -# define EXTERN(type, array) extern type array[] -# define DECLARE(type, array, size) type array[size] -# define ALLOC(type, array, size) -# define FREE(array) -#endif - -EXTERN(uch, inbuf); /* input buffer */ -EXTERN(uch, outbuf); /* output buffer */ -EXTERN(ush, d_buf); /* buffer for distances, see trees.c */ -EXTERN(uch, window); /* Sliding window and suffix table (unlzw) */ -#define tab_suffix window -#ifndef MAXSEG_64K -# define tab_prefix prev /* hash link (see deflate.c) */ -# define head (prev+WSIZE) /* hash head (see deflate.c) */ - EXTERN(ush, tab_prefix); /* prefix code (see unlzw.c) */ -#else -# define tab_prefix0 prev -# define head tab_prefix1 - EXTERN(ush, tab_prefix0); /* prefix for even codes */ - EXTERN(ush, tab_prefix1); /* prefix for odd codes */ -#endif - -extern unsigned insize; /* valid bytes in inbuf */ -extern unsigned inptr; /* index of next byte to be processed in inbuf */ -extern unsigned outcnt; /* bytes in output buffer */ - -extern long bytes_in; /* number of input bytes */ -extern long bytes_out; /* number of output bytes */ -extern long header_bytes;/* number of bytes in gzip header */ - -#define isize bytes_in -/* for compatibility with old zip sources (to be cleaned) */ - -extern int ifd; /* input file descriptor */ -extern int ofd; /* output file descriptor */ -extern char ifname[]; /* input file name or "stdin" */ -extern char ofname[]; /* output file name or "stdout" */ -extern char *progname; /* program name */ - -extern long time_stamp; /* original time stamp (modification time) */ -extern long ifile_size; /* input file size, -1 for devices (debug only) */ - -typedef int file_t; /* Do not use stdio */ -#define NO_FILE (-1) /* in memory compression */ - - -#define PACK_MAGIC "\037\036" /* Magic header for packed files */ -#define GZIP_MAGIC "\037\213" /* Magic header for gzip files, 1F 8B */ -#define OLD_GZIP_MAGIC "\037\236" /* Magic header for gzip 0.5 = freeze 1.x */ -#define LZH_MAGIC "\037\240" /* Magic header for SCO LZH Compress files*/ -#define PKZIP_MAGIC "\120\113\003\004" /* Magic header for pkzip files */ - -/* gzip flag byte */ -#define ASCII_FLAG 0x01 /* bit 0 set: file probably ascii text */ -#define CONTINUATION 0x02 /* bit 1 set: continuation of multi-part gzip file */ -#define EXTRA_FIELD 0x04 /* bit 2 set: extra field present */ -#define ORIG_NAME 0x08 /* bit 3 set: original file name present */ -#define COMMENT 0x10 /* bit 4 set: file comment present */ -#define ENCRYPTED 0x20 /* bit 5 set: file is encrypted */ -#define RESERVED 0xC0 /* bit 6,7: reserved */ - -/* internal file attribute */ -#define UNKNOWN 0xffff -#define BINARY 0 -#define ASCII 1 - -#ifndef WSIZE -# define WSIZE 0x8000 /* window size--must be a power of two, and */ -#endif /* at least 32K for zip's deflate method */ - -#define MIN_MATCH 3 -#define MAX_MATCH 258 -/* The minimum and maximum match lengths */ - -#define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1) -/* Minimum amount of lookahead, except at the end of the input file. - * See deflate.c for comments about the MIN_MATCH+1. - */ - -#define MAX_DIST (WSIZE-MIN_LOOKAHEAD) -/* In order to simplify the code, particularly on 16 bit machines, match - * distances are limited to MAX_DIST instead of WSIZE. - */ - -extern int decrypt; /* flag to turn on decryption */ -extern int exit_code; /* program exit code */ -extern int verbose; /* be verbose (-v) */ -extern int quiet; /* be quiet (-q) */ -extern int level; /* compression level */ -extern int test; /* check .z file integrity */ -extern int to_stdout; /* output to stdout (-c) */ -extern int save_orig_name; /* set if original name must be saved */ - -#define get_byte() (inptr < insize ? inbuf[inptr++] : fill_inbuf(0)) -#define try_byte() (inptr < insize ? inbuf[inptr++] : fill_inbuf(1)) - -/* put_byte is used for the compressed output, put_ubyte for the - * uncompressed output. However unlzw() uses window for its - * suffix table instead of its output buffer, so it does not use put_ubyte - * (to be cleaned up). - */ -#define put_byte(c) {outbuf[outcnt++]=(uch)(c); if (outcnt==OUTBUFSIZ)\ - flush_outbuf();} -#define put_ubyte(c) {window[outcnt++]=(uch)(c); if (outcnt==WSIZE)\ - flush_window();} - -/* Output a 16 bit value, lsb first */ -#define put_short(w) \ -{ if (outcnt < OUTBUFSIZ-2) { \ - outbuf[outcnt++] = (uch) ((w) & 0xff); \ - outbuf[outcnt++] = (uch) ((ush)(w) >> 8); \ - } else { \ - put_byte((uch)((w) & 0xff)); \ - put_byte((uch)((ush)(w) >> 8)); \ - } \ -} - -/* Output a 32 bit value to the bit stream, lsb first */ -#define put_long(n) { \ - put_short((n) & 0xffff); \ - put_short(((ulg)(n)) >> 16); \ -} - -#define seekable() 0 /* force sequential output */ -#define translate_eol 0 /* no option -a yet */ - -#define tolow(c) (isupper(c) ? (c)-'A'+'a' : (c)) /* force to lower case */ - -/* Macros for getting two-byte and four-byte header values */ -#define SH(p) ((ush)(uch)((p)[0]) | ((ush)(uch)((p)[1]) << 8)) -#define LG(p) ((ulg)(SH(p)) | ((ulg)(SH((p)+2)) << 16)) - -/* Diagnostic functions */ -#ifdef DEBUG -# define Assert(cond,msg) {if(!(cond)) error(msg);} -# define Trace(x) fprintf x -# define Tracev(x) {if (verbose) fprintf x ;} -# define Tracevv(x) {if (verbose>1) fprintf x ;} -# define Tracec(c,x) {if (verbose && (c)) fprintf x ;} -# define Tracecv(c,x) {if (verbose>1 && (c)) fprintf x ;} -#else -# define Assert(cond,msg) -# define Trace(x) -# define Tracev(x) -# define Tracevv(x) -# define Tracec(c,x) -# define Tracecv(c,x) -#endif - -#define WARN(msg) {if (!quiet) fprintf msg ; \ - if (exit_code == OK) exit_code = WARNING;} - - /* in zip.c: */ -extern int zip OF((int in, int out)); -extern int file_read OF((char *buf, unsigned size)); - - /* in unzip.c */ -extern int unzip OF((int in, int out)); -extern int check_zipfile OF((int in)); - - /* in unpack.c */ -extern int unpack OF((int in, int out)); - - /* in unlzh.c */ -extern int unlzh OF((int in, int out)); - - /* in gzip.c */ -RETSIGTYPE abort_gzip OF((void)); - - /* in deflate.c */ -void lm_init OF((int pack_level, ush *flags)); -ulg deflate OF((void)); - - /* in trees.c */ -void ct_init OF((ush *attr, int *method)); -int ct_tally OF((int dist, int lc)); -ulg flush_block OF((char *buf, ulg stored_len, int eof)); - - /* in bits.c */ -void bi_init OF((file_t zipfile)); -void send_bits OF((int value, int length)); -unsigned bi_reverse OF((unsigned value, int length)); -void bi_windup OF((void)); -void copy_block OF((char *buf, unsigned len, int header)); -extern int (*read_buf) OF((char *buf, unsigned size)); - - /* in util.c: */ -extern int copy OF((int in, int out)); -extern ulg updcrc OF((uch *s, unsigned n)); -extern void clear_bufs OF((void)); -extern int fill_inbuf OF((int eof_ok)); -extern void flush_outbuf OF((void)); -extern void flush_window OF((void)); -extern void write_buf OF((int fd, voidp buf, unsigned cnt)); -#if defined(WIN32) && defined(strlwr) -#undef strlwr -extern char *strlwr OF((char *s)); -#endif -extern char *basename OF((char *fname)); -extern void make_simple_name OF((char *name)); -extern char *add_envopt OF((int *argcp, char ***argvp, char *env)); -extern void error OF((char *m)); -extern void warn OF((char *a, char *b)); -extern void read_error OF((void)); -extern void write_error OF((void)); -extern void display_ratio OF((long num, long den, FILE *file)); -#ifndef WIN32 -extern voidp xmalloc OF((unsigned int size)); -#endif - /* in inflate.c */ -extern int inflate OF((void)); diff --git a/Build/source/utils/gzip/gzip.texi b/Build/source/utils/gzip/gzip.texi deleted file mode 100644 index c60f7a69e9b..00000000000 --- a/Build/source/utils/gzip/gzip.texi +++ /dev/null @@ -1,478 +0,0 @@ -\input texinfo @c -*-texinfo-*- -@c %**start of header -@setfilename gzip.info -@settitle Gzip User's Manual -@finalout -@setchapternewpage odd -@c %**end of header - -@ifinfo -This file documents the the GNU @code{gzip} command for compressing files. - -Copyright (C) 1992-1993 Jean-loup Gailly - -Permission is granted to make and distribute verbatim copies of -this manual provided the copyright notice and this permission notice -are preserved on all copies. - -@ignore -Permission is granted to process this file through TeX and print the -results, provided the printed document carries copying permission -notice identical to this one except for the removal of this paragraph -(this paragraph not being relevant to the printed manual). - -@end ignore -Permission is granted to copy and distribute modified versions of this -manual under the conditions for verbatim copying, provided that the entire -resulting derived work is distributed under the terms of a permission -notice identical to this one. - -Permission is granted to copy and distribute translations of this manual -into another language, under the above conditions for modified versions, -except that this permission notice may be stated in a translation approved -by the Foundation. -@end ifinfo - -@titlepage -@title gzip -@subtitle The data compression program -@subtitle Edition 1.2.4, for Gzip Version 1.2.4 -@subtitle July 1993 -@author by Jean-loup Gailly - -@page -@vskip 0pt plus 1filll -Copyright @copyright{} 1992-1993 Jean-loup Gailly - -Permission is granted to make and distribute verbatim copies of -this manual provided the copyright notice and this permission notice -are preserved on all copies. - -Permission is granted to copy and distribute modified versions of this -manual under the conditions for verbatim copying, provided that the entire -resulting derived work is distributed under the terms of a permission -notice identical to this one. - -Permission is granted to copy and distribute translations of this manual -into another language, under the above conditions for modified versions, -except that this permission notice may be stated in a translation approved -by the Foundation. -@end titlepage - -@node Top, , , (dir) - -@ifinfo -This file documents the @code{gzip} command to compress files. -@end ifinfo - -@menu -* Copying:: How you can copy and share @code{gzip}. -* Overview:: Preliminary information. -* Sample:: Sample output from @code{gzip}. -* Invoking gzip:: How to run @code{gzip}. -* Advanced usage:: Concatenated files. -* Environment:: The @code{GZIP} environment variable -* Tapes:: Using @code{gzip} on tapes. -* Problems:: Reporting bugs. -* Concept Index:: Index of concepts. -@end menu - -@node Copying, Overview, , Top -@include gpl.texinfo - -@node Overview, Sample, Copying, Top -@chapter Overview -@cindex overview - -@code{gzip} reduces the size of the named files using Lempel-Ziv coding -(LZ77). Whenever possible, each file is replaced by one with the -extension @samp{.gz}, while keeping the same ownership modes, access and -modification times. (The default extension is @samp{-gz} for VMS, -@samp{z} for MSDOS, OS/2 FAT and Atari.) If no files are specified or -if a file name is "-", the standard input is compressed to the standard -output. @code{gzip} will only attempt to compress regular files. In -particular, it will ignore symbolic links. - -If the new file name is too long for its file system, @code{gzip} -truncates it. @code{gzip} attempts to truncate only the parts of the -file name longer than 3 characters. (A part is delimited by dots.) If -the name consists of small parts only, the longest parts are truncated. -For example, if file names are limited to 14 characters, gzip.msdos.exe -is compressed to gzi.msd.exe.gz. Names are not truncated on systems -which do not have a limit on file name length. - -By default, @code{gzip} keeps the original file name and timestamp in -the compressed file. These are used when decompressing the file with the -@samp{-N} option. This is useful when the compressed file name was -truncated or when the time stamp was not preserved after a file -transfer. - -Compressed files can be restored to their original form using @samp{gzip -d} -or @code{gunzip} or @code{zcat}. If the original name saved in the -compressed file is not suitable for its file system, a new name is -constructed from the original one to make it legal. - -@code{gunzip} takes a list of files on its command line and replaces -each file whose name ends with @samp{.gz}, @samp{.z}, @samp{.Z}, -@samp{-gz}, @samp{-z} or @samp{_z} and which begins with the correct -magic number with an uncompressed file without the original extension. -@code{gunzip} also recognizes the special extensions @samp{.tgz} and -@samp{.taz} as shorthands for @samp{.tar.gz} and @samp{.tar.Z} -respectively. When compressing, @code{gzip} uses the @samp{.tgz} -extension if necessary instead of truncating a file with a @samp{.tar} -extension. - -@code{gunzip} can currently decompress files created by @code{gzip}, -@code{zip}, @code{compress} or @code{pack}. The detection of the input -format is automatic. When using the first two formats, @code{gunzip} -checks a 32 bit CRC (cyclic redundancy check). For @code{pack}, -@code{gunzip} checks the uncompressed length. The @code{compress} format -was not designed to allow consistency checks. However @code{gunzip} is -sometimes able to detect a bad @samp{.Z} file. If you get an error when -uncompressing a @samp{.Z} file, do not assume that the @samp{.Z} file is -correct simply because the standard @code{uncompress} does not complain. -This generally means that the standard @code{uncompress} does not check -its input, and happily generates garbage output. The SCO @samp{compress --H} format (@code{lzh} compression method) does not include a CRC but -also allows some consistency checks. - -Files created by @code{zip} can be uncompressed by @code{gzip} only if -they have a single member compressed with the 'deflation' method. This -feature is only intended to help conversion of @code{tar.zip} files to -the @code{tar.gz} format. To extract @code{zip} files with several -members, use @code{unzip} instead of @code{gunzip}. - -@code{zcat} is identical to @samp{gunzip -c}. @code{zcat} -uncompresses either a list of files on the command line or its standard -input and writes the uncompressed data on standard output. @code{zcat} -will uncompress files that have the correct magic number whether they -have a @samp{.gz} suffix or not. - -@code{gzip} uses the Lempel-Ziv algorithm used in @code{zip} and PKZIP. -The amount of compression obtained depends on the size of the input and -the distribution of common substrings. Typically, text such as source -code or English is reduced by 60-70%. Compression is generally much -better than that achieved by LZW (as used in @code{compress}), Huffman -coding (as used in @code{pack}), or adaptive Huffman coding -(@code{compact}). - -Compression is always performed, even if the compressed file is slightly -larger than the original. The worst case expansion is a few bytes for -the @code{gzip} file header, plus 5 bytes every 32K block, or an expansion -ratio of 0.015% for large files. Note that the actual number of used -disk blocks almost never increases. @code{gzip} preserves the mode, -ownership and timestamps of files when compressing or decompressing. - -@node Sample, Invoking gzip, Overview, Top -@chapter Sample Output -@cindex sample - -Here are some realistic examples of running @code{gzip}. - -This is the output of the command @samp{gzip -h}: - -@example -gzip 1.2.4 (18 Aug 93) -usage: gzip [-cdfhlLnNrtvV19] [-S suffix] [file ...] - -c --stdout write on standard output, keep original files unchanged - -d --decompress decompress - -f --force force overwrite of output file and compress links - -h --help give this help - -l --list list compressed file contents - -L --license display software license - -n --no-name do not save or restore the original name and time stamp - -N --name save or restore the original name and time stamp - -q --quiet suppress all warnings - -r --recursive operate recursively on directories - -S .suf --suffix .suf use suffix .suf on compressed files - -t --test test compressed file integrity - -v --verbose verbose mode - -V --version display version number - -1 --fast compress faster - -9 --best compress better - file... files to (de)compress. If none given, use standard input. -@end example - -This is the output of the command @samp{gzip -v texinfo.tex}: - -@example -texinfo.tex: 71.6% -- replaced with texinfo.tex.gz -@end example - -The following command will find all @code{gzip} files in the current -directory and subdirectories, and extract them in place without -destroying the original: - -@example -find . -name '*.gz' -print | sed 's/^\(.*\)[.]gz$/gunzip < "&" > "\1"/' | sh -@end example - -@node Invoking gzip, Advanced usage, Sample, Top -@chapter Invoking @code{gzip} -@cindex invoking -@cindex options - -The format for running the @code{gzip} program is: - -@example -gzip @var{option} @dots{} -@end example - -@code{gzip} supports the following options: - -@table @samp -@item --stdout -@itemx --to-stdout -@itemx -c -Write output on standard output; keep original files unchanged. -If there are several input files, the output consists of a sequence of -independently compressed members. To obtain better compression, -concatenate all input files before compressing them. - -@item --decompress -@itemx --uncompress -@itemx -d -Decompress. - -@item --force -@itemx -f -Force compression or decompression even if the file has multiple links -or the corresponding file already exists, or if the compressed data -is read from or written to a terminal. If the input data is not in -a format recognized by @code{gzip}, and if the option @samp{--stdout} is also -given, copy the input data without change to the standard output: let -@code{zcat} behave as @code{cat}. If @samp{-f} is not given, and -when not running in the background, @code{gzip} prompts to verify -whether an existing file should be overwritten. - -@item --help -@itemx -h -Print an informative help message describing the options then quit. - -@item --list -@itemx -l -For each compressed file, list the following fields: - -@example -compressed size: size of the compressed file -uncompressed size: size of the uncompressed file -ratio: compression ratio (0.0% if unknown) -uncompressed_name: name of the uncompressed file -@end example - -The uncompressed size is given as @samp{-1} for files not in @code{gzip} -format, such as compressed @samp{.Z} files. To get the uncompressed size for -such a file, you can use: - -@example -zcat file.Z | wc -c -@end example - -In combination with the @samp{--verbose} option, the following fields are also -displayed: - -@example -method: compression method (deflate,compress,lzh,pack) -crc: the 32-bit CRC of the uncompressed data -date & time: time stamp for the uncompressed file -@end example - -The crc is given as ffffffff for a file not in gzip format. - -With @samp{--verbose}, the size totals and compression ratio for all files -is also displayed, unless some sizes are unknown. With @samp{--quiet}, -the title and totals lines are not displayed. - -@item --license -@itemx -L -Display the @code{gzip} license then quit. - -@item --no-name -@itemx -n -When compressing, do not save the original file name and time stamp by -default. (The original name is always saved if the name had to be -truncated.) When decompressing, do not restore the original file name -if present (remove only the @code{gzip} -suffix from the compressed file name) and do not restore the original -time stamp if present (copy it from the compressed file). This option -is the default when decompressing. - -@item --name -@itemx -N -When compressing, always save the original file name and time stamp; this -is the default. When decompressing, restore the original file name and -time stamp if present. This option is useful on systems which have -a limit on file name length or when the time stamp has been lost after -a file transfer. - -@item --quiet -@itemx -q -Suppress all warning messages. - -@item --recursive -@itemx -r -Travel the directory structure recursively. If any of the file names -specified on the command line are directories, @code{gzip} will descend -into the directory and compress all the files it finds there (or -decompress them in the case of @code{gunzip}). - -@item --suffix @var{suf} -@itemx -S @var{suf} -Use suffix @samp{@var{suf}} instead of @samp{.gz}. Any suffix can be -given, but suffixes other than @samp{.z} and @samp{.gz} should be -avoided to avoid confusion when files are transferred to other systems. -A null suffix forces gunzip to try decompression on all given files -regardless of suffix, as in: - -@example -gunzip -S "" * (*.* for MSDOS) -@end example - -Previous versions of gzip used the @samp{.z} suffix. This was changed to -avoid a conflict with @code{pack}. - -@item --test -@itemx -t -Test. Check the compressed file integrity. - -@item --verbose -@itemx -v -Verbose. Display the name and percentage reduction for each file compressed. - -@item --version -@itemx -V -Version. Display the version number and compilation options, then quit. - -@item --fast -@itemx --best -@itemx -@var{n} -Regulate the speed of compression using the specified digit @var{n}, -where @samp{-1} or @samp{--fast} indicates the fastest compression -method (less compression) and @samp{--best} or @samp{-9} indicates the -slowest compression method (optimal compression). The default -compression level is @samp{-6} (that is, biased towards high compression at -expense of speed). -@end table - -@node Advanced usage, Environment, Invoking gzip, Top -@chapter Advanced usage -@cindex concatenated files - -Multiple compressed files can be concatenated. In this case, -@code{gunzip} will extract all members at once. If one member is -damaged, other members might still be recovered after removal of the -damaged member. Better compression can be usually obtained if all -members are decompressed and then recompressed in a single step. - -This is an example of concatenating @code{gzip} files: - -@example -gzip -c file1 > foo.gz -gzip -c file2 >> foo.gz -@end example - -Then - -@example -gunzip -c foo -@end example - -is equivalent to - -@example -cat file1 file2 -@end example - -In case of damage to one member of a @samp{.gz} file, other members can -still be recovered (if the damaged member is removed). However, -you can get better compression by compressing all members at once: - -@example -cat file1 file2 | gzip > foo.gz -@end example - -compresses better than - -@example -gzip -c file1 file2 > foo.gz -@end example - -If you want to recompress concatenated files to get better compression, do: - -@example -zcat old.gz | gzip > new.gz -@end example - -If a compressed file consists of several members, the uncompressed -size and CRC reported by the @samp{--list} option applies to the last member -only. If you need the uncompressed size for all members, you can use: - -@example -zcat file.gz | wc -c -@end example - -If you wish to create a single archive file with multiple members so -that members can later be extracted independently, use an archiver such -as @code{tar} or @code{zip}. GNU @code{tar} supports the @samp{-z} -option to invoke @code{gzip} transparently. @code{gzip} is designed as a -complement to @code{tar}, not as a replacement. - -@node Environment, Tapes, Advanced usage, Top -@chapter Environment -@cindex Environment - -The environment variable @code{GZIP} can hold a set of default options for -@code{gzip}. These options are interpreted first and can be overwritten by -explicit command line parameters. For example: - -@example -for sh: GZIP="-8v --name"; export GZIP -for csh: setenv GZIP "-8v --name" -for MSDOS: set GZIP=-8v --name -@end example - -On Vax/VMS, the name of the environment variable is @code{GZIP_OPT}, to -avoid a conflict with the symbol set for invocation of the program. - -@node Tapes, Problems, Environment, Top -@chapter Using @code{gzip} on tapes -@cindex tapes - -When writing compressed data to a tape, it is generally necessary to pad -the output with zeroes up to a block boundary. When the data is read and -the whole block is passed to @code{gunzip} for decompression, -@code{gunzip} detects that there is extra trailing garbage after the -compressed data and emits a warning by default. You have to use the -@samp{--quiet} option to suppress the warning. This option can be set in the -@code{GZIP} environment variable, as in: - -@example -for sh: GZIP="-q" tar -xfz --block-compress /dev/rst0 -for csh: (setenv GZIP "-q"; tar -xfz --block-compress /dev/rst0) -@end example - -In the above example, @code{gzip} is invoked implicitly by the @samp{-z} -option of GNU @code{tar}. Make sure that the same block size (@samp{-b} -option of @code{tar}) is used for reading and writing compressed data on -tapes. (This example assumes you are using the GNU version of -@code{tar}.) - -@node Problems, Concept Index, Tapes, Top -@chapter Reporting Bugs -@cindex bugs - -If you find a bug in @code{gzip}, please send electronic mail to -@w{@samp{bug-gzip@@gnu.org}}. Include the version number, -which you can find by running @w{@samp{gzip -V}}. Also include in your -message the hardware and operating system, the compiler used to compile -@code{gzip}, -a description of the bug behavior, and the input to @code{gzip} that triggered -the bug.@refill - -@node Concept Index, , Problems, Top -@unnumbered Concept Index - -@printindex cp - -@contents -@bye diff --git a/Build/source/utils/gzip/gzip_1.html b/Build/source/utils/gzip/gzip_1.html deleted file mode 100644 index 1e93cda7877..00000000000 --- a/Build/source/utils/gzip/gzip_1.html +++ /dev/null @@ -1,459 +0,0 @@ -<HTML> -<HEAD> -<!-- Created by texi2html 1.56k from gzip.texi on 9 August 2001 --> - -<TITLE>Gzip User's Manual - GNU GENERAL PUBLIC LICENSE</TITLE> -</HEAD> -<BODY> -Go to the first, previous, <A HREF="gzip_2.html">next</A>, <A HREF="gzip_9.html">last</A> section, <A HREF="gzip_toc.html">table of contents</A>. -<P><HR><P> - - - -<H1><A NAME="SEC1" HREF="gzip_toc.html#TOC1">GNU GENERAL PUBLIC LICENSE</A></H1> -<P> -Version 2, June 1991 - - - -<PRE> -Copyright (C) 1989, 1991 Free Software Foundation, Inc. -675 Mass Ave, Cambridge, MA 02139, USA - -Everyone is permitted to copy and distribute verbatim copies -of this license document, but changing it is not allowed. -</PRE> - - - -<H2><A NAME="SEC2" HREF="gzip_toc.html#TOC2">Preamble</A></H2> - -<P> - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - -<P> - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - -<P> - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - -<P> - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - -<P> - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - -<P> - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - -<P> - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - -<P> - The precise terms and conditions for copying, distribution and -modification follow. - - -<P> -TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - - -<OL> -<LI> - -This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - -<LI> - -You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - -<LI> - -You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - -<OL> -<LI> - -You must cause the modified files to carry prominent notices -stating that you changed the files and the date of any change. - -<LI> - -You must cause any work that you distribute or publish, that in -whole or in part contains or is derived from the Program or any -part thereof, to be licensed as a whole at no charge to all third -parties under the terms of this License. - -<LI> - -If the modified program normally reads commands interactively -when run, you must cause it, when started running for such -interactive use in the most ordinary way, to print or display an -announcement including an appropriate copyright notice and a -notice that there is no warranty (or else, saying that you provide -a warranty) and that users may redistribute the program under -these conditions, and telling the user how to view a copy of this -License. (Exception: if the Program itself is interactive but -does not normally print such an announcement, your work based on -the Program is not required to print an announcement.) -</OL> - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - -<LI> - -You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - -<OL> -<LI> - -Accompany it with the complete corresponding machine-readable -source code, which must be distributed under the terms of Sections -1 and 2 above on a medium customarily used for software interchange; or, - -<LI> - -Accompany it with a written offer, valid for at least three -years, to give any third party, for a charge no more than your -cost of physically performing source distribution, a complete -machine-readable copy of the corresponding source code, to be -distributed under the terms of Sections 1 and 2 above on a medium -customarily used for software interchange; or, - -<LI> - -Accompany it with the information you received as to the offer -to distribute corresponding source code. (This alternative is -allowed only for noncommercial distribution and only if you -received the program in object code or executable form with such -an offer, in accord with Subsection b above.) -</OL> - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - -<LI> - -You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - -<LI> - -You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - -<LI> - -Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - -<LI> - -If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - -<LI> - -If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - -<LI> - -The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - -<LI> - -If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - -NO WARRANTY - -<LI> - -BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - -<LI> - -IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. -</OL> - -<P> -END OF TERMS AND CONDITIONS - - - - -<H2><A NAME="SEC3" HREF="gzip_toc.html#TOC3">How to Apply These Terms to Your New Programs</A></H2> - -<P> - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - -<P> - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - -<PRE> -<VAR>one line to give the program's name and an idea of what it does.</VAR> -Copyright (C) 19<VAR>yy</VAR> <VAR>name of author</VAR> - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -</PRE> - -<P> -Also add information on how to contact you by electronic and paper mail. - - -<P> -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - - -<PRE> -Gnomovision version 69, Copyright (C) 19<VAR>yy</VAR> <VAR>name of author</VAR> -Gnomovision comes with ABSOLUTELY NO WARRANTY; for details -type `show w'. This is free software, and you are welcome -to redistribute it under certain conditions; type `show c' -for details. -</PRE> - -<P> -The hypothetical commands <SAMP>`show w'</SAMP> and <SAMP>`show c'</SAMP> should show -the appropriate parts of the General Public License. Of course, the -commands you use may be called something other than <SAMP>`show w'</SAMP> and -<SAMP>`show c'</SAMP>; they could even be mouse-clicks or menu items--whatever -suits your program. - - -<P> -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - - -<PRE> -Yoyodyne, Inc., hereby disclaims all copyright -interest in the program `Gnomovision' -(which makes passes at compilers) written -by James Hacker. - -<VAR>signature of Ty Coon</VAR>, 1 April 1989 -Ty Coon, President of Vice -</PRE> - -<P> -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. - - -<P><HR><P> -Go to the first, previous, <A HREF="gzip_2.html">next</A>, <A HREF="gzip_9.html">last</A> section, <A HREF="gzip_toc.html">table of contents</A>. -</BODY> -</HTML> diff --git a/Build/source/utils/gzip/gzip_2.html b/Build/source/utils/gzip/gzip_2.html deleted file mode 100644 index 197bc4ffc7f..00000000000 --- a/Build/source/utils/gzip/gzip_2.html +++ /dev/null @@ -1,119 +0,0 @@ -<HTML> -<HEAD> -<!-- Created by texi2html 1.56k from gzip.texi on 9 August 2001 --> - -<TITLE>Gzip User's Manual - 1. Overview</TITLE> -</HEAD> -<BODY> -Go to the <A HREF="gzip_1.html">first</A>, <A HREF="gzip_1.html">previous</A>, <A HREF="gzip_3.html">next</A>, <A HREF="gzip_9.html">last</A> section, <A HREF="gzip_toc.html">table of contents</A>. -<P><HR><P> - - -<H1><A NAME="SEC4" HREF="gzip_toc.html#TOC4">1. Overview</A></H1> -<P> -<A NAME="IDX1"></A> - - -<P> -<CODE>gzip</CODE> reduces the size of the named files using Lempel-Ziv coding -(LZ77). Whenever possible, each file is replaced by one with the -extension <SAMP>`.gz'</SAMP>, while keeping the same ownership modes, access and -modification times. (The default extension is <SAMP>`-gz'</SAMP> for VMS, -<SAMP>`z'</SAMP> for MSDOS, OS/2 FAT and Atari.) If no files are specified or -if a file name is "-", the standard input is compressed to the standard -output. <CODE>gzip</CODE> will only attempt to compress regular files. In -particular, it will ignore symbolic links. - - -<P> -If the new file name is too long for its file system, <CODE>gzip</CODE> -truncates it. <CODE>gzip</CODE> attempts to truncate only the parts of the -file name longer than 3 characters. (A part is delimited by dots.) If -the name consists of small parts only, the longest parts are truncated. -For example, if file names are limited to 14 characters, gzip.msdos.exe -is compressed to gzi.msd.exe.gz. Names are not truncated on systems -which do not have a limit on file name length. - - -<P> -By default, <CODE>gzip</CODE> keeps the original file name and timestamp in -the compressed file. These are used when decompressing the file with the -<SAMP>`-N'</SAMP> option. This is useful when the compressed file name was -truncated or when the time stamp was not preserved after a file -transfer. - - -<P> -Compressed files can be restored to their original form using <SAMP>`gzip -d'</SAMP> -or <CODE>gunzip</CODE> or <CODE>zcat</CODE>. If the original name saved in the -compressed file is not suitable for its file system, a new name is -constructed from the original one to make it legal. - - -<P> -<CODE>gunzip</CODE> takes a list of files on its command line and replaces -each file whose name ends with <SAMP>`.gz'</SAMP>, <SAMP>`.z'</SAMP>, <SAMP>`.Z'</SAMP>, -<SAMP>`-gz'</SAMP>, <SAMP>`-z'</SAMP> or <SAMP>`_z'</SAMP> and which begins with the correct -magic number with an uncompressed file without the original extension. -<CODE>gunzip</CODE> also recognizes the special extensions <SAMP>`.tgz'</SAMP> and -<SAMP>`.taz'</SAMP> as shorthands for <SAMP>`.tar.gz'</SAMP> and <SAMP>`.tar.Z'</SAMP> -respectively. When compressing, <CODE>gzip</CODE> uses the <SAMP>`.tgz'</SAMP> -extension if necessary instead of truncating a file with a <SAMP>`.tar'</SAMP> -extension. - - -<P> -<CODE>gunzip</CODE> can currently decompress files created by <CODE>gzip</CODE>, -<CODE>zip</CODE>, <CODE>compress</CODE> or <CODE>pack</CODE>. The detection of the input -format is automatic. When using the first two formats, <CODE>gunzip</CODE> -checks a 32 bit CRC (cyclic redundancy check). For <CODE>pack</CODE>, -<CODE>gunzip</CODE> checks the uncompressed length. The <CODE>compress</CODE> format -was not designed to allow consistency checks. However <CODE>gunzip</CODE> is -sometimes able to detect a bad <SAMP>`.Z'</SAMP> file. If you get an error when -uncompressing a <SAMP>`.Z'</SAMP> file, do not assume that the <SAMP>`.Z'</SAMP> file is -correct simply because the standard <CODE>uncompress</CODE> does not complain. -This generally means that the standard <CODE>uncompress</CODE> does not check -its input, and happily generates garbage output. The SCO <SAMP>`compress --H'</SAMP> format (<CODE>lzh</CODE> compression method) does not include a CRC but -also allows some consistency checks. - - -<P> -Files created by <CODE>zip</CODE> can be uncompressed by <CODE>gzip</CODE> only if -they have a single member compressed with the 'deflation' method. This -feature is only intended to help conversion of <CODE>tar.zip</CODE> files to -the <CODE>tar.gz</CODE> format. To extract <CODE>zip</CODE> files with several -members, use <CODE>unzip</CODE> instead of <CODE>gunzip</CODE>. - - -<P> -<CODE>zcat</CODE> is identical to <SAMP>`gunzip -c'</SAMP>. <CODE>zcat</CODE> -uncompresses either a list of files on the command line or its standard -input and writes the uncompressed data on standard output. <CODE>zcat</CODE> -will uncompress files that have the correct magic number whether they -have a <SAMP>`.gz'</SAMP> suffix or not. - - -<P> -<CODE>gzip</CODE> uses the Lempel-Ziv algorithm used in <CODE>zip</CODE> and PKZIP. -The amount of compression obtained depends on the size of the input and -the distribution of common substrings. Typically, text such as source -code or English is reduced by 60-70%. Compression is generally much -better than that achieved by LZW (as used in <CODE>compress</CODE>), Huffman -coding (as used in <CODE>pack</CODE>), or adaptive Huffman coding -(<CODE>compact</CODE>). - - -<P> -Compression is always performed, even if the compressed file is slightly -larger than the original. The worst case expansion is a few bytes for -the <CODE>gzip</CODE> file header, plus 5 bytes every 32K block, or an expansion -ratio of 0.015% for large files. Note that the actual number of used -disk blocks almost never increases. <CODE>gzip</CODE> preserves the mode, -ownership and timestamps of files when compressing or decompressing. - - -<P><HR><P> -Go to the <A HREF="gzip_1.html">first</A>, <A HREF="gzip_1.html">previous</A>, <A HREF="gzip_3.html">next</A>, <A HREF="gzip_9.html">last</A> section, <A HREF="gzip_toc.html">table of contents</A>. -</BODY> -</HTML> diff --git a/Build/source/utils/gzip/gzip_3.html b/Build/source/utils/gzip/gzip_3.html deleted file mode 100644 index c2827426fc6..00000000000 --- a/Build/source/utils/gzip/gzip_3.html +++ /dev/null @@ -1,71 +0,0 @@ -<HTML> -<HEAD> -<!-- Created by texi2html 1.56k from gzip.texi on 9 August 2001 --> - -<TITLE>Gzip User's Manual - 2. Sample Output</TITLE> -</HEAD> -<BODY> -Go to the <A HREF="gzip_1.html">first</A>, <A HREF="gzip_2.html">previous</A>, <A HREF="gzip_4.html">next</A>, <A HREF="gzip_9.html">last</A> section, <A HREF="gzip_toc.html">table of contents</A>. -<P><HR><P> - - -<H1><A NAME="SEC5" HREF="gzip_toc.html#TOC5">2. Sample Output</A></H1> -<P> -<A NAME="IDX2"></A> - - -<P> -Here are some realistic examples of running <CODE>gzip</CODE>. - - -<P> -This is the output of the command <SAMP>`gzip -h'</SAMP>: - - - -<PRE> -gzip 1.2.4 (18 Aug 93) -usage: gzip [-cdfhlLnNrtvV19] [-S suffix] [file ...] - -c --stdout write on standard output, keep original files unchanged - -d --decompress decompress - -f --force force overwrite of output file and compress links - -h --help give this help - -l --list list compressed file contents - -L --license display software license - -n --no-name do not save or restore the original name and time stamp - -N --name save or restore the original name and time stamp - -q --quiet suppress all warnings - -r --recursive operate recursively on directories - -S .suf --suffix .suf use suffix .suf on compressed files - -t --test test compressed file integrity - -v --verbose verbose mode - -V --version display version number - -1 --fast compress faster - -9 --best compress better - file... files to (de)compress. If none given, use standard input. -</PRE> - -<P> -This is the output of the command <SAMP>`gzip -v texinfo.tex'</SAMP>: - - - -<PRE> -texinfo.tex: 71.6% -- replaced with texinfo.tex.gz -</PRE> - -<P> -The following command will find all <CODE>gzip</CODE> files in the current -directory and subdirectories, and extract them in place without -destroying the original: - - - -<PRE> -find . -name '*.gz' -print | sed 's/^\(.*\)[.]gz$/gunzip < "&" > "\1"/' | sh -</PRE> - -<P><HR><P> -Go to the <A HREF="gzip_1.html">first</A>, <A HREF="gzip_2.html">previous</A>, <A HREF="gzip_4.html">next</A>, <A HREF="gzip_9.html">last</A> section, <A HREF="gzip_toc.html">table of contents</A>. -</BODY> -</HTML> diff --git a/Build/source/utils/gzip/gzip_4.html b/Build/source/utils/gzip/gzip_4.html deleted file mode 100644 index 89942ef313c..00000000000 --- a/Build/source/utils/gzip/gzip_4.html +++ /dev/null @@ -1,206 +0,0 @@ -<HTML> -<HEAD> -<!-- Created by texi2html 1.56k from gzip.texi on 9 August 2001 --> - -<TITLE>Gzip User's Manual - 3. Invoking gzip</TITLE> -</HEAD> -<BODY> -Go to the <A HREF="gzip_1.html">first</A>, <A HREF="gzip_3.html">previous</A>, <A HREF="gzip_5.html">next</A>, <A HREF="gzip_9.html">last</A> section, <A HREF="gzip_toc.html">table of contents</A>. -<P><HR><P> - - -<H1><A NAME="SEC6" HREF="gzip_toc.html#TOC6">3. Invoking <CODE>gzip</CODE></A></H1> -<P> -<A NAME="IDX3"></A> -<A NAME="IDX4"></A> - - -<P> -The format for running the <CODE>gzip</CODE> program is: - - - -<PRE> -gzip <VAR>option</VAR> ... -</PRE> - -<P> -<CODE>gzip</CODE> supports the following options: - - -<DL COMPACT> - -<DT><SAMP>`--stdout'</SAMP> -<DD> -<DT><SAMP>`--to-stdout'</SAMP> -<DD> -<DT><SAMP>`-c'</SAMP> -<DD> -Write output on standard output; keep original files unchanged. -If there are several input files, the output consists of a sequence of -independently compressed members. To obtain better compression, -concatenate all input files before compressing them. - -<DT><SAMP>`--decompress'</SAMP> -<DD> -<DT><SAMP>`--uncompress'</SAMP> -<DD> -<DT><SAMP>`-d'</SAMP> -<DD> -Decompress. - -<DT><SAMP>`--force'</SAMP> -<DD> -<DT><SAMP>`-f'</SAMP> -<DD> -Force compression or decompression even if the file has multiple links -or the corresponding file already exists, or if the compressed data -is read from or written to a terminal. If the input data is not in -a format recognized by <CODE>gzip</CODE>, and if the option <SAMP>`--stdout'</SAMP> is also -given, copy the input data without change to the standard output: let -<CODE>zcat</CODE> behave as <CODE>cat</CODE>. If <SAMP>`-f'</SAMP> is not given, and -when not running in the background, <CODE>gzip</CODE> prompts to verify -whether an existing file should be overwritten. - -<DT><SAMP>`--help'</SAMP> -<DD> -<DT><SAMP>`-h'</SAMP> -<DD> -Print an informative help message describing the options then quit. - -<DT><SAMP>`--list'</SAMP> -<DD> -<DT><SAMP>`-l'</SAMP> -<DD> -For each compressed file, list the following fields: - - -<PRE> -compressed size: size of the compressed file -uncompressed size: size of the uncompressed file -ratio: compression ratio (0.0% if unknown) -uncompressed_name: name of the uncompressed file -</PRE> - -The uncompressed size is given as <SAMP>`-1'</SAMP> for files not in <CODE>gzip</CODE> -format, such as compressed <SAMP>`.Z'</SAMP> files. To get the uncompressed size for -such a file, you can use: - - -<PRE> -zcat file.Z | wc -c -</PRE> - -In combination with the <SAMP>`--verbose'</SAMP> option, the following fields are also -displayed: - - -<PRE> -method: compression method (deflate,compress,lzh,pack) -crc: the 32-bit CRC of the uncompressed data -date & time: time stamp for the uncompressed file -</PRE> - -The crc is given as ffffffff for a file not in gzip format. - -With <SAMP>`--verbose'</SAMP>, the size totals and compression ratio for all files -is also displayed, unless some sizes are unknown. With <SAMP>`--quiet'</SAMP>, -the title and totals lines are not displayed. - -<DT><SAMP>`--license'</SAMP> -<DD> -<DT><SAMP>`-L'</SAMP> -<DD> -Display the <CODE>gzip</CODE> license then quit. - -<DT><SAMP>`--no-name'</SAMP> -<DD> -<DT><SAMP>`-n'</SAMP> -<DD> -When compressing, do not save the original file name and time stamp by -default. (The original name is always saved if the name had to be -truncated.) When decompressing, do not restore the original file name -if present (remove only the <CODE>gzip</CODE> -suffix from the compressed file name) and do not restore the original -time stamp if present (copy it from the compressed file). This option -is the default when decompressing. - -<DT><SAMP>`--name'</SAMP> -<DD> -<DT><SAMP>`-N'</SAMP> -<DD> -When compressing, always save the original file name and time stamp; this -is the default. When decompressing, restore the original file name and -time stamp if present. This option is useful on systems which have -a limit on file name length or when the time stamp has been lost after -a file transfer. - -<DT><SAMP>`--quiet'</SAMP> -<DD> -<DT><SAMP>`-q'</SAMP> -<DD> -Suppress all warning messages. - -<DT><SAMP>`--recursive'</SAMP> -<DD> -<DT><SAMP>`-r'</SAMP> -<DD> -Travel the directory structure recursively. If any of the file names -specified on the command line are directories, <CODE>gzip</CODE> will descend -into the directory and compress all the files it finds there (or -decompress them in the case of <CODE>gunzip</CODE>). - -<DT><SAMP>`--suffix <VAR>suf</VAR>'</SAMP> -<DD> -<DT><SAMP>`-S <VAR>suf</VAR>'</SAMP> -<DD> -Use suffix <SAMP>`<VAR>suf</VAR>'</SAMP> instead of <SAMP>`.gz'</SAMP>. Any suffix can be -given, but suffixes other than <SAMP>`.z'</SAMP> and <SAMP>`.gz'</SAMP> should be -avoided to avoid confusion when files are transferred to other systems. -A null suffix forces gunzip to try decompression on all given files -regardless of suffix, as in: - - -<PRE> -gunzip -S "" * (*.* for MSDOS) -</PRE> - -Previous versions of gzip used the <SAMP>`.z'</SAMP> suffix. This was changed to -avoid a conflict with <CODE>pack</CODE>. - -<DT><SAMP>`--test'</SAMP> -<DD> -<DT><SAMP>`-t'</SAMP> -<DD> -Test. Check the compressed file integrity. - -<DT><SAMP>`--verbose'</SAMP> -<DD> -<DT><SAMP>`-v'</SAMP> -<DD> -Verbose. Display the name and percentage reduction for each file compressed. - -<DT><SAMP>`--version'</SAMP> -<DD> -<DT><SAMP>`-V'</SAMP> -<DD> -Version. Display the version number and compilation options, then quit. - -<DT><SAMP>`--fast'</SAMP> -<DD> -<DT><SAMP>`--best'</SAMP> -<DD> -<DT><SAMP>`-<VAR>n</VAR>'</SAMP> -<DD> -Regulate the speed of compression using the specified digit <VAR>n</VAR>, -where <SAMP>`-1'</SAMP> or <SAMP>`--fast'</SAMP> indicates the fastest compression -method (less compression) and <SAMP>`--best'</SAMP> or <SAMP>`-9'</SAMP> indicates the -slowest compression method (optimal compression). The default -compression level is <SAMP>`-6'</SAMP> (that is, biased towards high compression at -expense of speed). -</DL> - -<P><HR><P> -Go to the <A HREF="gzip_1.html">first</A>, <A HREF="gzip_3.html">previous</A>, <A HREF="gzip_5.html">next</A>, <A HREF="gzip_9.html">last</A> section, <A HREF="gzip_toc.html">table of contents</A>. -</BODY> -</HTML> diff --git a/Build/source/utils/gzip/gzip_5.html b/Build/source/utils/gzip/gzip_5.html deleted file mode 100644 index 1d92e6e1354..00000000000 --- a/Build/source/utils/gzip/gzip_5.html +++ /dev/null @@ -1,104 +0,0 @@ -<HTML> -<HEAD> -<!-- Created by texi2html 1.56k from gzip.texi on 9 August 2001 --> - -<TITLE>Gzip User's Manual - 4. Advanced usage</TITLE> -</HEAD> -<BODY> -Go to the <A HREF="gzip_1.html">first</A>, <A HREF="gzip_4.html">previous</A>, <A HREF="gzip_6.html">next</A>, <A HREF="gzip_9.html">last</A> section, <A HREF="gzip_toc.html">table of contents</A>. -<P><HR><P> - - -<H1><A NAME="SEC7" HREF="gzip_toc.html#TOC7">4. Advanced usage</A></H1> -<P> -<A NAME="IDX5"></A> - - -<P> -Multiple compressed files can be concatenated. In this case, -<CODE>gunzip</CODE> will extract all members at once. If one member is -damaged, other members might still be recovered after removal of the -damaged member. Better compression can be usually obtained if all -members are decompressed and then recompressed in a single step. - - -<P> -This is an example of concatenating <CODE>gzip</CODE> files: - - - -<PRE> -gzip -c file1 > foo.gz -gzip -c file2 >> foo.gz -</PRE> - -<P> -Then - - - -<PRE> -gunzip -c foo -</PRE> - -<P> -is equivalent to - - - -<PRE> -cat file1 file2 -</PRE> - -<P> -In case of damage to one member of a <SAMP>`.gz'</SAMP> file, other members can -still be recovered (if the damaged member is removed). However, -you can get better compression by compressing all members at once: - - - -<PRE> -cat file1 file2 | gzip > foo.gz -</PRE> - -<P> -compresses better than - - - -<PRE> -gzip -c file1 file2 > foo.gz -</PRE> - -<P> -If you want to recompress concatenated files to get better compression, do: - - - -<PRE> -zcat old.gz | gzip > new.gz -</PRE> - -<P> -If a compressed file consists of several members, the uncompressed -size and CRC reported by the <SAMP>`--list'</SAMP> option applies to the last member -only. If you need the uncompressed size for all members, you can use: - - - -<PRE> -zcat file.gz | wc -c -</PRE> - -<P> -If you wish to create a single archive file with multiple members so -that members can later be extracted independently, use an archiver such -as <CODE>tar</CODE> or <CODE>zip</CODE>. GNU <CODE>tar</CODE> supports the <SAMP>`-z'</SAMP> -option to invoke <CODE>gzip</CODE> transparently. <CODE>gzip</CODE> is designed as a -complement to <CODE>tar</CODE>, not as a replacement. - - -<P><HR><P> -Go to the <A HREF="gzip_1.html">first</A>, <A HREF="gzip_4.html">previous</A>, <A HREF="gzip_6.html">next</A>, <A HREF="gzip_9.html">last</A> section, <A HREF="gzip_toc.html">table of contents</A>. -</BODY> -</HTML> diff --git a/Build/source/utils/gzip/gzip_6.html b/Build/source/utils/gzip/gzip_6.html deleted file mode 100644 index f3e92251cd3..00000000000 --- a/Build/source/utils/gzip/gzip_6.html +++ /dev/null @@ -1,38 +0,0 @@ -<HTML> -<HEAD> -<!-- Created by texi2html 1.56k from gzip.texi on 9 August 2001 --> - -<TITLE>Gzip User's Manual - 5. Environment</TITLE> -</HEAD> -<BODY> -Go to the <A HREF="gzip_1.html">first</A>, <A HREF="gzip_5.html">previous</A>, <A HREF="gzip_7.html">next</A>, <A HREF="gzip_9.html">last</A> section, <A HREF="gzip_toc.html">table of contents</A>. -<P><HR><P> - - -<H1><A NAME="SEC8" HREF="gzip_toc.html#TOC8">5. Environment</A></H1> -<P> -<A NAME="IDX6"></A> - - -<P> -The environment variable <CODE>GZIP</CODE> can hold a set of default options for -<CODE>gzip</CODE>. These options are interpreted first and can be overwritten by -explicit command line parameters. For example: - - - -<PRE> -for sh: GZIP="-8v --name"; export GZIP -for csh: setenv GZIP "-8v --name" -for MSDOS: set GZIP=-8v --name -</PRE> - -<P> -On Vax/VMS, the name of the environment variable is <CODE>GZIP_OPT</CODE>, to -avoid a conflict with the symbol set for invocation of the program. - - -<P><HR><P> -Go to the <A HREF="gzip_1.html">first</A>, <A HREF="gzip_5.html">previous</A>, <A HREF="gzip_7.html">next</A>, <A HREF="gzip_9.html">last</A> section, <A HREF="gzip_toc.html">table of contents</A>. -</BODY> -</HTML> diff --git a/Build/source/utils/gzip/gzip_7.html b/Build/source/utils/gzip/gzip_7.html deleted file mode 100644 index b095fe2d1f0..00000000000 --- a/Build/source/utils/gzip/gzip_7.html +++ /dev/null @@ -1,44 +0,0 @@ -<HTML> -<HEAD> -<!-- Created by texi2html 1.56k from gzip.texi on 9 August 2001 --> - -<TITLE>Gzip User's Manual - 6. Using gzip on tapes</TITLE> -</HEAD> -<BODY> -Go to the <A HREF="gzip_1.html">first</A>, <A HREF="gzip_6.html">previous</A>, <A HREF="gzip_8.html">next</A>, <A HREF="gzip_9.html">last</A> section, <A HREF="gzip_toc.html">table of contents</A>. -<P><HR><P> - - -<H1><A NAME="SEC9" HREF="gzip_toc.html#TOC9">6. Using <CODE>gzip</CODE> on tapes</A></H1> -<P> -<A NAME="IDX7"></A> - - -<P> -When writing compressed data to a tape, it is generally necessary to pad -the output with zeroes up to a block boundary. When the data is read and -the whole block is passed to <CODE>gunzip</CODE> for decompression, -<CODE>gunzip</CODE> detects that there is extra trailing garbage after the -compressed data and emits a warning by default. You have to use the -<SAMP>`--quiet'</SAMP> option to suppress the warning. This option can be set in the -<CODE>GZIP</CODE> environment variable, as in: - - - -<PRE> -for sh: GZIP="-q" tar -xfz --block-compress /dev/rst0 -for csh: (setenv GZIP "-q"; tar -xfz --block-compress /dev/rst0) -</PRE> - -<P> -In the above example, <CODE>gzip</CODE> is invoked implicitly by the <SAMP>`-z'</SAMP> -option of GNU <CODE>tar</CODE>. Make sure that the same block size (<SAMP>`-b'</SAMP> -option of <CODE>tar</CODE>) is used for reading and writing compressed data on -tapes. (This example assumes you are using the GNU version of -<CODE>tar</CODE>.) - - -<P><HR><P> -Go to the <A HREF="gzip_1.html">first</A>, <A HREF="gzip_6.html">previous</A>, <A HREF="gzip_8.html">next</A>, <A HREF="gzip_9.html">last</A> section, <A HREF="gzip_toc.html">table of contents</A>. -</BODY> -</HTML> diff --git a/Build/source/utils/gzip/gzip_8.html b/Build/source/utils/gzip/gzip_8.html deleted file mode 100644 index 717aa26408e..00000000000 --- a/Build/source/utils/gzip/gzip_8.html +++ /dev/null @@ -1,29 +0,0 @@ -<HTML> -<HEAD> -<!-- Created by texi2html 1.56k from gzip.texi on 9 August 2001 --> - -<TITLE>Gzip User's Manual - 7. Reporting Bugs</TITLE> -</HEAD> -<BODY> -Go to the <A HREF="gzip_1.html">first</A>, <A HREF="gzip_7.html">previous</A>, <A HREF="gzip_9.html">next</A>, <A HREF="gzip_9.html">last</A> section, <A HREF="gzip_toc.html">table of contents</A>. -<P><HR><P> - - -<H1><A NAME="SEC10" HREF="gzip_toc.html#TOC10">7. Reporting Bugs</A></H1> -<P> -<A NAME="IDX8"></A> - - -<P> -If you find a bug in <CODE>gzip</CODE>, please send electronic mail to -<SAMP>`bug-gzip@gnu.org'</SAMP>. Include the version number, -which you can find by running <SAMP>`gzip -V'</SAMP>. Also include in your -message the hardware and operating system, the compiler used to compile -<CODE>gzip</CODE>, -a description of the bug behavior, and the input to <CODE>gzip</CODE> that triggered -the bug. - -<P><HR><P> -Go to the <A HREF="gzip_1.html">first</A>, <A HREF="gzip_7.html">previous</A>, <A HREF="gzip_9.html">next</A>, <A HREF="gzip_9.html">last</A> section, <A HREF="gzip_toc.html">table of contents</A>. -</BODY> -</HTML> diff --git a/Build/source/utils/gzip/gzip_9.html b/Build/source/utils/gzip/gzip_9.html deleted file mode 100644 index aee94e72e0e..00000000000 --- a/Build/source/utils/gzip/gzip_9.html +++ /dev/null @@ -1,64 +0,0 @@ -<HTML> -<HEAD> -<!-- Created by texi2html 1.56k from gzip.texi on 9 August 2001 --> - -<TITLE>Gzip User's Manual - Concept Index</TITLE> -</HEAD> -<BODY> -Go to the <A HREF="gzip_1.html">first</A>, <A HREF="gzip_8.html">previous</A>, next, last section, <A HREF="gzip_toc.html">table of contents</A>. -<P><HR><P> - - -<H1><A NAME="SEC11" HREF="gzip_toc.html#TOC11">Concept Index</A></H1> - -<P> -Jump to: -<A HREF="#cindex_b">b</A> -- -<A HREF="#cindex_c">c</A> -- -<A HREF="#cindex_e">e</A> -- -<A HREF="#cindex_i">i</A> -- -<A HREF="#cindex_o">o</A> -- -<A HREF="#cindex_s">s</A> -- -<A HREF="#cindex_t">t</A> -<P> -<H2><A NAME="cindex_b">b</A></H2> -<DIR> -<LI><A HREF="gzip_8.html#IDX8">bugs</A> -</DIR> -<H2><A NAME="cindex_c">c</A></H2> -<DIR> -<LI><A HREF="gzip_5.html#IDX5">concatenated files</A> -</DIR> -<H2><A NAME="cindex_e">e</A></H2> -<DIR> -<LI><A HREF="gzip_6.html#IDX6">Environment</A> -</DIR> -<H2><A NAME="cindex_i">i</A></H2> -<DIR> -<LI><A HREF="gzip_4.html#IDX3">invoking</A> -</DIR> -<H2><A NAME="cindex_o">o</A></H2> -<DIR> -<LI><A HREF="gzip_4.html#IDX4">options</A> -<LI><A HREF="gzip_2.html#IDX1">overview</A> -</DIR> -<H2><A NAME="cindex_s">s</A></H2> -<DIR> -<LI><A HREF="gzip_3.html#IDX2">sample</A> -</DIR> -<H2><A NAME="cindex_t">t</A></H2> -<DIR> -<LI><A HREF="gzip_7.html#IDX7">tapes</A> -</DIR> - - -<P><HR><P> -Go to the <A HREF="gzip_1.html">first</A>, <A HREF="gzip_8.html">previous</A>, next, last section, <A HREF="gzip_toc.html">table of contents</A>. -</BODY> -</HTML> diff --git a/Build/source/utils/gzip/gzip_toc.html b/Build/source/utils/gzip/gzip_toc.html deleted file mode 100644 index 85fe87dc289..00000000000 --- a/Build/source/utils/gzip/gzip_toc.html +++ /dev/null @@ -1,34 +0,0 @@ -<HTML> -<HEAD> -<!-- Created by texi2html 1.56k from gzip.texi on 9 August 2001 --> - -<TITLE>Gzip User's Manual - Table of Contents</TITLE> -</HEAD> -<BODY> -<H1>gzip</H1> -<H2>The data compression program</H2> -<H2>Edition 1.2.4, for Gzip Version 1.2.4</H2> -<H2>July 1993</H2> -<ADDRESS>by Jean-loup Gailly</ADDRESS> -<P> -<P><HR><P> -<UL> -<LI><A NAME="TOC1" HREF="gzip_1.html#SEC1">GNU GENERAL PUBLIC LICENSE</A> -<UL> -<LI><A NAME="TOC2" HREF="gzip_1.html#SEC2">Preamble</A> -<LI><A NAME="TOC3" HREF="gzip_1.html#SEC3">How to Apply These Terms to Your New Programs</A> -</UL> -<LI><A NAME="TOC4" HREF="gzip_2.html#SEC4">1. Overview</A> -<LI><A NAME="TOC5" HREF="gzip_3.html#SEC5">2. Sample Output</A> -<LI><A NAME="TOC6" HREF="gzip_4.html#SEC6">3. Invoking <CODE>gzip</CODE></A> -<LI><A NAME="TOC7" HREF="gzip_5.html#SEC7">4. Advanced usage</A> -<LI><A NAME="TOC8" HREF="gzip_6.html#SEC8">5. Environment</A> -<LI><A NAME="TOC9" HREF="gzip_7.html#SEC9">6. Using <CODE>gzip</CODE> on tapes</A> -<LI><A NAME="TOC10" HREF="gzip_8.html#SEC10">7. Reporting Bugs</A> -<LI><A NAME="TOC11" HREF="gzip_9.html#SEC11">Concept Index</A> -</UL> -<P><HR><P> -This document was generated on 9 August 2001 using -<A HREF="http://wwwinfo.cern.ch/dis/texi2html/">texi2html</A> 1.56k. -</BODY> -</HTML> diff --git a/Build/source/utils/gzip/inflate.c b/Build/source/utils/gzip/inflate.c deleted file mode 100644 index ede365622b4..00000000000 --- a/Build/source/utils/gzip/inflate.c +++ /dev/null @@ -1,954 +0,0 @@ -/* inflate.c -- Not copyrighted 1992 by Mark Adler - version c10p1, 10 January 1993 */ - -/* You can do whatever you like with this source file, though I would - prefer that if you modify it and redistribute it that you include - comments to that effect with your name and the date. Thank you. - [The history has been moved to the file ChangeLog.] - */ - -/* - Inflate deflated (PKZIP's method 8 compressed) data. The compression - method searches for as much of the current string of bytes (up to a - length of 258) in the previous 32K bytes. If it doesn't find any - matches (of at least length 3), it codes the next byte. Otherwise, it - codes the length of the matched string and its distance backwards from - the current position. There is a single Huffman code that codes both - single bytes (called "literals") and match lengths. A second Huffman - code codes the distance information, which follows a length code. Each - length or distance code actually represents a base value and a number - of "extra" (sometimes zero) bits to get to add to the base value. At - the end of each deflated block is a special end-of-block (EOB) literal/ - length code. The decoding process is basically: get a literal/length - code; if EOB then done; if a literal, emit the decoded byte; if a - length then get the distance and emit the referred-to bytes from the - sliding window of previously emitted data. - - There are (currently) three kinds of inflate blocks: stored, fixed, and - dynamic. The compressor deals with some chunk of data at a time, and - decides which method to use on a chunk-by-chunk basis. A chunk might - typically be 32K or 64K. If the chunk is uncompressible, then the - "stored" method is used. In this case, the bytes are simply stored as - is, eight bits per byte, with none of the above coding. The bytes are - preceded by a count, since there is no longer an EOB code. - - If the data is compressible, then either the fixed or dynamic methods - are used. In the dynamic method, the compressed data is preceded by - an encoding of the literal/length and distance Huffman codes that are - to be used to decode this block. The representation is itself Huffman - coded, and so is preceded by a description of that code. These code - descriptions take up a little space, and so for small blocks, there is - a predefined set of codes, called the fixed codes. The fixed method is - used if the block codes up smaller that way (usually for quite small - chunks), otherwise the dynamic method is used. In the latter case, the - codes are customized to the probabilities in the current block, and so - can code it much better than the pre-determined fixed codes. - - The Huffman codes themselves are decoded using a mutli-level table - lookup, in order to maximize the speed of decoding plus the speed of - building the decoding tables. See the comments below that precede the - lbits and dbits tuning parameters. - */ - - -/* - Notes beyond the 1.93a appnote.txt: - - 1. Distance pointers never point before the beginning of the output - stream. - 2. Distance pointers can point back across blocks, up to 32k away. - 3. There is an implied maximum of 7 bits for the bit length table and - 15 bits for the actual data. - 4. If only one code exists, then it is encoded using one bit. (Zero - would be more efficient, but perhaps a little confusing.) If two - codes exist, they are coded using one bit each (0 and 1). - 5. There is no way of sending zero distance codes--a dummy must be - sent if there are none. (History: a pre 2.0 version of PKZIP would - store blocks with no distance codes, but this was discovered to be - too harsh a criterion.) Valid only for 1.93a. 2.04c does allow - zero distance codes, which is sent as one code of zero bits in - length. - 6. There are up to 286 literal/length codes. Code 256 represents the - end-of-block. Note however that the static length tree defines - 288 codes just to fill out the Huffman codes. Codes 286 and 287 - cannot be used though, since there is no length base or extra bits - defined for them. Similarly, there are up to 30 distance codes. - However, static trees define 32 codes (all 5 bits) to fill out the - Huffman codes, but the last two had better not show up in the data. - 7. Unzip can check dynamic Huffman blocks for complete code sets. - The exception is that a single code would not be complete (see #4). - 8. The five bits following the block type is really the number of - literal codes sent minus 257. - 9. Length codes 8,16,16 are interpreted as 13 length codes of 8 bits - (1+6+6). Therefore, to output three times the length, you output - three codes (1+1+1), whereas to output four times the same length, - you only need two codes (1+3). Hmm. - 10. In the tree reconstruction algorithm, Code = Code + Increment - only if BitLength(i) is not zero. (Pretty obvious.) - 11. Correction: 4 Bits: # of Bit Length codes - 4 (4 - 19) - 12. Note: length code 284 can represent 227-258, but length code 285 - really is 258. The last length deserves its own, short code - since it gets used a lot in very redundant files. The length - 258 is special since 258 - 3 (the min match length) is 255. - 13. The literal/length and distance code bit lengths are read as a - single stream of lengths. It is possible (and advantageous) for - a repeat code (16, 17, or 18) to go across the boundary between - the two sets of lengths. - */ - -#ifdef RCSID -static char rcsid[] = "$Id: inflate.c,v 0.14 1993/06/10 13:27:04 jloup Exp $"; -#endif - -#include <sys/types.h> - -#include "tailor.h" - -#if defined(STDC_HEADERS) || !defined(NO_STDLIB_H) -# include <stdlib.h> -#endif - -#include "gzip.h" -#define slide window - -/* Huffman code lookup table entry--this entry is four bytes for machines - that have 16-bit pointers (e.g. PC's in the small or medium model). - Valid extra bits are 0..13. e == 15 is EOB (end of block), e == 16 - means that v is a literal, 16 < e < 32 means that v is a pointer to - the next table, which codes e - 16 bits, and lastly e == 99 indicates - an unused code. If a code with e == 99 is looked up, this implies an - error in the data. */ -struct huft { - uch e; /* number of extra bits or operation */ - uch b; /* number of bits in this code or subcode */ - union { - ush n; /* literal, length base, or distance base */ - struct huft *t; /* pointer to next level of table */ - } v; -}; - - -/* Function prototypes */ -int huft_build OF((unsigned *, unsigned, unsigned, ush *, ush *, - struct huft **, int *)); -int huft_free OF((struct huft *)); -int inflate_codes OF((struct huft *, struct huft *, int, int)); -int inflate_stored OF((void)); -int inflate_fixed OF((void)); -int inflate_dynamic OF((void)); -int inflate_block OF((int *)); -int inflate OF((void)); - - -/* The inflate algorithm uses a sliding 32K byte window on the uncompressed - stream to find repeated byte strings. This is implemented here as a - circular buffer. The index is updated simply by incrementing and then - and'ing with 0x7fff (32K-1). */ -/* It is left to other modules to supply the 32K area. It is assumed - to be usable as if it were declared "uch slide[32768];" or as just - "uch *slide;" and then malloc'ed in the latter case. The definition - must be in unzip.h, included above. */ -/* unsigned wp; current position in slide */ -#define wp outcnt -#define flush_output(w) (wp=(w),flush_window()) - -/* Tables for deflate from PKZIP's appnote.txt. */ -static unsigned border[] = { /* Order of the bit length code lengths */ - 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15}; -static ush cplens[] = { /* Copy lengths for literal codes 257..285 */ - 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, - 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0}; - /* note: see note #13 above about the 258 in this list. */ -static ush cplext[] = { /* Extra bits for literal codes 257..285 */ - 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, - 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 99, 99}; /* 99==invalid */ -static ush cpdist[] = { /* Copy offsets for distance codes 0..29 */ - 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, - 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, - 8193, 12289, 16385, 24577}; -static ush cpdext[] = { /* Extra bits for distance codes */ - 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, - 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, - 12, 12, 13, 13}; - - - -/* Macros for inflate() bit peeking and grabbing. - The usage is: - - NEEDBITS(j) - x = b & mask_bits[j]; - DUMPBITS(j) - - where NEEDBITS makes sure that b has at least j bits in it, and - DUMPBITS removes the bits from b. The macros use the variable k - for the number of bits in b. Normally, b and k are register - variables for speed, and are initialized at the beginning of a - routine that uses these macros from a global bit buffer and count. - - If we assume that EOB will be the longest code, then we will never - ask for bits with NEEDBITS that are beyond the end of the stream. - So, NEEDBITS should not read any more bytes than are needed to - meet the request. Then no bytes need to be "returned" to the buffer - at the end of the last block. - - However, this assumption is not true for fixed blocks--the EOB code - is 7 bits, but the other literal/length codes can be 8 or 9 bits. - (The EOB code is shorter than other codes because fixed blocks are - generally short. So, while a block always has an EOB, many other - literal/length codes have a significantly lower probability of - showing up at all.) However, by making the first table have a - lookup of seven bits, the EOB code will be found in that first - lookup, and so will not require that too many bits be pulled from - the stream. - */ - -ulg bb; /* bit buffer */ -unsigned bk; /* bits in bit buffer */ - -ush mask_bits[] = { - 0x0000, - 0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff, - 0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff -}; - -#ifdef CRYPT - uch cc; -# define NEXTBYTE() \ - (decrypt ? (cc = get_byte(), zdecode(cc), cc) : get_byte()) -#else -# define NEXTBYTE() (uch)get_byte() -#endif -#define NEEDBITS(n) {while(k<(n)){b|=((ulg)NEXTBYTE())<<k;k+=8;}} -#define DUMPBITS(n) {b>>=(n);k-=(n);} - - -/* - Huffman code decoding is performed using a multi-level table lookup. - The fastest way to decode is to simply build a lookup table whose - size is determined by the longest code. However, the time it takes - to build this table can also be a factor if the data being decoded - is not very long. The most common codes are necessarily the - shortest codes, so those codes dominate the decoding time, and hence - the speed. The idea is you can have a shorter table that decodes the - shorter, more probable codes, and then point to subsidiary tables for - the longer codes. The time it costs to decode the longer codes is - then traded against the time it takes to make longer tables. - - This results of this trade are in the variables lbits and dbits - below. lbits is the number of bits the first level table for literal/ - length codes can decode in one step, and dbits is the same thing for - the distance codes. Subsequent tables are also less than or equal to - those sizes. These values may be adjusted either when all of the - codes are shorter than that, in which case the longest code length in - bits is used, or when the shortest code is *longer* than the requested - table size, in which case the length of the shortest code in bits is - used. - - There are two different values for the two tables, since they code a - different number of possibilities each. The literal/length table - codes 286 possible values, or in a flat code, a little over eight - bits. The distance table codes 30 possible values, or a little less - than five bits, flat. The optimum values for speed end up being - about one bit more than those, so lbits is 8+1 and dbits is 5+1. - The optimum values may differ though from machine to machine, and - possibly even between compilers. Your mileage may vary. - */ - - -int lbits = 9; /* bits in base literal/length lookup table */ -int dbits = 6; /* bits in base distance lookup table */ - - -/* If BMAX needs to be larger than 16, then h and x[] should be ulg. */ -#define BMAX 16 /* maximum bit length of any code (16 for explode) */ -#define N_MAX 288 /* maximum number of codes in any set */ - - -unsigned hufts; /* track memory usage */ - - -int huft_build(b, n, s, d, e, t, m) -unsigned *b; /* code lengths in bits (all assumed <= BMAX) */ -unsigned n; /* number of codes (assumed <= N_MAX) */ -unsigned s; /* number of simple-valued codes (0..s-1) */ -ush *d; /* list of base values for non-simple codes */ -ush *e; /* list of extra bits for non-simple codes */ -struct huft **t; /* result: starting table */ -int *m; /* maximum lookup bits, returns actual */ -/* Given a list of code lengths and a maximum table size, make a set of - tables to decode that set of codes. Return zero on success, one if - the given code set is incomplete (the tables are still built in this - case), two if the input is invalid (all zero length codes or an - oversubscribed set of lengths), and three if not enough memory. */ -{ - unsigned a; /* counter for codes of length k */ - unsigned c[BMAX+1]; /* bit length count table */ - unsigned f; /* i repeats in table every f entries */ - int g; /* maximum code length */ - int h; /* table level */ - register unsigned i; /* counter, current code */ - register unsigned j; /* counter */ - register int k; /* number of bits in current code */ - int l; /* bits per table (returned in m) */ - register unsigned *p; /* pointer into c[], b[], or v[] */ - register struct huft *q; /* points to current table */ - struct huft r; /* table entry for structure assignment */ - struct huft *u[BMAX]; /* table stack */ - unsigned v[N_MAX]; /* values in order of bit length */ - register int w; /* bits before this table == (l * h) */ - unsigned x[BMAX+1]; /* bit offsets, then code stack */ - unsigned *xp; /* pointer into x */ - int y; /* number of dummy codes added */ - unsigned z; /* number of entries in current table */ - - - /* Generate counts for each bit length */ - memzero(c, sizeof(c)); - p = b; i = n; - do { - Tracecv(*p, (stderr, (n-i >= ' ' && n-i <= '~' ? "%c %d\n" : "0x%x %d\n"), - n-i, *p)); - c[*p]++; /* assume all entries <= BMAX */ - p++; /* Can't combine with above line (Solaris bug) */ - } while (--i); - if (c[0] == n) /* null input--all zero length codes */ - { - *t = (struct huft *)NULL; - *m = 0; - return 0; - } - - - /* Find minimum and maximum length, bound *m by those */ - l = *m; - for (j = 1; j <= BMAX; j++) - if (c[j]) - break; - k = j; /* minimum code length */ - if ((unsigned)l < j) - l = j; - for (i = BMAX; i; i--) - if (c[i]) - break; - g = i; /* maximum code length */ - if ((unsigned)l > i) - l = i; - *m = l; - - - /* Adjust last length count to fill out codes, if needed */ - for (y = 1 << j; j < i; j++, y <<= 1) - if ((y -= c[j]) < 0) - return 2; /* bad input: more codes than bits */ - if ((y -= c[i]) < 0) - return 2; - c[i] += y; - - - /* Generate starting offsets into the value table for each length */ - x[1] = j = 0; - p = c + 1; xp = x + 2; - while (--i) { /* note that i == g from above */ - *xp++ = (j += *p++); - } - - - /* Make a table of values in order of bit lengths */ - p = b; i = 0; - do { - if ((j = *p++) != 0) - v[x[j]++] = i; - } while (++i < n); - - - /* Generate the Huffman codes and for each, make the table entries */ - x[0] = i = 0; /* first Huffman code is zero */ - p = v; /* grab values in bit order */ - h = -1; /* no tables yet--level -1 */ - w = -l; /* bits decoded == (l * h) */ - u[0] = (struct huft *)NULL; /* just to keep compilers happy */ - q = (struct huft *)NULL; /* ditto */ - z = 0; /* ditto */ - - /* go through the bit lengths (k already is bits in shortest code) */ - for (; k <= g; k++) - { - a = c[k]; - while (a--) - { - /* here i is the Huffman code of length k bits for value *p */ - /* make tables up to required level */ - while (k > w + l) - { - h++; - w += l; /* previous table always l bits */ - - /* compute minimum size table less than or equal to l bits */ - z = (z = g - w) > (unsigned)l ? l : z; /* upper limit on table size */ - if ((f = 1 << (j = k - w)) > a + 1) /* try a k-w bit table */ - { /* too few codes for k-w bit table */ - f -= a + 1; /* deduct codes from patterns left */ - xp = c + k; - while (++j < z) /* try smaller tables up to z bits */ - { - if ((f <<= 1) <= *++xp) - break; /* enough codes to use up j bits */ - f -= *xp; /* else deduct codes from patterns */ - } - } - z = 1 << j; /* table entries for j-bit table */ - - /* allocate and link in new table */ - if ((q = (struct huft *)malloc((z + 1)*sizeof(struct huft))) == - (struct huft *)NULL) - { - if (h) - huft_free(u[0]); - return 3; /* not enough memory */ - } - hufts += z + 1; /* track memory usage */ - *t = q + 1; /* link to list for huft_free() */ - *(t = &(q->v.t)) = (struct huft *)NULL; - u[h] = ++q; /* table starts after link */ - - /* connect to last table, if there is one */ - if (h) - { - x[h] = i; /* save pattern for backing up */ - r.b = (uch)l; /* bits to dump before this table */ - r.e = (uch)(16 + j); /* bits in this table */ - r.v.t = q; /* pointer to this table */ - j = i >> (w - l); /* (get around Turbo C bug) */ - u[h-1][j] = r; /* connect to last table */ - } - } - - /* set up table entry in r */ - r.b = (uch)(k - w); - if (p >= v + n) - r.e = 99; /* out of values--invalid code */ - else if (*p < s) - { - r.e = (uch)(*p < 256 ? 16 : 15); /* 256 is end-of-block code */ - r.v.n = (ush)(*p); /* simple code is just the value */ - p++; /* one compiler does not like *p++ */ - } - else - { - r.e = (uch)e[*p - s]; /* non-simple--look up in lists */ - r.v.n = d[*p++ - s]; - } - - /* fill code-like entries with r */ - f = 1 << (k - w); - for (j = i >> w; j < z; j += f) - q[j] = r; - - /* backwards increment the k-bit code i */ - for (j = 1 << (k - 1); i & j; j >>= 1) - i ^= j; - i ^= j; - - /* backup over finished tables */ - while ((i & ((1 << w) - 1)) != x[h]) - { - h--; /* don't need to update q */ - w -= l; - } - } - } - - - /* Return true (1) if we were given an incomplete table */ - return y != 0 && g != 1; -} - - - -int huft_free(t) -struct huft *t; /* table to free */ -/* Free the malloc'ed tables built by huft_build(), which makes a linked - list of the tables it made, with the links in a dummy first entry of - each table. */ -{ - register struct huft *p, *q; - - - /* Go through linked list, freeing from the malloced (t[-1]) address. */ - p = t; - while (p != (struct huft *)NULL) - { - q = (--p)->v.t; - free((char*)p); - p = q; - } - return 0; -} - - -int inflate_codes(tl, td, bl, bd) -struct huft *tl, *td; /* literal/length and distance decoder tables */ -int bl, bd; /* number of bits decoded by tl[] and td[] */ -/* inflate (decompress) the codes in a deflated (compressed) block. - Return an error code or zero if it all goes ok. */ -{ - register unsigned e; /* table entry flag/number of extra bits */ - unsigned n, d; /* length and index for copy */ - unsigned w; /* current window position */ - struct huft *t; /* pointer to table entry */ - unsigned ml, md; /* masks for bl and bd bits */ - register ulg b; /* bit buffer */ - register unsigned k; /* number of bits in bit buffer */ - - - /* make local copies of globals */ - b = bb; /* initialize bit buffer */ - k = bk; - w = wp; /* initialize window position */ - - /* inflate the coded data */ - ml = mask_bits[bl]; /* precompute masks for speed */ - md = mask_bits[bd]; - for (;;) /* do until end of block */ - { - NEEDBITS((unsigned)bl) - if ((e = (t = tl + ((unsigned)b & ml))->e) > 16) - do { - if (e == 99) - return 1; - DUMPBITS(t->b) - e -= 16; - NEEDBITS(e) - } while ((e = (t = t->v.t + ((unsigned)b & mask_bits[e]))->e) > 16); - DUMPBITS(t->b) - if (e == 16) /* then it's a literal */ - { - slide[w++] = (uch)t->v.n; - Tracevv((stderr, "%c", slide[w-1])); - if (w == WSIZE) - { - flush_output(w); - w = 0; - } - } - else /* it's an EOB or a length */ - { - /* exit if end of block */ - if (e == 15) - break; - - /* get length of block to copy */ - NEEDBITS(e) - n = t->v.n + ((unsigned)b & mask_bits[e]); - DUMPBITS(e); - - /* decode distance of block to copy */ - NEEDBITS((unsigned)bd) - if ((e = (t = td + ((unsigned)b & md))->e) > 16) - do { - if (e == 99) - return 1; - DUMPBITS(t->b) - e -= 16; - NEEDBITS(e) - } while ((e = (t = t->v.t + ((unsigned)b & mask_bits[e]))->e) > 16); - DUMPBITS(t->b) - NEEDBITS(e) - d = w - t->v.n - ((unsigned)b & mask_bits[e]); - DUMPBITS(e) - Tracevv((stderr,"\\[%d,%d]", w-d, n)); - - /* do the copy */ - do { - n -= (e = (e = WSIZE - ((d &= WSIZE-1) > w ? d : w)) > n ? n : e); -#if !defined(NOMEMCPY) && !defined(DEBUG) - if (w - d >= e) /* (this test assumes unsigned comparison) */ - { - memcpy(slide + w, slide + d, e); - w += e; - d += e; - } - else /* do it slow to avoid memcpy() overlap */ -#endif /* !NOMEMCPY */ - do { - slide[w++] = slide[d++]; - Tracevv((stderr, "%c", slide[w-1])); - } while (--e); - if (w == WSIZE) - { - flush_output(w); - w = 0; - } - } while (n); - } - } - - - /* restore the globals from the locals */ - wp = w; /* restore global window pointer */ - bb = b; /* restore global bit buffer */ - bk = k; - - /* done */ - return 0; -} - - - -int inflate_stored() -/* "decompress" an inflated type 0 (stored) block. */ -{ - unsigned n; /* number of bytes in block */ - unsigned w; /* current window position */ - register ulg b; /* bit buffer */ - register unsigned k; /* number of bits in bit buffer */ - - - /* make local copies of globals */ - b = bb; /* initialize bit buffer */ - k = bk; - w = wp; /* initialize window position */ - - - /* go to byte boundary */ - n = k & 7; - DUMPBITS(n); - - - /* get the length and its complement */ - NEEDBITS(16) - n = ((unsigned)b & 0xffff); - DUMPBITS(16) - NEEDBITS(16) - if (n != (unsigned)((~b) & 0xffff)) - return 1; /* error in compressed data */ - DUMPBITS(16) - - - /* read and output the compressed data */ - while (n--) - { - NEEDBITS(8) - slide[w++] = (uch)b; - if (w == WSIZE) - { - flush_output(w); - w = 0; - } - DUMPBITS(8) - } - - - /* restore the globals from the locals */ - wp = w; /* restore global window pointer */ - bb = b; /* restore global bit buffer */ - bk = k; - return 0; -} - - - -int inflate_fixed() -/* decompress an inflated type 1 (fixed Huffman codes) block. We should - either replace this with a custom decoder, or at least precompute the - Huffman tables. */ -{ - int i; /* temporary variable */ - struct huft *tl; /* literal/length code table */ - struct huft *td; /* distance code table */ - int bl; /* lookup bits for tl */ - int bd; /* lookup bits for td */ - unsigned l[288]; /* length list for huft_build */ - - - /* set up literal table */ - for (i = 0; i < 144; i++) - l[i] = 8; - for (; i < 256; i++) - l[i] = 9; - for (; i < 280; i++) - l[i] = 7; - for (; i < 288; i++) /* make a complete, but wrong code set */ - l[i] = 8; - bl = 7; - if ((i = huft_build(l, 288, 257, cplens, cplext, &tl, &bl)) != 0) - return i; - - - /* set up distance table */ - for (i = 0; i < 30; i++) /* make an incomplete code set */ - l[i] = 5; - bd = 5; - if ((i = huft_build(l, 30, 0, cpdist, cpdext, &td, &bd)) > 1) - { - huft_free(tl); - return i; - } - - - /* decompress until an end-of-block code */ - if (inflate_codes(tl, td, bl, bd)) - return 1; - - - /* free the decoding tables, return */ - huft_free(tl); - huft_free(td); - return 0; -} - - - -int inflate_dynamic() -/* decompress an inflated type 2 (dynamic Huffman codes) block. */ -{ - int i; /* temporary variables */ - unsigned j; - unsigned l; /* last length */ - unsigned m; /* mask for bit lengths table */ - unsigned n; /* number of lengths to get */ - struct huft *tl; /* literal/length code table */ - struct huft *td; /* distance code table */ - int bl; /* lookup bits for tl */ - int bd; /* lookup bits for td */ - unsigned nb; /* number of bit length codes */ - unsigned nl; /* number of literal/length codes */ - unsigned nd; /* number of distance codes */ -#ifdef PKZIP_BUG_WORKAROUND - unsigned ll[288+32]; /* literal/length and distance code lengths */ -#else - unsigned ll[286+30]; /* literal/length and distance code lengths */ -#endif - register ulg b; /* bit buffer */ - register unsigned k; /* number of bits in bit buffer */ - - - /* make local bit buffer */ - b = bb; - k = bk; - - - /* read in table lengths */ - NEEDBITS(5) - nl = 257 + ((unsigned)b & 0x1f); /* number of literal/length codes */ - DUMPBITS(5) - NEEDBITS(5) - nd = 1 + ((unsigned)b & 0x1f); /* number of distance codes */ - DUMPBITS(5) - NEEDBITS(4) - nb = 4 + ((unsigned)b & 0xf); /* number of bit length codes */ - DUMPBITS(4) -#ifdef PKZIP_BUG_WORKAROUND - if (nl > 288 || nd > 32) -#else - if (nl > 286 || nd > 30) -#endif - return 1; /* bad lengths */ - - - /* read in bit-length-code lengths */ - for (j = 0; j < nb; j++) - { - NEEDBITS(3) - ll[border[j]] = (unsigned)b & 7; - DUMPBITS(3) - } - for (; j < 19; j++) - ll[border[j]] = 0; - - - /* build decoding table for trees--single level, 7 bit lookup */ - bl = 7; - if ((i = huft_build(ll, 19, 19, NULL, NULL, &tl, &bl)) != 0) - { - if (i == 1) - huft_free(tl); - return i; /* incomplete code set */ - } - - - /* read in literal and distance code lengths */ - n = nl + nd; - m = mask_bits[bl]; - i = l = 0; - while ((unsigned)i < n) - { - NEEDBITS((unsigned)bl) - j = (td = tl + ((unsigned)b & m))->b; - DUMPBITS(j) - j = td->v.n; - if (j < 16) /* length of code in bits (0..15) */ - ll[i++] = l = j; /* save last length in l */ - else if (j == 16) /* repeat last length 3 to 6 times */ - { - NEEDBITS(2) - j = 3 + ((unsigned)b & 3); - DUMPBITS(2) - if ((unsigned)i + j > n) - return 1; - while (j--) - ll[i++] = l; - } - else if (j == 17) /* 3 to 10 zero length codes */ - { - NEEDBITS(3) - j = 3 + ((unsigned)b & 7); - DUMPBITS(3) - if ((unsigned)i + j > n) - return 1; - while (j--) - ll[i++] = 0; - l = 0; - } - else /* j == 18: 11 to 138 zero length codes */ - { - NEEDBITS(7) - j = 11 + ((unsigned)b & 0x7f); - DUMPBITS(7) - if ((unsigned)i + j > n) - return 1; - while (j--) - ll[i++] = 0; - l = 0; - } - } - - - /* free decoding table for trees */ - huft_free(tl); - - - /* restore the global bit buffer */ - bb = b; - bk = k; - - - /* build the decoding tables for literal/length and distance codes */ - bl = lbits; - if ((i = huft_build(ll, nl, 257, cplens, cplext, &tl, &bl)) != 0) - { - if (i == 1) { - fprintf(stderr, " incomplete literal tree\n"); - huft_free(tl); - } - return i; /* incomplete code set */ - } - bd = dbits; - if ((i = huft_build(ll + nl, nd, 0, cpdist, cpdext, &td, &bd)) != 0) - { - if (i == 1) { - fprintf(stderr, " incomplete distance tree\n"); -#ifdef PKZIP_BUG_WORKAROUND - i = 0; - } -#else - huft_free(td); - } - huft_free(tl); - return i; /* incomplete code set */ -#endif - } - - - /* decompress until an end-of-block code */ - if (inflate_codes(tl, td, bl, bd)) - return 1; - - - /* free the decoding tables, return */ - huft_free(tl); - huft_free(td); - return 0; -} - - - -int inflate_block(e) -int *e; /* last block flag */ -/* decompress an inflated block */ -{ - unsigned t; /* block type */ - register ulg b; /* bit buffer */ - register unsigned k; /* number of bits in bit buffer */ - - - /* make local bit buffer */ - b = bb; - k = bk; - - - /* read in last block bit */ - NEEDBITS(1) - *e = (int)b & 1; - DUMPBITS(1) - - - /* read in block type */ - NEEDBITS(2) - t = (unsigned)b & 3; - DUMPBITS(2) - - - /* restore the global bit buffer */ - bb = b; - bk = k; - - - /* inflate that block type */ - if (t == 2) - return inflate_dynamic(); - if (t == 0) - return inflate_stored(); - if (t == 1) - return inflate_fixed(); - - - /* bad block type */ - return 2; -} - - - -int inflate() -/* decompress an inflated entry */ -{ - int e; /* last block flag */ - int r; /* result code */ - unsigned h; /* maximum struct huft's malloc'ed */ - - - /* initialize window, bit buffer */ - wp = 0; - bk = 0; - bb = 0; - - - /* decompress until the last block */ - h = 0; - do { - hufts = 0; - if ((r = inflate_block(&e)) != 0) - return r; - if (hufts > h) - h = hufts; - } while (!e); - - /* Undo too much lookahead. The next read will be byte aligned so we - * can discard unused bits in the last meaningful byte. - */ - while (bk >= 8) { - bk -= 8; - inptr--; - } - - /* flush out slide */ - flush_output(wp); - - - /* return success */ -#ifdef DEBUG - fprintf(stderr, "<%u> ", h); -#endif /* DEBUG */ - return 0; -} diff --git a/Build/source/utils/gzip/lzw.c b/Build/source/utils/gzip/lzw.c deleted file mode 100644 index 12bf5c611d0..00000000000 --- a/Build/source/utils/gzip/lzw.c +++ /dev/null @@ -1,26 +0,0 @@ -/* lzw.c -- compress files in LZW format. - * This is a dummy version avoiding patent problems. - */ - -#ifdef RCSID -static char rcsid[] = "$Id: lzw.c,v 0.9 1993/06/10 13:27:31 jloup Exp $"; -#endif - -#include "tailor.h" -#include "gzip.h" -#include "lzw.h" - -static int msg_done = 0; - -/* Compress in to out with lzw method. */ -int lzw(in, out) - int in, out; -{ - if (msg_done) return ERROR; - msg_done = 1; - fprintf(stderr,"output in compress .Z format not supported\n"); - if (in != out) { /* avoid warnings on unused variables */ - exit_code = ERROR; - } - return ERROR; -} diff --git a/Build/source/utils/gzip/lzw.h b/Build/source/utils/gzip/lzw.h deleted file mode 100644 index 4b7ac8680e1..00000000000 --- a/Build/source/utils/gzip/lzw.h +++ /dev/null @@ -1,42 +0,0 @@ -/* lzw.h -- define the lzw functions. - * Copyright (C) 1992-1993 Jean-loup Gailly. - * This is free software; you can redistribute it and/or modify it under the - * terms of the GNU General Public License, see the file COPYING. - */ - -#if !defined(OF) && defined(lint) -# include "gzip.h" -#endif - -#ifndef BITS -# define BITS 16 -#endif -#define INIT_BITS 9 /* Initial number of bits per code */ - -#define LZW_MAGIC "\037\235" /* Magic header for lzw files, 1F 9D */ - -#define BIT_MASK 0x1f /* Mask for 'number of compression bits' */ -/* Mask 0x20 is reserved to mean a fourth header byte, and 0x40 is free. - * It's a pity that old uncompress does not check bit 0x20. That makes - * extension of the format actually undesirable because old compress - * would just crash on the new format instead of giving a meaningful - * error message. It does check the number of bits, but it's more - * helpful to say "unsupported format, get a new version" than - * "can only handle 16 bits". - */ - -#define BLOCK_MODE 0x80 -/* Block compression: if table is full and compression rate is dropping, - * clear the dictionary. - */ - -#define LZW_RESERVED 0x60 /* reserved bits */ - -#define CLEAR 256 /* flush the dictionary */ -#define FIRST (CLEAR+1) /* first free entry */ - -extern int maxbits; /* max bits per code for LZW */ -extern int block_mode; /* block compress mode -C compatible with 2.0 */ - -extern int lzw OF((int in, int out)); -extern int unlzw OF((int in, int out)); diff --git a/Build/source/utils/gzip/man.ps b/Build/source/utils/gzip/man.ps deleted file mode 100644 index e69de29bb2d..00000000000 --- a/Build/source/utils/gzip/man.ps +++ /dev/null diff --git a/Build/source/utils/gzip/msdos/Makefile.bor b/Build/source/utils/gzip/msdos/Makefile.bor deleted file mode 100644 index 1165b7cff52..00000000000 --- a/Build/source/utils/gzip/msdos/Makefile.bor +++ /dev/null @@ -1,118 +0,0 @@ -# Makefile for gzip -# Borland (Turbo) C++. -# Warning: this file is not suitable for Turbo C 2.0. In this case, read -# then invoke the file doturboc.bat. - -# To use, do "make -fmakefile.bor" - -# Turbo C++ 1.0 seems to have a buggy exit() function. You must add -# to CFLAGS: -Dexit=_exit - -# WARNING: the small model is not supported. The compact model is used -# here. If you want to use the large model, add -D__LARGE__ to ASFLAGS -# Add -DSMALL_MEM to CFLAGS if you wish to reduce the memory -# requirements. Add -DNO_ASM to CFLAGS and remove match.obj from OBJA if -# you do not have tasm. - -# ------------- Turbo C++, Borland C++ ------------- -MODEL=-mc -#CFLAGS=-w -w-eff -w-def -w-sig -w-cln -a -d -G -O -Z $(MODEL) -CFLAGS=-O2 -Z $(MODEL) -CC=bcc -LD=bcc -# replace bcc with tcc for Turbo C++ 1.0 -LDFLAGS=$(MODEL) -AS=tasm -ASFLAGS=-ml -t -DDYN_ALLOC -DSS_NEQ_DS -LIB = c:\bcc\lib - -# ------------- Common declarations: -STRIP=rem -# If you don't have lzexe, get it (by ftp on wuarchive.wustl.edu -# in /mirrors/msdos/filutl/lzexe91e.zip). Then define: -#STRIP=lzexe -# Or if you've registered PKLITE, then define: -#STRIP=pklite -# This makes a big difference in .exe size (and possibly load time) - -O=.obj -OBJA=match$(O) tailor$(O) $(LIB)\wildargs.obj - -# ------------- Used by install rule -# set BIN to the directory you want to install the executables to -BIN = c:\bin - -# variables -OBJ1 = gzip$(O) zip$(O) deflate$(O) trees$(O) bits$(O) unzip$(O) inflate$(O) \ - util$(O) -OBJ2 = crypt$(O) lzw$(O) unlzw$(O) unpack$(O) unlzh$(O) getopt$(O) $(OBJA) - -all: gzip.exe - -gzip.obj: gzip.c gzip.h tailor.h crypt.h revision.h lzw.h - $(CC) -c $(CFLAGS) $*.c - -zip.obj: zip.c gzip.h tailor.h crypt.h - $(CC) -c $(CFLAGS) $*.c - -deflate.obj: deflate.c gzip.h tailor.h - $(CC) -c $(CFLAGS) $*.c - -trees.obj: trees.c gzip.h tailor.h - $(CC) -c $(CFLAGS) $*.c - -bits.obj: bits.c gzip.h tailor.h crypt.h - $(CC) -c $(CFLAGS) $*.c - -unzip.obj: unzip.c gzip.h tailor.h crypt.h - $(CC) -c $(CFLAGS) $*.c - -inflate.obj: inflate.c gzip.h tailor.h - $(CC) -c $(CFLAGS) $*.c - -util.obj: util.c gzip.h tailor.h crypt.h - $(CC) -c $(CFLAGS) $*.c - -crypt.obj: crypt.c gzip.h tailor.h crypt.h - $(CC) -c $(CFLAGS) $*.c - -lzw.obj: lzw.c gzip.h tailor.h - $(CC) -c $(CFLAGS) $*.c - -unlzw.obj: unlzw.c gzip.h tailor.h lzw.h - $(CC) -c $(CFLAGS) $*.c - -unpack.obj: unpack.c gzip.h tailor.h - $(CC) -c $(CFLAGS) $*.c - -unlzh.obj: unlzh.c gzip.h tailor.h - $(CC) -c $(CFLAGS) $*.c - -tailor.obj: msdos\tailor.c gzip.h tailor.h - $(CC) -c $(CFLAGS) msdos\$*.c - -getopt.obj: getopt.c getopt.h - $(CC) -c $(CFLAGS) $*.c - -match.obj: msdos\match.asm - $(AS) $(ASFLAGS) msdos\match, match; - -# we must cut the command line to fit in the MS/DOS 128 byte limit: -gzip.exe: $(OBJ1) $(OBJ2) - echo $(OBJ1) > gzip.rsp - echo $(OBJ2) >> gzip.rsp - $(LD) $(LDFLAGS) @gzip.rsp - del gzip.rsp - $(STRIP) gzip.exe -# If you use Borland make, you can use instead: -# $(LD) $(LDFLAGS) @&&| -#$** -#| - -install: gzip.exe - copy /b gzip.exe $(BIN) - copy /b gzip.exe $(BIN)\gunzip.exe - -clean: - del *.obj - del *.exe diff --git a/Build/source/utils/gzip/msdos/Makefile.djg b/Build/source/utils/gzip/msdos/Makefile.djg deleted file mode 100644 index 514d963d9e4..00000000000 --- a/Build/source/utils/gzip/msdos/Makefile.djg +++ /dev/null @@ -1,224 +0,0 @@ -# Makefile for gzip (GNU zip) -*- Indented-Text -*- -# Copyright (C) 1992-1993 Jean-loup Gailly and the Free Software Foundation -# Modified for GNUish make/MS_SH200/DJGPP 1.09+ by Eric Backus - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -# $Id: Makefile.djg,v 1.3 1993/06/22 15:43:24 jloup Exp $ - -#### Start of system configuration section. #### - -.SUFFIXES: .o -LONGARGS = gcc:rm - -srcdir = . -VPATH = . - -CC = gcc -CPP = gcc -O -E - -INSTALL = install -c -INSTALL_PROGRAM = $(INSTALL) -INSTALL_DATA = $(INSTALL) -m 644 - -# tailor.h defines things for DJGPP so nothing is needed here -DEFS = -LIBS = - -# additional assembly sources for particular systems may be required. -OBJA = match.o - -SEDCMD = 1d - -CFLAGS = -O2 -finline-functions -fomit-frame-pointer -LDFLAGS = -s - -X=.exe -# For OS/2 or MSDOS, use: X=.exe - -O=.o -# For OS/2 or MSDOS, use: O=.obj - -prefix = /usr/local -exec_prefix = $(prefix) - -bindir = $(exec_prefix)/bin -datadir = $(prefix)/lib -libdir = $(prefix)/lib -infodir = $(prefix)/info - -# Extension (not including `.') for the installed manual page filenames. -manext = 1 -# Where to install the manual pages. -mandir = $(prefix)/man/man$(manext) - -#### End of system configuration section. #### - -SHELL = /bin/sh - -LOADLIBES = $(LIBS) - -TAR = tar - -SRCS = gzip.c zip.c deflate.c trees.c bits.c unzip.c inflate.c util.c crypt.c\ - lzw.c unlzw.c unpack.c unlzh.c makecrc.c getopt.c match.S - -OBJ1 = gzip$(O) zip$(O) deflate$(O) trees$(O) bits$(O) unzip$(O) inflate$(O) \ - util$(O) -OBJ2 = crypt$(O) lzw$(O) unlzw$(O) unpack$(O) unlzh$(O) getopt$(O) $(OBJA) - -HDRS = gzip.h lzw.h tailor.h revision.h crypt.h getopt.h - -.c$O: - $(CC) -c $(DEFS) $(CFLAGS) $< - -#.PHONY: default all force test check - -default: all -all: gzip$X zcmp zdiff zmore znew zforce gzexe -force: - -install: all - for f in gzip$X zcmp zdiff zmore znew zforce gzexe; do \ - $(INSTALL_PROGRAM) $${f} $(bindir)/$${f}; done - for f in gunzip$X zcat$X ; do \ - rm -f $(bindir)/$${f}; ln $(bindir)/gzip$X $(bindir)/$${f}; done - -cd $(srcdir); \ - for f in gzip gunzip zcat zcmp zmore znew zforce gzexe; do \ - rm -f $(mandir)/$${f}.$(manext); \ - $(INSTALL_DATA) $${f}.1 $(mandir)/$${f}.$(manext); done - -cd $(srcdir); for f in gzip.info* ; do $(INSTALL_DATA) $${f} \ - $(infodir)/$${f}; done - -uninstall: force - -cd $(bindir); rm -f gzip$X gunzip$X zcat$X \ - zcmp zdiff zmore znew zforce gzexe - -for f in gzip gunzip zcat zcmp zmore znew gzexe; do \ - rm -f $(mandir)/$${f}.$(manext); done - -cd $(infodir); rm -f gzip.info* - -# install all files and replace compress (not recommended) -install_compress: install - -test -f $(bindir)/compress.old || \ - mv $(bindir)/compress$X $(bindir)/compress.old - ln $(bindir)/gzip$X $(bindir)/compress$X - rm -f $(bindir)/uncompress$X - ln $(bindir)/gzip$X $(bindir)/uncompress$X - -test: check -check: all - ./gzip -5 < $(srcdir)/texinfo.tex > _gztest.z - # Either GNUish make or MS_SH has trouble with backquotes - #@if test `wc -c < _gztest.z` -ne 30890; then \ - # echo FAILED gzip test: incorrect size; rm -f _gztest*; exit 1; \ - # else :; fi - @echo Should be 30890:\\c - @wc -c < _gztest.z - rm -f _gztest - ./gzip -d _gztest.z - @if cmp _gztest $(srcdir)/texinfo.tex; then \ - echo gzip test OK; \ - else \ - echo FAILED gzip test: incorrect decompress; \ - fi - rm -f _gztest* - -TAGS: $(SRCS) $(HDRS) - cd $(srcdir); etags $(SRCS) $(HDRS) - -Makefile: Makefile.in ./config.status - ./config.status - -./config.status: configure - $(srcdir)/configure --srcdir=$(srcdir) --no-create - -configure: configure.in - @echo Warning: configure is out of date -# cd $(srcdir); autoconf - -clean: - rm -f *$O gzip$X gunzip$X zcat$X a.out core gzip - rm -f zcmp zdiff zmore znew zforce gzexe _gztest* - rm -f *.aux *.cp *.cps *.dvi *.fn *.fns *.ky *.kys *.log - rm -f *.pg *.pgs *.toc *.tp *.tps *.vr *.vrs - -mostlyclean: clean - -distclean: clean - rm -f Makefile config.status - -realclean: distclean - rm -f TAGS gzip.info* - -# Actual build-related targets - -gzip$X: gzip - aout2exe gzip - -gzip: $(OBJ1) $(OBJ2) - echo $(OBJ1) > gzip.rsp - echo $(OBJ2) $(LIBS) >> gzip.rsp - $(CC) $(LDFLAGS) -o $@ @gzip.rsp - del gzip.rsp - -gzip$O zip$O deflate$O trees$O bits$O unzip$O inflate$O: gzip.h tailor.h -util$O lzw$O unlzw$O unpack$O unlzh$O crypt$O: gzip.h tailor.h - -gzip$O unlzw$O: revision.h lzw.h - -bits$O unzip$O util$O zip$O: crypt.h - -gzip$O getopt$O: getopt.h - -match$O: match.S - $(CC) -c match.S - -zcmp: zcmp.in - sed "$(SEDCMD)" $(srcdir)/zcmp.in > zcmp - chmod 755 zcmp - -zdiff: zdiff.in - sed "$(SEDCMD)" $(srcdir)/zdiff.in > zdiff - chmod 755 zdiff - -zmore: zmore.in - sed "$(SEDCMD)" $(srcdir)/zmore.in > zmore - chmod 755 zmore - -znew: znew.in - sed "$(SEDCMD)" $(srcdir)/znew.in > znew - chmod 755 znew - -zforce: zforce.in - sed "$(SEDCMD)" $(srcdir)/zforce.in > zforce - chmod 755 zforce - -gzexe: gzexe.in - sed "$(SEDCMD)" $(srcdir)/gzexe.in > gzexe - chmod 755 gzexe - -gzip.info: gzip.texi - cd $(srcdir); makeinfo gzip.texi - -gzip.dvi: gzip.texi - cd $(srcdir); texi2dvi gzip.texi - -gzip.doc: gzip.1 - cd $(srcdir); nroff -man gzip.1 | col -b | uniq > gzip.doc - -# Prevent GNU make v3 from overflowing arg limit on SysV. -.NOEXPORT: - -# end of file diff --git a/Build/source/utils/gzip/msdos/Makefile.msc b/Build/source/utils/gzip/msdos/Makefile.msc deleted file mode 100644 index e2aceba1bb8..00000000000 --- a/Build/source/utils/gzip/msdos/Makefile.msc +++ /dev/null @@ -1,108 +0,0 @@ -# Makefile for gzip -# Microsoft C 5.1 or 6.0. - -# To use, do "make makefile.msc" - -# WARNING: the small model is not supported. The compact model is used -# here. If you want to use the large model, add -D__LARGE__ to ASFLAGS -# Add -DSMALL_MEM to CFLAGS if you wish to reduce the memory -# requirements. Add -DNO_ASM to CFLAGS and remove match.obj from OBJI if -# you do not have masm. - -# ------------- Microsoft C 5.1 and later ------------- -MODEL=-AC -FP= -CFLAGS=-Ox -nologo $(MODEL) -BFLAGS=-Oait -Gs -nologo $(MODEL) -# BFLAGS are the 'bug workaround' flags. -CC=cl -LD=link -LDFLAGS=/e/st:0x1000/noe -# If you use lzexe as recommended, remove /e from LDFLAGS -AS=masm -# For MSC 6.0, use: AS=ml -ASFLAGS=-ml -t -# Add -DDYN_ALLOC to ASFLAGS if you have defined it in tailor.h or CFLAGS -LIB = c:\c51\lib - -# ------------- Common declarations: -STRIP=rem -# If you don't have lzexe, get it (by ftp on wuarchive.wustl.edu -# in /mirrors/msdos/filutl/lzexe91e.zip). Then define: -#STRIP=lzexe -# Or if you've registered PKLITE, then define: -#STRIP=pklite -# This makes a big difference in .exe size (and possibly load time) - -O=.obj -OBJA=match$(O) $(LIB)\setargv$(O) - -# ------------- Used by install rule -# set BIN to the directory you want to install the executables to -BIN = c:\bin - -# variables -OBJ1 = gzip$(O) zip$(O) deflate$(O) trees$(O) bits$(O) unzip$(O) inflate$(O) \ - util$(O) -OBJ2 = crypt$(O) lzw$(O) unlzw$(O) unpack$(O) unlzh$(O) getopt$(O) $(OBJA) - -gzip.obj: gzip.c gzip.h tailor.h crypt.h revision.h lzw.h - $(CC) -c $(CFLAGS) $*.c - -zip.obj: zip.c gzip.h tailor.h crypt.h - $(CC) -c $(CFLAGS) $*.c - -deflate.obj: deflate.c gzip.h tailor.h - $(CC) -c $(CFLAGS) $*.c - -trees.obj: trees.c gzip.h tailor.h - $(CC) -c $(CFLAGS) $*.c - -bits.obj: bits.c gzip.h tailor.h crypt.h - $(CC) -c $(CFLAGS) $*.c - -unzip.obj: unzip.c gzip.h tailor.h crypt.h - $(CC) -c $(CFLAGS) $*.c - -inflate.obj: inflate.c gzip.h tailor.h - $(CC) -c $(CFLAGS) $*.c - -util.obj: util.c gzip.h tailor.h crypt.h - $(CC) -c $(BFLAGS) $*.c - -crypt.obj: crypt.c gzip.h tailor.h crypt.h - $(CC) -c $(CFLAGS) $*.c - -lzw.obj: lzw.c gzip.h tailor.h - $(CC) -c $(CFLAGS) $*.c - -unlzw.obj: unlzw.c gzip.h tailor.h lzw.h - $(CC) -c $(CFLAGS) $*.c - -unpack.obj: unpack.c gzip.h tailor.h - $(CC) -c $(CFLAGS) $*.c - -unlzh.obj: unlzh.c gzip.h tailor.h - $(CC) -c $(BFLAGS) $*.c - -getopt.obj: getopt.c getopt.h - $(CC) -c $(CFLAGS) $*.c - -match.obj: msdos\match.asm - $(AS) $(ASFLAGS) msdos\match, match; - -# we must cut the command line to fit in the MS/DOS 128 byte limit: -gzip.exe: $(OBJ1) $(OBJ2) - echo $(OBJ1)+ > gzip.rsp - echo $(OBJ2); >> gzip.rsp - $(LD) $(LDFLAGS) @gzip.rsp - del gzip.rsp - $(STRIP) gzip.exe - -install: gzip.exe - copy /b gzip.exe $(BIN) - copy /b gzip.exe $(BIN)\gunzip.exe - -#clean: -# del *.obj -# del *.exe diff --git a/Build/source/utils/gzip/msdos/doturboc.bat b/Build/source/utils/gzip/msdos/doturboc.bat deleted file mode 100755 index 1cccb964369..00000000000 --- a/Build/source/utils/gzip/msdos/doturboc.bat +++ /dev/null @@ -1,18 +0,0 @@ -: This file is a complement to gzip.prj for Turbo C 2.0 users.
-: To construct gzip, first transform all files to msdos CR LF format.
-: (Use utilities such as flip or do file transfers in ascii mode.)
-: Then invoke this file. Then enter Turbo C, set the the
-: compilation model to compact, and the project file to gzip.prj.
-: Change the compilation flags if you wish (add SMALL_MEM
-: to reduce the memory requirements), and press F9...
-: WARNING: you must use the compact or large model in this version.
-: To use the large model, add -D__LARGE__ in the tasm command below.
-: To get the file wildargs.obj, do:
-:
-: pkunpak \tcc\startup wildargs.obj
-:
-: pkunpak is available in wuarchive.wustl.edu:/mirrors/msdos/starter/pk361.exe
-:
-: After compiling gzip.exe, do: copy gzip.exe gunzip.exe
-:
-tasm -ml -DDYN_ALLOC -DSS_NEQ_DS msdos\match, match;
diff --git a/Build/source/utils/gzip/msdos/gzip.prj b/Build/source/utils/gzip/msdos/gzip.prj deleted file mode 100644 index 1601d51e07a..00000000000 --- a/Build/source/utils/gzip/msdos/gzip.prj +++ /dev/null @@ -1,17 +0,0 @@ -gzip.c (gzip.h tailor.h crypt.h revision.h lzw.h) -zip.c (gzip.h tailor.h crypt.h) -deflate.c (gzip.h tailor.h) -trees.c (gzip.h tailor.h) -bits.c (gzip.h tailor.h crypt.h) -unzip.c (gzip.h tailor.h crypt.h) -inflate.c (gzip.h tailor.h) -util.c (gzip.h tailor.h crypt.h) -crypt.c (gzip.h tailor.h crypt.h) -lzw.c (gzip.h tailor.h) -unlzw.c (gzip.h tailor.h lzw.h) -unpack.c (gzip.h tailor.h) -unlzh.c (gzip.h tailor.h) -msdos\tailor.c (gzip.h tailor.h) -getopt.c (getopt.h) -match.obj -wildargs.obj diff --git a/Build/source/utils/gzip/msdos/match.asm b/Build/source/utils/gzip/msdos/match.asm deleted file mode 100644 index cee59c5962d..00000000000 --- a/Build/source/utils/gzip/msdos/match.asm +++ /dev/null @@ -1,240 +0,0 @@ -; match.asm -- optional optimized asm version of longest match in deflate.c -; Copyright (C) 1992-1993 Jean-loup Gailly -; This is free software; you can redistribute it and/or modify it under the -; terms of the GNU General Public License, see the file COPYING. -; -; Must be assembled with masm -ml. To be used only with C compact model -; or large model. (For large model, assemble with -D__LARGE__). -; This file is only optional. If you don't have masm or tasm, use the -; C version (add -DNO_ASM to CFLAGS in makefile.msc and remove match.obj -; from OBJI). If you have reduced WSIZE in zip.h, then change its value -; below. -; -; Turbo C 2.0 does not support static allocation of more than 64K bytes per -; file, and does not have SS == DS. So TC and BC++ users must use: -; tasm -ml -DDYN_ALLOC -DSS_NEQ_DS match; -; -; To simplify the code, the option -DDYN_ALLOC is supported for OS/2 -; only if the arrays are guaranteed to have zero offset (allocated by -; halloc). We also require SS==DS. This is satisfied for MSC but not Turbo C. - -; $Id: match.asm,v 0.6 1993/01/21 18:49:05 jloup Exp $ - - name match - -ifndef DYN_ALLOC - extrn _prev : word - extrn _window : byte - prev equ _prev ; offset part - window equ _window -endif - -_DATA segment word public 'DATA' - extrn _nice_match : word - extrn _match_start : word - extrn _prev_length : word - extrn _good_match : word - extrn _strstart : word - extrn _max_chain_length : word -ifdef DYN_ALLOC - extrn _prev : word - extrn _window : word - prev equ 0 ; offset forced to zero - window equ 0 - window_seg equ _window[2] - window_off equ 0 -else - wseg dw seg _window - window_seg equ wseg - window_off equ offset _window -endif -_DATA ends - -DGROUP group _DATA - -_TEXT segment word public 'CODE' - assume cs: _TEXT, ds: DGROUP - - public _match_init - public _longest_match - - MIN_MATCH equ 3 - MAX_MATCH equ 258 - WSIZE equ 32768 ; keep in sync with zip.h ! - MIN_LOOKAHEAD equ (MAX_MATCH+MIN_MATCH+1) - MAX_DIST equ (WSIZE-MIN_LOOKAHEAD) - -prev_ptr dw seg _prev ; pointer to the prev array -ifdef SS_NEQ_DS - match_start dw 0 ; copy of _match_start if SS != DS - nice_match dw 0 ; copy of _nice_match if SS != DS -endif - -; initialize or check the variables used in match.asm. - -ifdef __LARGE__ -_match_init proc far ; 'proc far' for large model -else -_match_init proc near ; 'proc near' for compact model -endif -ifdef SS_NEQ_DS - ma_start equ cs:match_start ; does not work on OS/2 - nice equ cs:nice_match - mov ax,_nice_match - mov cs:nice_match,ax ; ugly write to code, crash on OS/2 -else - assume ss: DGROUP - ma_start equ ss:_match_start - nice equ ss:_nice_match - mov ax,ds - mov bx,ss - cmp ax,bx ; SS == DS? - jne error -endif -ifdef DYN_ALLOC - cmp _prev[0],0 ; verify zero offset - jne error - cmp _window[0],0 - jne error - ifdef SS_NEQ_DS - mov ax,_prev[2] ; segment value - mov cs:prev_ptr,ax ; ugly write to code, crash on OS/2 - prev_seg equ cs:prev_ptr - else - prev_seg equ ss:_prev[2] ; works on OS/2 if SS == DS - endif -else - prev_seg equ cs:prev_ptr -endif - ret -ifdef __LARGE__ - extrn _exit : far ; 'far' for large model -else - extrn _exit : near ; 'near' for compact model -endif -error: call _exit - -_match_init endp - -; ----------------------------------------------------------------------- -; Set match_start to the longest match starting at the given string and -; return its length. Matches shorter or equal to prev_length are discarded, -; in which case the result is equal to prev_length and match_start is -; garbage. -; IN assertions: cur_match is the head of the hash chain for the current -; string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1 - -; int longest_match(cur_match) - -ifdef __LARGE__ -_longest_match proc far ; 'proc far' for large model -else -_longest_match proc near ; 'proc near' for compact model -endif - push bp - mov bp,sp - push di - push si - push ds - -ifdef __LARGE__ - cur_match equ word ptr [bp+6] ; [bp+6] for large model -else - cur_match equ word ptr [bp+4] ; [bp+4] for compact model -endif - -; window equ es:window (es:0 for DYN_ALLOC) -; prev equ ds:prev -; match equ es:si -; scan equ es:di -; chain_length equ bp -; best_len equ bx -; limit equ dx - - mov si,cur_match ; use bp before it is destroyed - mov bp,_max_chain_length ; chain_length = max_chain_length - mov di,_strstart - mov dx,di - sub dx,MAX_DIST ; limit = strstart-MAX_DIST - jae limit_ok - sub dx,dx ; limit = NIL -limit_ok: - add di,2+window_off ; di = offset(window + strstart + 2) - mov bx,_prev_length ; best_len = prev_length - mov es,window_seg - mov ax,es:[bx+di-3] ; ax = scan[best_len-1..best_len] - mov cx,es:[di-2] ; cx = scan[0..1] - cmp bx,_good_match ; do we have a good match already? - mov ds,prev_seg ; (does not destroy the flags) - assume ds: nothing - jb do_scan ; good match? - shr bp,1 ; chain_length >>= 2 - shr bp,1 - jmp short do_scan - - even ; align destination of branch -long_loop: -; at this point, ds:di == scan+2, ds:si == cur_match - mov ax,[bx+di-3] ; ax = scan[best_len-1..best_len] - mov cx,[di-2] ; cx = scan[0..1] - mov ds,prev_seg ; reset ds to address the prev array -short_loop: -; at this point, di == scan+2, si = cur_match, -; ax = scan[best_len-1..best_len] and cx = scan[0..1] -if (WSIZE-32768) - and si,WSIZE-1 ; not needed if WSIZE=32768 -endif - shl si,1 ; cur_match as word index - mov si,prev[si] ; cur_match = prev[cur_match] - cmp si,dx ; cur_match <= limit ? - jbe the_end - dec bp ; --chain_length - jz the_end -do_scan: - cmp ax,word ptr es:window[bx+si-1] ; check match at best_len-1 - jne short_loop - cmp cx,word ptr es:window[si] ; check min_match_length match - jne short_loop - - lea si,window[si+2] ; si = match - mov ax,di ; ax = scan+2 - mov cx,es - mov ds,cx ; ds = es = window - mov cx,(MAX_MATCH-2)/2 ; scan for at most MAX_MATCH bytes - repe cmpsw ; loop until mismatch - je maxmatch ; match of length MAX_MATCH? -mismatch: - mov cl,[di-2] ; mismatch on first or second byte? - sub cl,[si-2] ; cl = 0 if first bytes equal - xchg ax,di ; di = scan+2, ax = end of scan - sub ax,di ; ax = len - sub si,ax ; si = cur_match + 2 + offset(window) - sub si,2+window_off ; si = cur_match - sub cl,1 ; set carry if cl == 0 (can't use DEC) - adc ax,0 ; ax = carry ? len+1 : len - cmp ax,bx ; len > best_len ? - jle long_loop - mov ma_start,si ; match_start = cur_match - mov bx,ax ; bx = best_len = len - cmp ax,nice ; len >= nice_match ? - jl long_loop -the_end: - pop ds - assume ds: DGROUP -ifdef SS_NEQ_DS - mov ax,ma_start ; garbage if no match found - mov ds:_match_start,ax -endif - pop si - pop di - pop bp - mov ax,bx ; result = ax = best_len - ret -maxmatch: ; come here if maximum match - cmpsb ; increment si and di - jmp mismatch ; force match_length = MAX_LENGTH - -_longest_match endp - -_TEXT ends -end diff --git a/Build/source/utils/gzip/msdos/tailor.c b/Build/source/utils/gzip/msdos/tailor.c deleted file mode 100644 index 4d41b22a600..00000000000 --- a/Build/source/utils/gzip/msdos/tailor.c +++ /dev/null @@ -1,58 +0,0 @@ -/* tailor.c -- target dependent functions - * Copyright (C) 1992-1993 Jean-loup Gailly - * This is free software; you can redistribute it and/or modify it under the - * terms of the GNU General Public License, see the file COPYING. - */ - -/* tailor.c is a bunch of non portable routines. - * It should be kept to a minimum. - */ - -#include "tailor.h" -#include "gzip.h" - -#ifndef lint -static char rcsid[] = "$Id: tailor.c,v 0.8 1993/02/24 18:24:54 jloup Exp $"; -#endif - -#ifdef __TURBOC__ - -/************************/ -/* Function fcalloc() */ -/************************/ - -/* Turbo C malloc() does not allow dynamic allocation of 64K bytes - * and farmalloc(64K) returns a pointer with an offset of 8, so we - * must fix the pointer. Warning: the pointer must be put back to its - * original form in order to free it, use fcfree(). - * For MSC, use halloc instead of this function (see tailor.h). - */ -static ush ptr_offset = 0; - -void * fcalloc(items, size) - unsigned items; /* number of items */ - unsigned size; /* item size */ -{ - void * buf = farmalloc((ulg)items*size + 16L); - if (buf == NULL) return NULL; - /* Normalize the pointer to seg:0 */ - if (ptr_offset == 0) { - ptr_offset = (ush)((uch*)buf-0); - } else if (ptr_offset != (ush)((uch*)buf-0)) { - error("inconsistent ptr_offset"); - } - *((ush*)&buf+1) += (ptr_offset + 15) >> 4; - *(ush*)&buf = 0; - return buf; -} - -void fcfree(ptr) - void *ptr; /* region allocated with fcalloc() */ -{ - /* Put the pointer back to its original form: */ - *((ush*)&ptr+1) -= (ptr_offset + 15) >> 4; - *(ush*)&ptr = ptr_offset; - farfree(ptr); - } - -#endif /* __TURBOC__ */ diff --git a/Build/source/utils/gzip/nt/Makefile.nt b/Build/source/utils/gzip/nt/Makefile.nt deleted file mode 100644 index 0a7604c9585..00000000000 --- a/Build/source/utils/gzip/nt/Makefile.nt +++ /dev/null @@ -1,66 +0,0 @@ -# Simple makefile for Windows NT -# Written by Ron Cox <roncox@indirect.com> - -# This is free software; you can redistribute it and/or modify it under the -# terms of the GNU General Public License, see the file COPYING. - -# This makefile is suitable for NTFS only. To build a gzip executable suitable -# for a FAT file system, add -DNTFAT to DEFS. - -# To build debug version, define environment variable DEBUG, or include a -# -DDEBUG on the commandline (i.e.: nmake -DDEBUG) - -.silent: - -!include <ntwin32.mak> - -# -# Object files -# -OBJS = gzip.obj zip.obj deflate.obj trees.obj bits.obj unzip.obj inflate.obj \ - util.obj crypt.obj lzw.obj unlzw.obj unpack.obj getopt.obj unlzh.obj - -DEFS = -# for FAT support, set: DEFS = -DNTFAT - -# -# How to build .obj's from .c's -# -.c.obj: - $(cc) $(DEFS) -Ox $(cflags) $(cvarsdll) $< - -# -# Main target -# -all: gzip.exe - -# -# Link target. setargv.obj is provided in the compiler library directory. -# -gzip.exe: $(OBJS) - $(link) $(linkdebug) $(conflags) -out:gzip.exe $(OBJS) setargv.obj \ - $(conlibsdll) - -# -# Dependencies -# -gzip.obj: gzip.c gzip.h tailor.h -zip.obj: zip.c gzip.h tailor.h crypt.h -deflate.obj: deflate.c gzip.h tailor.h -trees.obj: trees.c gzip.h tailor.h -bits.obj: bits.c gzip.h tailor.h crypt.h -unzip.obj: unzip.c gzip.h tailor.h crypt.h -inflate.obj: inflate.c gzip.h tailor.h crypt.h -util.obj: util.c gzip.h tailor.h -lzw.obj: lzw.c gzip.h tailor.h -unlzw.obj: unlzw.c gzip.h tailor.h revision.h lzw.h -unpack.obj: unpack.c gzip.h tailor.h -crypt.obj: crypt.c gzip.h tailor.h -unlzh.obj: unlzh.c gzip.h tailor.h lzw.h - - -clean: - -rm $(OBJS) - -clobber: clean - -rm gzip.exe diff --git a/Build/source/utils/gzip/os2/Makefile.os2 b/Build/source/utils/gzip/os2/Makefile.os2 deleted file mode 100644 index e4afc2ecf99..00000000000 --- a/Build/source/utils/gzip/os2/Makefile.os2 +++ /dev/null @@ -1,81 +0,0 @@ -# Makefile for gzip (GNU zip), OS/2 version -*- Indented-Text -*- -# Written by Kai Uwe Rommel <rommel@informatik.tu-muenchen.de> - -# specialized version for OS/2 - -default: - @echo "Enter $(MAKE) -f makefile.os2 target" - @echo "where target is one of:" - @echo " msc mscdebug gcc gccdyn gccdebug" - -# compilation with emx 0.8f (gcc 2.3.3) or newer -# -# release version, statically linked C runtime -gcc: - $(MAKE) -f Makefile.os2 all \ - CC="gcc -Zomf -Zsys" O=".obj" S=".S" \ - AS="gcc -Zomf -xassembler-with-cpp -c -o" \ - CFLAGS="-O" LDFLAGS="gzip.def -s" -# -# release version, dynamically linked C runtime -gccdyn: - $(MAKE) -f Makefile.os2 all \ - CC="gcc -Zomf -Zmt" O=".obj" S=".S" \ - AS="gcc -Zomf -xassembler-with-cpp -c -o" \ - CFLAGS="-O" LDFLAGS="gzip.def -s" -# -# debugging version -gccdebug: - $(MAKE) -f Makefile.os2 all \ - CC="gcc -g" O=".o" S=".S" \ - AS="gcc -g -xassembler-with-cpp -c -o" \ - CFLAGS="" LDFLAGS="gzip.def" - -# compilation with MS C 6.00 -# -# release version -msc: - $(MAKE) -f Makefile.os2 all \ - CC="cl -nologo -AC" O=".obj" S=".asm" \ - AS="ml -nologo -Zm -Cp -c -Fo" \ - CFLAGS=" -W1 -Zap -J -G2s -Ocegit" \ - LDFLAGS="-Lp -F 2000 setargv.obj gzip16.def -link /noe" -# -# debugging version -mscdebug: - $(MAKE) -f Makefile.os2 all \ - CC="cl -nologo -AC -Zi" O=".obj" S=".asm" \ - AS="ml -nologo -Zm -Zi -Cp -c -Fo" \ - CFLAGS="-W1 -Zap -J -G2 -Od" \ - LDFLAGS="-Lp -F 2000 setargv.obj gzip16.def -link /noe /exe" - -DEFS = -DOS2 -DASMV - -OBJS = gzip$O zip$O deflate$O trees$O bits$O unzip$O inflate$O util$O \ - crypt$O lzw$O unlzw$O unpack$O unlzh$O getopt$O match$O - -.SUFFIXES: .c $O - -.c$O: - $(CC) $(CFLAGS) $(DEFS) -c $< - -all: gzip.exe gzip.info gzip.doc - -gzip.exe: $(OBJS) - $(CC) -o $@ $(OBJS) $(LDFLAGS) - -gzip$O zip$O deflate$O trees$O bits$O unzip$O inflate$O: gzip.h tailor.h -util$O lzw$O unlzw$O unpack$O unlzh$O crypt$O: gzip.h tailor.h - -gzip$O unlzw$O: revision.h lzw.h - -bits$O unzip$O util$O zip$O: crypt.h - -match$O: match$S - $(AS) $@ match$S - -gzip.info: gzip.texi gpl.texinfo - makeinfo gzip.texi - -gzip.doc: gzip.1 - groff -man gzip.1 > $@ diff --git a/Build/source/utils/gzip/os2/gzip.def b/Build/source/utils/gzip/os2/gzip.def deleted file mode 100644 index c7af3ea2eda..00000000000 --- a/Build/source/utils/gzip/os2/gzip.def +++ /dev/null @@ -1,3 +0,0 @@ -NAME GZIP WINDOWCOMPAT -DESCRIPTION 'GNU gzip file compression program' -STACKSIZE 0x80000 diff --git a/Build/source/utils/gzip/os2/gzip16.def b/Build/source/utils/gzip/os2/gzip16.def deleted file mode 100644 index 74c20d91e21..00000000000 --- a/Build/source/utils/gzip/os2/gzip16.def +++ /dev/null @@ -1,2 +0,0 @@ -NAME GZIP WINDOWCOMPAT NEWFILES -DESCRIPTION 'GNU gzip file compression program' diff --git a/Build/source/utils/gzip/primos/build.cpl b/Build/source/utils/gzip/primos/build.cpl deleted file mode 100644 index 6d82fa0c9b7..00000000000 --- a/Build/source/utils/gzip/primos/build.cpl +++ /dev/null @@ -1,76 +0,0 @@ -/* Gzip build file for Primos. -/* author: Peter Eriksson, pen@lysator.liu.se -/* -type -type 'Building GZIP for PRIMOS - Please Wait...' -type -&if ^ [exists *>PRIMOS>OBJ -dir] &then &do - type 'Creating *>PRIMOS>OBJ directory...' - type - create *>PRIMOS>OBJ - &end - -type 'Compiling... - -&set_var unit := 0 - -/* -&set_var cdefines := -debug - -como *>primos>compile.como -&do file &items [wild *>@@.c -single unit] - &set_var filebase := [before %file% .] - &if ^ [exists *>primos>obj>%filebase%.bin] &then &do - type 'Compiling "'%file%'"...' - ci *>%file% -binary *>primos>obj>=.bin %cdefines% -optionsfile *>primos>ci.opts - &end -&end -close -unit %unit% -&set_var unit := 0 - -&do file &items [wild *>primos>@@.c -single unit] - &set_var filebase := [before %file% .] - &if ^ [exists *>primos>obj>%filebase%.bin] &then &do - type 'Compiling "'%file%'"...' - ci *>primos>%file% -binary *>primos>obj>=.bin %cdefines% -optionsfile *>primos>ci.opts - &end -&end -como -end - -type -type -type 'Binding...' - -&set_var unit := 0 -&data bind - li ccmain - load *>primos>obj>gzip - load *>primos>obj>bits - load *>primos>obj>crypt - load *>primos>obj>deflate - load *>primos>obj>getopt - load *>primos>obj>inflate - load *>primos>obj>lzw - load *>primos>obj>makecrc - load *>primos>obj>primos - load *>primos>obj>trees - load *>primos>obj>unlzw - load *>primos>obj>unpack - load *>primos>obj>unlzh - load *>primos>obj>unzip - load *>primos>obj>util - load *>primos>obj>zip - li c_lib - li - dynt -all - nwc - nitr - ntw - compress - file *>primos>gzip.run -&end - -type -type -type 'All done. (Hopefully). The executable should be in *>PRIMOS>GZIP.RUN' -&return diff --git a/Build/source/utils/gzip/primos/ci.opts b/Build/source/utils/gzip/primos/ci.opts deleted file mode 100644 index bb4f9b3a087..00000000000 --- a/Build/source/utils/gzip/primos/ci.opts +++ /dev/null @@ -1,6 +0,0 @@ --define PRIMOS --include *>PRIMOS>INCLUDE --ignoreregister --packbytes --sof - diff --git a/Build/source/utils/gzip/primos/include/errno.h b/Build/source/utils/gzip/primos/include/errno.h deleted file mode 100644 index ee891468b98..00000000000 --- a/Build/source/utils/gzip/primos/include/errno.h +++ /dev/null @@ -1,17 +0,0 @@ -/* -** errno.h -** -** Emulation of the Unix errno.h header file for PRIMOS -** -** Author: Peter Eriksson <pen@lysator.liu.se> -*/ - -#ifndef __ERRNO_H__ -#define __ERRNO_H__ - -#include <errd.h> - -#define ENOENT e$fntf - -#endif - diff --git a/Build/source/utils/gzip/primos/include/fcntl.h b/Build/source/utils/gzip/primos/include/fcntl.h deleted file mode 100644 index 9e4b1dc83d5..00000000000 --- a/Build/source/utils/gzip/primos/include/fcntl.h +++ /dev/null @@ -1,22 +0,0 @@ -/* -** fcntl.h -** -** Emulation of the Unix fcntl.h header file for PRIMOS -** -** Author: Peter Eriksson <pen@lysator.liu.se> -*/ - -#ifndef __FCNTL_H__ -#define __FCNTL_H__ - -#define O_RDONLY 0 -#define O_WRONLY 1 -#define O_RDWR 2 - -#define O_BINARY 0 -#define O_EXCL 0 -#define O_NDELAY 0 -#define O_CREAT 0 -#define O_TRUNC 0 - -#endif diff --git a/Build/source/utils/gzip/primos/include/stdlib.h b/Build/source/utils/gzip/primos/include/stdlib.h deleted file mode 100644 index 49fbfc38179..00000000000 --- a/Build/source/utils/gzip/primos/include/stdlib.h +++ /dev/null @@ -1,16 +0,0 @@ -/* -** stdlib.h -** -** Emulation of the Unix stdlib.h header file for PRIMOS -** -** Author: Peter Eriksson <pen@lysator.liu.se> -*/ - -#ifndef __STDLIB_H__ -#define __STDLIB_H__ - -extern char *malloc(); -extern char *calloc(); - -#endif - diff --git a/Build/source/utils/gzip/primos/include/sysStat.h b/Build/source/utils/gzip/primos/include/sysStat.h deleted file mode 100644 index c24d20b6070..00000000000 --- a/Build/source/utils/gzip/primos/include/sysStat.h +++ /dev/null @@ -1,92 +0,0 @@ -/* -** sys/stat.h -** -** Emulation of the Unix sys/stat.h header file for PRIMOS -** -** Author: Peter Eriksson <pen@lysator.liu.se> -*/ - -#ifndef __SYS_STAT_H__ -#define __SYS_STAT_H__ - - -#include <sys/types.h> - -struct stat { - /* First some PRIMOS standard entries */ - off_t st_size; - time_t st_mtime; - short st_type; /* Primos file type */ - short st_rwlock; /* Primos read/write lock */ - - /* Begin Unix compatibility - don't believe these entries! */ - dev_t st_dev; - ino_t st_ino; - mode_t st_mode; - short st_nlink; - uid_t st_uid; - gid_t st_gid; - dev_t st_rdev; - time_t st_atime; - time_t st_ctime; - long st_blksize; - long st_blocks; -}; - -#define _IFMT 0170000 /* type of file */ -#define _IFREG 0100000 /* regular */ -#define _IFDIR 0040000 /* directory */ - -/* Some stupid programs check if these are defined and then - believe these are supported in the OS - not so in PRIMOS ... */ -#ifndef __50SERIES -# define _IFCHR 0020000 -# define _IFBLK 0060000 -# define _IFLNK 0120000 -# define _IFSOCK 0140000 -# define _IFIFO 0010000 -#endif - -#define S_ISUID 0004000 -#define S_ISGID 0002000 -#define S_ISVTX 0001000 -#define S_IREAD 0000400 -#define S_IWRITE 0000200 -#define S_IEXEC 0000100 - -#define S_ENFMT 0002000 - -#define S_IFMT _IFMT -#define S_IFREG _IFREG -#define S_IFDIR _IFDIR -#ifndef __50SERIES -# define S_IFCHR _IFCHR -# define S_IFBLK _IFBLK -# define S_IFLNK _IFLNK -# define S_IFSOCK _IFSOCK -# define S_IFIFO _IFIFO -#endif - -#define S_IRWXU 0000700 -#define S_IRUSR 0000400 -#define S_IWUSR 0000200 -#define S_IXUSR 0000100 -#define S_IRWXG 0000070 -#define S_IRGRP 0000040 -#define S_IWGRP 0000020 -#define S_IXGRP 0000010 -#define S_IRWXO 0000007 -#define S_IROTH 0000004 -#define S_IWOTH 0000002 -#define S_IXOTH 0000001 - -#define S_ISREG(m) (((m) & _IFMT) == _IFREG) -#define S_ISDIR(m) (((m) & _IFMT) == _IFDIR) -#ifndef __50SERIES -# define S_ISBLK(m) (((m) & _IFMT) == _IFBLK) -# define S_ISCHR(m) (((m) & _IFMT) == _IFCHR) -# define S_ISFIFO(m) (((m) & _IFMT) == _IFIFO) -#endif - - -#endif diff --git a/Build/source/utils/gzip/primos/include/sysTypes.h b/Build/source/utils/gzip/primos/include/sysTypes.h deleted file mode 100644 index ec6c5b1531a..00000000000 --- a/Build/source/utils/gzip/primos/include/sysTypes.h +++ /dev/null @@ -1,25 +0,0 @@ -/* -** sys/types.h -** -** Emulation of the Unix sys/types.h header file for PRIMOS -** -** Author: Peter Eriksson <pen@lysator.liu.se> -*/ - -#ifndef __SYS_TYPES_H__ -#define __SYS_TYPES_H__ - -typedef long size_t; -typedef long time_t; - -typedef long off_t; -typedef short dev_t; -typedef short ino_t; -typedef short mode_t; -typedef short uid_t; -typedef short gid_t; - -typedef char *caddr_t; - -#endif - diff --git a/Build/source/utils/gzip/primos/primos.c b/Build/source/utils/gzip/primos/primos.c deleted file mode 100644 index c751c9a2b6d..00000000000 --- a/Build/source/utils/gzip/primos/primos.c +++ /dev/null @@ -1,122 +0,0 @@ -/* -** primos.c -** -** This file contains emulation routines for some common Unix functions -** -** Author: Peter Eriksson <pen@lysator.liu.se> -*/ - -#ifdef __50SERIES - -#include <stdio.h> -#include <fcntl.h> -#include <sys/stat.h> - - -uid_t primos_uid = 42; -gid_t primos_gid = 42; -mode_t primos_mode = 600; - -/* Dummy do-nothing routine for chmod() */ -int chmod(path, mode) - char *path; - int mode; -{ - return 0; -} - -char *getenv(var) - char *var; -{ - char buf[256]; - extern char *gvget(); - - buf[0] = '.'; - strcpy(buf+1, var); - - return gvget(buf); -} - - -unlink(path) - char *path; -{ - return delete(path); -} - -int lstat(path, buf) - char *path; - struct stat *buf; -{ - return stat(path, buf); -} - -int stat(path, buf) - char *path; - struct stat *buf; -{ - buf->st_dev = 1; - buf->st_ino = 1; - buf->st_nlink = 1; - buf->st_uid = primos_uid; - buf->st_gid = primos_gid; - buf->st_rdev = 1; - buf->st_blksize = 2048; - - buf->st_rwlock = frwlock(path); - switch (buf->st_type = ftype(path)) - { - case 0: - case 1: - /* Regular file (SAM or DAM) */ - buf->st_size = fsize(path); - buf->st_mtime = fdtm(path); - - buf->st_mode = S_IFREG|primos_mode; - break; - - case 4: - buf->st_size = 0; - buf->st_mtime = fdtm(path); - - buf->st_mode = S_IFDIR|primos_mode; - break; - - case -1: - return -1; - - default: - buf->st_mode = primos_mode; - buf->st_size = fsize(path); - buf->st_mtime = fdtm(path); - } - - buf->st_blocks = (buf->st_size-1) / buf->st_blksize + 1; - - /* Should be fixed to really fetch these values, but that - * would require calling some PRIMOS subroutines and I don't have - * a copy of the Primos Subroutine reference manuals here.. - */ - buf->st_atime = buf->st_mtime; - buf->st_ctime = buf->st_mtime; - - return 0; -} - -int fstat(fd, buf) - int fd; - struct stat *buf; -{ - char path[1025]; - - return stat(getname(fd, path), buf); -} - -int ascii2pascii(c) - int c; -{ - return (c ? (c | 0x80) : '\0'); -} - - -#endif /* __50SERIES */ diff --git a/Build/source/utils/gzip/primos/readme b/Build/source/utils/gzip/primos/readme deleted file mode 100644 index 6c9dc01c14f..00000000000 --- a/Build/source/utils/gzip/primos/readme +++ /dev/null @@ -1,27 +0,0 @@ -To build GZIP for PRIMOS you should just have to type: - - r *>primos>build - -while standing in the directory above this PRIMOS subdirectory. - -If the files in these directories looks strange, then it might be -because they are in normal ASCII. You'll need to convert them into -PASCII before you will be able to build the GZIP executable. - -You can find a simple ASCII to PASCII converter via anonymous FTP -from "ftp.lysator.liu.se" in the directory "pub/primos/run" as -the file "topascii.run". - -You can reach me at a number of places in case there are any bugs -in this port to report... - - Email: - - pen@signum.se Signum is a company giving support for - Free Software. Call/Mail us if you're - interrested! (Phone: +46-13-21-46-00) - - pen@lysator.liu.se Lysator is a computer society at the - Linkoping University in Sweden. - -Peter Eriksson, 25 May 1993 diff --git a/Build/source/utils/gzip/revision.h b/Build/source/utils/gzip/revision.h deleted file mode 100644 index f99b65f9bbd..00000000000 --- a/Build/source/utils/gzip/revision.h +++ /dev/null @@ -1,16 +0,0 @@ -/* revision.h -- define the version number - * Copyright (C) 1992-1993 Jean-loup Gailly. - * This is free software; you can redistribute it and/or modify it under the - * terms of the GNU General Public License, see the file COPYING. - */ - -#define VERSION "1.2.4" -#define PATCHLEVEL 0 -#define REVDATE "18 Aug 93" - -/* This version does not support compression into old compress format: */ -#ifdef LZW -# undef LZW -#endif - -/* $Id: revision.h,v 0.25 1993/06/24 08:29:52 jloup Exp $ */ diff --git a/Build/source/utils/gzip/sample/add.c b/Build/source/utils/gzip/sample/add.c deleted file mode 100644 index 0058d9e39c4..00000000000 --- a/Build/source/utils/gzip/sample/add.c +++ /dev/null @@ -1,57 +0,0 @@ -/* add.c not copyrighted (n) 1993 by Mark Adler */ -/* version 1.1 11 Jun 1993 */ - -/* This filter reverses the effect of the sub filter. It requires no - arguments, since sub puts the information necessary for extraction - in the stream. See sub.c for what the filtering is and what it's - good for. */ - -#include <stdio.h> - -#define MAGIC1 'S' /* sub data */ -#define MAGIC2 26 /* ^Z */ -#define MAX_DIST 16384 - -char a[MAX_DIST]; /* last byte buffer for up to MAX_DIST differences */ - -int main() -{ - int n; /* number of differences */ - int i; /* difference counter */ - int c; /* byte from input */ - - /* check magic word */ - if (getchar() != MAGIC1 || getchar() != MAGIC2) - { - fputs("add: input stream not made by sub\n", stderr); - exit(1); - } - - /* get number of differences from data */ - if ((n = getchar()) == EOF || (i = getchar()) == EOF) { - fputs("add: unexpected end of file\n", stderr); - exit(1); - } - n += (i<<8); - if (n <= 0 || n > MAX_DIST) { - fprintf(stderr, "add: incorrect distance %d\n", n); - exit(1); - } - - /* initialize last byte */ - i = n; - do { - a[--i] = 0; - } while (i); - - /* read differenced data and restore original */ - while ((c = getchar()) != EOF) - { - c = (a[i++] += c) & 0xff; /* restore data, save last byte */ - putchar(c); /* write original */ - if (i == n) /* cycle on n differences */ - i = 0; - } - exit(0); - return 0; /* avoid warning */ -} diff --git a/Build/source/utils/gzip/sample/makecrc.c b/Build/source/utils/gzip/sample/makecrc.c deleted file mode 100644 index 2b60f476e6a..00000000000 --- a/Build/source/utils/gzip/sample/makecrc.c +++ /dev/null @@ -1,63 +0,0 @@ -/* Not copyrighted 1990 Mark Adler */ - -#ifndef lint -static char rcsid[] = "$Id: makecrc.c,v 0.6 1993/05/28 07:42:59 jloup Exp $"; -#endif - -#include <stdio.h> - -main() -/* - Generate a table for a byte-wise 32-bit CRC calculation on the polynomial: - x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1. - - Polynomials over GF(2) are represented in binary, one bit per coefficient, - with the lowest powers in the most significant bit. Then adding polynomials - is just exclusive-or, and multiplying a polynomial by x is a right shift by - one. If we call the above polynomial p, and represent a byte as the - polynomial q, also with the lowest power in the most significant bit (so the - byte 0xb1 is the polynomial x^7+x^3+x+1), then the CRC is (q*x^32) mod p, - where a mod b means the remainder after dividing a by b. - - This calculation is done using the shift-register method of multiplying and - taking the remainder. The register is initialized to zero, and for each - incoming bit, x^32 is added mod p to the register if the bit is a one (where - x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by - x (which is shifting right by one and adding x^32 mod p if the bit shifted - out is a one). We start with the highest power (least significant bit) of - q and repeat for all eight bits of q. - - The table is simply the CRC of all possible eight bit values. This is all - the information needed to generate CRC's on data a byte at a time for all - combinations of CRC register values and incoming bytes. The table is - written to stdout as 256 long hexadecimal values in C language format. -*/ -{ - unsigned long c; /* crc shift register */ - unsigned long e; /* polynomial exclusive-or pattern */ - int i; /* counter for all possible eight bit values */ - int k; /* byte being shifted into crc apparatus */ - - /* terms of polynomial defining this crc (except x^32): */ - static int p[] = {0,1,2,4,5,7,8,10,11,12,16,22,23,26}; - - /* Make exclusive-or pattern from polynomial (0xedb88320) */ - e = 0; - for (i = 0; i < sizeof(p)/sizeof(int); i++) - e |= 1L << (31 - p[i]); - - /* Compute and print table of CRC's, five per line */ - printf(" 0x00000000L"); - for (i = 1; i < 256; i++) - { - c = i; - /* The idea to initialize the register with the byte instead of - * zero was stolen from Haruhiko Okumura's ar002 - */ - for (k = 8; k; k--) - c = c & 1 ? (c >> 1) ^ e : c >> 1; - printf(i % 5 ? ", 0x%08lxL" : ",\n 0x%08lxL", c); - } - putchar('\n'); - return 0; -} diff --git a/Build/source/utils/gzip/sample/sub.c b/Build/source/utils/gzip/sample/sub.c deleted file mode 100644 index ec57ca4f232..00000000000 --- a/Build/source/utils/gzip/sample/sub.c +++ /dev/null @@ -1,88 +0,0 @@ -/* sub.c not copyrighted (n) 1993 by Mark Adler */ -/* version 1.1 11 Jun 1993 */ - -/* sub is a simple filter to preprocess a data file before compression. - It can increase compression for data whose points tend to be close to - the last point. The output is the difference of successive bytes of - the input. The add filter is used to undo what sub does. This could - be used on 8-bit sound or graphics data. - - sub can also take an argument to apply this to interleaved sets of - bytes. For example, if the data are 16-bit sound samples, then you - can use "sub 2" to take differences on the low-byte stream and the - high-byte stream. (This gives nearly the same effect as subtracting - the 16-bit values, but avoids the complexities of endianess of the - data.) The concept extends to RGB image data (sub 3), 16-bit stereo - data (sub 4), floating point data (sub 4 or sub 8), etc. - - add takes no options, since the number of interleaved byte streams - is put in the first two bytes of the output stream for add to use - (in little-endian format). - - Examples: - - sub < graph.vga | gzip -9 > graph.vga.sgz - sub < phone.snd | gzip -9 > phone.snd.sgz - sub 2 < audio.snd | gzip -9 > audio.snd.sgz - sub 3 < picture.rgb | gzip -9 > picture.rgb.sgz - sub 4 < stereo.snd | gzip -9 > stereo.snd.sgz - sub 8 < double.data | gzip -9 > double.data.sgz - - To expand, use the reverse operation, as in: - - gunzip < double.data.sgz | add > double.data -*/ - -#include <stdio.h> - -#define MAGIC1 'S' /* sub data */ -#define MAGIC2 26 /* ^Z */ -#define MAX_DIST 16384 - -char a[MAX_DIST]; /* last byte buffer for up to MAX_DIST differences */ - -int main(argc, argv) - int argc; - char **argv; -{ - int n = 1; /* number of differences */ - int i; /* difference counter */ - int c; /* byte from input */ - int atoi(); /* (avoid including stdlib for portability) */ - - /* process arguments */ - if (argc > 2) - { - fputs("sub: only one argument needed--# of differences\n", stderr); - exit(1); - } - if (argc > 1) - n = atoi(argv[1]); - - if (n < 0) n = -n; /* tolerate "sub -2" */ - if (n == 0 || n > MAX_DIST) { - fputs("sub: incorrect distance\n", stderr); - exit(1); - } - - /* initialize last byte */ - i = n; - do { - a[--i] = 0; - } while (i); - - /* write differenced data */ - putchar(MAGIC1); putchar(MAGIC2); /* magic word for add */ - putchar(n & 0xff); /* so add knows what to do */ - putchar((n>>8) & 0xff); - - while ((c = getchar()) != EOF) - { - putchar((c - a[i]) & 0xff); /* write difference */ - a[i++] = c; /* save last byte */ - if (i == n) /* cycle on n differences */ - i = 0; - } - exit(0); - return 0; /* avoid warning */ -} diff --git a/Build/source/utils/gzip/sample/zfile b/Build/source/utils/gzip/sample/zfile deleted file mode 100644 index 6b4514ccb30..00000000000 --- a/Build/source/utils/gzip/sample/zfile +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/sh - -if test $# = 0; then - echo 'zfile: file(1) for programs which may be compressed with gzexe' - echo usage: `basename $0` files... - exit 1 -fi - -tmp=/tmp/gz$$ - -for i do - if test ! -f "$i" ; then - echo `basename $0`: $i not a file - res=1 - continue - fi - skip=18 - if sed -e 1d -e 2q "$i" | grep "^skip=[0-9]*$" >/dev/null; then - eval `sed -e 1d -e 2q "$i"` - fi - if tail +$skip "$i" | gzip --list >/dev/null 2>&1; then - tail +$skip "$i" | gzip -cd | dd count=1 >$tmp 2>/dev/null - file $tmp | sed "s|^$tmp|$i|" - else - file "$i" - fi - rm -f $tmp -done diff --git a/Build/source/utils/gzip/sample/zread.c b/Build/source/utils/gzip/sample/zread.c deleted file mode 100644 index 3163d42a558..00000000000 --- a/Build/source/utils/gzip/sample/zread.c +++ /dev/null @@ -1,53 +0,0 @@ -#include <stdio.h> - -/* Trivial example of reading a gzip'ed file or gzip'ed standard input - * using stdio functions fread(), getc(), etc... fseek() is not supported. - * Modify according to your needs. You can easily construct the symmetric - * zwrite program. - * - * Usage: zread [file[.gz]] - * This programs assumes that gzip is somewhere in your path. - */ -int main(argc, argv) - int argc; - char **argv; -{ - FILE *infile; - char cmd[256]; - char buf[BUFSIZ]; - int n; - - if (argc < 1 || argc > 2) { - fprintf(stderr, "usage: %s [file[.gz]]\n", argv[0]); - exit(1); - } - strcpy(cmd, "gzip -dc "); /* use "gzip -c" for zwrite */ - if (argc == 2) { - strncat(cmd, argv[1], sizeof(cmd)-strlen(cmd)); - } - infile = popen(cmd, "r"); /* use "w" for zwrite */ - if (infile == NULL) { - fprintf(stderr, "%s: popen('%s', 'r') failed\n", argv[0], cmd); - exit(1); - } - /* Read one byte using getc: */ - n = getc(infile); - if (n == EOF) { - pclose(infile); - exit(0); - } - putchar(n); - - /* Read the rest using fread: */ - for (;;) { - n = fread(buf, 1, BUFSIZ, infile); - if (n <= 0) break; - fwrite(buf, 1, n, stdout); - } - if (pclose(infile) != 0) { - fprintf(stderr, "%s: pclose failed\n", argv[0]); - exit(1); - } - exit(0); - return 0; /* just to make compiler happy */ -} diff --git a/Build/source/utils/gzip/sample/ztouch b/Build/source/utils/gzip/sample/ztouch deleted file mode 100644 index e408e2bc50b..00000000000 --- a/Build/source/utils/gzip/sample/ztouch +++ /dev/null @@ -1,15 +0,0 @@ -#! /usr/local/bin/perl -# Set the time stamp of a gzip'ed file from that stored in the file. -# usage: ztouch files... - -foreach $file (@ARGV) { - open (FILE, $file); - read (FILE, $_, 8); - ($magic, $method, $flags, $time) = unpack ("A2C2V", $_); - if ($magic eq "\037\213") { - utime ($time, $time, $file); - } - else { - warn "$file is not compressed with gzip!\n"; - } -} diff --git a/Build/source/utils/gzip/tailor.h b/Build/source/utils/gzip/tailor.h deleted file mode 100644 index e6dff4771a3..00000000000 --- a/Build/source/utils/gzip/tailor.h +++ /dev/null @@ -1,342 +0,0 @@ -/* tailor.h -- target dependent definitions - * Copyright (C) 1992-1993 Jean-loup Gailly. - * This is free software; you can redistribute it and/or modify it under the - * terms of the GNU General Public License, see the file COPYING. - */ - -/* The target dependent definitions should be defined here only. - * The target dependent functions should be defined in tailor.c. - */ - -/* $Id: tailor.h,v 0.18 1993/06/14 19:32:20 jloup Exp $ */ - -#if defined(__MSDOS__) && !defined(MSDOS) -# define MSDOS -#endif - -#if defined(__OS2__) && !defined(OS2) -# define OS2 -#endif - -#if defined(OS2) && defined(MSDOS) /* MS C under OS/2 */ -# undef MSDOS -#endif - -#ifdef MSDOS -# ifdef __GNUC__ - /* DJGPP version 1.09+ on MS-DOS. - * The DJGPP 1.09 stat() function must be upgraded before gzip will - * fully work. - * No need for DIRENT, since <unistd.h> defines POSIX_SOURCE which - * implies DIRENT. - */ -# define near -# else -# define MAXSEG_64K -# ifdef __TURBOC__ -# define NO_OFF_T -# ifdef __BORLANDC__ -# define DIRENT -# else -# define NO_UTIME -# endif -# else /* MSC */ -# define HAVE_SYS_UTIME_H -# define NO_UTIME_H -# endif -# endif -# define PATH_SEP2 '\\' -# define PATH_SEP3 ':' -# define MAX_PATH_LEN 128 -# define NO_MULTIPLE_DOTS -# define MAX_EXT_CHARS 3 -# define Z_SUFFIX "z" -# define NO_CHOWN -# define PROTO -# define STDC_HEADERS -# define NO_SIZE_CHECK -# define casemap(c) tolow(c) /* Force file names to lower case */ -# include <io.h> -# define OS_CODE 0x00 -# define SET_BINARY_MODE(fd) setmode(fd, O_BINARY) -# if !defined(NO_ASM) && !defined(ASMV) -# define ASMV -# endif -#else -# define near -#endif - -#ifdef OS2 -# define PATH_SEP2 '\\' -# define PATH_SEP3 ':' -# define MAX_PATH_LEN 260 -# ifdef OS2FAT -# define NO_MULTIPLE_DOTS -# define MAX_EXT_CHARS 3 -# define Z_SUFFIX "z" -# define casemap(c) tolow(c) -# endif -# define NO_CHOWN -# define PROTO -# define STDC_HEADERS -# include <io.h> -# define OS_CODE 0x06 -# define SET_BINARY_MODE(fd) setmode(fd, O_BINARY) -# ifdef _MSC_VER -# define HAVE_SYS_UTIME_H -# define NO_UTIME_H -# define MAXSEG_64K -# undef near -# define near _near -# endif -# ifdef __EMX__ -# define HAVE_SYS_UTIME_H -# define NO_UTIME_H -# define DIRENT -# define EXPAND(argc,argv) \ - {_response(&argc, &argv); _wildcard(&argc, &argv);} -# endif -# ifdef __BORLANDC__ -# define DIRENT -# endif -# ifdef __ZTC__ -# define NO_DIR -# define NO_UTIME_H -# include <dos.h> -# define EXPAND(argc,argv) \ - {response_expand(&argc, &argv);} -# endif -#endif - -#ifdef WIN32 /* Windows NT */ -# ifdef FPTEX -# include <win32lib.h> -# undef ERROR -# define HAVE_SYS_UTIME_H -# define NO_UTIME_H -# define PATH_SEP2 '\\' -# define PATH_SEP3 ':' -# define MAX_PATH_LEN 260 -# define NO_CHOWN -# define PROTO -# define STDC_HEADERS -# define SET_BINARY_MODE(fd) setmode(fd, O_BINARY) -# else -# define HAVE_SYS_UTIME_H -# define NO_UTIME_H -# define PATH_SEP2 '\\' -# define PATH_SEP3 ':' -# define MAX_PATH_LEN 260 -# define NO_CHOWN -# define PROTO -# define STDC_HEADERS -# define SET_BINARY_MODE(fd) setmode(fd, O_BINARY) -# include <io.h> -# include <malloc.h> -# ifdef NTFAT -# define NO_MULTIPLE_DOTS -# define MAX_EXT_CHARS 3 -# define Z_SUFFIX "z" -# define casemap(c) tolow(c) /* Force file names to lower case */ -# endif -# endif -# define OS_CODE 0x0b -#endif - -#ifdef MSDOS -# ifdef __TURBOC__ -# include <alloc.h> -# define DYN_ALLOC - /* Turbo C 2.0 does not accept static allocations of large arrays */ - void * fcalloc (unsigned items, unsigned size); - void fcfree (void *ptr); -# else /* MSC */ -# include <malloc.h> -# define fcalloc(nitems,itemsize) halloc((long)(nitems),(itemsize)) -# define fcfree(ptr) hfree(ptr) -# endif -#else -# ifdef MAXSEG_64K -# define fcalloc(items,size) calloc((items),(size)) -# else -# define fcalloc(items,size) malloc((size_t)(items)*(size_t)(size)) -# endif -# define fcfree(ptr) free(ptr) -#endif - -#if defined(VAXC) || defined(VMS) -# define PATH_SEP ']' -# define PATH_SEP2 ':' -# define SUFFIX_SEP ';' -# define NO_MULTIPLE_DOTS -# define Z_SUFFIX "-gz" -# define RECORD_IO 1 -# define casemap(c) tolow(c) -# define OS_CODE 0x02 -# define OPTIONS_VAR "GZIP_OPT" -# define STDC_HEADERS -# define NO_UTIME -# define EXPAND(argc,argv) vms_expand_args(&argc,&argv); -# include <file.h> -# define unlink delete -# ifdef VAXC -# define NO_FCNTL_H -# include <unixio.h> -# endif -#endif - -#ifdef AMIGA -# define PATH_SEP2 ':' -# define STDC_HEADERS -# define OS_CODE 0x01 -# define ASMV -# ifdef __GNUC__ -# define DIRENT -# define HAVE_UNISTD_H -# else /* SASC */ -# define NO_STDIN_FSTAT -# define SYSDIR -# define NO_SYMLINK -# define NO_CHOWN -# define NO_FCNTL_H -# include <fcntl.h> /* for read() and write() */ -# define direct dirent - extern void _expand_args(int *argc, char ***argv); -# define EXPAND(argc,argv) _expand_args(&argc,&argv); -# undef O_BINARY /* disable useless --ascii option */ -# endif -#endif - -#if defined(ATARI) || defined(atarist) -# ifndef STDC_HEADERS -# define STDC_HEADERS -# define HAVE_UNISTD_H -# define DIRENT -# endif -# define ASMV -# define OS_CODE 0x05 -# ifdef TOSFS -# define PATH_SEP2 '\\' -# define PATH_SEP3 ':' -# define MAX_PATH_LEN 128 -# define NO_MULTIPLE_DOTS -# define MAX_EXT_CHARS 3 -# define Z_SUFFIX "z" -# define NO_CHOWN -# define casemap(c) tolow(c) /* Force file names to lower case */ -# define NO_SYMLINK -# endif -#endif - -#ifdef MACOS -# define PATH_SEP ':' -# define DYN_ALLOC -# define PROTO -# define NO_STDIN_FSTAT -# define NO_CHOWN -# define NO_UTIME -# define chmod(file, mode) (0) -# define OPEN(name, flags, mode) open(name, flags) -# define OS_CODE 0x07 -# ifdef MPW -# define isatty(fd) ((fd) <= 2) -# endif -#endif - -#ifdef __50SERIES /* Prime/PRIMOS */ -# define PATH_SEP '>' -# define STDC_HEADERS -# define NO_MEMORY_H -# define NO_UTIME_H -# define NO_UTIME -# define NO_CHOWN -# define NO_STDIN_FSTAT -# define NO_SIZE_CHECK -# define NO_SYMLINK -# define RECORD_IO 1 -# define casemap(c) tolow(c) /* Force file names to lower case */ -# define put_char(c) put_byte((c) & 0x7F) -# define get_char(c) ascii2pascii(get_byte()) -# define OS_CODE 0x0F /* temporary, subject to change */ -# ifdef SIGTERM -# undef SIGTERM /* We don't want a signal handler for SIGTERM */ -# endif -#endif - -#if defined(pyr) && !defined(NOMEMCPY) /* Pyramid */ -# define NOMEMCPY /* problem with overlapping copies */ -#endif - -#ifdef TOPS20 -# define OS_CODE 0x0a -#endif - -#ifndef unix -# define NO_ST_INO /* don't rely on inode numbers */ -#endif - - - /* Common defaults */ - -#ifndef OS_CODE -# define OS_CODE 0x03 /* assume Unix */ -#endif - -#ifndef PATH_SEP -# define PATH_SEP '/' -#endif - -#ifndef casemap -# define casemap(c) (c) -#endif - -#ifndef OPTIONS_VAR -# define OPTIONS_VAR "GZIP" -#endif - -#ifndef Z_SUFFIX -# define Z_SUFFIX ".gz" -#endif - -#ifdef MAX_EXT_CHARS -# define MAX_SUFFIX MAX_EXT_CHARS -#else -# define MAX_SUFFIX 30 -#endif - -#ifndef MAKE_LEGAL_NAME -# ifdef NO_MULTIPLE_DOTS -# define MAKE_LEGAL_NAME(name) make_simple_name(name) -# else -# define MAKE_LEGAL_NAME(name) -# endif -#endif - -#ifndef MIN_PART -# define MIN_PART 3 - /* keep at least MIN_PART chars between dots in a file name. */ -#endif - -#ifndef EXPAND -# define EXPAND(argc,argv) -#endif - -#ifndef RECORD_IO -# define RECORD_IO 0 -#endif - -#ifndef SET_BINARY_MODE -# define SET_BINARY_MODE(fd) -#endif - -#ifndef OPEN -# define OPEN(name, flags, mode) open(name, flags, mode) -#endif - -#ifndef get_char -# define get_char() get_byte() -#endif - -#ifndef put_char -# define put_char(c) put_byte(c) -#endif diff --git a/Build/source/utils/gzip/trees.c b/Build/source/utils/gzip/trees.c deleted file mode 100644 index db3b4b700ae..00000000000 --- a/Build/source/utils/gzip/trees.c +++ /dev/null @@ -1,1075 +0,0 @@ -/* trees.c -- output deflated data using Huffman coding - * Copyright (C) 1992-1993 Jean-loup Gailly - * This is free software; you can redistribute it and/or modify it under the - * terms of the GNU General Public License, see the file COPYING. - */ - -/* - * PURPOSE - * - * Encode various sets of source values using variable-length - * binary code trees. - * - * DISCUSSION - * - * The PKZIP "deflation" process uses several Huffman trees. The more - * common source values are represented by shorter bit sequences. - * - * Each code tree is stored in the ZIP file in a compressed form - * which is itself a Huffman encoding of the lengths of - * all the code strings (in ascending order by source values). - * The actual code strings are reconstructed from the lengths in - * the UNZIP process, as described in the "application note" - * (APPNOTE.TXT) distributed as part of PKWARE's PKZIP program. - * - * REFERENCES - * - * Lynch, Thomas J. - * Data Compression: Techniques and Applications, pp. 53-55. - * Lifetime Learning Publications, 1985. ISBN 0-534-03418-7. - * - * Storer, James A. - * Data Compression: Methods and Theory, pp. 49-50. - * Computer Science Press, 1988. ISBN 0-7167-8156-5. - * - * Sedgewick, R. - * Algorithms, p290. - * Addison-Wesley, 1983. ISBN 0-201-06672-6. - * - * INTERFACE - * - * void ct_init (ush *attr, int *methodp) - * Allocate the match buffer, initialize the various tables and save - * the location of the internal file attribute (ascii/binary) and - * method (DEFLATE/STORE) - * - * void ct_tally (int dist, int lc); - * Save the match info and tally the frequency counts. - * - * long flush_block (char *buf, ulg stored_len, int eof) - * Determine the best encoding for the current block: dynamic trees, - * static trees or store, and output the encoded block to the zip - * file. Returns the total compressed length for the file so far. - * - */ - -#include <ctype.h> - -#include "tailor.h" -#include "gzip.h" - -#ifdef RCSID -static char rcsid[] = "$Id: trees.c,v 0.12 1993/06/10 13:27:54 jloup Exp $"; -#endif - -/* =========================================================================== - * Constants - */ - -#define MAX_BITS 15 -/* All codes must not exceed MAX_BITS bits */ - -#define MAX_BL_BITS 7 -/* Bit length codes must not exceed MAX_BL_BITS bits */ - -#define LENGTH_CODES 29 -/* number of length codes, not counting the special END_BLOCK code */ - -#define LITERALS 256 -/* number of literal bytes 0..255 */ - -#define END_BLOCK 256 -/* end of block literal code */ - -#define L_CODES (LITERALS+1+LENGTH_CODES) -/* number of Literal or Length codes, including the END_BLOCK code */ - -#define D_CODES 30 -/* number of distance codes */ - -#define BL_CODES 19 -/* number of codes used to transfer the bit lengths */ - - -local int near extra_lbits[LENGTH_CODES] /* extra bits for each length code */ - = {0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0}; - -local int near extra_dbits[D_CODES] /* extra bits for each distance code */ - = {0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13}; - -local int near extra_blbits[BL_CODES]/* extra bits for each bit length code */ - = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7}; - -#define STORED_BLOCK 0 -#define STATIC_TREES 1 -#define DYN_TREES 2 -/* The three kinds of block type */ - -#ifndef LIT_BUFSIZE -# ifdef SMALL_MEM -# define LIT_BUFSIZE 0x2000 -# else -# ifdef MEDIUM_MEM -# define LIT_BUFSIZE 0x4000 -# else -# define LIT_BUFSIZE 0x8000 -# endif -# endif -#endif -#ifndef DIST_BUFSIZE -# define DIST_BUFSIZE LIT_BUFSIZE -#endif -/* Sizes of match buffers for literals/lengths and distances. There are - * 4 reasons for limiting LIT_BUFSIZE to 64K: - * - frequencies can be kept in 16 bit counters - * - if compression is not successful for the first block, all input data is - * still in the window so we can still emit a stored block even when input - * comes from standard input. (This can also be done for all blocks if - * LIT_BUFSIZE is not greater than 32K.) - * - if compression is not successful for a file smaller than 64K, we can - * even emit a stored file instead of a stored block (saving 5 bytes). - * - creating new Huffman trees less frequently may not provide fast - * adaptation to changes in the input data statistics. (Take for - * example a binary file with poorly compressible code followed by - * a highly compressible string table.) Smaller buffer sizes give - * fast adaptation but have of course the overhead of transmitting trees - * more frequently. - * - I can't count above 4 - * The current code is general and allows DIST_BUFSIZE < LIT_BUFSIZE (to save - * memory at the expense of compression). Some optimizations would be possible - * if we rely on DIST_BUFSIZE == LIT_BUFSIZE. - */ -#if LIT_BUFSIZE > INBUFSIZ - error cannot overlay l_buf and inbuf -#endif - -#define REP_3_6 16 -/* repeat previous bit length 3-6 times (2 bits of repeat count) */ - -#define REPZ_3_10 17 -/* repeat a zero length 3-10 times (3 bits of repeat count) */ - -#define REPZ_11_138 18 -/* repeat a zero length 11-138 times (7 bits of repeat count) */ - -/* =========================================================================== - * Local data - */ - -/* Data structure describing a single value and its code string. */ -typedef struct ct_data { - union { - ush freq; /* frequency count */ - ush code; /* bit string */ - } fc; - union { - ush dad; /* father node in Huffman tree */ - ush len; /* length of bit string */ - } dl; -} ct_data; - -#define Freq fc.freq -#define Code fc.code -#define Dad dl.dad -#define Len dl.len - -#define HEAP_SIZE (2*L_CODES+1) -/* maximum heap size */ - -local ct_data near dyn_ltree[HEAP_SIZE]; /* literal and length tree */ -local ct_data near dyn_dtree[2*D_CODES+1]; /* distance tree */ - -local ct_data near static_ltree[L_CODES+2]; -/* The static literal tree. Since the bit lengths are imposed, there is no - * need for the L_CODES extra codes used during heap construction. However - * The codes 286 and 287 are needed to build a canonical tree (see ct_init - * below). - */ - -local ct_data near static_dtree[D_CODES]; -/* The static distance tree. (Actually a trivial tree since all codes use - * 5 bits.) - */ - -local ct_data near bl_tree[2*BL_CODES+1]; -/* Huffman tree for the bit lengths */ - -typedef struct tree_desc { - ct_data near *dyn_tree; /* the dynamic tree */ - ct_data near *static_tree; /* corresponding static tree or NULL */ - int near *extra_bits; /* extra bits for each code or NULL */ - int extra_base; /* base index for extra_bits */ - int elems; /* max number of elements in the tree */ - int max_length; /* max bit length for the codes */ - int max_code; /* largest code with non zero frequency */ -} tree_desc; - -local tree_desc near l_desc = -{dyn_ltree, static_ltree, extra_lbits, LITERALS+1, L_CODES, MAX_BITS, 0}; - -local tree_desc near d_desc = -{dyn_dtree, static_dtree, extra_dbits, 0, D_CODES, MAX_BITS, 0}; - -local tree_desc near bl_desc = -{bl_tree, (ct_data near *)0, extra_blbits, 0, BL_CODES, MAX_BL_BITS, 0}; - - -local ush near bl_count[MAX_BITS+1]; -/* number of codes at each bit length for an optimal tree */ - -local uch near bl_order[BL_CODES] - = {16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15}; -/* The lengths of the bit length codes are sent in order of decreasing - * probability, to avoid transmitting the lengths for unused bit length codes. - */ - -local int near heap[2*L_CODES+1]; /* heap used to build the Huffman trees */ -local int heap_len; /* number of elements in the heap */ -local int heap_max; /* element of largest frequency */ -/* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used. - * The same heap array is used to build all trees. - */ - -local uch near depth[2*L_CODES+1]; -/* Depth of each subtree used as tie breaker for trees of equal frequency */ - -local uch length_code[MAX_MATCH-MIN_MATCH+1]; -/* length code for each normalized match length (0 == MIN_MATCH) */ - -local uch dist_code[512]; -/* distance codes. The first 256 values correspond to the distances - * 3 .. 258, the last 256 values correspond to the top 8 bits of - * the 15 bit distances. - */ - -local int near base_length[LENGTH_CODES]; -/* First normalized length for each code (0 = MIN_MATCH) */ - -local int near base_dist[D_CODES]; -/* First normalized distance for each code (0 = distance of 1) */ - -#define l_buf inbuf -/* DECLARE(uch, l_buf, LIT_BUFSIZE); buffer for literals or lengths */ - -/* DECLARE(ush, d_buf, DIST_BUFSIZE); buffer for distances */ - -local uch near flag_buf[(LIT_BUFSIZE/8)]; -/* flag_buf is a bit array distinguishing literals from lengths in - * l_buf, thus indicating the presence or absence of a distance. - */ - -local unsigned last_lit; /* running index in l_buf */ -local unsigned last_dist; /* running index in d_buf */ -local unsigned last_flags; /* running index in flag_buf */ -local uch flags; /* current flags not yet saved in flag_buf */ -local uch flag_bit; /* current bit used in flags */ -/* bits are filled in flags starting at bit 0 (least significant). - * Note: these flags are overkill in the current code since we don't - * take advantage of DIST_BUFSIZE == LIT_BUFSIZE. - */ - -local ulg opt_len; /* bit length of current block with optimal trees */ -local ulg static_len; /* bit length of current block with static trees */ - -local ulg compressed_len; /* total bit length of compressed file */ - -local ulg input_len; /* total byte length of input file */ -/* input_len is for debugging only since we can get it by other means. */ - -ush *file_type; /* pointer to UNKNOWN, BINARY or ASCII */ -int *file_method; /* pointer to DEFLATE or STORE */ - -#ifdef DEBUG -extern ulg bits_sent; /* bit length of the compressed data */ -extern long isize; /* byte length of input file */ -#endif - -extern long block_start; /* window offset of current block */ -extern unsigned near strstart; /* window offset of current string */ - -/* =========================================================================== - * Local (static) routines in this file. - */ - -local void init_block OF((void)); -local void pqdownheap OF((ct_data near *tree, int k)); -local void gen_bitlen OF((tree_desc near *desc)); -local void gen_codes OF((ct_data near *tree, int max_code)); -local void build_tree OF((tree_desc near *desc)); -local void scan_tree OF((ct_data near *tree, int max_code)); -local void send_tree OF((ct_data near *tree, int max_code)); -local int build_bl_tree OF((void)); -local void send_all_trees OF((int lcodes, int dcodes, int blcodes)); -local void compress_block OF((ct_data near *ltree, ct_data near *dtree)); -local void set_file_type OF((void)); - - -#ifndef DEBUG -# define send_code(c, tree) send_bits(tree[c].Code, tree[c].Len) - /* Send a code of the given tree. c and tree must not have side effects */ - -#else /* DEBUG */ -# define send_code(c, tree) \ - { if (verbose>1) fprintf(stderr,"\ncd %3d ",(c)); \ - send_bits(tree[c].Code, tree[c].Len); } -#endif - -#define d_code(dist) \ - ((dist) < 256 ? dist_code[dist] : dist_code[256+((dist)>>7)]) -/* Mapping from a distance to a distance code. dist is the distance - 1 and - * must not have side effects. dist_code[256] and dist_code[257] are never - * used. - */ - -#define MAX(a,b) (a >= b ? a : b) -/* the arguments must not have side effects */ - -/* =========================================================================== - * Allocate the match buffer, initialize the various tables and save the - * location of the internal file attribute (ascii/binary) and method - * (DEFLATE/STORE). - */ -void ct_init(attr, methodp) - ush *attr; /* pointer to internal file attribute */ - int *methodp; /* pointer to compression method */ -{ - int n; /* iterates over tree elements */ - int bits; /* bit counter */ - int length; /* length value */ - int code; /* code value */ - int dist; /* distance index */ - - file_type = attr; - file_method = methodp; - compressed_len = input_len = 0L; - - if (static_dtree[0].Len != 0) return; /* ct_init already called */ - - /* Initialize the mapping length (0..255) -> length code (0..28) */ - length = 0; - for (code = 0; code < LENGTH_CODES-1; code++) { - base_length[code] = length; - for (n = 0; n < (1<<extra_lbits[code]); n++) { - length_code[length++] = (uch)code; - } - } - Assert (length == 256, "ct_init: length != 256"); - /* Note that the length 255 (match length 258) can be represented - * in two different ways: code 284 + 5 bits or code 285, so we - * overwrite length_code[255] to use the best encoding: - */ - length_code[length-1] = (uch)code; - - /* Initialize the mapping dist (0..32K) -> dist code (0..29) */ - dist = 0; - for (code = 0 ; code < 16; code++) { - base_dist[code] = dist; - for (n = 0; n < (1<<extra_dbits[code]); n++) { - dist_code[dist++] = (uch)code; - } - } - Assert (dist == 256, "ct_init: dist != 256"); - dist >>= 7; /* from now on, all distances are divided by 128 */ - for ( ; code < D_CODES; code++) { - base_dist[code] = dist << 7; - for (n = 0; n < (1<<(extra_dbits[code]-7)); n++) { - dist_code[256 + dist++] = (uch)code; - } - } - Assert (dist == 256, "ct_init: 256+dist != 512"); - - /* Construct the codes of the static literal tree */ - for (bits = 0; bits <= MAX_BITS; bits++) bl_count[bits] = 0; - n = 0; - while (n <= 143) static_ltree[n++].Len = 8, bl_count[8]++; - while (n <= 255) static_ltree[n++].Len = 9, bl_count[9]++; - while (n <= 279) static_ltree[n++].Len = 7, bl_count[7]++; - while (n <= 287) static_ltree[n++].Len = 8, bl_count[8]++; - /* Codes 286 and 287 do not exist, but we must include them in the - * tree construction to get a canonical Huffman tree (longest code - * all ones) - */ - gen_codes((ct_data near *)static_ltree, L_CODES+1); - - /* The static distance tree is trivial: */ - for (n = 0; n < D_CODES; n++) { - static_dtree[n].Len = 5; - static_dtree[n].Code = bi_reverse(n, 5); - } - - /* Initialize the first block of the first file: */ - init_block(); -} - -/* =========================================================================== - * Initialize a new block. - */ -local void init_block() -{ - int n; /* iterates over tree elements */ - - /* Initialize the trees. */ - for (n = 0; n < L_CODES; n++) dyn_ltree[n].Freq = 0; - for (n = 0; n < D_CODES; n++) dyn_dtree[n].Freq = 0; - for (n = 0; n < BL_CODES; n++) bl_tree[n].Freq = 0; - - dyn_ltree[END_BLOCK].Freq = 1; - opt_len = static_len = 0L; - last_lit = last_dist = last_flags = 0; - flags = 0; flag_bit = 1; -} - -#define SMALLEST 1 -/* Index within the heap array of least frequent node in the Huffman tree */ - - -/* =========================================================================== - * Remove the smallest element from the heap and recreate the heap with - * one less element. Updates heap and heap_len. - */ -#define pqremove(tree, top) \ -{\ - top = heap[SMALLEST]; \ - heap[SMALLEST] = heap[heap_len--]; \ - pqdownheap(tree, SMALLEST); \ -} - -/* =========================================================================== - * Compares to subtrees, using the tree depth as tie breaker when - * the subtrees have equal frequency. This minimizes the worst case length. - */ -#define smaller(tree, n, m) \ - (tree[n].Freq < tree[m].Freq || \ - (tree[n].Freq == tree[m].Freq && depth[n] <= depth[m])) - -/* =========================================================================== - * Restore the heap property by moving down the tree starting at node k, - * exchanging a node with the smallest of its two sons if necessary, stopping - * when the heap property is re-established (each father smaller than its - * two sons). - */ -local void pqdownheap(tree, k) - ct_data near *tree; /* the tree to restore */ - int k; /* node to move down */ -{ - int v = heap[k]; - int j = k << 1; /* left son of k */ - while (j <= heap_len) { - /* Set j to the smallest of the two sons: */ - if (j < heap_len && smaller(tree, heap[j+1], heap[j])) j++; - - /* Exit if v is smaller than both sons */ - if (smaller(tree, v, heap[j])) break; - - /* Exchange v with the smallest son */ - heap[k] = heap[j]; k = j; - - /* And continue down the tree, setting j to the left son of k */ - j <<= 1; - } - heap[k] = v; -} - -/* =========================================================================== - * Compute the optimal bit lengths for a tree and update the total bit length - * for the current block. - * IN assertion: the fields freq and dad are set, heap[heap_max] and - * above are the tree nodes sorted by increasing frequency. - * OUT assertions: the field len is set to the optimal bit length, the - * array bl_count contains the frequencies for each bit length. - * The length opt_len is updated; static_len is also updated if stree is - * not null. - */ -local void gen_bitlen(desc) - tree_desc near *desc; /* the tree descriptor */ -{ - ct_data near *tree = desc->dyn_tree; - int near *extra = desc->extra_bits; - int base = desc->extra_base; - int max_code = desc->max_code; - int max_length = desc->max_length; - ct_data near *stree = desc->static_tree; - int h; /* heap index */ - int n, m; /* iterate over the tree elements */ - int bits; /* bit length */ - int xbits; /* extra bits */ - ush f; /* frequency */ - int overflow = 0; /* number of elements with bit length too large */ - - for (bits = 0; bits <= MAX_BITS; bits++) bl_count[bits] = 0; - - /* In a first pass, compute the optimal bit lengths (which may - * overflow in the case of the bit length tree). - */ - tree[heap[heap_max]].Len = 0; /* root of the heap */ - - for (h = heap_max+1; h < HEAP_SIZE; h++) { - n = heap[h]; - bits = tree[tree[n].Dad].Len + 1; - if (bits > max_length) bits = max_length, overflow++; - tree[n].Len = (ush)bits; - /* We overwrite tree[n].Dad which is no longer needed */ - - if (n > max_code) continue; /* not a leaf node */ - - bl_count[bits]++; - xbits = 0; - if (n >= base) xbits = extra[n-base]; - f = tree[n].Freq; - opt_len += (ulg)f * (bits + xbits); - if (stree) static_len += (ulg)f * (stree[n].Len + xbits); - } - if (overflow == 0) return; - - Trace((stderr,"\nbit length overflow\n")); - /* This happens for example on obj2 and pic of the Calgary corpus */ - - /* Find the first bit length which could increase: */ - do { - bits = max_length-1; - while (bl_count[bits] == 0) bits--; - bl_count[bits]--; /* move one leaf down the tree */ - bl_count[bits+1] += 2; /* move one overflow item as its brother */ - bl_count[max_length]--; - /* The brother of the overflow item also moves one step up, - * but this does not affect bl_count[max_length] - */ - overflow -= 2; - } while (overflow > 0); - - /* Now recompute all bit lengths, scanning in increasing frequency. - * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all - * lengths instead of fixing only the wrong ones. This idea is taken - * from 'ar' written by Haruhiko Okumura.) - */ - for (bits = max_length; bits != 0; bits--) { - n = bl_count[bits]; - while (n != 0) { - m = heap[--h]; - if (m > max_code) continue; - if (tree[m].Len != (unsigned) bits) { - Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits)); - opt_len += ((long)bits-(long)tree[m].Len)*(long)tree[m].Freq; - tree[m].Len = (ush)bits; - } - n--; - } - } -} - -/* =========================================================================== - * Generate the codes for a given tree and bit counts (which need not be - * optimal). - * IN assertion: the array bl_count contains the bit length statistics for - * the given tree and the field len is set for all tree elements. - * OUT assertion: the field code is set for all tree elements of non - * zero code length. - */ -local void gen_codes (tree, max_code) - ct_data near *tree; /* the tree to decorate */ - int max_code; /* largest code with non zero frequency */ -{ - ush next_code[MAX_BITS+1]; /* next code value for each bit length */ - ush code = 0; /* running code value */ - int bits; /* bit index */ - int n; /* code index */ - - /* The distribution counts are first used to generate the code values - * without bit reversal. - */ - for (bits = 1; bits <= MAX_BITS; bits++) { - next_code[bits] = code = (code + bl_count[bits-1]) << 1; - } - /* Check that the bit counts in bl_count are consistent. The last code - * must be all ones. - */ - Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1, - "inconsistent bit counts"); - Tracev((stderr,"\ngen_codes: max_code %d ", max_code)); - - for (n = 0; n <= max_code; n++) { - int len = tree[n].Len; - if (len == 0) continue; - /* Now reverse the bits */ - tree[n].Code = bi_reverse(next_code[len]++, len); - - Tracec(tree != static_ltree, (stderr,"\nn %3d %c l %2d c %4x (%x) ", - n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1)); - } -} - -/* =========================================================================== - * Construct one Huffman tree and assigns the code bit strings and lengths. - * Update the total bit length for the current block. - * IN assertion: the field freq is set for all tree elements. - * OUT assertions: the fields len and code are set to the optimal bit length - * and corresponding code. The length opt_len is updated; static_len is - * also updated if stree is not null. The field max_code is set. - */ -local void build_tree(desc) - tree_desc near *desc; /* the tree descriptor */ -{ - ct_data near *tree = desc->dyn_tree; - ct_data near *stree = desc->static_tree; - int elems = desc->elems; - int n, m; /* iterate over heap elements */ - int max_code = -1; /* largest code with non zero frequency */ - int node = elems; /* next internal node of the tree */ - - /* Construct the initial heap, with least frequent element in - * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1]. - * heap[0] is not used. - */ - heap_len = 0, heap_max = HEAP_SIZE; - - for (n = 0; n < elems; n++) { - if (tree[n].Freq != 0) { - heap[++heap_len] = max_code = n; - depth[n] = 0; - } else { - tree[n].Len = 0; - } - } - - /* The pkzip format requires that at least one distance code exists, - * and that at least one bit should be sent even if there is only one - * possible code. So to avoid special checks later on we force at least - * two codes of non zero frequency. - */ - while (heap_len < 2) { - int new = heap[++heap_len] = (max_code < 2 ? ++max_code : 0); - tree[new].Freq = 1; - depth[new] = 0; - opt_len--; if (stree) static_len -= stree[new].Len; - /* new is 0 or 1 so it does not have extra bits */ - } - desc->max_code = max_code; - - /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree, - * establish sub-heaps of increasing lengths: - */ - for (n = heap_len/2; n >= 1; n--) pqdownheap(tree, n); - - /* Construct the Huffman tree by repeatedly combining the least two - * frequent nodes. - */ - do { - pqremove(tree, n); /* n = node of least frequency */ - m = heap[SMALLEST]; /* m = node of next least frequency */ - - heap[--heap_max] = n; /* keep the nodes sorted by frequency */ - heap[--heap_max] = m; - - /* Create a new node father of n and m */ - tree[node].Freq = tree[n].Freq + tree[m].Freq; - depth[node] = (uch) (MAX(depth[n], depth[m]) + 1); - tree[n].Dad = tree[m].Dad = (ush)node; -#ifdef DUMP_BL_TREE - if (tree == bl_tree) { - fprintf(stderr,"\nnode %d(%d), sons %d(%d) %d(%d)", - node, tree[node].Freq, n, tree[n].Freq, m, tree[m].Freq); - } -#endif - /* and insert the new node in the heap */ - heap[SMALLEST] = node++; - pqdownheap(tree, SMALLEST); - - } while (heap_len >= 2); - - heap[--heap_max] = heap[SMALLEST]; - - /* At this point, the fields freq and dad are set. We can now - * generate the bit lengths. - */ - gen_bitlen((tree_desc near *)desc); - - /* The field len is now set, we can generate the bit codes */ - gen_codes ((ct_data near *)tree, max_code); -} - -/* =========================================================================== - * Scan a literal or distance tree to determine the frequencies of the codes - * in the bit length tree. Updates opt_len to take into account the repeat - * counts. (The contribution of the bit length codes will be added later - * during the construction of bl_tree.) - */ -local void scan_tree (tree, max_code) - ct_data near *tree; /* the tree to be scanned */ - int max_code; /* and its largest code of non zero frequency */ -{ - int n; /* iterates over all tree elements */ - int prevlen = -1; /* last emitted length */ - int curlen; /* length of current code */ - int nextlen = tree[0].Len; /* length of next code */ - int count = 0; /* repeat count of the current code */ - int max_count = 7; /* max repeat count */ - int min_count = 4; /* min repeat count */ - - if (nextlen == 0) max_count = 138, min_count = 3; - tree[max_code+1].Len = (ush)0xffff; /* guard */ - - for (n = 0; n <= max_code; n++) { - curlen = nextlen; nextlen = tree[n+1].Len; - if (++count < max_count && curlen == nextlen) { - continue; - } else if (count < min_count) { - bl_tree[curlen].Freq += count; - } else if (curlen != 0) { - if (curlen != prevlen) bl_tree[curlen].Freq++; - bl_tree[REP_3_6].Freq++; - } else if (count <= 10) { - bl_tree[REPZ_3_10].Freq++; - } else { - bl_tree[REPZ_11_138].Freq++; - } - count = 0; prevlen = curlen; - if (nextlen == 0) { - max_count = 138, min_count = 3; - } else if (curlen == nextlen) { - max_count = 6, min_count = 3; - } else { - max_count = 7, min_count = 4; - } - } -} - -/* =========================================================================== - * Send a literal or distance tree in compressed form, using the codes in - * bl_tree. - */ -local void send_tree (tree, max_code) - ct_data near *tree; /* the tree to be scanned */ - int max_code; /* and its largest code of non zero frequency */ -{ - int n; /* iterates over all tree elements */ - int prevlen = -1; /* last emitted length */ - int curlen; /* length of current code */ - int nextlen = tree[0].Len; /* length of next code */ - int count = 0; /* repeat count of the current code */ - int max_count = 7; /* max repeat count */ - int min_count = 4; /* min repeat count */ - - /* tree[max_code+1].Len = -1; */ /* guard already set */ - if (nextlen == 0) max_count = 138, min_count = 3; - - for (n = 0; n <= max_code; n++) { - curlen = nextlen; nextlen = tree[n+1].Len; - if (++count < max_count && curlen == nextlen) { - continue; - } else if (count < min_count) { - do { send_code(curlen, bl_tree); } while (--count != 0); - - } else if (curlen != 0) { - if (curlen != prevlen) { - send_code(curlen, bl_tree); count--; - } - Assert(count >= 3 && count <= 6, " 3_6?"); - send_code(REP_3_6, bl_tree); send_bits(count-3, 2); - - } else if (count <= 10) { - send_code(REPZ_3_10, bl_tree); send_bits(count-3, 3); - - } else { - send_code(REPZ_11_138, bl_tree); send_bits(count-11, 7); - } - count = 0; prevlen = curlen; - if (nextlen == 0) { - max_count = 138, min_count = 3; - } else if (curlen == nextlen) { - max_count = 6, min_count = 3; - } else { - max_count = 7, min_count = 4; - } - } -} - -/* =========================================================================== - * Construct the Huffman tree for the bit lengths and return the index in - * bl_order of the last bit length code to send. - */ -local int build_bl_tree() -{ - int max_blindex; /* index of last bit length code of non zero freq */ - - /* Determine the bit length frequencies for literal and distance trees */ - scan_tree((ct_data near *)dyn_ltree, l_desc.max_code); - scan_tree((ct_data near *)dyn_dtree, d_desc.max_code); - - /* Build the bit length tree: */ - build_tree((tree_desc near *)(&bl_desc)); - /* opt_len now includes the length of the tree representations, except - * the lengths of the bit lengths codes and the 5+5+4 bits for the counts. - */ - - /* Determine the number of bit length codes to send. The pkzip format - * requires that at least 4 bit length codes be sent. (appnote.txt says - * 3 but the actual value used is 4.) - */ - for (max_blindex = BL_CODES-1; max_blindex >= 3; max_blindex--) { - if (bl_tree[bl_order[max_blindex]].Len != 0) break; - } - /* Update opt_len to include the bit length tree and counts */ - opt_len += 3*(max_blindex+1) + 5+5+4; - Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld", opt_len, static_len)); - - return max_blindex; -} - -/* =========================================================================== - * Send the header for a block using dynamic Huffman trees: the counts, the - * lengths of the bit length codes, the literal tree and the distance tree. - * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4. - */ -local void send_all_trees(lcodes, dcodes, blcodes) - int lcodes, dcodes, blcodes; /* number of codes for each tree */ -{ - int rank; /* index in bl_order */ - - Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes"); - Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES, - "too many codes"); - Tracev((stderr, "\nbl counts: ")); - send_bits(lcodes-257, 5); /* not +255 as stated in appnote.txt */ - send_bits(dcodes-1, 5); - send_bits(blcodes-4, 4); /* not -3 as stated in appnote.txt */ - for (rank = 0; rank < blcodes; rank++) { - Tracev((stderr, "\nbl code %2d ", bl_order[rank])); - send_bits(bl_tree[bl_order[rank]].Len, 3); - } - Tracev((stderr, "\nbl tree: sent %ld", bits_sent)); - - send_tree((ct_data near *)dyn_ltree, lcodes-1); /* send the literal tree */ - Tracev((stderr, "\nlit tree: sent %ld", bits_sent)); - - send_tree((ct_data near *)dyn_dtree, dcodes-1); /* send the distance tree */ - Tracev((stderr, "\ndist tree: sent %ld", bits_sent)); -} - -/* =========================================================================== - * Determine the best encoding for the current block: dynamic trees, static - * trees or store, and output the encoded block to the zip file. This function - * returns the total compressed length for the file so far. - */ -ulg flush_block(buf, stored_len, eof) - char *buf; /* input block, or NULL if too old */ - ulg stored_len; /* length of input block */ - int eof; /* true if this is the last block for a file */ -{ - ulg opt_lenb, static_lenb; /* opt_len and static_len in bytes */ - int max_blindex; /* index of last bit length code of non zero freq */ - - flag_buf[last_flags] = flags; /* Save the flags for the last 8 items */ - - /* Check if the file is ascii or binary */ - if (*file_type == (ush)UNKNOWN) set_file_type(); - - /* Construct the literal and distance trees */ - build_tree((tree_desc near *)(&l_desc)); - Tracev((stderr, "\nlit data: dyn %ld, stat %ld", opt_len, static_len)); - - build_tree((tree_desc near *)(&d_desc)); - Tracev((stderr, "\ndist data: dyn %ld, stat %ld", opt_len, static_len)); - /* At this point, opt_len and static_len are the total bit lengths of - * the compressed block data, excluding the tree representations. - */ - - /* Build the bit length tree for the above two trees, and get the index - * in bl_order of the last bit length code to send. - */ - max_blindex = build_bl_tree(); - - /* Determine the best encoding. Compute first the block length in bytes */ - opt_lenb = (opt_len+3+7)>>3; - static_lenb = (static_len+3+7)>>3; - input_len += stored_len; /* for debugging only */ - - Trace((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u dist %u ", - opt_lenb, opt_len, static_lenb, static_len, stored_len, - last_lit, last_dist)); - - if (static_lenb <= opt_lenb) opt_lenb = static_lenb; - - /* If compression failed and this is the first and last block, - * and if the zip file can be seeked (to rewrite the local header), - * the whole file is transformed into a stored file: - */ -#ifdef FORCE_METHOD - if (level == 1 && eof && compressed_len == 0L) { /* force stored file */ -#else - if (stored_len <= opt_lenb && eof && compressed_len == 0L && seekable()) { -#endif - /* Since LIT_BUFSIZE <= 2*WSIZE, the input data must be there: */ - if (buf == (char*)0) error ("block vanished"); - - copy_block(buf, (unsigned)stored_len, 0); /* without header */ - compressed_len = stored_len << 3; - *file_method = STORED; - -#ifdef FORCE_METHOD - } else if (level == 2 && buf != (char*)0) { /* force stored block */ -#else - } else if (stored_len+4 <= opt_lenb && buf != (char*)0) { - /* 4: two words for the lengths */ -#endif - /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE. - * Otherwise we can't have processed more than WSIZE input bytes since - * the last block flush, because compression would have been - * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to - * transform a block into a stored block. - */ - send_bits((STORED_BLOCK<<1)+eof, 3); /* send block type */ - compressed_len = (compressed_len + 3 + 7) & ~7L; - compressed_len += (stored_len + 4) << 3; - - copy_block(buf, (unsigned)stored_len, 1); /* with header */ - -#ifdef FORCE_METHOD - } else if (level == 3) { /* force static trees */ -#else - } else if (static_lenb == opt_lenb) { -#endif - send_bits((STATIC_TREES<<1)+eof, 3); - compress_block((ct_data near *)static_ltree, (ct_data near *)static_dtree); - compressed_len += 3 + static_len; - } else { - send_bits((DYN_TREES<<1)+eof, 3); - send_all_trees(l_desc.max_code+1, d_desc.max_code+1, max_blindex+1); - compress_block((ct_data near *)dyn_ltree, (ct_data near *)dyn_dtree); - compressed_len += 3 + opt_len; - } - Assert (compressed_len == bits_sent, "bad compressed size"); - init_block(); - - if (eof) { - Assert (input_len == isize, "bad input size"); - bi_windup(); - compressed_len += 7; /* align on byte boundary */ - } - Tracev((stderr,"\ncomprlen %lu(%lu) ", compressed_len>>3, - compressed_len-7*eof)); - - return compressed_len >> 3; -} - -/* =========================================================================== - * Save the match info and tally the frequency counts. Return true if - * the current block must be flushed. - */ -int ct_tally (dist, lc) - int dist; /* distance of matched string */ - int lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */ -{ - l_buf[last_lit++] = (uch)lc; - if (dist == 0) { - /* lc is the unmatched char */ - dyn_ltree[lc].Freq++; - } else { - /* Here, lc is the match length - MIN_MATCH */ - dist--; /* dist = match distance - 1 */ - Assert((ush)dist < (ush)MAX_DIST && - (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) && - (ush)d_code(dist) < (ush)D_CODES, "ct_tally: bad match"); - - dyn_ltree[length_code[lc]+LITERALS+1].Freq++; - dyn_dtree[d_code(dist)].Freq++; - - d_buf[last_dist++] = (ush)dist; - flags |= flag_bit; - } - flag_bit <<= 1; - - /* Output the flags if they fill a byte: */ - if ((last_lit & 7) == 0) { - flag_buf[last_flags++] = flags; - flags = 0, flag_bit = 1; - } - /* Try to guess if it is profitable to stop the current block here */ - if (level > 2 && (last_lit & 0xfff) == 0) { - /* Compute an upper bound for the compressed length */ - ulg out_length = (ulg)last_lit*8L; - ulg in_length = (ulg)strstart-block_start; - int dcode; - for (dcode = 0; dcode < D_CODES; dcode++) { - out_length += (ulg)dyn_dtree[dcode].Freq*(5L+extra_dbits[dcode]); - } - out_length >>= 3; - Trace((stderr,"\nlast_lit %u, last_dist %u, in %ld, out ~%ld(%ld%%) ", - last_lit, last_dist, in_length, out_length, - 100L - out_length*100L/in_length)); - if (last_dist < last_lit/2 && out_length < in_length/2) return 1; - } - return (last_lit == LIT_BUFSIZE-1 || last_dist == DIST_BUFSIZE); - /* We avoid equality with LIT_BUFSIZE because of wraparound at 64K - * on 16 bit machines and because stored blocks are restricted to - * 64K-1 bytes. - */ -} - -/* =========================================================================== - * Send the block data compressed using the given Huffman trees - */ -local void compress_block(ltree, dtree) - ct_data near *ltree; /* literal tree */ - ct_data near *dtree; /* distance tree */ -{ - unsigned dist; /* distance of matched string */ - int lc; /* match length or unmatched char (if dist == 0) */ - unsigned lx = 0; /* running index in l_buf */ - unsigned dx = 0; /* running index in d_buf */ - unsigned fx = 0; /* running index in flag_buf */ - uch flag = 0; /* current flags */ - unsigned code; /* the code to send */ - int extra; /* number of extra bits to send */ - - if (last_lit != 0) do { - if ((lx & 7) == 0) flag = flag_buf[fx++]; - lc = l_buf[lx++]; - if ((flag & 1) == 0) { - send_code(lc, ltree); /* send a literal byte */ - Tracecv(isgraph(lc), (stderr," '%c' ", lc)); - } else { - /* Here, lc is the match length - MIN_MATCH */ - code = length_code[lc]; - send_code(code+LITERALS+1, ltree); /* send the length code */ - extra = extra_lbits[code]; - if (extra != 0) { - lc -= base_length[code]; - send_bits(lc, extra); /* send the extra length bits */ - } - dist = d_buf[dx++]; - /* Here, dist is the match distance - 1 */ - code = d_code(dist); - Assert (code < D_CODES, "bad d_code"); - - send_code(code, dtree); /* send the distance code */ - extra = extra_dbits[code]; - if (extra != 0) { - dist -= base_dist[code]; - send_bits(dist, extra); /* send the extra distance bits */ - } - } /* literal or match pair ? */ - flag >>= 1; - } while (lx < last_lit); - - send_code(END_BLOCK, ltree); -} - -/* =========================================================================== - * Set the file type to ASCII or BINARY, using a crude approximation: - * binary if more than 20% of the bytes are <= 6 or >= 128, ascii otherwise. - * IN assertion: the fields freq of dyn_ltree are set and the total of all - * frequencies does not exceed 64K (to fit in an int on 16 bit machines). - */ -local void set_file_type() -{ - int n = 0; - unsigned ascii_freq = 0; - unsigned bin_freq = 0; - while (n < 7) bin_freq += dyn_ltree[n++].Freq; - while (n < 128) ascii_freq += dyn_ltree[n++].Freq; - while (n < LITERALS) bin_freq += dyn_ltree[n++].Freq; - *file_type = bin_freq > (ascii_freq >> 2) ? BINARY : ASCII; - if (*file_type == BINARY && translate_eol) { - warn("-l used on binary file", ""); - } -} diff --git a/Build/source/utils/gzip/unlzh.c b/Build/source/utils/gzip/unlzh.c deleted file mode 100644 index e318e5ed941..00000000000 --- a/Build/source/utils/gzip/unlzh.c +++ /dev/null @@ -1,401 +0,0 @@ -/* unlzh.c -- decompress files in SCO compress -H (LZH) format. - * The code in this file is directly derived from the public domain 'ar002' - * written by Haruhiko Okumura. - */ - -#ifdef RCSID -static char rcsid[] = "$Id: unlzh.c,v 1.2 1993/06/24 10:59:01 jloup Exp $"; -#endif - -#include <stdio.h> - -#include "tailor.h" -#include "gzip.h" -#include "lzw.h" /* just for consistency checking */ - -/* decode.c */ - -local unsigned decode OF((unsigned count, uch buffer[])); -local void decode_start OF((void)); - -/* huf.c */ -local void huf_decode_start OF((void)); -local unsigned decode_c OF((void)); -local unsigned decode_p OF((void)); -local void read_pt_len OF((int nn, int nbit, int i_special)); -local void read_c_len OF((void)); - -/* io.c */ -local void fillbuf OF((int n)); -local unsigned getbits OF((int n)); -local void init_getbits OF((void)); - -/* maketbl.c */ - -local void make_table OF((int nchar, uch bitlen[], - int tablebits, ush table[])); - - -#define DICBIT 13 /* 12(-lh4-) or 13(-lh5-) */ -#define DICSIZ ((unsigned) 1 << DICBIT) - -#ifndef CHAR_BIT -# define CHAR_BIT 8 -#endif - -#ifndef UCHAR_MAX -# define UCHAR_MAX 255 -#endif - -#define BITBUFSIZ (CHAR_BIT * 2 * sizeof(char)) -/* Do not use CHAR_BIT * sizeof(bitbuf), does not work on machines - * for which short is not on 16 bits (Cray). - */ - -/* encode.c and decode.c */ - -#define MAXMATCH 256 /* formerly F (not more than UCHAR_MAX + 1) */ -#define THRESHOLD 3 /* choose optimal value */ - -/* huf.c */ - -#define NC (UCHAR_MAX + MAXMATCH + 2 - THRESHOLD) - /* alphabet = {0, 1, 2, ..., NC - 1} */ -#define CBIT 9 /* $\lfloor \log_2 NC \rfloor + 1$ */ -#define CODE_BIT 16 /* codeword length */ - -#define NP (DICBIT + 1) -#define NT (CODE_BIT + 3) -#define PBIT 4 /* smallest integer such that (1U << PBIT) > NP */ -#define TBIT 5 /* smallest integer such that (1U << TBIT) > NT */ -#if NT > NP -# define NPT NT -#else -# define NPT NP -#endif - -/* local ush left[2 * NC - 1]; */ -/* local ush right[2 * NC - 1]; */ -#define left prev -#define right head -#if NC > (1<<(BITS-2)) - error cannot overlay left+right and prev -#endif - -/* local uch c_len[NC]; */ -#define c_len outbuf -#if NC > OUTBUFSIZ - error cannot overlay c_len and outbuf -#endif - -local uch pt_len[NPT]; -local unsigned blocksize; -local ush pt_table[256]; - -/* local ush c_table[4096]; */ -#define c_table d_buf -#if (DIST_BUFSIZE-1) < 4095 - error cannot overlay c_table and d_buf -#endif - -/*********************************************************** - io.c -- input/output -***********************************************************/ - -local ush bitbuf; -local unsigned subbitbuf; -local int bitcount; - -local void fillbuf(n) /* Shift bitbuf n bits left, read n bits */ - int n; -{ - bitbuf <<= n; - while (n > bitcount) { - bitbuf |= subbitbuf << (n -= bitcount); - subbitbuf = (unsigned)try_byte(); - if ((int)subbitbuf == EOF) subbitbuf = 0; - bitcount = CHAR_BIT; - } - bitbuf |= subbitbuf >> (bitcount -= n); -} - -local unsigned getbits(n) - int n; -{ - unsigned x; - - x = bitbuf >> (BITBUFSIZ - n); fillbuf(n); - return x; -} - -local void init_getbits() -{ - bitbuf = 0; subbitbuf = 0; bitcount = 0; - fillbuf(BITBUFSIZ); -} - -/*********************************************************** - maketbl.c -- make table for decoding -***********************************************************/ - -local void make_table(nchar, bitlen, tablebits, table) - int nchar; - uch bitlen[]; - int tablebits; - ush table[]; -{ - ush count[17], weight[17], start[18], *p; - unsigned i, k, len, ch, jutbits, avail, nextcode, mask; - - for (i = 1; i <= 16; i++) count[i] = 0; - for (i = 0; i < (unsigned)nchar; i++) count[bitlen[i]]++; - - start[1] = 0; - for (i = 1; i <= 16; i++) - start[i + 1] = start[i] + (count[i] << (16 - i)); - if ((start[17] & 0xffff) != 0) - error("Bad table\n"); - - jutbits = 16 - tablebits; - for (i = 1; i <= (unsigned)tablebits; i++) { - start[i] >>= jutbits; - weight[i] = (unsigned) 1 << (tablebits - i); - } - while (i <= 16) { - weight[i] = (unsigned) 1 << (16 - i); - i++; - } - - i = start[tablebits + 1] >> jutbits; - if (i != 0) { - k = 1 << tablebits; - while (i != k) table[i++] = 0; - } - - avail = nchar; - mask = (unsigned) 1 << (15 - tablebits); - for (ch = 0; ch < (unsigned)nchar; ch++) { - if ((len = bitlen[ch]) == 0) continue; - nextcode = start[len] + weight[len]; - if (len <= (unsigned)tablebits) { - for (i = start[len]; i < nextcode; i++) table[i] = ch; - } else { - k = start[len]; - p = &table[k >> jutbits]; - i = len - tablebits; - while (i != 0) { - if (*p == 0) { - right[avail] = left[avail] = 0; - *p = avail++; - } - if (k & mask) p = &right[*p]; - else p = &left[*p]; - k <<= 1; i--; - } - *p = ch; - } - start[len] = nextcode; - } -} - -/*********************************************************** - huf.c -- static Huffman -***********************************************************/ - -local void read_pt_len(nn, nbit, i_special) - int nn; - int nbit; - int i_special; -{ - int i, c, n; - unsigned mask; - - n = getbits(nbit); - if (n == 0) { - c = getbits(nbit); - for (i = 0; i < nn; i++) pt_len[i] = 0; - for (i = 0; i < 256; i++) pt_table[i] = c; - } else { - i = 0; - while (i < n) { - c = bitbuf >> (BITBUFSIZ - 3); - if (c == 7) { - mask = (unsigned) 1 << (BITBUFSIZ - 1 - 3); - while (mask & bitbuf) { mask >>= 1; c++; } - } - fillbuf((c < 7) ? 3 : c - 3); - pt_len[i++] = c; - if (i == i_special) { - c = getbits(2); - while (--c >= 0) pt_len[i++] = 0; - } - } - while (i < nn) pt_len[i++] = 0; - make_table(nn, pt_len, 8, pt_table); - } -} - -local void read_c_len() -{ - int i, c, n; - unsigned mask; - - n = getbits(CBIT); - if (n == 0) { - c = getbits(CBIT); - for (i = 0; i < NC; i++) c_len[i] = 0; - for (i = 0; i < 4096; i++) c_table[i] = c; - } else { - i = 0; - while (i < n) { - c = pt_table[bitbuf >> (BITBUFSIZ - 8)]; - if (c >= NT) { - mask = (unsigned) 1 << (BITBUFSIZ - 1 - 8); - do { - if (bitbuf & mask) c = right[c]; - else c = left [c]; - mask >>= 1; - } while (c >= NT); - } - fillbuf((int) pt_len[c]); - if (c <= 2) { - if (c == 0) c = 1; - else if (c == 1) c = getbits(4) + 3; - else c = getbits(CBIT) + 20; - while (--c >= 0) c_len[i++] = 0; - } else c_len[i++] = c - 2; - } - while (i < NC) c_len[i++] = 0; - make_table(NC, c_len, 12, c_table); - } -} - -local unsigned decode_c() -{ - unsigned j, mask; - - if (blocksize == 0) { - blocksize = getbits(16); - if (blocksize == 0) { - return NC; /* end of file */ - } - read_pt_len(NT, TBIT, 3); - read_c_len(); - read_pt_len(NP, PBIT, -1); - } - blocksize--; - j = c_table[bitbuf >> (BITBUFSIZ - 12)]; - if (j >= NC) { - mask = (unsigned) 1 << (BITBUFSIZ - 1 - 12); - do { - if (bitbuf & mask) j = right[j]; - else j = left [j]; - mask >>= 1; - } while (j >= NC); - } - fillbuf((int) c_len[j]); - return j; -} - -local unsigned decode_p() -{ - unsigned j, mask; - - j = pt_table[bitbuf >> (BITBUFSIZ - 8)]; - if (j >= NP) { - mask = (unsigned) 1 << (BITBUFSIZ - 1 - 8); - do { - if (bitbuf & mask) j = right[j]; - else j = left [j]; - mask >>= 1; - } while (j >= NP); - } - fillbuf((int) pt_len[j]); - if (j != 0) j = ((unsigned) 1 << (j - 1)) + getbits((int) (j - 1)); - return j; -} - -local void huf_decode_start() -{ - init_getbits(); blocksize = 0; -} - -/*********************************************************** - decode.c -***********************************************************/ - -local int j; /* remaining bytes to copy */ -local int done; /* set at end of input */ - -local void decode_start() -{ - huf_decode_start(); - j = 0; - done = 0; -} - -/* Decode the input and return the number of decoded bytes put in buffer - */ -local unsigned decode(count, buffer) - unsigned count; - uch buffer[]; - /* The calling function must keep the number of - bytes to be processed. This function decodes - either 'count' bytes or 'DICSIZ' bytes, whichever - is smaller, into the array 'buffer[]' of size - 'DICSIZ' or more. - Call decode_start() once for each new file - before calling this function. - */ -{ - local unsigned i; - unsigned r, c; - - r = 0; - while (--j >= 0) { - buffer[r] = buffer[i]; - i = (i + 1) & (DICSIZ - 1); - if (++r == count) return r; - } - for ( ; ; ) { - c = decode_c(); - if (c == NC) { - done = 1; - return r; - } - if (c <= UCHAR_MAX) { - buffer[r] = c; - if (++r == count) return r; - } else { - j = c - (UCHAR_MAX + 1 - THRESHOLD); - i = (r - decode_p() - 1) & (DICSIZ - 1); - while (--j >= 0) { - buffer[r] = buffer[i]; - i = (i + 1) & (DICSIZ - 1); - if (++r == count) return r; - } - } - } -} - - -/* =========================================================================== - * Unlzh in to out. Return OK or ERROR. - */ -int unlzh(in, out) - int in; - int out; -{ - unsigned n; - ifd = in; - ofd = out; - - decode_start(); - while (!done) { - n = decode((unsigned) DICSIZ, window); - if (!test && n > 0) { - write_buf(out, (char*)window, n); - } - } - return OK; -} diff --git a/Build/source/utils/gzip/unlzw-new.c b/Build/source/utils/gzip/unlzw-new.c deleted file mode 100644 index 15d2a313b4b..00000000000 --- a/Build/source/utils/gzip/unlzw-new.c +++ /dev/null @@ -1,377 +0,0 @@ -/* unlzw.c -- decompress files in LZW format. - * The code in this file is directly derived from the public domain 'compress' - * written by Spencer Thomas, Joe Orost, James Woods, Jim McKie, Steve Davies, - * Ken Turkowski, Dave Mack and Peter Jannesen. - * - * This is a temporary version which will be rewritten in some future version - * to accommodate in-memory decompression. - */ - -#ifdef RCSID -static char rcsid[] = "$Id: unlzw.c,v 0.15 1993/06/10 13:28:35 jloup Exp $"; -#endif - -#include <sys/types.h> - -#include "tailor.h" - -#ifdef HAVE_UNISTD_H -# include <unistd.h> -#endif -#ifndef NO_FCNTL_H -# include <fcntl.h> -#endif - -#include "gzip.h" -#include "lzw.h" - -typedef unsigned char char_type; -typedef long code_int; -typedef unsigned long count_int; -typedef unsigned short count_short; -typedef unsigned long cmp_code_int; - -#define MAXCODE(n) (1L << (n)) - -#ifndef REGISTERS -# define REGISTERS 2 -#endif -#define REG1 -#define REG2 -#define REG3 -#define REG4 -#define REG5 -#define REG6 -#define REG7 -#define REG8 -#define REG9 -#define REG10 -#define REG11 -#define REG12 -#define REG13 -#define REG14 -#define REG15 -#define REG16 -#if REGISTERS >= 1 -# undef REG1 -# define REG1 register -#endif -#if REGISTERS >= 2 -# undef REG2 -# define REG2 register -#endif -#if REGISTERS >= 3 -# undef REG3 -# define REG3 register -#endif -#if REGISTERS >= 4 -# undef REG4 -# define REG4 register -#endif -#if REGISTERS >= 5 -# undef REG5 -# define REG5 register -#endif -#if REGISTERS >= 6 -# undef REG6 -# define REG6 register -#endif -#if REGISTERS >= 7 -# undef REG7 -# define REG7 register -#endif -#if REGISTERS >= 8 -# undef REG8 -# define REG8 register -#endif -#if REGISTERS >= 9 -# undef REG9 -# define REG9 register -#endif -#if REGISTERS >= 10 -# undef REG10 -# define REG10 register -#endif -#if REGISTERS >= 11 -# undef REG11 -# define REG11 register -#endif -#if REGISTERS >= 12 -# undef REG12 -# define REG12 register -#endif -#if REGISTERS >= 13 -# undef REG13 -# define REG13 register -#endif -#if REGISTERS >= 14 -# undef REG14 -# define REG14 register -#endif -#if REGISTERS >= 15 -# undef REG15 -# define REG15 register -#endif -#if REGISTERS >= 16 -# undef REG16 -# define REG16 register -#endif - -#ifndef BYTEORDER -# define BYTEORDER 0000 -#endif - -#ifndef NOALLIGN -# define NOALLIGN 0 -#endif - - -union bytes { - long word; - struct { -#if BYTEORDER == 4321 - char_type b1; - char_type b2; - char_type b3; - char_type b4; -#else -#if BYTEORDER == 1234 - char_type b4; - char_type b3; - char_type b2; - char_type b1; -#else -# undef BYTEORDER - int dummy; -#endif -#endif - } bytes; -}; - -#if BYTEORDER == 4321 && NOALLIGN == 1 -# define input(b,o,c,n,m){ \ - (c) = (*(long *)(&(b)[(o)>>3])>>((o)&0x7))&(m); \ - (o) += (n); \ - } -#else -# define input(b,o,c,n,m){ \ - REG1 char_type *p = &(b)[(o)>>3]; \ - (c) = ((((long)(p[0]))|((long)(p[1])<<8)| \ - ((long)(p[2])<<16))>>((o)&0x7))&(m); \ - (o) += (n); \ - } -#endif - -#ifndef MAXSEG_64K - /* DECLARE(ush, tab_prefix, (1<<BITS)); -- prefix code */ -# define tab_prefixof(i) tab_prefix[i] -# define clear_tab_prefixof() memzero(tab_prefix, 256); -#else - /* DECLARE(ush, tab_prefix0, (1<<(BITS-1)); -- prefix for even codes */ - /* DECLARE(ush, tab_prefix1, (1<<(BITS-1)); -- prefix for odd codes */ - ush *tab_prefix[2]; -# define tab_prefixof(i) tab_prefix[(i)&1][(i)>>1] -# define clear_tab_prefixof() \ - memzero(tab_prefix0, 128), \ - memzero(tab_prefix1, 128); -#endif -#define de_stack ((char_type *)(&d_buf[DIST_BUFSIZE-1])) -#define tab_suffixof(i) tab_suffix[i] - -int block_mode = BLOCK_MODE; /* block compress mode -C compatible with 2.0 */ - -/* ============================================================================ - * Decompress in to out. This routine adapts to the codes in the - * file building the "string" table on-the-fly; requiring no table to - * be stored in the compressed file. - * IN assertions: the buffer inbuf contains already the beginning of - * the compressed data, from offsets iptr to insize-1 included. - * The magic header has already been checked and skipped. - * bytes_in and bytes_out have been initialized. - */ -int unlzw(in, out) - int in, out; /* input and output file descriptors */ -{ - REG2 char_type *stackp; - REG3 code_int code; - REG4 int finchar; - REG5 code_int oldcode; - REG6 code_int incode; - REG7 long inbits; - REG8 long posbits; - REG9 int outpos; -/* REG10 int insize; (global) */ - REG11 unsigned bitmask; - REG12 code_int free_ent; - REG13 code_int maxcode; - REG14 code_int maxmaxcode; - REG15 int n_bits; - REG16 int rsize; - -#ifdef MAXSEG_64K - tab_prefix[0] = tab_prefix0; - tab_prefix[1] = tab_prefix1; -#endif - maxbits = get_byte(); - block_mode = maxbits & BLOCK_MODE; - if ((maxbits & LZW_RESERVED) != 0) { - WARN((stderr, "\n%s: %s: warning, unknown flags 0x%x\n", - progname, ifname, maxbits & LZW_RESERVED)); - } - maxbits &= BIT_MASK; - maxmaxcode = MAXCODE(maxbits); - - if (maxbits > BITS) { - fprintf(stderr, - "\n%s: %s: compressed with %d bits, can only handle %d bits\n", - progname, ifname, maxbits, BITS); - exit_code = ERROR; - return ERROR; - } - rsize = insize; - maxcode = MAXCODE(n_bits = INIT_BITS)-1; - bitmask = (1<<n_bits)-1; - oldcode = -1; - finchar = 0; - outpos = 0; - posbits = inptr<<3; - - free_ent = ((block_mode) ? FIRST : 256); - - clear_tab_prefixof(); /* Initialize the first 256 entries in the table. */ - - for (code = 255 ; code >= 0 ; --code) { - tab_suffixof(code) = (char_type)code; - } - do { - REG1 int i; - int e; - int o; - - resetbuf: - e = insize-(o = (posbits>>3)); - - for (i = 0 ; i < e ; ++i) { - inbuf[i] = inbuf[i+o]; - } - insize = e; - posbits = 0; - - if (insize < INBUF_EXTRA) { - if ((rsize = read(in, (char*)inbuf+insize, INBUFSIZ)) == EOF) { - read_error(); - } - insize += rsize; - bytes_in += (ulg)rsize; - } - inbits = ((rsize != 0) ? ((long)insize - insize%n_bits)<<3 : - ((long)insize<<3)-(n_bits-1)); - - while (inbits > posbits) { - if (free_ent > maxcode) { - posbits = ((posbits-1) + - ((n_bits<<3)-(posbits-1+(n_bits<<3))%(n_bits<<3))); - ++n_bits; - if (n_bits == maxbits) { - maxcode = maxmaxcode; - } else { - maxcode = MAXCODE(n_bits)-1; - } - bitmask = (1<<n_bits)-1; - goto resetbuf; - } - input(inbuf,posbits,code,n_bits,bitmask); - Tracev((stderr, "%d ", code)); - - if (oldcode == -1) { - if (code >= 256) error("corrupt input."); - outbuf[outpos++] = (char_type)(finchar = (int)(oldcode=code)); - continue; - } - if (code == CLEAR && block_mode) { - clear_tab_prefixof(); - free_ent = FIRST - 1; - posbits = ((posbits-1) + - ((n_bits<<3)-(posbits-1+(n_bits<<3))%(n_bits<<3))); - maxcode = MAXCODE(n_bits = INIT_BITS)-1; - bitmask = (1<<n_bits)-1; - goto resetbuf; - } - incode = code; - stackp = de_stack; - - if (code >= free_ent) { /* Special case for KwKwK string. */ - if (code > free_ent) { -#ifdef DEBUG - char_type *p; - - posbits -= n_bits; - p = &inbuf[posbits>>3]; - fprintf(stderr, - "code:%ld free_ent:%ld n_bits:%d insize:%u\n", - code, free_ent, n_bits, insize); - fprintf(stderr, - "posbits:%ld inbuf:%02X %02X %02X %02X %02X\n", - posbits, p[-1],p[0],p[1],p[2],p[3]); -#endif - if (!test && outpos > 0) { - write_buf(out, (char*)outbuf, outpos); - bytes_out += (ulg)outpos; - } - error(to_stdout ? "corrupt input." : - "corrupt input. Use zcat to recover some data."); - } - *--stackp = (char_type)finchar; - code = oldcode; - } - - while ((cmp_code_int)code >= (cmp_code_int)256) { - /* Generate output characters in reverse order */ - *--stackp = tab_suffixof(code); - code = tab_prefixof(code); - } - *--stackp = (char_type)(finchar = tab_suffixof(code)); - - /* And put them out in forward order */ - { - REG1 int i; - - if (outpos+(i = (de_stack-stackp)) >= OUTBUFSIZ) { - do { - if (i > OUTBUFSIZ-outpos) i = OUTBUFSIZ-outpos; - - if (i > 0) { - memcpy(outbuf+outpos, stackp, i); - outpos += i; - } - if (outpos >= OUTBUFSIZ) { - if (!test) { - write_buf(out, (char*)outbuf, outpos); - bytes_out += (ulg)outpos; - } - outpos = 0; - } - stackp+= i; - } while ((i = (de_stack-stackp)) > 0); - } else { - memcpy(outbuf+outpos, stackp, i); - outpos += i; - } - } - - if ((code = free_ent) < maxmaxcode) { /* Generate the new entry. */ - - tab_prefixof(code) = (unsigned short)oldcode; - tab_suffixof(code) = (char_type)finchar; - free_ent = code+1; - } - oldcode = incode; /* Remember previous code. */ - } - } while (rsize != 0); - - if (!test && outpos > 0) { - write_buf(out, (char*)outbuf, outpos); - bytes_out += (ulg)outpos; - } - return OK; -} diff --git a/Build/source/utils/gzip/unlzw.c b/Build/source/utils/gzip/unlzw.c deleted file mode 100644 index 15d2a313b4b..00000000000 --- a/Build/source/utils/gzip/unlzw.c +++ /dev/null @@ -1,377 +0,0 @@ -/* unlzw.c -- decompress files in LZW format. - * The code in this file is directly derived from the public domain 'compress' - * written by Spencer Thomas, Joe Orost, James Woods, Jim McKie, Steve Davies, - * Ken Turkowski, Dave Mack and Peter Jannesen. - * - * This is a temporary version which will be rewritten in some future version - * to accommodate in-memory decompression. - */ - -#ifdef RCSID -static char rcsid[] = "$Id: unlzw.c,v 0.15 1993/06/10 13:28:35 jloup Exp $"; -#endif - -#include <sys/types.h> - -#include "tailor.h" - -#ifdef HAVE_UNISTD_H -# include <unistd.h> -#endif -#ifndef NO_FCNTL_H -# include <fcntl.h> -#endif - -#include "gzip.h" -#include "lzw.h" - -typedef unsigned char char_type; -typedef long code_int; -typedef unsigned long count_int; -typedef unsigned short count_short; -typedef unsigned long cmp_code_int; - -#define MAXCODE(n) (1L << (n)) - -#ifndef REGISTERS -# define REGISTERS 2 -#endif -#define REG1 -#define REG2 -#define REG3 -#define REG4 -#define REG5 -#define REG6 -#define REG7 -#define REG8 -#define REG9 -#define REG10 -#define REG11 -#define REG12 -#define REG13 -#define REG14 -#define REG15 -#define REG16 -#if REGISTERS >= 1 -# undef REG1 -# define REG1 register -#endif -#if REGISTERS >= 2 -# undef REG2 -# define REG2 register -#endif -#if REGISTERS >= 3 -# undef REG3 -# define REG3 register -#endif -#if REGISTERS >= 4 -# undef REG4 -# define REG4 register -#endif -#if REGISTERS >= 5 -# undef REG5 -# define REG5 register -#endif -#if REGISTERS >= 6 -# undef REG6 -# define REG6 register -#endif -#if REGISTERS >= 7 -# undef REG7 -# define REG7 register -#endif -#if REGISTERS >= 8 -# undef REG8 -# define REG8 register -#endif -#if REGISTERS >= 9 -# undef REG9 -# define REG9 register -#endif -#if REGISTERS >= 10 -# undef REG10 -# define REG10 register -#endif -#if REGISTERS >= 11 -# undef REG11 -# define REG11 register -#endif -#if REGISTERS >= 12 -# undef REG12 -# define REG12 register -#endif -#if REGISTERS >= 13 -# undef REG13 -# define REG13 register -#endif -#if REGISTERS >= 14 -# undef REG14 -# define REG14 register -#endif -#if REGISTERS >= 15 -# undef REG15 -# define REG15 register -#endif -#if REGISTERS >= 16 -# undef REG16 -# define REG16 register -#endif - -#ifndef BYTEORDER -# define BYTEORDER 0000 -#endif - -#ifndef NOALLIGN -# define NOALLIGN 0 -#endif - - -union bytes { - long word; - struct { -#if BYTEORDER == 4321 - char_type b1; - char_type b2; - char_type b3; - char_type b4; -#else -#if BYTEORDER == 1234 - char_type b4; - char_type b3; - char_type b2; - char_type b1; -#else -# undef BYTEORDER - int dummy; -#endif -#endif - } bytes; -}; - -#if BYTEORDER == 4321 && NOALLIGN == 1 -# define input(b,o,c,n,m){ \ - (c) = (*(long *)(&(b)[(o)>>3])>>((o)&0x7))&(m); \ - (o) += (n); \ - } -#else -# define input(b,o,c,n,m){ \ - REG1 char_type *p = &(b)[(o)>>3]; \ - (c) = ((((long)(p[0]))|((long)(p[1])<<8)| \ - ((long)(p[2])<<16))>>((o)&0x7))&(m); \ - (o) += (n); \ - } -#endif - -#ifndef MAXSEG_64K - /* DECLARE(ush, tab_prefix, (1<<BITS)); -- prefix code */ -# define tab_prefixof(i) tab_prefix[i] -# define clear_tab_prefixof() memzero(tab_prefix, 256); -#else - /* DECLARE(ush, tab_prefix0, (1<<(BITS-1)); -- prefix for even codes */ - /* DECLARE(ush, tab_prefix1, (1<<(BITS-1)); -- prefix for odd codes */ - ush *tab_prefix[2]; -# define tab_prefixof(i) tab_prefix[(i)&1][(i)>>1] -# define clear_tab_prefixof() \ - memzero(tab_prefix0, 128), \ - memzero(tab_prefix1, 128); -#endif -#define de_stack ((char_type *)(&d_buf[DIST_BUFSIZE-1])) -#define tab_suffixof(i) tab_suffix[i] - -int block_mode = BLOCK_MODE; /* block compress mode -C compatible with 2.0 */ - -/* ============================================================================ - * Decompress in to out. This routine adapts to the codes in the - * file building the "string" table on-the-fly; requiring no table to - * be stored in the compressed file. - * IN assertions: the buffer inbuf contains already the beginning of - * the compressed data, from offsets iptr to insize-1 included. - * The magic header has already been checked and skipped. - * bytes_in and bytes_out have been initialized. - */ -int unlzw(in, out) - int in, out; /* input and output file descriptors */ -{ - REG2 char_type *stackp; - REG3 code_int code; - REG4 int finchar; - REG5 code_int oldcode; - REG6 code_int incode; - REG7 long inbits; - REG8 long posbits; - REG9 int outpos; -/* REG10 int insize; (global) */ - REG11 unsigned bitmask; - REG12 code_int free_ent; - REG13 code_int maxcode; - REG14 code_int maxmaxcode; - REG15 int n_bits; - REG16 int rsize; - -#ifdef MAXSEG_64K - tab_prefix[0] = tab_prefix0; - tab_prefix[1] = tab_prefix1; -#endif - maxbits = get_byte(); - block_mode = maxbits & BLOCK_MODE; - if ((maxbits & LZW_RESERVED) != 0) { - WARN((stderr, "\n%s: %s: warning, unknown flags 0x%x\n", - progname, ifname, maxbits & LZW_RESERVED)); - } - maxbits &= BIT_MASK; - maxmaxcode = MAXCODE(maxbits); - - if (maxbits > BITS) { - fprintf(stderr, - "\n%s: %s: compressed with %d bits, can only handle %d bits\n", - progname, ifname, maxbits, BITS); - exit_code = ERROR; - return ERROR; - } - rsize = insize; - maxcode = MAXCODE(n_bits = INIT_BITS)-1; - bitmask = (1<<n_bits)-1; - oldcode = -1; - finchar = 0; - outpos = 0; - posbits = inptr<<3; - - free_ent = ((block_mode) ? FIRST : 256); - - clear_tab_prefixof(); /* Initialize the first 256 entries in the table. */ - - for (code = 255 ; code >= 0 ; --code) { - tab_suffixof(code) = (char_type)code; - } - do { - REG1 int i; - int e; - int o; - - resetbuf: - e = insize-(o = (posbits>>3)); - - for (i = 0 ; i < e ; ++i) { - inbuf[i] = inbuf[i+o]; - } - insize = e; - posbits = 0; - - if (insize < INBUF_EXTRA) { - if ((rsize = read(in, (char*)inbuf+insize, INBUFSIZ)) == EOF) { - read_error(); - } - insize += rsize; - bytes_in += (ulg)rsize; - } - inbits = ((rsize != 0) ? ((long)insize - insize%n_bits)<<3 : - ((long)insize<<3)-(n_bits-1)); - - while (inbits > posbits) { - if (free_ent > maxcode) { - posbits = ((posbits-1) + - ((n_bits<<3)-(posbits-1+(n_bits<<3))%(n_bits<<3))); - ++n_bits; - if (n_bits == maxbits) { - maxcode = maxmaxcode; - } else { - maxcode = MAXCODE(n_bits)-1; - } - bitmask = (1<<n_bits)-1; - goto resetbuf; - } - input(inbuf,posbits,code,n_bits,bitmask); - Tracev((stderr, "%d ", code)); - - if (oldcode == -1) { - if (code >= 256) error("corrupt input."); - outbuf[outpos++] = (char_type)(finchar = (int)(oldcode=code)); - continue; - } - if (code == CLEAR && block_mode) { - clear_tab_prefixof(); - free_ent = FIRST - 1; - posbits = ((posbits-1) + - ((n_bits<<3)-(posbits-1+(n_bits<<3))%(n_bits<<3))); - maxcode = MAXCODE(n_bits = INIT_BITS)-1; - bitmask = (1<<n_bits)-1; - goto resetbuf; - } - incode = code; - stackp = de_stack; - - if (code >= free_ent) { /* Special case for KwKwK string. */ - if (code > free_ent) { -#ifdef DEBUG - char_type *p; - - posbits -= n_bits; - p = &inbuf[posbits>>3]; - fprintf(stderr, - "code:%ld free_ent:%ld n_bits:%d insize:%u\n", - code, free_ent, n_bits, insize); - fprintf(stderr, - "posbits:%ld inbuf:%02X %02X %02X %02X %02X\n", - posbits, p[-1],p[0],p[1],p[2],p[3]); -#endif - if (!test && outpos > 0) { - write_buf(out, (char*)outbuf, outpos); - bytes_out += (ulg)outpos; - } - error(to_stdout ? "corrupt input." : - "corrupt input. Use zcat to recover some data."); - } - *--stackp = (char_type)finchar; - code = oldcode; - } - - while ((cmp_code_int)code >= (cmp_code_int)256) { - /* Generate output characters in reverse order */ - *--stackp = tab_suffixof(code); - code = tab_prefixof(code); - } - *--stackp = (char_type)(finchar = tab_suffixof(code)); - - /* And put them out in forward order */ - { - REG1 int i; - - if (outpos+(i = (de_stack-stackp)) >= OUTBUFSIZ) { - do { - if (i > OUTBUFSIZ-outpos) i = OUTBUFSIZ-outpos; - - if (i > 0) { - memcpy(outbuf+outpos, stackp, i); - outpos += i; - } - if (outpos >= OUTBUFSIZ) { - if (!test) { - write_buf(out, (char*)outbuf, outpos); - bytes_out += (ulg)outpos; - } - outpos = 0; - } - stackp+= i; - } while ((i = (de_stack-stackp)) > 0); - } else { - memcpy(outbuf+outpos, stackp, i); - outpos += i; - } - } - - if ((code = free_ent) < maxmaxcode) { /* Generate the new entry. */ - - tab_prefixof(code) = (unsigned short)oldcode; - tab_suffixof(code) = (char_type)finchar; - free_ent = code+1; - } - oldcode = incode; /* Remember previous code. */ - } - } while (rsize != 0); - - if (!test && outpos > 0) { - write_buf(out, (char*)outbuf, outpos); - bytes_out += (ulg)outpos; - } - return OK; -} diff --git a/Build/source/utils/gzip/unpack.c b/Build/source/utils/gzip/unpack.c deleted file mode 100644 index a00fdaefc6b..00000000000 --- a/Build/source/utils/gzip/unpack.c +++ /dev/null @@ -1,239 +0,0 @@ -/* unpack.c -- decompress files in pack format. - * Copyright (C) 1992-1993 Jean-loup Gailly - * This is free software; you can redistribute it and/or modify it under the - * terms of the GNU General Public License, see the file COPYING. - */ - -#ifdef RCSID -static char rcsid[] = "$Id: unpack.c,v 1.4 1993/06/11 19:25:36 jloup Exp $"; -#endif - -#include "tailor.h" -#include "gzip.h" -#include "crypt.h" - -#define MIN(a,b) ((a) <= (b) ? (a) : (b)) -/* The arguments must not have side effects. */ - -#define MAX_BITLEN 25 -/* Maximum length of Huffman codes. (Minor modifications to the code - * would be needed to support 32 bits codes, but pack never generates - * more than 24 bits anyway.) - */ - -#define LITERALS 256 -/* Number of literals, excluding the End of Block (EOB) code */ - -#define MAX_PEEK 12 -/* Maximum number of 'peek' bits used to optimize traversal of the - * Huffman tree. - */ - -local ulg orig_len; /* original uncompressed length */ -local int max_len; /* maximum bit length of Huffman codes */ - -local uch literal[LITERALS]; -/* The literal bytes present in the Huffman tree. The EOB code is not - * represented. - */ - -local int lit_base[MAX_BITLEN+1]; -/* All literals of a given bit length are contiguous in literal[] and - * have contiguous codes. literal[code+lit_base[len]] is the literal - * for a code of len bits. - */ - -local int leaves [MAX_BITLEN+1]; /* Number of leaves for each bit length */ -local int parents[MAX_BITLEN+1]; /* Number of parents for each bit length */ - -local int peek_bits; /* Number of peek bits currently used */ - -/* local uch prefix_len[1 << MAX_PEEK]; */ -#define prefix_len outbuf -/* For each bit pattern b of peek_bits bits, prefix_len[b] is the length - * of the Huffman code starting with a prefix of b (upper bits), or 0 - * if all codes of prefix b have more than peek_bits bits. It is not - * necessary to have a huge table (large MAX_PEEK) because most of the - * codes encountered in the input stream are short codes (by construction). - * So for most codes a single lookup will be necessary. - */ -#if (1<<MAX_PEEK) > OUTBUFSIZ - error cannot overlay prefix_len and outbuf -#endif - -local ulg bitbuf; -/* Bits are added on the low part of bitbuf and read from the high part. */ - -local int valid; /* number of valid bits in bitbuf */ -/* all bits above the last valid bit are always zero */ - -/* Set code to the next 'bits' input bits without skipping them. code - * must be the name of a simple variable and bits must not have side effects. - * IN assertions: bits <= 25 (so that we still have room for an extra byte - * when valid is only 24), and mask = (1<<bits)-1. - */ -#define look_bits(code,bits,mask) \ -{ \ - while (valid < (bits)) bitbuf = (bitbuf<<8) | (ulg)get_byte(), valid += 8; \ - code = (bitbuf >> (valid-(bits))) & (mask); \ -} - -/* Skip the given number of bits (after having peeked at them): */ -#define skip_bits(bits) (valid -= (bits)) - -#define clear_bitbuf() (valid = 0, bitbuf = 0) - -/* Local functions */ - -local void read_tree OF((void)); -local void build_tree OF((void)); - -/* =========================================================================== - * Read the Huffman tree. - */ -local void read_tree() -{ - int len; /* bit length */ - int base; /* base offset for a sequence of leaves */ - int n; - - /* Read the original input size, MSB first */ - orig_len = 0; - for (n = 1; n <= 4; n++) orig_len = (orig_len << 8) | (ulg)get_byte(); - - max_len = (int)get_byte(); /* maximum bit length of Huffman codes */ - if (max_len > MAX_BITLEN) { - error("invalid compressed data -- Huffman code > 32 bits"); - } - - /* Get the number of leaves at each bit length */ - n = 0; - for (len = 1; len <= max_len; len++) { - leaves[len] = (int)get_byte(); - n += leaves[len]; - } - if (n > LITERALS) { - error("too many leaves in Huffman tree"); - } - Trace((stderr, "orig_len %ld, max_len %d, leaves %d\n", - orig_len, max_len, n)); - /* There are at least 2 and at most 256 leaves of length max_len. - * (Pack arbitrarily rejects empty files and files consisting of - * a single byte even repeated.) To fit the last leaf count in a - * byte, it is offset by 2. However, the last literal is the EOB - * code, and is not transmitted explicitly in the tree, so we must - * adjust here by one only. - */ - leaves[max_len]++; - - /* Now read the leaves themselves */ - base = 0; - for (len = 1; len <= max_len; len++) { - /* Remember where the literals of this length start in literal[] : */ - lit_base[len] = base; - /* And read the literals: */ - for (n = leaves[len]; n > 0; n--) { - literal[base++] = (uch)get_byte(); - } - } - leaves[max_len]++; /* Now include the EOB code in the Huffman tree */ -} - -/* =========================================================================== - * Build the Huffman tree and the prefix table. - */ -local void build_tree() -{ - int nodes = 0; /* number of nodes (parents+leaves) at current bit length */ - int len; /* current bit length */ - uch *prefixp; /* pointer in prefix_len */ - - for (len = max_len; len >= 1; len--) { - /* The number of parent nodes at this level is half the total - * number of nodes at parent level: - */ - nodes >>= 1; - parents[len] = nodes; - /* Update lit_base by the appropriate bias to skip the parent nodes - * (which are not represented in the literal array): - */ - lit_base[len] -= nodes; - /* Restore nodes to be parents+leaves: */ - nodes += leaves[len]; - } - /* Construct the prefix table, from shortest leaves to longest ones. - * The shortest code is all ones, so we start at the end of the table. - */ - peek_bits = MIN(max_len, MAX_PEEK); - prefixp = &prefix_len[1<<peek_bits]; - for (len = 1; len <= peek_bits; len++) { - int prefixes = leaves[len] << (peek_bits-len); /* may be 0 */ - while (prefixes--) *--prefixp = (uch)len; - } - /* The length of all other codes is unknown: */ - while (prefixp > prefix_len) *--prefixp = 0; -} - -/* =========================================================================== - * Unpack in to out. This routine does not support the old pack format - * with magic header \037\037. - * - * IN assertions: the buffer inbuf contains already the beginning of - * the compressed data, from offsets inptr to insize-1 included. - * The magic header has already been checked. The output buffer is cleared. - */ -int unpack(in, out) - int in, out; /* input and output file descriptors */ -{ - int len; /* Bit length of current code */ - unsigned eob; /* End Of Block code */ - register unsigned peek; /* lookahead bits */ - unsigned peek_mask; /* Mask for peek_bits bits */ - - ifd = in; - ofd = out; - - read_tree(); /* Read the Huffman tree */ - build_tree(); /* Build the prefix table */ - clear_bitbuf(); /* Initialize bit input */ - peek_mask = (1<<peek_bits)-1; - - /* The eob code is the largest code among all leaves of maximal length: */ - eob = leaves[max_len]-1; - Trace((stderr, "eob %d %x\n", max_len, eob)); - - /* Decode the input data: */ - for (;;) { - /* Since eob is the longest code and not shorter than max_len, - * we can peek at max_len bits without having the risk of reading - * beyond the end of file. - */ - look_bits(peek, peek_bits, peek_mask); - len = prefix_len[peek]; - if (len > 0) { - peek >>= peek_bits - len; /* discard the extra bits */ - } else { - /* Code of more than peek_bits bits, we must traverse the tree */ - ulg mask = peek_mask; - len = peek_bits; - do { - len++, mask = (mask<<1)+1; - look_bits(peek, len, mask); - } while (peek < (unsigned)parents[len]); - /* loop as long as peek is a parent node */ - } - /* At this point, peek is the next complete code, of len bits */ - if (peek == eob && len == max_len) break; /* end of file? */ - put_ubyte(literal[peek+lit_base[len]]); - Tracev((stderr,"%02d %04x %c\n", len, peek, - literal[peek+lit_base[len]])); - skip_bits(len); - } /* for (;;) */ - - flush_window(); - Trace((stderr, "bytes_out %ld\n", bytes_out)); - if (orig_len != (ulg)bytes_out) { - error("invalid compressed data--length error"); - } - return OK; -} diff --git a/Build/source/utils/gzip/unzip.c b/Build/source/utils/gzip/unzip.c deleted file mode 100644 index 7e287a157ad..00000000000 --- a/Build/source/utils/gzip/unzip.c +++ /dev/null @@ -1,199 +0,0 @@ -/* unzip.c -- decompress files in gzip or pkzip format. - * Copyright (C) 1992-1993 Jean-loup Gailly - * This is free software; you can redistribute it and/or modify it under the - * terms of the GNU General Public License, see the file COPYING. - * - * The code in this file is derived from the file funzip.c written - * and put in the public domain by Mark Adler. - */ - -/* - This version can extract files in gzip or pkzip format. - For the latter, only the first entry is extracted, and it has to be - either deflated or stored. - */ - -#ifdef RCSID -static char rcsid[] = "$Id: unzip.c,v 0.13 1993/06/10 13:29:00 jloup Exp $"; -#endif - -#include "tailor.h" -#include "gzip.h" -#include "crypt.h" - -/* PKZIP header definitions */ -#define LOCSIG 0x04034b50L /* four-byte lead-in (lsb first) */ -#define LOCFLG 6 /* offset of bit flag */ -#define CRPFLG 1 /* bit for encrypted entry */ -#define EXTFLG 8 /* bit for extended local header */ -#define LOCHOW 8 /* offset of compression method */ -#define LOCTIM 10 /* file mod time (for decryption) */ -#define LOCCRC 14 /* offset of crc */ -#define LOCSIZ 18 /* offset of compressed size */ -#define LOCLEN 22 /* offset of uncompressed length */ -#define LOCFIL 26 /* offset of file name field length */ -#define LOCEXT 28 /* offset of extra field length */ -#define LOCHDR 30 /* size of local header, including sig */ -#define EXTHDR 16 /* size of extended local header, inc sig */ - - -/* Globals */ - -int decrypt; /* flag to turn on decryption */ -char *key; /* not used--needed to link crypt.c */ -int pkzip = 0; /* set for a pkzip file */ -int ext_header = 0; /* set if extended local header */ - -/* =========================================================================== - * Check zip file and advance inptr to the start of the compressed data. - * Get ofname from the local header if necessary. - */ -int check_zipfile(in) - int in; /* input file descriptors */ -{ - uch *h = inbuf + inptr; /* first local header */ - - ifd = in; - - /* Check validity of local header, and skip name and extra fields */ - inptr += LOCHDR + SH(h + LOCFIL) + SH(h + LOCEXT); - - if (inptr > insize || LG(h) != LOCSIG) { - fprintf(stderr, "\n%s: %s: not a valid zip file\n", - progname, ifname); - exit_code = ERROR; - return ERROR; - } - method = h[LOCHOW]; - if (method != STORED && method != DEFLATED) { - fprintf(stderr, - "\n%s: %s: first entry not deflated or stored -- use unzip\n", - progname, ifname); - exit_code = ERROR; - return ERROR; - } - - /* If entry encrypted, decrypt and validate encryption header */ - if ((decrypt = h[LOCFLG] & CRPFLG) != 0) { - fprintf(stderr, "\n%s: %s: encrypted file -- use unzip\n", - progname, ifname); - exit_code = ERROR; - return ERROR; - } - - /* Save flags for unzip() */ - ext_header = (h[LOCFLG] & EXTFLG) != 0; - pkzip = 1; - - /* Get ofname and time stamp from local header (to be done) */ - return OK; -} - -/* =========================================================================== - * Unzip in to out. This routine works on both gzip and pkzip files. - * - * IN assertions: the buffer inbuf contains already the beginning of - * the compressed data, from offsets inptr to insize-1 included. - * The magic header has already been checked. The output buffer is cleared. - */ -int unzip(in, out) - int in, out; /* input and output file descriptors */ -{ - ulg orig_crc = 0; /* original crc */ - ulg orig_len = 0; /* original uncompressed length */ - int n; - uch buf[EXTHDR]; /* extended local header */ - - ifd = in; - ofd = out; - - updcrc(NULL, 0); /* initialize crc */ - - if (pkzip && !ext_header) { /* crc and length at the end otherwise */ - orig_crc = LG(inbuf + LOCCRC); - orig_len = LG(inbuf + LOCLEN); - } - - /* Decompress */ - if (method == DEFLATED) { - - int res = inflate(); - - if (res == 3) { - error("out of memory"); - } else if (res != 0) { - error("invalid compressed data--format violated"); - } - - } else if (pkzip && method == STORED) { - - register ulg n = LG(inbuf + LOCLEN); - - if (n != LG(inbuf + LOCSIZ) - (decrypt ? RAND_HEAD_LEN : 0)) { - - fprintf(stderr, "len %ld, siz %ld\n", n, LG(inbuf + LOCSIZ)); - error("invalid compressed data--length mismatch"); - } - while (n--) { - uch c = (uch)get_byte(); -#ifdef CRYPT - if (decrypt) zdecode(c); -#endif - put_ubyte(c); - } - flush_window(); - } else { - error("internal error, invalid method"); - } - - /* Get the crc and original length */ - if (!pkzip) { - /* crc32 (see algorithm.doc) - * uncompressed input size modulo 2^32 - */ - for (n = 0; n < 8; n++) { - buf[n] = (uch)get_byte(); /* may cause an error if EOF */ - } - orig_crc = LG(buf); - orig_len = LG(buf+4); - - } else if (ext_header) { /* If extended header, check it */ - /* signature - 4bytes: 0x50 0x4b 0x07 0x08 - * CRC-32 value - * compressed size 4-bytes - * uncompressed size 4-bytes - */ - for (n = 0; n < EXTHDR; n++) { - buf[n] = (uch)get_byte(); /* may cause an error if EOF */ - } - orig_crc = LG(buf+4); - orig_len = LG(buf+12); - } - - /* Validate decompression */ - if (orig_crc != updcrc(outbuf, 0)) { - error("invalid compressed data--crc error"); - } - if (orig_len != (ulg)bytes_out) { - error("invalid compressed data--length error"); - } - - /* Check if there are more entries in a pkzip file */ - if (pkzip && inptr + 4 < insize && LG(inbuf+inptr) == LOCSIG) { - if (to_stdout) { - WARN((stderr, - "%s: %s has more than one entry--rest ignored\n", - progname, ifname)); - } else { - /* Don't destroy the input zip file */ - fprintf(stderr, - "%s: %s has more than one entry -- unchanged\n", - progname, ifname); - exit_code = ERROR; - ext_header = pkzip = 0; - return ERROR; - } - } - ext_header = pkzip = 0; /* for next file */ - return OK; -} diff --git a/Build/source/utils/gzip/util.c b/Build/source/utils/gzip/util.c deleted file mode 100644 index 4b5bccf703e..00000000000 --- a/Build/source/utils/gzip/util.c +++ /dev/null @@ -1,466 +0,0 @@ -/* util.c -- utility functions for gzip support - * Copyright (C) 1992-1993 Jean-loup Gailly - * This is free software; you can redistribute it and/or modify it under the - * terms of the GNU General Public License, see the file COPYING. - */ - -#ifdef RCSID -static char rcsid[] = "$Id: util.c,v 0.15 1993/06/15 09:04:13 jloup Exp $"; -#endif - -#include <ctype.h> -#include <errno.h> -#include <sys/types.h> - -#include "tailor.h" - -#ifdef HAVE_UNISTD_H -# include <unistd.h> -#endif -#ifndef NO_FCNTL_H -# include <fcntl.h> -#endif - -#if defined(STDC_HEADERS) || !defined(NO_STDLIB_H) -# include <stdlib.h> -#else - extern int errno; -#endif - -#include "gzip.h" -#include "crypt.h" - -extern ulg crc_32_tab[]; /* crc table, defined below */ - -/* =========================================================================== - * Copy input to output unchanged: zcat == cat with --force. - * IN assertion: insize bytes have already been read in inbuf. - */ -int copy(in, out) - int in, out; /* input and output file descriptors */ -{ - errno = 0; - while (insize != 0 && (int)insize != EOF) { - write_buf(out, (char*)inbuf, insize); - bytes_out += insize; - insize = read(in, (char*)inbuf, INBUFSIZ); - } - if ((int)insize == EOF && errno != 0) { - read_error(); - } - bytes_in = bytes_out; - return OK; -} - -/* =========================================================================== - * Run a set of bytes through the crc shift register. If s is a NULL - * pointer, then initialize the crc shift register contents instead. - * Return the current crc in either case. - */ -ulg updcrc(s, n) - uch *s; /* pointer to bytes to pump through */ - unsigned n; /* number of bytes in s[] */ -{ - register ulg c; /* temporary variable */ - - static ulg crc = (ulg)0xffffffffL; /* shift register contents */ - - if (s == NULL) { - c = 0xffffffffL; - } else { - c = crc; - if (n) do { - c = crc_32_tab[((int)c ^ (*s++)) & 0xff] ^ (c >> 8); - } while (--n); - } - crc = c; - return c ^ 0xffffffffL; /* (instead of ~c for 64-bit machines) */ -} - -/* =========================================================================== - * Clear input and output buffers - */ -void clear_bufs() -{ - outcnt = 0; - insize = inptr = 0; - bytes_in = bytes_out = 0L; -} - -/* =========================================================================== - * Fill the input buffer. This is called only when the buffer is empty. - */ -int fill_inbuf(eof_ok) - int eof_ok; /* set if EOF acceptable as a result */ -{ - int len; - - /* Read as much as possible */ - insize = 0; - errno = 0; - do { - len = read(ifd, (char*)inbuf+insize, INBUFSIZ-insize); - if (len == 0 || len == EOF) break; - insize += len; - } while (insize < INBUFSIZ); - - if (insize == 0) { - if (eof_ok) return EOF; - read_error(); - } - bytes_in += (ulg)insize; - inptr = 1; - return inbuf[0]; -} - -/* =========================================================================== - * Write the output buffer outbuf[0..outcnt-1] and update bytes_out. - * (used for the compressed data only) - */ -void flush_outbuf() -{ - if (outcnt == 0) return; - - write_buf(ofd, (char *)outbuf, outcnt); - bytes_out += (ulg)outcnt; - outcnt = 0; -} - -/* =========================================================================== - * Write the output window window[0..outcnt-1] and update crc and bytes_out. - * (Used for the decompressed data only.) - */ -void flush_window() -{ - if (outcnt == 0) return; - updcrc(window, outcnt); - - if (!test) { - write_buf(ofd, (char *)window, outcnt); - } - bytes_out += (ulg)outcnt; - outcnt = 0; -} - -/* =========================================================================== - * Does the same as write(), but also handles partial pipe writes and checks - * for error return. - */ -void write_buf(fd, buf, cnt) - int fd; - voidp buf; - unsigned cnt; -{ - unsigned n; - - while ((n = write(fd, buf, cnt)) != cnt) { - if (n == (unsigned)(-1)) { - write_error(); - } - cnt -= n; - buf = (voidp)((char*)buf+n); - } -} - -#ifndef WIN32 -/* ======================================================================== - * Put string s in lower case, return s. - */ -char *strlwr(s) - char *s; -{ - char *t; - for (t = s; *t; t++) *t = tolow(*t); - return s; -} -#endif - -/* ======================================================================== - * Return the base name of a file (remove any directory prefix and - * any version suffix). For systems with file names that are not - * case sensitive, force the base name to lower case. - */ -char *basename(fname) - char *fname; -{ - char *p; - - if ((p = strrchr(fname, PATH_SEP)) != NULL) fname = p+1; -#ifdef PATH_SEP2 - if ((p = strrchr(fname, PATH_SEP2)) != NULL) fname = p+1; -#endif -#ifdef PATH_SEP3 - if ((p = strrchr(fname, PATH_SEP3)) != NULL) fname = p+1; -#endif -#ifdef SUFFIX_SEP - if ((p = strrchr(fname, SUFFIX_SEP)) != NULL) *p = '\0'; -#endif - if (casemap('A') == 'a') strlwr(fname); - return fname; -} - -/* ======================================================================== - * Make a file name legal for file systems not allowing file names with - * multiple dots or starting with a dot (such as MSDOS), by changing - * all dots except the last one into underlines. A target dependent - * function can be used instead of this simple function by defining the macro - * MAKE_LEGAL_NAME in tailor.h and providing the function in a target - * dependent module. - */ -void make_simple_name(name) - char *name; -{ - char *p = strrchr(name, '.'); - if (p == NULL) return; - if (p == name) p++; - do { - if (*--p == '.') *p = '_'; - } while (p != name); -} - - -#if defined(NO_STRING_H) && !defined(STDC_HEADERS) - -/* Provide missing strspn and strcspn functions. */ - -# ifndef __STDC__ -# define const -# endif - -int strspn OF((const char *s, const char *accept)); -int strcspn OF((const char *s, const char *reject)); - -/* ======================================================================== - * Return the length of the maximum initial segment - * of s which contains only characters in accept. - */ -int strspn(s, accept) - const char *s; - const char *accept; -{ - register const char *p; - register const char *a; - register int count = 0; - - for (p = s; *p != '\0'; ++p) { - for (a = accept; *a != '\0'; ++a) { - if (*p == *a) break; - } - if (*a == '\0') return count; - ++count; - } - return count; -} - -/* ======================================================================== - * Return the length of the maximum inital segment of s - * which contains no characters from reject. - */ -int strcspn(s, reject) - const char *s; - const char *reject; -{ - register int count = 0; - - while (*s != '\0') { - if (strchr(reject, *s++) != NULL) return count; - ++count; - } - return count; -} - -#endif /* NO_STRING_H */ - -/* ======================================================================== - * Add an environment variable (if any) before argv, and update argc. - * Return the expanded environment variable to be freed later, or NULL - * if no options were added to argv. - */ -#define SEPARATOR " \t" /* separators in env variable */ - -char *add_envopt(argcp, argvp, env) - int *argcp; /* pointer to argc */ - char ***argvp; /* pointer to argv */ - char *env; /* name of environment variable */ -{ - char *p; /* running pointer through env variable */ - char **oargv; /* runs through old argv array */ - char **nargv; /* runs through new argv array */ - int oargc = *argcp; /* old argc */ - int nargc = 0; /* number of arguments in env variable */ - - env = (char*)getenv(env); - if (env == NULL) return NULL; - - p = (char*)xmalloc(strlen(env)+1); - env = strcpy(p, env); /* keep env variable intact */ - - for (p = env; *p; nargc++ ) { /* move through env */ - p += strspn(p, SEPARATOR); /* skip leading separators */ - if (*p == '\0') break; - - p += strcspn(p, SEPARATOR); /* find end of word */ - if (*p) *p++ = '\0'; /* mark it */ - } - if (nargc == 0) { - free(env); - return NULL; - } - *argcp += nargc; - /* Allocate the new argv array, with an extra element just in case - * the original arg list did not end with a NULL. - */ - nargv = (char**)calloc(*argcp+1, sizeof(char *)); - if (nargv == NULL) error("out of memory"); - oargv = *argvp; - *argvp = nargv; - - /* Copy the program name first */ - if (oargc-- < 0) error("argc<=0"); - *(nargv++) = *(oargv++); - - /* Then copy the environment args */ - for (p = env; nargc > 0; nargc--) { - p += strspn(p, SEPARATOR); /* skip separators */ - *(nargv++) = p; /* store start */ - while (*p++) ; /* skip over word */ - } - - /* Finally copy the old args and add a NULL (usual convention) */ - while (oargc--) *(nargv++) = *(oargv++); - *nargv = NULL; - return env; -} - -/* ======================================================================== - * Error handlers. - */ -void error(m) - char *m; -{ - fprintf(stderr, "\n%s: %s: %s\n", progname, ifname, m); - abort_gzip(); -} - -void warn(a, b) - char *a, *b; /* message strings juxtaposed in output */ -{ - WARN((stderr, "%s: %s: warning: %s%s\n", progname, ifname, a, b)); -} - -void read_error() -{ - fprintf(stderr, "\n%s: ", progname); - if (errno != 0) { - perror(ifname); - } else { - fprintf(stderr, "%s: unexpected end of file\n", ifname); - } - abort_gzip(); -} - -void write_error() -{ - fprintf(stderr, "\n%s: ", progname); - perror(ofname); - abort_gzip(); -} - -/* ======================================================================== - * Display compression ratio on the given stream on 6 characters. - */ -void display_ratio(num, den, file) - long num; - long den; - FILE *file; -{ - long ratio; /* 1000 times the compression ratio */ - - if (den == 0) { - ratio = 0; /* no compression */ - } else if (den < 2147483L) { /* (2**31 -1)/1000 */ - ratio = 1000L*num/den; - } else { - ratio = num/(den/1000L); - } - if (ratio < 0) { - putc('-', file); - ratio = -ratio; - } else { - putc(' ', file); - } - fprintf(file, "%2ld.%1ld%%", ratio / 10L, ratio % 10L); -} - - -#ifndef WIN32 -/* ======================================================================== - * Semi-safe malloc -- never returns NULL. - */ -voidp xmalloc (size) - unsigned size; -{ - voidp cp = (voidp)malloc (size); - - if (cp == NULL) error("out of memory"); - return cp; -} -#endif - -/* ======================================================================== - * Table of CRC-32's of all single-byte values (made by makecrc.c) - */ -ulg crc_32_tab[] = { - 0x00000000L, 0x77073096L, 0xee0e612cL, 0x990951baL, 0x076dc419L, - 0x706af48fL, 0xe963a535L, 0x9e6495a3L, 0x0edb8832L, 0x79dcb8a4L, - 0xe0d5e91eL, 0x97d2d988L, 0x09b64c2bL, 0x7eb17cbdL, 0xe7b82d07L, - 0x90bf1d91L, 0x1db71064L, 0x6ab020f2L, 0xf3b97148L, 0x84be41deL, - 0x1adad47dL, 0x6ddde4ebL, 0xf4d4b551L, 0x83d385c7L, 0x136c9856L, - 0x646ba8c0L, 0xfd62f97aL, 0x8a65c9ecL, 0x14015c4fL, 0x63066cd9L, - 0xfa0f3d63L, 0x8d080df5L, 0x3b6e20c8L, 0x4c69105eL, 0xd56041e4L, - 0xa2677172L, 0x3c03e4d1L, 0x4b04d447L, 0xd20d85fdL, 0xa50ab56bL, - 0x35b5a8faL, 0x42b2986cL, 0xdbbbc9d6L, 0xacbcf940L, 0x32d86ce3L, - 0x45df5c75L, 0xdcd60dcfL, 0xabd13d59L, 0x26d930acL, 0x51de003aL, - 0xc8d75180L, 0xbfd06116L, 0x21b4f4b5L, 0x56b3c423L, 0xcfba9599L, - 0xb8bda50fL, 0x2802b89eL, 0x5f058808L, 0xc60cd9b2L, 0xb10be924L, - 0x2f6f7c87L, 0x58684c11L, 0xc1611dabL, 0xb6662d3dL, 0x76dc4190L, - 0x01db7106L, 0x98d220bcL, 0xefd5102aL, 0x71b18589L, 0x06b6b51fL, - 0x9fbfe4a5L, 0xe8b8d433L, 0x7807c9a2L, 0x0f00f934L, 0x9609a88eL, - 0xe10e9818L, 0x7f6a0dbbL, 0x086d3d2dL, 0x91646c97L, 0xe6635c01L, - 0x6b6b51f4L, 0x1c6c6162L, 0x856530d8L, 0xf262004eL, 0x6c0695edL, - 0x1b01a57bL, 0x8208f4c1L, 0xf50fc457L, 0x65b0d9c6L, 0x12b7e950L, - 0x8bbeb8eaL, 0xfcb9887cL, 0x62dd1ddfL, 0x15da2d49L, 0x8cd37cf3L, - 0xfbd44c65L, 0x4db26158L, 0x3ab551ceL, 0xa3bc0074L, 0xd4bb30e2L, - 0x4adfa541L, 0x3dd895d7L, 0xa4d1c46dL, 0xd3d6f4fbL, 0x4369e96aL, - 0x346ed9fcL, 0xad678846L, 0xda60b8d0L, 0x44042d73L, 0x33031de5L, - 0xaa0a4c5fL, 0xdd0d7cc9L, 0x5005713cL, 0x270241aaL, 0xbe0b1010L, - 0xc90c2086L, 0x5768b525L, 0x206f85b3L, 0xb966d409L, 0xce61e49fL, - 0x5edef90eL, 0x29d9c998L, 0xb0d09822L, 0xc7d7a8b4L, 0x59b33d17L, - 0x2eb40d81L, 0xb7bd5c3bL, 0xc0ba6cadL, 0xedb88320L, 0x9abfb3b6L, - 0x03b6e20cL, 0x74b1d29aL, 0xead54739L, 0x9dd277afL, 0x04db2615L, - 0x73dc1683L, 0xe3630b12L, 0x94643b84L, 0x0d6d6a3eL, 0x7a6a5aa8L, - 0xe40ecf0bL, 0x9309ff9dL, 0x0a00ae27L, 0x7d079eb1L, 0xf00f9344L, - 0x8708a3d2L, 0x1e01f268L, 0x6906c2feL, 0xf762575dL, 0x806567cbL, - 0x196c3671L, 0x6e6b06e7L, 0xfed41b76L, 0x89d32be0L, 0x10da7a5aL, - 0x67dd4accL, 0xf9b9df6fL, 0x8ebeeff9L, 0x17b7be43L, 0x60b08ed5L, - 0xd6d6a3e8L, 0xa1d1937eL, 0x38d8c2c4L, 0x4fdff252L, 0xd1bb67f1L, - 0xa6bc5767L, 0x3fb506ddL, 0x48b2364bL, 0xd80d2bdaL, 0xaf0a1b4cL, - 0x36034af6L, 0x41047a60L, 0xdf60efc3L, 0xa867df55L, 0x316e8eefL, - 0x4669be79L, 0xcb61b38cL, 0xbc66831aL, 0x256fd2a0L, 0x5268e236L, - 0xcc0c7795L, 0xbb0b4703L, 0x220216b9L, 0x5505262fL, 0xc5ba3bbeL, - 0xb2bd0b28L, 0x2bb45a92L, 0x5cb36a04L, 0xc2d7ffa7L, 0xb5d0cf31L, - 0x2cd99e8bL, 0x5bdeae1dL, 0x9b64c2b0L, 0xec63f226L, 0x756aa39cL, - 0x026d930aL, 0x9c0906a9L, 0xeb0e363fL, 0x72076785L, 0x05005713L, - 0x95bf4a82L, 0xe2b87a14L, 0x7bb12baeL, 0x0cb61b38L, 0x92d28e9bL, - 0xe5d5be0dL, 0x7cdcefb7L, 0x0bdbdf21L, 0x86d3d2d4L, 0xf1d4e242L, - 0x68ddb3f8L, 0x1fda836eL, 0x81be16cdL, 0xf6b9265bL, 0x6fb077e1L, - 0x18b74777L, 0x88085ae6L, 0xff0f6a70L, 0x66063bcaL, 0x11010b5cL, - 0x8f659effL, 0xf862ae69L, 0x616bffd3L, 0x166ccf45L, 0xa00ae278L, - 0xd70dd2eeL, 0x4e048354L, 0x3903b3c2L, 0xa7672661L, 0xd06016f7L, - 0x4969474dL, 0x3e6e77dbL, 0xaed16a4aL, 0xd9d65adcL, 0x40df0b66L, - 0x37d83bf0L, 0xa9bcae53L, 0xdebb9ec5L, 0x47b2cf7fL, 0x30b5ffe9L, - 0xbdbdf21cL, 0xcabac28aL, 0x53b39330L, 0x24b4a3a6L, 0xbad03605L, - 0xcdd70693L, 0x54de5729L, 0x23d967bfL, 0xb3667a2eL, 0xc4614ab8L, - 0x5d681b02L, 0x2a6f2b94L, 0xb40bbe37L, 0xc30c8ea1L, 0x5a05df1bL, - 0x2d02ef8dL -}; diff --git a/Build/source/utils/gzip/vms/Makefile.gcc b/Build/source/utils/gzip/vms/Makefile.gcc deleted file mode 100644 index 04506759e7d..00000000000 --- a/Build/source/utils/gzip/vms/Makefile.gcc +++ /dev/null @@ -1,131 +0,0 @@ -# Makefile for gzip (GNU zip) -*- Indented-Text -*- -# Copyright (C) 1992-1993 Jean-loup Gailly and the Free Software Foundation -# VMS version made by Klaus Reimann <kr@cip.physik.uni-stuttgart.de>, -# revised by Roland B Roberts <roberts@nsrl31.nsrl.rochester.edu>. -# This version is for gcc. - -# After constructing gzip.exe with this Makefile, you should set up -# symbols for gzip.exe. Edit the example below, changing -# "disk:[directory]" as appropriate. -# -# $ gzip == "$disk:[directory]gzip.exe" -# $ gunzip == "$disk:[directory]gunzip.exe" -# $ zcat == "$disk:[directory]zcat.exe" - - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -#### Start of system configuration section. #### - -CC = gcc -LINK = link - -CFLAGS = -# CFLAGS = /warning -LDFLAGS = - -# Things you might add to DEFS -# -DDIRENT Use <dirent.h> for recursion (-r) -# -DSYSDIR Use <sys/dir.h> for recursion (-r) -# -DSYSNDIR Use <sys/ndir.h> for recursion (-r) -# -DNDIR Use <ndir.h> for recursion (-r) -# -DSTDC_HEADERS Use <stdlib.h> -# -DHAVE_UNISTD_H Use <unistd.h> -# -DNO_UTIME_H Don't use <utime.h> -# -DHAVE_SYSUTIME_H Use <sys/utime.h> -# -DNO_MEMORY_H Don't use <memory.h>. Not needed if STDC_HEADERS. -# -DNO_STRING_H Use strings.h, not string.h. Not needed if STDC_HEADERS -# -DRETSIGTYPE=int Define this if signal handlers must return an int. -# -DNO_SYMLINK OS defines S_IFLNK but does not support symbolic links -# -DNO_MULTIPLE_DOTS System does not allow file names with multiple dots -# -DNO_UTIME System does not support setting file modification time -# -DNO_CHOWN System does not support setting file owner -# -DNO_DIR System does not support readdir() -# -DPROTO Force function prototypes even if __STDC__ not defined -# -DASMV Use asm version match.S -# -DMSDOS MSDOS specific -# -DOS2 OS/2 specific -# -DVAXC Vax/VMS with Vax C compiler -# -DVMS Vax/VMS with gcc -# -DDEBUG Debug code -# -DDYN_ALLOC Use dynamic allocation of large data structures -# -DMAXSEG_64K Maximum array size is 64K (for 16 bit system) -# -DRECORD_IO read() and write() are rounded to record sizes. -# -DNO_STDIN_FSTAT fstat() is not available on stdin -# -DNO_SIZE_CHECK stat() does not give a reliable file size - -DEFS = /define=(VMS) -LIBS = #@LIBS@ - -X=.exe -O=.obj - -# additional assembly sources for particular systems be required. -OBJA = #@OBJA@ - -#### End of system configuration section. #### - -OBJS = gzip$O zip$O deflate$O trees$O bits$O unzip$O inflate$O util$O \ - crypt$O lzw$O unlzw$O unpack$O unlzh$O getopt$O vms$O $(OBJA) - -# --- rules --- - -*$O: *.c - $(CC) $* $(DEFS) $(CFLAGS) -# create sys$output -# $(CC) $* $(DEFS) $(CFLAGS)$ - -default: all - -all: gzip$X #zcmp zdiff zmore znew - -gzip$X : $(OBJS) #Makefile - linkobjs:=$(OBJS) - Schleife: - p = f$locate(" ",linkobjs) - if p .lt. f$length(linkobjs) - then linkobjs[p,1]:="," - goto Schleife - endif - write sys$output "linking ''linkobjs'" - $(LINK) $(LDFLAGS) /exec=gzip$X 'linkobjs',sys$input/opt - GNU_CC:[000000]GCCLIB/LIB,SYS$LIBRARY:VAXCRTL/SHARE $ - -# Create a hard link. To remove both files, use "make clean". Using a hard -# link saves disk space, by the way. Note, however, that copying a hard link -# copies the data, not just the link. Therefore, set up the link in the -# directory in which the executable is to reside, or else rename (move) the -# executables into the directory. -# - set file/enter=gunzip.exe gzip.exe - set file/enter=zcat.exe gzip.exe - - -clean: - set file/remove gunzip.exe;0 - set file/remove zcat.exe;0 - delete gzip.exe;0 - delete *$O;0 - -# Actual build-related targets - -gzip$O zip$O deflate$O trees$O bits$O unzip$O inflate$O: gzip.h tailor.h -util$O lzw$O unlzw$O unpack$O unlzh$O crypt$O: gzip.h tailor.h - -gzip$O unlzw$O: revision.h lzw.h - -bits$O unzip$O util$O zip$O: crypt.h - -gzip$O getopt$O: getopt.h diff --git a/Build/source/utils/gzip/vms/Makefile.mms b/Build/source/utils/gzip/vms/Makefile.mms deleted file mode 100644 index 046ce50902b..00000000000 --- a/Build/source/utils/gzip/vms/Makefile.mms +++ /dev/null @@ -1,122 +0,0 @@ -# Makefile for gzip (GNU zip) -*- Indented-Text -*- -# Copyright (C) 1992-1993 Jean-loup Gailly and the Free Software Foundation -# VMS version made by Klaus Reimann <kr@cip.physik.uni-stuttgart.de>, -# revised by Roland B Roberts <roberts@nsrl31.nsrl.rochester.edu> -# and Karl-Jose Filler <pla_jfi@pki-nbg.philips.de> -# This version is for VAXC with MMS. - -# After constructing gzip.exe with this Makefile, you should set up -# symbols for gzip.exe. Edit the example below, changing -# "disk:[directory]" as appropriate. -# -# $ gzip == "$disk:[directory]gzip.exe" -# $ gunzip == "$disk:[directory]gunzip.exe" -# $ zcat == "$disk:[directory]zcat.exe" - - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -#### Start of system configuration section. #### - -CC = cc -LINK = link - -CFLAGS = -# CFLAGS = /warning -LDFLAGS = - -# Things you might add to DEFS -# -DDIRENT Use <dirent.h> for recursion (-r) -# -DSYSDIR Use <sys/dir.h> for recursion (-r) -# -DSYSNDIR Use <sys/ndir.h> for recursion (-r) -# -DNDIR Use <ndir.h> for recursion (-r) -# -DSTDC_HEADERS Use <stdlib.h> -# -DHAVE_UNISTD_H Use <unistd.h> -# -DNO_UTIME_H Don't use <utime.h> -# -DHAVE_SYSUTIME_H Use <sys/utime.h> -# -DNO_MEMORY_H Don't use <memory.h>. Not needed if STDC_HEADERS. -# -DNO_STRING_H Use strings.h, not string.h. Not needed if STDC_HEADERS -# -DRETSIGTYPE=int Define this if signal handlers must return an int. -# -DNO_SYMLINK OS defines S_IFLNK but does not support symbolic links -# -DNO_MULTIPLE_DOTS System does not allow file names with multiple dots -# -DNO_UTIME System does not support setting file modification time -# -DNO_CHOWN System does not support setting file owner -# -DNO_DIR System does not support readdir() -# -DPROTO Force function prototypes even if __STDC__ not defined -# -DASMV Use asm version match.S -# -DMSDOS MSDOS specific -# -DOS2 OS/2 specific -# -DVAXC Vax/VMS with Vax C compiler -# -DVMS Vax/VMS with gcc -# -DDEBUG Debug code -# -DDYN_ALLOC Use dynamic allocation of large data structures -# -DMAXSEG_64K Maximum array size is 64K (for 16 bit system) -# -DRECORD_IO read() and write() are rounded to record sizes. -# -DNO_STDIN_FSTAT fstat() is not available on stdin -# -DNO_SIZE_CHECK stat() does not give a reliable file size - -# DEFS = /define=(VAXC) -DEFS = -LIBS = - -X=.exe -O=.obj - -# additional assembly sources for particular systems be required. -OBJA = - -#### End of system configuration section. #### - -OBJS = gzip.obj zip.obj deflate.obj trees.obj bits.obj unzip.obj inflate.obj \ - util.obj crypt.obj lzw.obj unlzw.obj unpack.obj unlzh.obj getopt.obj \ - vms.obj $(OBJA) - -# --- rules --- - -.c.obj : - define/user sys sys$library - $(CC) $* $(DEFS) $(CFLAGS) -# create sys.output -# $(CC) $* $(DEFS) $(CFLAGS)$ - -gzip.exe : $(OBJS) - define lnk$library sys$share:vaxcrtl - $(LINK) $(LDFLAGS) /exec=gzip $+ -# -# Create a hard link. To remove both files, use "make clean". Using a hard -# link saves disk space, by the way. Note, however, that copying a hard link -# copies the data, not just the link. Therefore, set up the link in the -# directory in which the executable is to reside, or else rename (move) the -# executables into the directory. -# - set file/enter=gunzip.exe gzip.exe - set file/enter=zcat.exe gzip.exe - -clean : - set file/remove gunzip.exe;0 - set file/remove zcat.exe;0 - delete gzip.exe;0 - delete *.obj;0 - -# Actual build-related targets - -gzip.obj zip.obj deflate.obj trees.obj bits.obj unzip.obj inflate.obj : gzip.h tailor.h -util.obj lzw.obj unlzw.obj unpack.obj unlzh.obj crypt.obj : gzip.h tailor.h - -gzip.obj unlzw.obj : revision.h lzw.h - -bits.obj unzip.obj util.obj zip.obj : crypt.h - -gzip.obj getopt.obj : getopt.h diff --git a/Build/source/utils/gzip/vms/Makefile.vms b/Build/source/utils/gzip/vms/Makefile.vms deleted file mode 100644 index 9401295ffcd..00000000000 --- a/Build/source/utils/gzip/vms/Makefile.vms +++ /dev/null @@ -1,133 +0,0 @@ -# Makefile for gzip (GNU zip) -*- Indented-Text -*- -# Copyright (C) 1992-1993 Jean-loup Gailly and the Free Software Foundation -# VMS version made by Klaus Reimann <kr@cip.physik.uni-stuttgart.de>, -# revised by Roland B Roberts <roberts@nsrl31.nsrl.rochester.edu>. -# This version is for VAXC. Tested with Todd Aven's MAKE/VMS. - -# After constructing gzip.exe with this Makefile, you should set up -# symbols for gzip.exe. Edit the example below, changing -# "disk:[directory]" as appropriate. -# -# $ gzip == "$disk:[directory]gzip.exe" -# $ gunzip == "$disk:[directory]gunzip.exe" -# $ zcat == "$disk:[directory]zcat.exe" - - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -#### Start of system configuration section. #### - -CC = cc -LINK = link - -CFLAGS = -# CFLAGS = /warning -LDFLAGS = - -# Things you might add to DEFS -# -DDIRENT Use <dirent.h> for recursion (-r) -# -DSYSDIR Use <sys/dir.h> for recursion (-r) -# -DSYSNDIR Use <sys/ndir.h> for recursion (-r) -# -DNDIR Use <ndir.h> for recursion (-r) -# -DSTDC_HEADERS Use <stdlib.h> -# -DHAVE_UNISTD_H Use <unistd.h> -# -DNO_UTIME_H Don't use <utime.h> -# -DHAVE_SYSUTIME_H Use <sys/utime.h> -# -DNO_MEMORY_H Don't use <memory.h>. Not needed if STDC_HEADERS. -# -DNO_STRING_H Use strings.h, not string.h. Not needed if STDC_HEADERS -# -DRETSIGTYPE=int Define this if signal handlers must return an int. -# -DNO_SYMLINK OS defines S_IFLNK but does not support symbolic links -# -DNO_MULTIPLE_DOTS System does not allow file names with multiple dots -# -DNO_UTIME System does not support setting file modification time -# -DNO_CHOWN System does not support setting file owner -# -DNO_DIR System does not support readdir() -# -DPROTO Force function prototypes even if __STDC__ not defined -# -DASMV Use asm version match.S -# -DMSDOS MSDOS specific -# -DOS2 OS/2 specific -# -DVAXC Vax/VMS with Vax C compiler -# -DVMS Vax/VMS with gcc -# -DDEBUG Debug code -# -DDYN_ALLOC Use dynamic allocation of large data structures -# -DMAXSEG_64K Maximum array size is 64K (for 16 bit system) -# -DRECORD_IO read() and write() are rounded to record sizes. -# -DNO_STDIN_FSTAT fstat() is not available on stdin -# -DNO_SIZE_CHECK stat() does not give a reliable file size - -# DEFS = /define=(VAXC) -DEFS = -LIBS = - -X=.exe -O=.obj - -# additional assembly sources for particular systems be required. -OBJA = - -#### End of system configuration section. #### - -OBJS = gzip$O zip$O deflate$O trees$O bits$O unzip$O inflate$O util$O \ - crypt$O lzw$O unlzw$O unpack$O unlzh$O getopt$O vms$O $(OBJA) - -# --- rules --- - -*$O: *.c - define/user sys sys$library - $(CC) $* $(DEFS) $(CFLAGS) -# create sys$output -# $(CC) $* $(DEFS) $(CFLAGS)$ - -default: all - -all: gzip$X #zcmp zdiff zmore znew - -gzip$X : $(OBJS) #Makefile - linkobjs:=$(OBJS) - Schleife: - p = f$locate(" ",linkobjs) - if p .lt. f$length(linkobjs) - then linkobjs[p,1]:="," - goto Schleife - endif - write sys$output "linking ''linkobjs'" - $(LINK) $(LDFLAGS) /exec=gzip$X 'linkobjs',sys$input/opt - SYS$LIBRARY:VAXCRTL/SHARE $ -# -# Create a hard link. To remove both files, use "make clean". Using a hard -# link saves disk space, by the way. Note, however, that copying a hard link -# copies the data, not just the link. Therefore, set up the link in the -# directory in which the executable is to reside, or else rename (move) the -# executables into the directory. -# - set file/enter=gunzip.exe gzip.exe - set file/enter=zcat.exe gzip.exe - - -clean: - set file/remove gunzip.exe;0 - set file/remove zcat.exe;0 - delete gzip.exe;0 - delete *$O;0 - -# Actual build-related targets - -gzip$O zip$O deflate$O trees$O bits$O unzip$O inflate$O: gzip.h tailor.h -util$O lzw$O unlzw$O unpack$O unlzh$O crypt$O: gzip.h tailor.h - -gzip$O unlzw$O: revision.h lzw.h - -bits$O unzip$O util$O zip$O: crypt.h - -gzip$O getopt$O: getopt.h diff --git a/Build/source/utils/gzip/vms/Readme.vms b/Build/source/utils/gzip/vms/Readme.vms deleted file mode 100644 index 4b9797ca4e5..00000000000 --- a/Build/source/utils/gzip/vms/Readme.vms +++ /dev/null @@ -1,87 +0,0 @@ -README file for gzip on VMS -written by Klaus Reimann <kr@cip.physik.uni-stuttgart.de> - -Here is a list of the files in [.vms]: - -GZIP.HLP ! Help-file, how to use gzip -MAKEFILE.GCC ! Description for (vms-)make, using gcc -MAKEFILE.MMS ! Description for MMS-utility, using vaxc -MAKEFILE.VMS ! Description for (vms-)make, using vaxc -MAKEGZIP.COM ! simple and robust DCL-Script, using vaxc -README.VMS ! this file, how to install gzip -VMS.C ! VMS-specific functions in gzip - -This file describe, how to compile and install the VMS-Port of gzip. ->>For restrictions or bugs due to the structure of the vms-filesystem -refer to gzip.hlp.<< - -Installing gzip - -Since there are many makefiles there are many possibilities -compiling and installing gzip. For most of them, it is important, -that you start them from the SOURCE-Directory (that is where -gzip.c is), not from the [.vms]-directory. Otherwise the compiler -won't find the source-files. - -Using gcc saves disk-space, but needs longer to compile - VAXC gzip.exe 95/96 Blocks - gcc2.3.3 gzip.exe 86/87 Blocks - -To install gzip one has to perform the following steps: - 1. compile sources (*.c, [.vms]*.c) - 2. link executable gzip.exe - 3. Make entries gunzip.exe and zcat.exe to gzip.exe. - These are similar to hardlinks in UNIX - >>If You wish to do this by hand, see for example makegzip.com.<< - The Entries can't be simply deleted, use 'set file /remove' . - - 4. Rename executables (*.exe) to Your prefered exe-directory. If it is on - another Device, then you should only copy gzip.exe and do the - entries gunzip.exe and zcat.exe by hand (3.). - - 5. Setting up Symbols for the executables: - Place the following lines in Your login.com - Change "disk:[directory]" as appropriate. - $ gzip == "$disk:[directory]gzip.exe" - $ gunzip == "$disk:[directory]gunzip.exe" - $ zcat == "$disk:[directory]zcat.exe" - 6. insert help-file gzip.hlp in any Help-library, - for example in sys$help:helplib. - this can be done by $lib sys$help:helplib/help gzip - (I did not try this command) - -Steps (4.)5. through 6 must be done by hand. -Steps 1 through 3(4.) may be done by one of the makefiles: - -a) MAKEGZIP.COM -This was crated from MAKEFILE.VMS and later on edited. It uses the -VAXC-Compiler and does compiling, linking and making the entries. -Usage: -- change to the Source-Directory -- copy vms.c - $copy [.vms]vms.c [] -- start compiling, linking, entries - $@[.vms]makegzip -if everything is OK. then you get gzip.exe, gunzip.exe, zcat.exe -continue at Step 4. - -b) MAKEFILE.VMS -Makefile for a vms-make utility (NOT gnu-make). -Is uses the VAXC-Compiler and has the Advantage over MAKEGZIP.COM -that make checks dependencies. This is helpfull if You have to -recompile several times, for example after editing the sources. -- change to the Source-Directory -- copy vms.c - $copy [.vms]vms.c [] -- start compiling, linking, entries - $make /input=[.vms]makefile.vms -if everything is OK. then you get gzip.exe, gunzip.exe, zcat.exe -Continue at Step 4. - -c) MAKEFILE.GCC -Same as MAKEFILE.VMS, but uses gcc -- Use $make /input=[.vms]makefile.gcc instead of make .... - -d) MAKEFILE.MMS -Makefile for the MMS-utility. Similar to MAKEFILE.VMS -- Use $mms /description=[.vms]makefile.mms instead of make .... diff --git a/Build/source/utils/gzip/vms/gzip.hlp b/Build/source/utils/gzip/vms/gzip.hlp deleted file mode 100644 index ba53cc643dd..00000000000 --- a/Build/source/utils/gzip/vms/gzip.hlp +++ /dev/null @@ -1,297 +0,0 @@ -1 GZIP -NAME - gzip, gunzip, zcat - compress or expand files - -SYNOPSIS - gzip [ -acdfhlLnNrtvV19 ] [-S suffix] [ name ... ] - gunzip [ -acfhlLnNrtvV ] [-S suffix] [ name ... ] - zcat [ -fhLV ] [ name ... ] - -2 DESCRIPTION - Gzip reduces the size of the named files using Lempel-Ziv - coding (LZ77). Whenever possible, each file is replaced by - one with the extension .gz, while keeping the same ownership - modes, access and modification times. (The default exten- - sion is -gz for VMS, z for MSDOS, OS/2 FAT, Windows NT FAT - and Atari.) If no files are specified, or if a file name is - "-", the standard input is compressed to the standard out- - put. Gzip will only attempt to compress regular files. - - If the compressed file name is too long for its file system, - gzip truncates it. Gzip attempts to truncate only the parts - of the file name longer than 3 characters. (A part is del- - imited by dots.) If the name consists of small parts only, - the longest parts are truncated. For example, if file names - are limited to 14 characters, gzip.msdos.exe is compressed - to gzi.msd.exe.gz. Names are not truncated on systems which - do not have a limit on file name length. - - By default, gzip keeps the original file name and timestamp - in the compressed file. These are used when decompressing - the file with the -N option. This is useful when the - compressed file name was truncated or when the time stamp - was not preserved after a file transfer. - - Compressed files can be restored to their original form - using gzip -d or gunzip or zcat. If the original name saved - in the compressed file is not suitable for its file system, - a new name is constructed from the original one to make it - legal. - - gunzip takes a list of files on its command line and - replaces each file whose name ends with .gz, -gz, .z, -z, _z - or .Z and which begins with the correct magic number with an - uncompressed file without the original extension. gunzip - also recognizes the special extensions .tgz and .taz as - shorthands for .tar.gz and .tar.Z respectively. When - compressing, gzip uses the .tgz extension if necessary - instead of truncating a file with a .tar extension. - - gunzip can currently decompress files created by gzip, zip, - compress, compress -H or pack. The detection of the input - format is automatic. When using the first two formats, - gunzip checks a 32 bit CRC. For pack, gunzip checks the - uncompressed length. The standard compress format was not - designed to allow consistency checks. However gunzip is - sometimes able to detect a bad .Z file. If you get an error - when uncompressing a .Z file, do not assume that the .Z file - is correct simply because the standard uncompress does not - complain. This generally means that the standard uncompress - does not check its input, and happily generates garbage out- - put. The SCO compress -H format (lzh compression method) - does not include a CRC but also allows some consistency - checks. - - Files created by zip can be uncompressed by gzip only if - they have a single member compressed with the 'deflation' - method. This feature is only intended to help conversion of - tar.zip files to the tar.gz format. To extract zip files - with several members, use unzip instead of gunzip. - - zcat is identical to gunzip -c. (On some systems, zcat may - be installed as gzcat to preserve the original link to - compress.) zcat uncompresses either a list of files on the - command line or its standard input and writes the - uncompressed data on standard output. zcat will uncompress - files that have the correct magic number whether they have a - .gz suffix or not. - - Gzip uses the Lempel-Ziv algorithm used in zip and PKZIP. - The amount of compression obtained depends on the size of - the input and the distribution of common substrings. Typi- - cally, text such as source code or English is reduced by - 60-70%. Compression is generally much better than that - achieved by LZW (as used in compress), Huffman coding (as - used in pack), or adaptive Huffman coding (compact). - - Compression is always performed, even if the compressed file - is slightly larger than the original. The worst case expan- - sion is a few bytes for the gzip file header, plus 5 bytes - every 32K block, or an expansion ratio of 0.015% for large - files. Note that the actual number of used disk blocks - almost never increases. gzip preserves the mode, ownership - and timestamps of files when compressing or decompressing. - -2 OPTIONS - -a --ascii - Ascii text mode: convert end-of-lines using local con- - ventions. This option is supported only on some non- - Unix systems. For MSDOS, CR LF is converted to LF when - compressing, and LF is converted to CR LF when - decompressing. - - -c --stdout --to-stdout - Write output on standard output; keep original files - unchanged. If there are several input files, the out- - put consists of a sequence of independently compressed - members. To obtain better compression, concatenate all - input files before compressing them. - - -d --decompress --uncompress - Decompress. - - -f --force - Force compression or decompression even if the file has - multiple links or the corresponding file already - exists, or if the compressed data is read from or writ- - ten to a terminal. If the input data is not in a format - recognized by gzip, and if the option --stdout is also - given, copy the input data without change to the stan- - dard ouput: let zcat behave as cat. If -f is not given, - and when not running in the background, gzip prompts to - verify whether an existing file should be overwritten. - - -h --help - Display a help screen and quit. - - -l --list - For each compressed file, list the following fields: - - compressed size: size of the compressed file - uncompressed size: size of the uncompressed file - ratio: compression ratio (0.0% if unknown) - uncompressed_name: name of the uncompressed file - - The uncompressed size is given as -1 on VMS because it - it is not possible to seek reliably to the end of the - compressed file, where this size is stored. - - In combination with the --verbose option, the following - fields are also displayed: - - method: compression method - crc: the 32-bit CRC of the uncompressed data - date & time: time stamp for the uncompressed file - - The compression methods currently supported are - deflate, compress, lzh (SCO compress -H) and pack. The - crc is given as ffffffff on VMS for the reason given - above about the uncompressed size. - - With --name, the uncompressed name, date and time are - those stored within the compress file if present. - - With --verbose, the size totals and compression ratio - for all files is also displayed, unless some sizes are - unknown. With --quiet, the title and totals lines are - not displayed. - - -L --license - Display the gzip license and quit. - - -n --no-name - When compressing, do not save the original file name - and time stamp by default. (The original name is always - saved if the name had to be truncated.) When - decompressing, do not restore the original file name if - present (remove only the gzip suffix from the - compressed file name) and do not restore the original - time stamp if present (copy it from the compressed - file). This option is the default when decompressing. - - -N --name - When compressing, always save the original file name - and time stamp; this is the default. When decompress- - ing, restore the original file name and time stamp if - present. This option is useful on systems which have a - limit on file name length or when the time stamp has - been lost after a file transfer. - - -q --quiet - Suppress all warnings. - - -r --recursive - Travel the directory structure recursively. If any of - the file names specified on the command line are direc- - tories, gzip will descend into the directory and - compress all the files it finds there (or decompress - them in the case of gunzip ). - - -S suf --suffix suf - Use suffix suf instead of -gz. Any suffix can be - given, but suffixes other than -z and -gz should be - avoided to avoid confusion when files are transferred - to other. A null suffix forces gunzip to try - decompression on all given files regardless of suffix, - as in: - - gunzip --suffix "" *.* - - Previous versions of gzip used the -z suffix. This was - changed to avoid a conflict with pack on Unix. - - -t --test - Test. Check the compressed file integrity. - - -v --verbose - Verbose. Display the name and percentage reduction for - each file compressed or decompressed. - - -V --version - Version. Display the version number and compilation - options then quit. - - -# --fast --best - Regulate the speed of compression using the specified - digit #, where -1 or --fast indicates the fastest - compression method (less compression) and -9 or --best - indicates the slowest compression method (best compres- - sion). The default compression level is -6 (that is, - biased towards high compression at expense of speed). - -2 ENVIRONMENT - The environment variable GZIP_OPT can hold a set of default - options for gzip. These options are interpreted first and - can be overwritten by explicit command line parameters. For - example: - define GZIP_OPT "-8 -v" - -2 SEE ALSO - compress, zip, unzip - -2 DIAGNOSTICS - Exit status is normally 0; if an error occurs, exit status - is 1. If a warning occurs, exit status is 2. - - Usage: gzip [-cdfhlLnNrtvV19] [-S suffix] [file ...] - Invalid options were specified on the command line. - file: not in gzip format - The file specified to gunzip has not been - compressed. - file: Corrupt input. Use zcat to recover some data. - The compressed file has been damaged. The data up to - the point of failure can be recovered using - define /user sys$output file.recover - zcat file - file: compressed with xx bits, can only handle yy bits - File was compressed (using LZW) by a program that - could deal with more bits than the decompress code - on this machine. Recompress the file with gzip, - which compresses better and uses less memory. - file: already has -gz suffix -- no change - The file is assumed to be already compressed. - Rename the file and try again. - file already exists; do you wish to overwrite (y or n)? - Respond "y" if you want the output file to be - replaced; "n" if not. - gunzip: corrupt input - A SIGSEGV violation was detected which usually means - that the input file has been corrupted. - xx.x% - Percentage of the input saved by compression. - (Relevant only for -v and -l.) - -- not a regular file or directory: ignored - When the input file is not a regular file or direc- - tory, it is left unaltered. - -2 CAVEATS - On VMS: - - upper case options need quotes: gzip "-V". - - restoration of timestamps and version numbers is not supported - - If a compressed file already exists, gzip -f overwrites it, it - does not create a new version. - - multi-part gzip files are not supported. - - gunzip does not preserve the input file format. You can use a - separate utility to restore the original format. - - gunzip and zcat can be used only if you have created the - links to gzip as documented in makegzip.com. Otherwise - you must use explicit parameters ("gzip -c" or "gzip -dc"). - - gzip --list cannot give the uncompressed size and crc. - - When writing compressed data to a tape, it is generally - necessary to pad the output with zeroes up to a block boun- - dary. When the data is read and the whole block is passed to - gunzip for decompression, gunzip detects that there is extra - trailing garbage after the compressed data and emits a warn- - ing by default. You have to use the --quiet option to - suppress the warning. This option can be set in the GZIP_OPT - environment variable as in: - define GZIP_OPT "-q" - -2 BUGS - On VMS, files in VFC record format are not correctly handled by - the C runtime library (the linefeed character is suppressed). - - In some rare cases, the --best option gives worse compres- - sion than the default compression level (-6). On some highly - redundant files, compress compresses better than gzip. diff --git a/Build/source/utils/gzip/vms/makegzip.com b/Build/source/utils/gzip/vms/makegzip.com deleted file mode 100755 index def90f64508..00000000000 --- a/Build/source/utils/gzip/vms/makegzip.com +++ /dev/null @@ -1,71 +0,0 @@ -$! Makefile for VMS -$! DCL-Shell-language. Edit the symbols section at the end. -$! -$ On Control_Y Then Goto The_Exit -$ On Error Then Goto The_Exit -$ define/user sys sys$library -$ cc gzip.c /define=(VAXC) -$ define/user sys sys$library -$ cc zip.c /define=(VAXC) -$ define/user sys sys$library -$ cc deflate.c /define=(VAXC) -$ define/user sys sys$library -$ cc trees.c /define=(VAXC) -$ define/user sys sys$library -$ cc bits.c /define=(VAXC) -$ define/user sys sys$library -$ cc unzip.c /define=(VAXC) -$ define/user sys sys$library -$ cc inflate.c /define=(VAXC) -$ define/user sys sys$library -$ cc util.c /define=(VAXC) -$ define/user sys sys$library -$ cc crypt.c /define=(VAXC) -$ define/user sys sys$library -$ cc lzw.c /define=(VAXC) -$ define/user sys sys$library -$ cc unlzw.c /define=(VAXC) -$ define/user sys sys$library -$ cc unpack.c /define=(VAXC) -$ define/user sys sys$library -$ cc unlzh.c /define=(VAXC) -$ define/user sys sys$library -$ cc getopt.c /define=(VAXC) -$ define/user sys sys$library -$ cc vms.c /define=(VAXC) -$ linkobjs:=gzip.obj zip.obj deflate.obj trees.obj bits.obj unzip.obj - - inflate.obj util.obj crypt.obj lzw.obj unlzw.obj unpack.obj unlzh.obj - - getopt.obj vms.obj -$ Schleife: -$ p = f$locate(" ",linkobjs) -$ if p .lt. f$length(linkobjs) -$ then linkobjs[p,1]:="," -$ goto Schleife -$ endif -$ write sys$output "linking ''linkobjs'" -$ link /exec=gzip.exe 'linkobjs',sys$input/opt -SYS$LIBRARY:VAXCRTL/SHARE -$ -$ ! Create a hard link. (To remove both files, delete the copy FIRST, then -$ ! the original. Otherwise, if original deleted first [copy says "no such -$ ! file"], must use "set file/remove gunzip.exe;#" to get rid of the copy. -$ ! Unlike in Unix, deleting the original ALWAYS destroys the data--but not -$ ! the directory entry of the copy.) Using a hard link saves disk space, by -$ ! the way. Note, however, that copying a hard link copies the data, not -$ ! just the link. Therefore, set up the link in the directory in which the -$ ! executable is to reside, or else rename (move) the executables into the -$ ! directory. -$ ! -$ set file/enter=gunzip.exe gzip.exe -$ set file/enter=zcat.exe gzip.exe -$ -$ ! Set up symbols for the gzip executable. Edit the example below, -$ ! changing "disk:[directory]" as appropriate. -$ ! -$ gzip == "$disk:[directory]gzip.exe" -$ gunzip == "$disk:[directory]gunzip.exe" -$ zcat == "$disk:[directory]zcat.exe" -$ -$The_Exit: -$ Save_Status = $STATUS -$ exit Save_Status diff --git a/Build/source/utils/gzip/vms/vms.c b/Build/source/utils/gzip/vms/vms.c deleted file mode 100644 index 51b891a22fb..00000000000 --- a/Build/source/utils/gzip/vms/vms.c +++ /dev/null @@ -1,102 +0,0 @@ -/* vms.c -- target dependent functions for VMS - * This is free software; you can redistribute it and/or modify it under the - * terms of the GNU General Public License, see the file COPYING. - * - * This file was written by Karl-Jose Filler <pla_jfi@pki-nbg.philips.de> - * and updated by Jean-loup Gailly. - */ - -#include <stdio.h> - -static char **vms_argv = NULL; - -static int max_files = 10000; - -struct Str_desc { - int length; - char *addr; -}; - -vms_expand_args(old_argc, argv) - int *old_argc; - char **argv[]; -{ - int i; - int new_argc = 0; - int context, status; - char buf[255], *p; - - vms_argv = (char**)xmalloc((max_files+1)*sizeof(char*)); - - vms_argv[new_argc++] = **argv; - - for (i=1; i < *old_argc; i++) { - if (*argv[0][i] == '-') { /* switches */ - if (new_argc < max_files) { - vms_argv[new_argc++] = argv[0][i]; - } - } else { /* Files */ - context = 0; - if (find_file_c(argv[0][i], buf, sizeof(buf), &context) & 1 != 1) { - /* - * Wrong file ? - * forward it to gzip - */ - if (new_argc < max_files) { - vms_argv[new_argc++] = argv[0][i]; - } - } else { - p = (char*)xmalloc(strlen(buf)+1); - strcpy(p, buf); - if (new_argc < max_files) { - vms_argv[new_argc++] = p; - } - while (find_file_c(argv[0][i], buf, - sizeof(buf), &context) & 1 == 1) { - p = (char*)xmalloc(strlen(buf)+1); - strcpy(p, buf); - if (new_argc < max_files) { - vms_argv[new_argc++] = p; - } - } - } - } - } - if (new_argc <= max_files) { - *old_argc = new_argc; - vms_argv[new_argc] = NULL; - *argv = vms_argv; - } else { - free(vms_argv); /* the expanded file names should also be freed ... */ - vms_argv = NULL; - max_files = new_argc + 1; - vms_expand_args(old_argc, argv); - } -} - -int find_file_c(in,out,out_len,context) - char *in; - char *out; - int out_len; - int *context; -{ - struct Str_desc in_desc,out_desc; - int status; - char *p; - - in_desc.addr = in; - in_desc.length = strlen(in); - - out_desc.addr = out; - out_desc.length = out_len; - - status = lib$find_file(&in_desc,&out_desc,context); - - p = out_desc.addr; - while(*p != ' ') { - p++; - } - *p = 0; - - return status; -} diff --git a/Build/source/utils/gzip/zdiff.1 b/Build/source/utils/gzip/zdiff.1 deleted file mode 100644 index ea3bf4103fc..00000000000 --- a/Build/source/utils/gzip/zdiff.1 +++ /dev/null @@ -1,44 +0,0 @@ -.TH ZDIFF 1 -.SH NAME -zcmp, zdiff \- compare compressed files -.SH SYNOPSIS -.B zcmp -[ cmp_options ] file1 -[ file2 ] -.br -.B zdiff -[ diff_options ] file1 -[ file2 ] -.SH DESCRIPTION -.I Zcmp -and -.I zdiff -are used to invoke the -.I cmp -or the -.I diff -program on compressed files. All options specified are passed directly to -.I cmp -or -.IR diff "." -If only 1 file is specified, then the files compared are -.I file1 -and an uncompressed -.IR file1 ".gz." -If two files are specified, then they are uncompressed if necessary and fed to -.I cmp -or -.IR diff "." -The exit status from -.I cmp -or -.I diff -is preserved. -.SH "SEE ALSO" -cmp(1), diff(1), zmore(1), zgrep(1), znew(1), zforce(1), gzip(1), gzexe(1) -.SH BUGS -Messages from the -.I cmp -or -.I diff -programs refer to temporary filenames instead of those specified. diff --git a/Build/source/utils/gzip/zdiff.in b/Build/source/utils/gzip/zdiff.in deleted file mode 100644 index 110454ccf84..00000000000 --- a/Build/source/utils/gzip/zdiff.in +++ /dev/null @@ -1,70 +0,0 @@ -: -#!/bin/sh -# sh is buggy on RS/6000 AIX 3.2. Replace above line with #!/bin/ksh - -# Zcmp and zdiff are used to invoke the cmp or the diff pro- -# gram on compressed files. All options specified are passed -# directly to cmp or diff. If only 1 file is specified, then -# the files compared are file1 and an uncompressed file1.gz. -# If two files are specified, then they are uncompressed (if -# necessary) and fed to cmp or diff. The exit status from cmp -# or diff is preserved. - -PATH="BINDIR:$PATH"; export PATH -prog=`echo $0 | sed 's|.*/||'` -case "$prog" in - *cmp) comp=${CMP-cmp} ;; - *) comp=${DIFF-diff} ;; -esac - -OPTIONS= -FILES= -for ARG -do - case "$ARG" in - -*) OPTIONS="$OPTIONS $ARG";; - *) if test -f "$ARG"; then - FILES="$FILES $ARG" - else - echo "${prog}: $ARG not found or not a regular file" - exit 1 - fi ;; - esac -done -if test -z "$FILES"; then - echo "Usage: $prog [${comp}_options] file [file]" - exit 1 -fi -set $FILES -if test $# -eq 1; then - FILE=`echo "$1" | sed 's/[-.][zZtga]*$//'` - gzip -cd "$1" | $comp $OPTIONS - "$FILE" - STAT="$?" - -elif test $# -eq 2; then - case "$1" in - *[-.]gz* | *[-.][zZ] | *.t[ga]z) - case "$2" in - *[-.]gz* | *[-.][zZ] | *.t[ga]z) - F=`echo "$2" | sed 's|.*/||;s|[-.][zZtga]*||'` - gzip -cdfq "$2" > /tmp/"$F".$$ - gzip -cdfq "$1" | $comp $OPTIONS - /tmp/"$F".$$ - STAT="$?" - /bin/rm -f /tmp/"$F".$$;; - - *) gzip -cdfq "$1" | $comp $OPTIONS - "$2" - STAT="$?";; - esac;; - *) case "$2" in - *[-.]gz* | *[-.][zZ] | *.t[ga]z) - gzip -cdfq "$2" | $comp $OPTIONS "$1" - - STAT="$?";; - *) $comp $OPTIONS "$1" "$2" - STAT="$?";; - esac;; - esac - exit "$STAT" -else - echo "Usage: $prog [${comp}_options] file [file]" - exit 1 -fi diff --git a/Build/source/utils/gzip/zforce.1 b/Build/source/utils/gzip/zforce.1 deleted file mode 100644 index 37c6aba6ac7..00000000000 --- a/Build/source/utils/gzip/zforce.1 +++ /dev/null @@ -1,20 +0,0 @@ -.TH ZFORCE 1 -.SH NAME -zforce \- force a '.gz' extension on all gzip files -.SH SYNOPSIS -.B zforce -[ name ... ] -.SH DESCRIPTION -.I zforce -forces a .gz extension on all -.I gzip -files so that -.I gzip -will not compress them twice. -This can be useful for files with names truncated after a file transfer. -On systems with a 14 char limitation on file names, the original name -is truncated to make room for the .gz suffix. For example, -12345678901234 is renamed to 12345678901.gz. A file name such as foo.tgz -is left intact. -.SH "SEE ALSO" -gzip(1), znew(1), zmore(1), zgrep(1), zdiff(1), gzexe(1) diff --git a/Build/source/utils/gzip/zforce.in b/Build/source/utils/gzip/zforce.in deleted file mode 100644 index 4ae5763caf8..00000000000 --- a/Build/source/utils/gzip/zforce.in +++ /dev/null @@ -1,42 +0,0 @@ -: -#!/bin/sh -# zforce: force a gz extension on all gzip files so that gzip will not -# compress them twice. -# -# This can be useful for files with names truncated after a file transfer. -# 12345678901234 is renamed to 12345678901.gz - -PATH="BINDIR:$PATH"; export PATH -x=`basename $0` -if test $# = 0; then - echo "force a '.gz' extension on all gzip files" - echo usage: $x files... - exit 1 -fi - -res=0 -for i do - if test ! -f "$i" ; then - echo ${x}: $i not a file - res=1 - continue - fi - test `expr "$i" : '.*[.-]z$'` -eq 0 || continue - test `expr "$i" : '.*[.-]gz$'` -eq 0 || continue - test `expr "$i" : '.*[.]t[ag]z$'` -eq 0 || continue - - if gzip -l < "$i" 2>/dev/null | grep '^defl' > /dev/null; then - - if test `expr "$i" : '^............'` -eq 12; then - new=`expr "$i" : '\(.*\)...$`.gz - else - new="$i.gz" - fi - if mv "$i" "$new" 2>/dev/null; then - echo $i -- replaced with $new - continue - fi - res=1; echo ${x}: cannot rename $i to $new - fi -done -exit $res diff --git a/Build/source/utils/gzip/zgrep.1 b/Build/source/utils/gzip/zgrep.1 deleted file mode 100644 index a52a88abcf8..00000000000 --- a/Build/source/utils/gzip/zgrep.1 +++ /dev/null @@ -1,44 +0,0 @@ -.TH ZGREP 1 -.SH NAME -zgrep \- search possibly compressed files for a regular expression -.SH SYNOPSIS -.B zgrep -[ grep_options ] -.BI [\ -e\ ] " pattern" -.IR filename ".\|.\|." -.SH DESCRIPTION -.IR Zgrep -is used to invoke the -.I grep -on compress'ed or gzip'ed files. All options specified are passed directly to -.I grep. -If no file is specified, then the standard input is decompressed -if necessary and fed to grep. -Otherwise the given files are uncompressed if necessary and fed to -.I grep. -.PP -If -.I zgrep -is invoked as -.I zegrep -or -.I zfgrep -then -.I egrep -or -.I fgrep -is used instead of -.I grep. -If the GREP environment variable is set, -.I zgrep -uses it as the -.I grep -program to be invoked. For example: - - for sh: GREP=fgrep zgrep string files - for csh: (setenv GREP fgrep; zgrep string files) -.SH AUTHOR -Charles Levert (charles@comm.polymtl.ca) -.SH "SEE ALSO" -grep(1), egrep(1), fgrep(1), zdiff(1), zmore(1), znew(1), zforce(1), -gzip(1), gzexe(1) diff --git a/Build/source/utils/gzip/zgrep.in b/Build/source/utils/gzip/zgrep.in deleted file mode 100644 index 9fcd8282bde..00000000000 --- a/Build/source/utils/gzip/zgrep.in +++ /dev/null @@ -1,67 +0,0 @@ -: -#!/bin/sh - -# zgrep -- a wrapper around a grep program that decompresses files as needed -# Adapted from a version sent by Charles Levert <charles@comm.polymtl.ca> - -PATH="BINDIR:$PATH"; export PATH - -prog=`echo $0 | sed 's|.*/||'` -case "$prog" in - *egrep) grep=${EGREP-egrep} ;; - *fgrep) grep=${FGREP-fgrep} ;; - *) grep=${GREP-grep} ;; -esac -pat="" -while test $# -ne 0; do - case "$1" in - -e | -f) opt="$opt $1"; shift; pat="$1" - if test "$grep" = grep; then # grep is buggy with -e on SVR4 - grep=egrep - fi;; - -*) opt="$opt $1";; - *) if test -z "$pat"; then - pat="$1" - else - break; - fi;; - esac - shift -done - -if test -z "$pat"; then - echo "grep through gzip files" - echo "usage: $prog [grep_options] pattern [files]" - exit 1 -fi - -list=0 -silent=0 -op=`echo "$opt" | sed -e 's/ //g' -e 's/-//g'` -case "$op" in - *l*) list=1 -esac -case "$op" in - *h*) silent=1 -esac - -if test $# -eq 0; then - gzip -cdfq | $grep $opt "$pat" - exit $? -fi - -res=0 -for i do - if test $list -eq 1; then - gzip -cdfq "$i" | $grep $opt "$pat" > /dev/null && echo $i - r=$? - elif test $# -eq 1 -o $silent -eq 1; then - gzip -cdfq "$i" | $grep $opt "$pat" - r=$? - else - gzip -cdfq "$i" | $grep $opt "$pat" | sed "s|^|${i}:|" - r=$? - fi - test "$r" -ne 0 && res="$r" -done -exit $res diff --git a/Build/source/utils/gzip/zip.c b/Build/source/utils/gzip/zip.c deleted file mode 100644 index 507d1616efd..00000000000 --- a/Build/source/utils/gzip/zip.c +++ /dev/null @@ -1,117 +0,0 @@ -/* zip.c -- compress files to the gzip or pkzip format - * Copyright (C) 1992-1993 Jean-loup Gailly - * This is free software; you can redistribute it and/or modify it under the - * terms of the GNU General Public License, see the file COPYING. - */ - -#ifdef RCSID -static char rcsid[] = "$Id: zip.c,v 0.17 1993/06/10 13:29:25 jloup Exp $"; -#endif - -#include <ctype.h> -#include <sys/types.h> - -#include "tailor.h" -#include "gzip.h" -#include "crypt.h" - -#ifdef HAVE_UNISTD_H -# include <unistd.h> -#endif -#ifndef NO_FCNTL_H -# include <fcntl.h> -#endif - -local ulg crc; /* crc on uncompressed file data */ -long header_bytes; /* number of bytes in gzip header */ - -/* =========================================================================== - * Deflate in to out. - * IN assertions: the input and output buffers are cleared. - * The variables time_stamp and save_orig_name are initialized. - */ -int zip(in, out) - int in, out; /* input and output file descriptors */ -{ - uch flags = 0; /* general purpose bit flags */ - ush attr = 0; /* ascii/binary flag */ - ush deflate_flags = 0; /* pkzip -es, -en or -ex equivalent */ - - ifd = in; - ofd = out; - outcnt = 0; - - /* Write the header to the gzip file. See algorithm.doc for the format */ - - method = DEFLATED; - put_byte(GZIP_MAGIC[0]); /* magic header */ - put_byte(GZIP_MAGIC[1]); - put_byte(DEFLATED); /* compression method */ - - if (save_orig_name) { - flags |= ORIG_NAME; - } - put_byte(flags); /* general flags */ - put_long(time_stamp); - - /* Write deflated file to zip file */ - crc = updcrc(0, 0); - - bi_init(out); - ct_init(&attr, &method); - lm_init(level, &deflate_flags); - - put_byte((uch)deflate_flags); /* extra flags */ - put_byte(OS_CODE); /* OS identifier */ - - if (save_orig_name) { - char *p = basename(ifname); /* Don't save the directory part. */ - do { - put_char(*p); - } while (*p++); - } - header_bytes = (long)outcnt; - - (void)deflate(); - -#if !defined(NO_SIZE_CHECK) && !defined(RECORD_IO) - /* Check input size (but not in VMS -- variable record lengths mess it up) - * and not on MSDOS -- diet in TSR mode reports an incorrect file size) - */ - if (ifile_size != -1L && isize != (ulg)ifile_size) { - Trace((stderr, " actual=%ld, read=%ld ", ifile_size, isize)); - fprintf(stderr, "%s: %s: file size changed while zipping\n", - progname, ifname); - } -#endif - - /* Write the crc and uncompressed size */ - put_long(crc); - put_long(isize); - header_bytes += 2*sizeof(long); - - flush_outbuf(); - return OK; -} - - -/* =========================================================================== - * Read a new buffer from the current input file, perform end-of-line - * translation, and update the crc and input file size. - * IN assertion: size >= 2 (for end-of-line translation) - */ -int file_read(buf, size) - char *buf; - unsigned size; -{ - unsigned len; - - Assert(insize == 0, "inbuf not empty"); - - len = read(ifd, buf, size); - if (len == (unsigned)(-1) || len == 0) return (int)len; - - crc = updcrc((uch*)buf, len); - isize += (ulg)len; - return (int)len; -} diff --git a/Build/source/utils/gzip/zmore.1 b/Build/source/utils/gzip/zmore.1 deleted file mode 100644 index f7f1843de01..00000000000 --- a/Build/source/utils/gzip/zmore.1 +++ /dev/null @@ -1,145 +0,0 @@ -.TH ZMORE 1 -.SH NAME -zmore \- file perusal filter for crt viewing of compressed text -.SH SYNOPSIS -.B zmore -[ name ... ] -.SH DESCRIPTION -.I Zmore -is a filter which allows examination of compressed or plain text files -one screenful at a time on a soft-copy terminal. -.I zmore -works on files compressed with -.I compress, pack -or -.I gzip, -and also on uncompressed files. -If a file does not exist, -.I zmore -looks for a file of the same name with the addition of a .gz, .z or .Z suffix. -.PP -.I Zmore -normally pauses after each screenful, printing --More-- -at the bottom of the screen. -If the user then types a carriage return, one more line is displayed. -If the user hits a space, -another screenful is displayed. Other possibilities are enumerated later. -.PP -.I Zmore -looks in the file -.I /etc/termcap -to determine terminal characteristics, -and to determine the default window size. -On a terminal capable of displaying 24 lines, -the default window size is 22 lines. -To use a pager other than the default -.I more, -set environment variable PAGER to the name of the desired program, such as -.I less. -.PP -Other sequences which may be typed when -.I zmore -pauses, and their effects, are as follows (\fIi\fP is an optional integer -argument, defaulting to 1) : -.PP -.IP \fIi\|\fP<space> -display -.I i -more lines, (or another screenful if no argument is given) -.PP -.IP ^D -display 11 more lines (a ``scroll''). -If -.I i -is given, then the scroll size is set to \fIi\|\fP. -.PP -.IP d -same as ^D (control-D) -.PP -.IP \fIi\|\fPz -same as typing a space except that \fIi\|\fP, if present, becomes the new -window size. Note that the window size reverts back to the default at the -end of the current file. -.PP -.IP \fIi\|\fPs -skip \fIi\|\fP lines and print a screenful of lines -.PP -.IP \fIi\|\fPf -skip \fIi\fP screenfuls and print a screenful of lines -.PP -.IP "q or Q" -quit reading the current file; go on to the next (if any) -.PP -.IP "e or q" -When the prompt --More--(Next file: -.IR file ) -is printed, this command causes zmore to exit. -.PP -.IP s -When the prompt --More--(Next file: -.IR file ) -is printed, this command causes zmore to skip the next file and continue. -.PP -.IP = -Display the current line number. -.PP -.IP \fIi\|\fP/expr -search for the \fIi\|\fP-th occurrence of the regular expression \fIexpr.\fP -If the pattern is not found, -.I zmore -goes on to the next file (if any). -Otherwise, a screenful is displayed, starting two lines before the place -where the expression was found. -The user's erase and kill characters may be used to edit the regular -expression. -Erasing back past the first column cancels the search command. -.PP -.IP \fIi\|\fPn -search for the \fIi\|\fP-th occurrence of the last regular expression entered. -.PP -.IP !command -invoke a shell with \fIcommand\|\fP. -The character `!' in "command" are replaced with the -previous shell command. The sequence "\\!" is replaced by "!". -.PP -.IP ":q or :Q" -quit reading the current file; go on to the next (if any) -(same as q or Q). -.PP -.IP . -(dot) repeat the previous command. -.PP -The commands take effect immediately, i.e., it is not necessary to -type a carriage return. -Up to the time when the command character itself is given, -the user may hit the line kill character to cancel the numerical -argument being formed. -In addition, the user may hit the erase character to redisplay the ---More-- message. -.PP -At any time when output is being sent to the terminal, the user can -hit the quit key (normally control\-\\). -.I Zmore -will stop sending output, and will display the usual --More-- -prompt. -The user may then enter one of the above commands in the normal manner. -Unfortunately, some output is lost when this is done, due to the -fact that any characters waiting in the terminal's output queue -are flushed when the quit signal occurs. -.PP -The terminal is set to -.I noecho -mode by this program so that the output can be continuous. -What you type will thus not show on your terminal, except for the / and ! -commands. -.PP -If the standard output is not a teletype, then -.I zmore -acts just like -.I zcat, -except that a header is printed before each file. -.SH FILES -.DT -/etc/termcap Terminal data base -.SH "SEE ALSO" -more(1), gzip(1), zdiff(1), zgrep(1), znew(1), zforce(1), gzexe(1) diff --git a/Build/source/utils/gzip/zmore.in b/Build/source/utils/gzip/zmore.in deleted file mode 100644 index 0865167ddfd..00000000000 --- a/Build/source/utils/gzip/zmore.in +++ /dev/null @@ -1,52 +0,0 @@ -: -#!/bin/sh - -PATH="BINDIR:$PATH"; export PATH -if test "`echo -n a`" = "-n a"; then - # looks like a SysV system: - n1=''; n2='\c' -else - n1='-n'; n2='' -fi -oldtty=`stty -g 2>/dev/null` -if stty -cbreak 2>/dev/null; then - cb='cbreak'; ncb='-cbreak' -else - # 'stty min 1' resets eof to ^a on both SunOS and SysV! - cb='min 1 -icanon'; ncb='icanon eof ^d' -fi -if test $? -eq 0 -a -n "$oldtty"; then - trap 'stty $oldtty 2>/dev/null; exit' 0 2 3 5 10 13 15 -else - trap 'stty $ncb echo 2>/dev/null; exit' 0 2 3 5 10 13 15 -fi - -if test $# = 0; then - if test -t 0; then - echo usage: zmore files... - else - gzip -cdfq | eval ${PAGER-more} - fi -else - FIRST=1 - for FILE - do - if test $FIRST -eq 0; then - echo $n1 "--More--(Next file: $FILE)$n2" - stty $cb -echo 2>/dev/null - ANS=`dd bs=1 count=1 2>/dev/null` - stty $ncb echo 2>/dev/null - echo " " - if test "$ANS" = 'e' -o "$ANS" = 'q'; then - exit - fi - fi - if test "$ANS" != 's'; then - echo "------> $FILE <------" - gzip -cdfq "$FILE" | eval ${PAGER-more} - fi - if test -t; then - FIRST=0 - fi - done -fi diff --git a/Build/source/utils/gzip/znew.1 b/Build/source/utils/gzip/znew.1 deleted file mode 100644 index 5cfb47246e3..00000000000 --- a/Build/source/utils/gzip/znew.1 +++ /dev/null @@ -1,39 +0,0 @@ -.TH ZNEW 1 -.SH NAME -znew \- recompress .Z files to .gz files -.SH SYNOPSIS -.B znew -[ -ftv9PK] [ name.Z ... ] -.SH DESCRIPTION -.I Znew -recompresses files from .Z (compress) format to .gz (gzip) format. -If you want to recompress a file already in gzip format, rename the file -to force a .Z extension then apply znew. -.SH OPTIONS -.TP -.B \-f -Force recompression from .Z to .gz format even if a .gz file already exists. -.TP -.B \-t -Tests the new files before deleting originals. -.TP -.B \-v -Verbose. Display the name and percentage reduction for each file compressed. -.TP -.B \-9 -Use the slowest compression method (optimal compression). -.TP -.B \-P -Use pipes for the conversion to reduce disk space usage. -.TP -.B \-K -Keep a .Z file when it is smaller than the .gz file -.SH "SEE ALSO" -gzip(1), zmore(1), zdiff(1), zgrep(1), zforce(1), gzexe(1), compress(1) -.SH BUGS -.I Znew -does not maintain the time stamp with the -P option if -.I cpmod(1) -is not available and -.I touch(1) -does not support the -r option. diff --git a/Build/source/utils/gzip/znew.in b/Build/source/utils/gzip/znew.in deleted file mode 100644 index 5b61471e030..00000000000 --- a/Build/source/utils/gzip/znew.in +++ /dev/null @@ -1,146 +0,0 @@ -: -#!/bin/sh - -PATH="BINDIR:$PATH"; export PATH -check=0 -pipe=0 -opt= -files= -keep=0 -res=0 -old=0 -new=0 -block=1024 -# block is the disk block size (best guess, need not be exact) - -warn="(does not preserve modes and timestamp)" -tmp=/tmp/zfoo.$$ -echo hi > $tmp.1 -echo hi > $tmp.2 -if test -z "`(${CPMOD-cpmod} $tmp.1 $tmp.2) 2>&1`"; then - cpmod=${CPMOD-cpmod} - warn="" -fi - -if test -z "$cpmod" && ${TOUCH-touch} -r $tmp.1 $tmp.2 2>/dev/null; then - cpmod="${TOUCH-touch}" - cpmodarg="-r" - warn="(does not preserve file modes)" -fi - -# check if GZIP env. variable uses -S or --suffix -gzip -q $tmp.1 -ext=`echo $tmp.1* | sed "s|$tmp.1||"` -rm -f $tmp.[12]* -if test -z "$ext"; then - echo znew: error determining gzip extension - exit 1 -fi -if test "$ext" = ".Z"; then - echo znew: cannot use .Z as gzip extension. - exit 1 -fi - -for arg -do - case "$arg" in - -*) opt="$opt $arg"; shift;; - *) break;; - esac -done - -if test $# -eq 0; then - echo "recompress .Z files into $ext (gzip) files" - echo usage: `echo $0 | sed 's,^.*/,,'` "[-tv9KP]" file.Z... - echo " -t tests the new files before deleting originals" - echo " -v be verbose" - echo " -9 use the slowest compression method (optimal compression)" - echo " -K keep a .Z file when it is smaller than the $ext file" - echo " -P use pipes for the conversion $warn" - exit 1 -fi - -opt=`echo "$opt" | sed -e 's/ //g' -e 's/-//g'` -case "$opt" in - *t*) check=1; opt=`echo "$opt" | sed 's/t//g'` -esac -case "$opt" in - *K*) keep=1; opt=`echo "$opt" | sed 's/K//g'` -esac -case "$opt" in - *P*) pipe=1; opt=`echo "$opt" | sed 's/P//g'` -esac -if test -n "$opt"; then - opt="-$opt" -fi - -for i do - n=`echo $i | sed 's/.Z$//'` - if test ! -f "$n.Z" ; then - echo $n.Z not found - res=1; continue - fi - test $keep -eq 1 && old=`wc -c < "$n.Z"` - if test $pipe -eq 1; then - if gzip -d < "$n.Z" | gzip $opt > "$n$ext"; then - # Copy file attributes from old file to new one, if possible. - test -n "$cpmod" && $cpmod $cpmodarg "$n.Z" "$n$ext" 2> /dev/null - else - echo error while recompressing $n.Z - res=1; continue - fi - else - if test $check -eq 1; then - if cp -p "$n.Z" "$n.$$" 2> /dev/null || cp "$n.Z" "$n.$$"; then - : - else - echo cannot backup "$n.Z" - res=1; continue - fi - fi - if gzip -d "$n.Z"; then - : - else - test $check -eq 1 && mv "$n.$$" "$n.Z" - echo error while uncompressing $n.Z - res=1; continue - fi - if gzip $opt "$n"; then - : - else - if test $check -eq 1; then - mv "$n.$$" "$n.Z" && rm -f "$n" - echo error while recompressing $n - else - # compress $n (might be dangerous if disk full) - echo error while recompressing $n, left uncompressed - fi - res=1; continue - fi - fi - test $keep -eq 1 && new=`wc -c < "$n$ext"` - if test $keep -eq 1 -a `expr \( $old + $block - 1 \) / $block` -lt \ - `expr \( $new + $block - 1 \) / $block`; then - if test $pipe -eq 1; then - rm -f "$n$ext" - elif test $check -eq 1; then - mv "$n.$$" "$n.Z" && rm -f "$n$ext" - else - gzip -d "$n$ext" && compress "$n" && rm -f "$n$ext" - fi - echo "$n.Z smaller than $n$ext -- unchanged" - - elif test $check -eq 1; then - if gzip -t "$n$ext" ; then - rm -f "$n.$$" "$n.Z" - else - test $pipe -eq 0 && mv "$n.$$" "$n.Z" - rm -f "$n$ext" - echo error while testing $n$ext, $n.Z unchanged - res=1; continue - fi - elif test $pipe -eq 1; then - rm -f "$n.Z" - fi -done -exit $res |