# PaCkAgE DaTaStReAm SMCgzip 1 1330 # end of header 0707010002e3a7000081a40000000a0000000a000000013ca623f9000000b6000000200000001c00000000000000000000001000000004SMCgzip/pkginfoPKG=SMCgzip NAME=gzip ARCH=sparc VERSION=1.3.3 CATEGORY=application VENDOR=Free Software Foundation EMAIL=steve@smc.vnet.net PSTAMP=Steve Christensen BASEDIR=/usr/local CLASSES=none 0707010002e3a6000081a40000000a0000000a000000013ca623f9000009ac000000200000001c00000000000000000000000f00000004SMCgzip/pkgmap: 1 1330 1 d none bin 0755 bin bin 1 l none bin/gunzip=gzip 1 f none bin/gzexe 0755 bin bin 3877 36563 1017520142 1 f none bin/gzip 0755 bin bin 162533 13947 1017520142 1 l none bin/zcat=gzip 1 l none bin/zcmp=zdiff 1 f none bin/zdiff 0755 bin bin 1964 4302 1017520143 1 l none bin/zegrep=zgrep 1 l none bin/zfgrep=zgrep 1 f none bin/zforce 0755 bin bin 1012 10668 1017520143 1 f none bin/zgrep 0755 bin bin 2946 32976 1017520143 1 f none bin/zless 0755 bin bin 105 8034 1017520143 1 f none bin/zmore 0755 bin bin 1877 13671 1017520144 1 f none bin/znew 0755 bin bin 3517 63625 1017520144 1 d none doc 0755 bin bin 1 d none doc/gzip 0755 bin bin 1 f none doc/gzip/AUTHORS 0444 bin bin 98 8960 1017520291 1 f none doc/gzip/COPYING 0444 bin bin 17992 29528 1017520291 1 f none doc/gzip/ChangeLog 0644 bin bin 40179 61141 1017520291 1 f none doc/gzip/INSTALL 0444 bin bin 9221 25104 1017520291 1 f none doc/gzip/Makefile 0644 bin bin 22583 24262 1017520291 1 f none doc/gzip/Makefile.am 0444 bin bin 3574 27353 1017520291 1 f none doc/gzip/Makefile.in 0644 bin bin 23157 4947 1017520291 1 f none doc/gzip/NEWS 0444 bin bin 11941 45404 1017520291 1 f none doc/gzip/README 0444 bin bin 7448 12018 1017520291 1 f none doc/gzip/README-alpha 0444 bin bin 1240 40659 1017520291 1 f none doc/gzip/THANKS 0444 bin bin 13034 8137 1017520292 1 f none doc/gzip/TODO 0444 bin bin 3594 50579 1017520292 1 f none doc/gzip/algorithm.doc 0444 bin bin 7747 40357 1017520292 1 f none doc/gzip/gzip.doc 0644 bin bin 16730 509 1017520292 1 f none doc/gzip/gzip.texi 0444 bin bin 18298 20022 1017520292 1 f none doc/gzip/texinfo.tex 0444 bin bin 209810 2585 1017520292 1 d none info 0755 bin bin 1 f none info/gzip.info 0644 bin bin 17152 15488 1017520152 1 d none man 0755 bin bin 1 d none man/man1 0755 bin bin 1 f none man/man1/gunzip.1 0644 bin bin 16 1263 1017520154 1 f none man/man1/gzexe.1 0644 bin bin 1296 45404 1017520155 1 f none man/man1/gzip.1 0644 bin bin 15542 56410 1017520155 1 f none man/man1/zcat.1 0644 bin bin 16 1263 1017520156 1 f none man/man1/zcmp.1 0644 bin bin 17 1352 1017520156 1 f none man/man1/zdiff.1 0644 bin bin 802 494 1017520157 1 f none man/man1/zforce.1 0644 bin bin 591 48615 1017520158 1 f none man/man1/zgrep.1 0644 bin bin 958 14701 1017520158 1 f none man/man1/zless.1 0644 bin bin 522 45034 1017520159 1 f none man/man1/zmore.1 0644 bin bin 4214 40859 1017520160 1 f none man/man1/znew.1 0644 bin bin 999 17965 1017520160 1 i pkginfo 182 15299 1017521145 07070100000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000b00000000TRAILER!!!0707010002e3a7000081a40000000a0000000a000000013ca623f9000000b6000000200000001c00000000000000000000000800000004pkginfoPKG=SMCgzip NAME=gzip ARCH=sparc VERSION=1.3.3 CATEGORY=application VENDOR=Free Software Foundation EMAIL=steve@smc.vnet.net PSTAMP=Steve Christensen BASEDIR=/usr/local CLASSES=none 0707010002e3a6000081a40000000a0000000a000000013ca623f9000009ac000000200000001c00000000000000000000000700000004pkgmap: 1 1330 1 d none bin 0755 bin bin 1 l none bin/gunzip=gzip 1 f none bin/gzexe 0755 bin bin 3877 36563 1017520142 1 f none bin/gzip 0755 bin bin 162533 13947 1017520142 1 l none bin/zcat=gzip 1 l none bin/zcmp=zdiff 1 f none bin/zdiff 0755 bin bin 1964 4302 1017520143 1 l none bin/zegrep=zgrep 1 l none bin/zfgrep=zgrep 1 f none bin/zforce 0755 bin bin 1012 10668 1017520143 1 f none bin/zgrep 0755 bin bin 2946 32976 1017520143 1 f none bin/zless 0755 bin bin 105 8034 1017520143 1 f none bin/zmore 0755 bin bin 1877 13671 1017520144 1 f none bin/znew 0755 bin bin 3517 63625 1017520144 1 d none doc 0755 bin bin 1 d none doc/gzip 0755 bin bin 1 f none doc/gzip/AUTHORS 0444 bin bin 98 8960 1017520291 1 f none doc/gzip/COPYING 0444 bin bin 17992 29528 1017520291 1 f none doc/gzip/ChangeLog 0644 bin bin 40179 61141 1017520291 1 f none doc/gzip/INSTALL 0444 bin bin 9221 25104 1017520291 1 f none doc/gzip/Makefile 0644 bin bin 22583 24262 1017520291 1 f none doc/gzip/Makefile.am 0444 bin bin 3574 27353 1017520291 1 f none doc/gzip/Makefile.in 0644 bin bin 23157 4947 1017520291 1 f none doc/gzip/NEWS 0444 bin bin 11941 45404 1017520291 1 f none doc/gzip/README 0444 bin bin 7448 12018 1017520291 1 f none doc/gzip/README-alpha 0444 bin bin 1240 40659 1017520291 1 f none doc/gzip/THANKS 0444 bin bin 13034 8137 1017520292 1 f none doc/gzip/TODO 0444 bin bin 3594 50579 1017520292 1 f none doc/gzip/algorithm.doc 0444 bin bin 7747 40357 1017520292 1 f none doc/gzip/gzip.doc 0644 bin bin 16730 509 1017520292 1 f none doc/gzip/gzip.texi 0444 bin bin 18298 20022 1017520292 1 f none doc/gzip/texinfo.tex 0444 bin bin 209810 2585 1017520292 1 d none info 0755 bin bin 1 f none info/gzip.info 0644 bin bin 17152 15488 1017520152 1 d none man 0755 bin bin 1 d none man/man1 0755 bin bin 1 f none man/man1/gunzip.1 0644 bin bin 16 1263 1017520154 1 f none man/man1/gzexe.1 0644 bin bin 1296 45404 1017520155 1 f none man/man1/gzip.1 0644 bin bin 15542 56410 1017520155 1 f none man/man1/zcat.1 0644 bin bin 16 1263 1017520156 1 f none man/man1/zcmp.1 0644 bin bin 17 1352 1017520156 1 f none man/man1/zdiff.1 0644 bin bin 802 494 1017520157 1 f none man/man1/zforce.1 0644 bin bin 591 48615 1017520158 1 f none man/man1/zgrep.1 0644 bin bin 958 14701 1017520158 1 f none man/man1/zless.1 0644 bin bin 522 45034 1017520159 1 f none man/man1/zmore.1 0644 bin bin 4214 40859 1017520160 1 f none man/man1/znew.1 0644 bin bin 999 17965 1017520160 1 i pkginfo 182 15299 1017521145 0707010002e3a8000041ed0000000a0000000a000000063ca623fa00000000000000200000001c00000000000000000000000600000004reloc07070100014da0000041ed0000000a0000000a000000023ca623fa00000000000000200000001c00000000000000000000000a00000004reloc/bin07070100014da1000081a40000000a0000000a000000013ca6200e00000f25000000200000001c00000000000000000000001000000004reloc/bin/gzexe#!/bin/bash # 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/bash # The : is required for some old versions of csh. # On Ultrix, /bin/bash is too buggy, change the first line to: #!/bin/bash5 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=22 set -C umask=`umask` umask 77 if tail +$skip $0 | "/usr/local/bin"/gzip -cd > /tmp/gztmp$$; then umask $umask /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 gzip -cv9 "$i" >> $tmp || { /bin/rm -f $tmp echo ${x}: compression not possible for $i, file unchanged. res=1 continue } else # decompression skip=22 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 -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 07070100014da2000081a40000000a0000000a000000013ca6200e00027ae5000000200000001c00000000000000000000000f00000004reloc/bin/gzipELF 4N\4 (444hhhhh XXX/usr/lib/ld.so.1CHE?>$"C9)'0.=:F*#;538B/@& , 2D<G6+    -!14(%A7h78 Xb0 $ $@!0@<8HH]8T`4k Zlx|Q<ք8֐8rլ֜8 $֨8Eִp $<!8@ B 18D@ $,h*88DP  !9+( Ph\dh  th׀d׌,ט8  פ8'k8.hװL׼dX$@O I$=(0__deregister_frame_info__register_frame_infolibc.so.1getoptreadcallocatoi_environreaddir__flsbuf_GLOBAL_OFFSET_TABLE___ctypesignalatexitexitoptopttolowermallocopendir_init.umul.urem.remgetenv_DYNAMICstrncmpprintf__iobchownctimestrcatwritestrrchr_exitperrorerrnounlinklstatutimefreeoptindcloseclosediropenoptargstrcmpopterr_PROCEDURE_LINKAGE_TABLE_memsetstrcpy_lib_versionfflushmemcmpstrspn.divchmod__filbufmemcpystrlenstrcspnstatlseek_finifstatfprintfisatty_ctypeenviron_iob_etext_edata_end/usr/local/lib:/usr/lib:/usr/openwin/lib:/usr/local/ssl/libD$LE8<C  $ 0 <HT`lxք֐ִ֜֨ !"#$&' (,)8*D+P.\/h0t2׀3׌4ט5פ8װ<׼=>?@ABDEF(G㿠@V@*i @D# @rm"@r, @ <"@;@r@r㿐/rܐ @# @   $?@`  ``@rF   "㿐㿐/rʮ `` @rq 㿐 X0\?"``m 㿐 ` "@9 \!$ .  # \ 2\a0*@ 2  *@$  a0%,@ $ @&\ 2 ,@ `@$ @& ` " . 2`:@4\ % `\.  @2\# ` 0`* 2 㿐 ` .!$ #@\ \a0*@ 2``*@$ , \ `a0%,@  $ @&N\ 2 ,@ `@$ @&D4\ '\ `$!0* `@"@&14\% `㿐G$`#@  !0* `6``* $  !0`%,@ @$ @&  6`,@ $ @& #@ 08* 2```*$ 08`%,@ $ @% 6,@ $ @%!05$!,@ `@ &@%㿐? m@&""`te @@q"!(ct. ```!@$ p #` "@  2@ 6@ "`@"!8`" l "`h!$ la" h #@ l! h !8c$`d  *   #`d㿐38`b  &! @0`%c(!] X @S  `M ` &~ @6'@` @/'@` @('@` @!'@` @@'@` @'@` @ '@` @"ɲ`'@"@ Ā   (@ 2㿐#pĤ l"@"@  ??)?":)! ؒa8@oؐ!8"` "@"e $#!(#`   @ 2@2@ `%#a(     2 2   @ h la8Đ  l % h $l㿐 lĐ "`  -5!8e!(/`%d` *`@ @*` @`* (07 %d#@ b    l 8 = ?@"" `l`p" $%`l!8c%e!(a(??`d *  *    *`1 0 #`d` @` % *  %d  ` @ `l` %`l$`` ` @` @^" `& l!`h    l! h  l w``!8@  @:" 㿐 t ` G l/Ā`589+7Ĩ # d @*`@ @ e*`( Ą*%(0  e%` (2 ' d`  p` @ # `  l@ 8 ` `  " 8 ` E@ C "@@S l` " a8#Ė%e1Ĉa(!(% l%` `d  *`@ @*`   # *1 0 `d&  `   3$ ` @`" @  '&`?a8@   ` @  `@"  &`  l $  % l   l`?$ % ll!`h   "l! h l H !8 @Ӑ `!8@  @O"  J(8  J  㿐3cĔ@.@,ğ(`'@ @'@/`/ @ &@`@ / @&@ `@@ۆ'@` " "`㿐#m"`"# x@m"" N - + "`| `" |  " | "`|㿐'LN#'D'P`:'T D # "`8! $ L %cLD $ $'L x "J P cĀ@ $ `  $``| ( ` @  M cĀ 2$`D  "D *@J`-2J  $ cD@ !*`@ m@m[c cc`  @  %cĀ` D` @Dc$`D$ %ccD  *` @2%cL?@J`-|J 2P| =?' 8%c9 ]   -`?`%xP cđ* @J `- `"xJ  xL xx P L ?L  =2P`, x@@lٔ$ 2!`x@@l$`2 `@2  `@2  ` @"` `@ ب   c*`@ #m@@lcx@lͰ ?xcĒ@%x%c"̀ccĒ%cL ) I' 8*`?J`- m@#@lec( xm@#JcX@l\x@l ?x @%x"̀ $D@*`@' 8%c *`@m@#@l<c@l|xx @%xL"J@ ? :"j :0h@lmxxT@%x"`"\  `cđ* @J`-xLJ %xcđ* @J`- m@#x@lc cm@#Jc@kxcmc %x%c") ?x @`. :%xLŒxJ cĐ %c :2J ` m@#c@kʖ . n@#`@k–. : "c ? W `;*`J    c' 8 !%ccD*n@#`8@kL"#J`:ϰ ?Ͱ :* @' 8%c 8%xL@  =2`P  x@k$@ 2x@k$@߀2     c*`@ #n@@kW``x@k ?xcĒ@%x%cĀ"L%xL@  `2' 8n@#@k8`x@kw ?x@m%x cD*@' 8%c *@m@#@kc@kZxx ?@%xLJ@@kQxxT@%x"`"@   <"@: W*`:  :24. J :xJ@ c(' 8J@ c' 8  %ccD* n. @#`8@jؗ:. : "cLJ@: ? :@' 8%c%x. > 㿐   㿐  㿐 㿐 hnnn"@j`㿐 hooo@jT"!` !#o@jIb  2㿐 hooo"Д@j8cЀ  c#o@j/b  2㿐oooc (@j#o@j#0o@j#@o@j#Po@j#`o@j#po@j #o@j #㿐 h#boc@j9#@j $b "`(㿐@'D@<'H @ji"`h  ho?@jBc oh*?oH@ED "a,H" , @j  @ $`" xWa@j   @j   Wa@j  @j  Wa@i ohc@i   ohc@i  h "co @icЀ oh@ic؀ o "c"oc! @j$!@%"a$ +9#%)/o-;`EM h*` € %c! 8@iް 8"`J v3!p 8 @?А  h @ic@   8 & 8J  8_D Z"c V"cc Q"cߞԐ "c"H' ఐ C$`A$` $=$`$`:$ % 5"`  1"`!@i 8 8&$*&@ ""c""` %  "` @  Dhp`8@i8#@   D" $@  D4Hl n    @i)  Wa@i# ` #$` c#$cD c "    $ph#@h``$#`( `8hp#@h`@ V `  #``] "a` #` `c  cD@6 #ĕ* H $#@T@ #D@# @z     `?@'?@ `( (2222222222(2(2(2(2(02(2(2(2(2(2(2(2(02(2(2(1 141L2(2(2(2(1|2(2(12(2(2(12(2(2(2(2(2(000<002(02(02(2(2(11(1<2(2(1X1l2(12(1㿐#`$! ` 1$!8`|2  2  @Ő ?2&!8  㿐#-`3/ 0`" @h $ hp  cp p! "np!" @h`hp#@ha @ v `   n "pa8"  $  + a8+a( a(*` ( * *` *` *` *`***** %`p `2%$  c@gŒ p!@@ 6  @%`p%?@4"a " "a0@|a< "` @ `( a<@# 07% #@fa< ."` %"! a €  $4  `  p @g}aP0 %a `$ " "@@]o@gjcpaX@g $!&#v$# @ n<` @ !  ` h @g@g@В0X `B hp#a`@g0(7@ `0 hp#a@g(%` '% $#` ` hcp !a(?  s@f`(  "`(  0% p" `  @ #@ ` `n" "$ ` `* `*  `*  `*  `* * * @ !( @f! ?"a<p0@'#"a0@q!<  "`  ` @!<@f!<0   #"`l !%$'J$` @ #+䀢 !%'!  ! ` ! hp$#a!@fia(!  # `?$! p#b@fWa(# !@!< $` %"! !!<€`l ? @f!<` ` @f`l ` @` ?   G$@C!0C <`   !pb@f#`# $a%`! " "@@#`%a $`!" "@@#`  o  #p$b @e#o#@ec @%')+p@ <$ !$0%@f!#䀢?$`l<@f 05h@eÒ  <@f @f `l@Ӑ0%@-  #` `  hb8#@e`(     "`(@e`l@@%0㿐# "b#`@e0@eha@p"b@e "@e  Ȑ@e* $&@@e"@U@e@e@ $@?M`/" @ep$ "@  㿐!@""("(@ez#V !(@d U #`b  ݐI  Ԑ@ @eSoa@@e0c "@dŐ@eD#@eh a@@e "" 2@da@@d%"  hpb@dِ# "`( 㿐$!!!(@dL#`I +`    `2  `2}  `  2t  `2o  `d hp#bY!(@pbx@d pb@d 2<.p "". .  .  .  /. !% `  `2:  `25  `* hp#b@d]"!@d%a$ #!@@dU  `  hp#b@d?`(   "`(㿈#`&#`!$!8|  Đ ( $8@ /8 |@Đ ( `$8@ !/$!8|  Đ ( $8@ /8 |@Đ ( `$8@r / a0?$ "  p  #a0c ` @c   pc(@c  q8 |@Đ ( `$8@D $   hpc0#@c(h8! | "aĐ ( $8@%   hpc`#@c( "`(? hpc#@c(c "`(  hpc#(@cq c "`(8 |@Đ ( `$8@ 8 | Đ ( *` $8@Ԑ * 8 | Đ ( *` $8@Đ * 8 | Đ ( *` $8@ *   `8" p8 |@`$8@ 8 |@`$8@ `,8 |@Đ ( `$8@ 8 | Đ ( *` $8@z *  `  hp#c(@b ? 8 |@Đ ( `$8@Z 8 | Đ ( *` $8@K *  `  hq#`(@b? ? 8 |@`$8@- ??8`L#`#` `0 Ġ (8 |@` $8@  * 8*`$@! #%! q@  08 |@Đ ( `$8@ *,  ` `2$``Ġ (8 | $8`@͐ 80 2h 8 c&` X@bT  q8 ``Đ (@bH  qh!"a@$8 2? B$ ``@b4   qg! "a4& `h@b&   qe  0"a$ %& `p@b   cd#  "$ & #` `2  i# "a$ & $8 Y0 O hq`x#@a͖(:"`( 3Ġ (8 |@` $8@< 8 ` `  hq#`@a(`( ? "`(? `  hq#`@a(`( ? "`(㿀# !-@aZ "@ ` `$"@q@a,!0 `F%qaqq#\!Px@a8%6%( $`t  ! q@a! % `%(@=!q!@` t@5@`a`( t" @"@q@`!0!%$? "!`."a $! `*?@` ?"%! %!@a  "@* *+`(+  @  *@ %a @` p *  ` %"D.` q!@`%!@ِ!q!@`a @є@`! (%("!`%a %!  %(a $$" t#!`%a %!t &! "t!!`a " @"@q$!@`_a` @`?@`ːh  @`R,@`  @ ,㿐@`# `  q@!a*? 2,q@!,% "apb@`r? p "x"x,? ,? ,? ,? ?,@`/ /  L `%q@`X?L 2 L ```  `* ,@``@` . 2L`q@"L` "!@@_""%$h N2 @`" bc  Z  $n@` h $ > )!(@_  hcq"8p!n"  @_  hq#b`@_ 9"`(#`-c h qb@_$`x  @_q ?퀢  qb@_@_u@`2qb@_#`(     "`(@  3 㿈`@`8''@_0耢 "<`  3!`  " ho#@_Tc`( ` "`(` $$"@_!㿐#`)$ p! @   ` & @q#b@_+!! @_ o %'   ho#@_c`(  "`( 2 $@^ِ !@^ a(" 0@ #%`   ho#@^c`( ` "`(` $@^㻐@^ 7)0Fqb@^ -qc@^ "(%"@_@_ #@^{  /,@ @@^sJ%" hqc#@^ "`(%"@^ ʤ " U@^ߐ N㿐h !@^!, `"h@^Ґ $!,! , @^$ ,@^㿐 0`@^`l$@!ې   'H\''L'P'T'X????????'*`  " H X "?"  `   , `" *`@    ,``"8 " *,  @   /`,` @ " ' ')  "@`  ,  *`#`" H`@*@ 'H '?'` ̬ / '@H.*'@^. ?!` '+@` " " `@*8 +@''?x@]g*  x @` !L X#!L" 'X `"@% //'@&4@, ""4' / c/L    /7LT" * @ /" P* 74@ *  ?, * ""   *@ @" @4 @2@ *@? @  $*.?@ @ K 9/ `  @ 㿐 ?@]J  ? 㿈'L.'/` $H !D'`'D'H7L!+$(!8`|@ @ `*$!8@M *L !8D *  @`-@#1Ā`c $4+/$ (a8|@ `*%a8@" * a8,`@  *` `ڠ `$4 8*   L@H'  `Ā,`+1$(a8 |@ `*%a8@ * a8c@$  @4!+$(!8`|@ @ `*$!8@ʐ * !8H *  @`/@#3Ā`c2  $4+1$`(a8 |@ `*%a8@ * a8,`  *` `ؠ ,`$4+3$(a8`|@ `*%a8@x * a8#  %  #8" $4+ %@%@@% %@[ a8 @*@  @'  ޠ L' "aH"D 㿐!D$ aH&   4Ĩ (#'$a8|@ `*$a8@ *  a8?# ? 4 Ī (')$8 |@ @ `*$8@ *  8?#*@6 4 .?!83 /Ĭ #+$(a8`|@ `*$a8@ɐ *  a8.@& 4 ڰ?'aD&'!H plh "? 6"  .   "@! ! .  !"@!   .  !"@ #\'h⸘"! ! (d` .   " #\'`4#p   ll0 dh`  lװ d㺀aD !HĨ (%'$8|@ `*@$8@9 *@  8 `?! 4`Ĩ (%'$8|@ `*@$8@ *@  8 `?  4`Ĩ (%'$8|@ `*@$8@ *@  8 ` 4`c? ` ')"l3Ħ *1+$`(!8`|@ `*@&!8@А *@  !8 `*`% 4` ޠ? "l**`"  '#\   Ę  0  #*`  3 @%)$`(8 |@ `*@$8@ *@  8 @* @' `$ 4@ `.  % 0  `%)$`(8 |@ `*@$8@S *@  8 `` 4`?`h. "@ _0   `%)$`(8 |@ `*@$8@# *@  8 `` 4`?`7 . "@ .  `%)$`(8 |@ `*@$8@  *@  8 ``  4`[?`   . "@   GYc"aH"aD'#\⸘"!  5q#@Y9c(=0-#Ԓ'#\.4#p Ś  q#@YcH" 0%    0 㿐!DaH  Ĩ (%'$8|@ `*@$8@ r *@ 8 `?& 4`Ĩ (%'$8|@ `*@$8@ U *@  8 `4`?%aH %D    㿈$ "!H""aD 1&!L "!L8쀢 "&!LD  8? "8"aD@ S 㿐؀   q"ؐ#@X{ch" ( 㿐""aP"T"#t "p#"h      +  #@ #h(+@ ?` h T* "ܘ    * +  $ @ h**@ ?  *";  T"ܠ * + "?,  `@ ?h(!*@?  $  2? 62"z`   .   3 2 ! `bz .  2@  3`!! `bz .  2@! 3`! `bz .  2@! 3`"x@&!"  6` 6@  `@ t060t060pH060 (e 2$ l h ` \ X(d㿐, .`.`5( +.(`@./`@/ *  .  .. ,.  `,.`  .`.` '`,.` 㿈    '   ' 2? 62!$`,*@ * @"<;2  97- `,@,`@* @ `$22耤@ 4 . @   @7@ $@* @@@W<#h@ '#h @W2@l@&l "<H -. `  ?. `"?.   ?2 *   2  2 & /. @`?,%¨?- 耢 `* @  " @ @V&h@$h4 `2?. p    ** 0  ` ` ` *` *4 䳑2 6 㿐`@` "=   "a$?" 5!(, @ "2`*#+@  ` ! *2 -+h ,cla(   * @   "@ "@ ?* 4@ ,  "   %cl%h! 2  :   &`? 4 ,a(/- * % $ $, * $*$ @ +`@ %$ ,4@ @ @ @` -@+`@, 2 @ 2`$h ! Ӥ$,*`"&$>㿐 ?      .`<`;0p ``@"-@.6 .6@ 6@` 4HD6D6H        Ͱ 㿐 ?      @P#p`*`  @@` `#p,`T2$ `@ ,` F@ `@C`B@  4 `H`D8`F5  1`J.     @    @*`㿐!0R !LM!!P!p  #p *`  °?  #h * `"?#h *@   ##h㿐>    !pcr  *@ ՠ &  X?!T㿐c` daP#X* ?#@2@QO!K!4 cl¤ h #t 2 2@ ##t`@   ⑒ !#p,` ? $#p! 0'  "x@bcp ls !`4  ` @acp ch  "cp#p#p $#p#p> 㿐XĐ (* `  "X .` ’`82 #h a*` ? 2 ! h *`> !h @* ah > !h *`@\de+ 4@ t2   #\(de#X* `(e` #d#X* ` "`(e+#d $`$#X/2"#X a"  T+   @T4`@? #Xc\2 6`4@  #X#@ #\  㿐#X `  M c"h`t h`T"܀#X  `( @ ,`  *ch @* @`"-`ቐ$@-`*`2 `` 2 ! * @ x@`"q$@cX ç4$i$   *   @  *     2*   @ P`?2㿐!᠓*@ 2! &!Ķ (!%/$ & ᘑ*8@| 4 $8@ &@!?"$!$a !!"a2@  5a%!㿐 "@> 㿐2!"a" Ȓ  x*2@   @ *`   2  7z    # * @3@`  q@k#  "   & :2 ( 3@  ,`  *#@ +2 ,`:@  *  * 6 "  *@@=-e+%@2`*     :'4* 6 4 2@* (a(( @332 * * *`24@*@㿐G  B  #* &*#!2? 620>,'-ê〨 * 2 ` 2   2`@`` -@   ? #*  #* &*〖 㿐   '0 a*@@ 6*@ tc 2? 620R@@'¬#+è0a2 *  !e%a(!( , @ 2cu @ 4?        ? !0*?`@-`@aa !0*`a$*0t! 㿐c  u  $#,!  $ ~  ?!*2#t*` ?!$#%ea(!(2 @ . @!20 @㿐!•*2c* @ e%!(a(2 . @@ 2# @ ?! *@@㿐#"#㿐"!"a㿐ᤤ?  "#x@.@x   :"xᤐ? "s! Ð ,"a8?.@ 0#$aᤐ&c? !$#x"ᤔ x@.@x    "xᤐ? "0΁㿐"!<"`la  !8!  a@a  xa8 $| 'D 'HĐ ( $a8@ $` ` "a `  hq#c@P(`(  "`(  , ' " hqc#(@Ph "`(Q  $a8'!|* '؀`''?' !!% !(@Pj!a8 *@?<*@$`|<"  6 "`|Ě ( @+@   $"`|? Ĕ( D@P; ?'@$$|ؒ@  ""|؀ $`|@PA$|"@*` !@P)(ܮ!+`?@P4$!? '''$|ܑ*  " 䀥 ܡ* ?@P$`?'܀'ܚ +@ ?'ܔ * ?'ē<`(@ @   * *` : ܠ  r@T8a0+@' !$a %r"    Ha0@}%a "a #`r`8r H@$,  %!8a( ,  ,8 `r'"c@ *,+a03#%&@4 @O) 2  Ha0@2a $a  & &@ a0 @O 6 %8-*(2 ;؀ $`   Ha0@%a "a  㿐ä Ī ("a)1$/;â * !8 |@ `%!8@} %@!8 |Đ ( %!8@l $ᴀ r@| xᴠ  Ð# Ħ`( !8 |@` %!8@Q ᴠ $@ ar@[ ᴖc *   " % ø" 53đ,  `'`(!8 |@ ` @ %!8@! `-ᴠ, ᴔc * `"  ÚÖ⸘ * :` " " @?a 4  ( !0 Ò   *" *????*@ *!0@@*@㿈"!</"`l!Ð#  *` Ô '* ?î '##"c@ %Ī (#'$!* a8|@ @ `$a8@ #%c  $#a0c" 2@ @ `#@43# 75,``@ -ê%)$(!* 8 |@ `$8@\ #%@ $#.`"2@ @ 쀣 a@.` Ò ! $`a8*@ $ "@s"|"@l!%a r@4 Ё 㿐a8Ğ ($**@  `  |"a< #a8** @ * @#P@ "  hr$`` " ` hra   "aX2  ""  hraX#@MD( "`( 㿀"!<"`l @ a    7᐀ Đ6  *` @ ( ( +  6 @ +`* @  `]  r@!r99p;%r@!l c`brĐ> ! *` ?@ ( ?( ?* ? >@ !X+`*@   Ē: ` `+` `+ :  * r#a@LÔr@[!ؐ ?9 ;% (a83'$#$% a8|@` @ &a8@, `- $`@i ?@dr@0"9;% 'Ħ ( #%$a8|@` $a8@ .@  $a8* +`(*@ (䀢 +Ħ ( #%$a8|@` $a8@ܐ .@  $a8* +`(*@  + *`  !0@   hr#b(@L0( a   hr#bX@L#(  A!8$`|` :;&Ė( @ @  @ *  @ + @ *`Ҕ #P2'&#` `  hr#b@K(`( 2&  "`( hr#b@K( & &    "`(_㿐$ |"b '%)$?Ĥ ( |@a  | $a @K $ |?2 |`|? @g %! ?` 0(#!8$$$%" 8"`| "㿐$+ #`("`|%#  |<$@ @K@  | $ | | $ ?0@ |@"@""$ |  `("#!8㿐!$  `l@%a0%   " $ 㿐!$ `!8` %`l @ %!  @ "! $ 㿐@@&@K ?㿐N  @  @JҐ ,, L 2 㿐@J / 2 㿐@J㿐 .@JԐ  @"` _J@ ."*@@㿐@@J  _ @K@& @J )r@JN .N  "@JN 2@@J9  $@@J  2@r@0"@&@ r@'#@$` %r@J$ N `" $@$` $㿐 hrc(@J\#㿐 `  hr#c@JI(`(  "`(㿐`h%#rc0@J6 $@J!(0rc8@J)(㿐 h#brc0@J#$!@I$b㿈r#X`'r'`D썠?  @Ip6`@J#  @Iѐ` ?`   0 ,@`& ? & @I * & 4"@? & -@I@  -* & ? & @@Iu`  @*@`& `@*㿐@It r1" p! ? }  " `",@ ""? $"@IW `  "`• ,@@? `?㿈$  " `p`% $ ` ` !0"a< *3 *  #`l   ** * * !@ 77 $  pa0*2```*$ pa0`#,$ p2 , `@$ z "`  `$a0 #, $ , $- 3$!(` . `@$`L  %`#@   a0 2`+ ``+$ `a0`%, $z`2 , `@$p#@  a0* 2```*$a0`#, $Y 2 , `@$O#@ a a0 2`+ ``+$a `a0`%, $4`2 , `@$*#@ aa0* 2```*$a0`#, $a2 , `@$ `  %`㿐a<@HU ?  $aĔ""a?Jy Yn N2?0 㿐/HĐ  ??㿐㿠բbad pack levelPOSIXLY_CORRECT--%s: option `%s' is ambiguous %s: option `--%s' doesn't allow an argument %s: option `%c%s' doesn't allow an argument %s: option `%s' requires an argument %s: unrecognized option `--%s' %s: unrecognized option `%c%s' %s: illegal option -- %c %s: invalid option -- %c %s: option requires an argument -- %c %s: option `-W %s' is ambiguous %s: option `-W %s' doesn't allow an argument For more information about these matters, see the file named COPYING.under the terms of the GNU General Public License.You may redistribute copies of this programThis program comes with ABSOLUTELY NO WARRANTY.Copyright 1992-1993 Jean-loup GaillyCopyright 2002 Free Software Foundationbitslzwbestfastversionverboseno-timetestsuffixrecursivesilentquietnameno-namelicenselisthelpforceuncompressdecompressstdoutto-stdoutasciiusage: %s [-%scdfhlLnN%stvV19] [-S suffix] [file ...] rReport bugs to . file... files to (de)compress. If none given, use standard input. -9 --best compress better -1 --fast compress faster -V --version display version number -v --verbose verbose mode -t --test test compressed file integrity -S .suf --suffix .suf use suffix .suf on compressed files -r --recursive operate recursively on directories -q --quiet suppress all warnings -N --name save or restore the original name and time stamp -n --no-name do not save or restore the original name and time stamp -L --license display software license -l --list list compressed file contents -h --help give this help -f --force force overwrite of output file and compress links -d --decompress decompress -c --stdout write on standard output, keep original files unchanged%s %s (%s) 1.3.32002-03-08%s Compilation options: %s %s DIRENTUTIMESTDC_HEADERS HAVE_UNISTD_H HAVE_MEMORY_H HAVE_STRING_H HAVE_LSTAT Written by Jean-loup Gailly. %s: .exeGZIPunguncatgzcat.gzab:cdfhH?lLmMnNqrS:tvVZ123456789%s: -b operand is not an integer %s: -Z not supported in this version %s: option --ascii ignored on this system %s: incorrect suffix '%s' %s: compressed data not %s a terminal. Use -f to force %scompression. read fromwritten todeFor help, type: %s -h stdinstandard input OK -%s: %s is a directory -- ignored %s: %s is not a directory or a regular file - ignored %s: %s has %lu other link%c -- unchanged %s: %s compressed to %s %s: OK -- replaced with %s%s: %s: warning, name truncated _z-z-gz.tgz.taz.zz.Z%s: %s: file name too long %s: %s: unknown suffix -- ignored .tar%s: %s already has %s suffix -- unchanged %s: %s: unknown method %d -- not supported %s: %s is encrypted -- not supported %s: %s is a a multi-part gzip file -- not supported %s: %s has flags 0x%x -- not supported %s: %s: part number %u %s: %s: extra field of %u bytes ignored corrupted input -- file name too largePK %s: %s: not in gzip format %s: %s: decompression OK, trailing zero bytes ignored %s: %s: decompression OK, trailing garbage ignored deflalzh pack comprstoremethod crc date time %*.*s %*.*s ratio uncompressed_name compresseduncompressed (totals) %5s %08lx %11s %s name too shortcan't recover suffix .internal error in shorten_name%s: %s: cannot %scompress onto itself %s: %s and %s are the same file %s: %s already exists; do you wish to overwrite (y or n)? not overwritten %s: time stamp restored ..%s: %s/%s: pathname too long incomplete literal tree incomplete distance tree output in compress .Z format not supported block vanished-l used on binary fileBad table %s: %s: warning, unknown flags 0x%x %s: %s: compressed with %d bits, can only handle %d bits corrupt input.corrupt input. Use zcat to recover some data.invalid compressed data -- Huffman code > 32 bitstoo many leaves in Huffman treeinvalid compressed data--length error %s: %s: not a valid zip file %s: %s: first entry not deflated or stored -- use unzip %s: %s: encrypted file -- use unzip out of memoryinvalid compressed data--format violatedlen %ld, siz %ld invalid compressed data--length mismatchinternal error, invalid method %s: %s: invalid compressed data--crc error %s: %s: invalid compressed data--length error %s: %s has more than one entry--rest ignored %s: %s has more than one entry -- unchanged out of memoryargc<=0 %s: %s: %s %s: %s: warning: %s %s: %s: unexpected end of file %5.1f%%@Yը     ?h8accddxfphhl`LXnPNHq@q0r(S tTvV19ZbD`@X 0ˆ€xph`ˆh˜(       #+3;CScscc !1Aa  0@` ??  ܐxTp     w0a, Qmpjc5dۈ2yܸو L+~|-dj qHA}mԵQӅlVdkbze\Ocl=c ;n Li^`Agqr<KG k5Blۻ֬@2lE\u ϫ=Y&0Q:Qa!V#Ϻ(_ ٲ $/o|XhLaf-=vAq *q3xɢ4 j m=-dlc\kkQlabe0bNl{WeP|b-I|LeMaX:QΣtԻ0JߥA=ؕפmCij4ngF`D-s3 L_ |Pq<'A  Wh% of a^)ɘИ"רY=. \;l  tҚG9w&sc d; mj>zjZ '}DhibW]egl6qnkv+zZgJoC`֣ѓ~8ORѻgWg?H6K +گ L6JAz``ègU1nFiyaf%oҠRh6 w G"U&/ź; (+Z\j1,ٞ[ޮd°c&ujm 6?rgWJz{+ 8Ҏվ | !Bhݳڃn&[owGwZjpf; \ebiaklE x NT9§g&a`IiGM>nwۮjJZ@ f7;𩼮S޻G0齽ʺŠS0$6TW)#gfz.aJ]h*o+ 7 Z-00<0H0T0`0l0x00000000000000 0,080D0P0\0h0t0000000000000~0{0x(0u40r@0oL0lX0id0fp0c|0`Xlh՘@ՠ/3   o լX `  vdhdh&<5d~'s5Zt 0Znwj$o؂, 2P‚ނ*F0N"Àـ !3"F#Y%o&'(π-67G4HNaux0F\pʀ  " 7 K ` v Ȁ ݀ ! 7 L _ s    ʀ ߀  ' At Y  ـ  Z t Հ 2x  A  ;? AZb!0Vs#1q+./0р$ch@cDdDeDfDgDe DfDoDp Dq0$8 $y@y+@zD{DD D(D0D4D8D<DDDHDLDDDDDDDD DDD$ 9$K@W@ DDDDDDD$D$b@$$,m$DDDDDDD$ $ @@@DDD DDD,DHDp$ X(GX(I\(S`ddd&<5d~'s5Zt 0Zdd d&<5d~'s5Zt 0Zn$o؂F,w2P*F ' At 2x A ? AE.W/h0y ˀ8N&t}$ @ @!D"D%D& D,(D2<D7HD2PD5XD2`D3dD5lD7pD2tD3xD5|D8D9D:D;D<DED?D@D?DED@DEDHDHDIDJDPDLDPDSLDR`DSdDW@# $$g(@gDhDjDi DjDmDnDi Dn$Dm(Dh,Dj0Dn4DDDLDPDTDXD\DhDlDDDDDxDDDDDDDDD D @i@j @k@l%@m5@n C@R@c@ $(s$PDDDDDDD(D4D8DTDpDtDxD|DDDDDDDDDDDD D!DD#D$D%D#D*,D-4D.DD/hD0|D1D2D5@ @@$$FDFDGDLDKDLDI DL$DP\DUDZD\DZD\D^DaDcDhDcDa DhDjDiDDjHDkLDrPDlTDk\Dl`Dk|DlDrDsDtDuDxDwDuDxDvD}DDDDDDDDD8D|DD@G @H@I$$DDDD DDD$D`DDDDDDD DDD DHD`DpDtDxD|DDDDDDDDDDDDDDDDD DDDD D$D(D,D\DpDDDDDDDDDDDDDDDD<DLDpD@ @@@@$% 8(dE X h {(h(l (p(t  d\d\d\&<5d~'s5Zt 0Zn$oF&   $\@@ DDDDD D0$<$8.@8D9D;D<D: D;DZD<DZD: DZ$D\@D_TDcTDehDclDfpDgxDc|DkDlDpDtDvDtDwDxDtD|D}D~DDDC@:Q@;_@<j@=v@`Tv@q$$@@@DDDDDD D$D(D,D@DPD\DdDlDtD|DD$$ <D@ L  P% T4@ D DD D DD(D,D<D<D@DDDLDPDlDxDDDD+D1D2D3D4D6D; D<(D=8DCLDD`DEDMDODQDODQDQDRDS DT DU(DW0D]4DaHDc\DidDkDlDmDnDDDDtDD8D8D<D@DDDHDLDPDTDtDDDDDDDDD,D@DLDlDpD|DDDDDDDDDDDDDDDD4D8DDDLDTD\DhDtDDDDDDDDDDDDDDDD$D,DhDtDDDD D D D D D D D DDDDDDDDD,D8DHDTD dD#D&D'D*D,D5D.D5D/D0D5D:D7D:D;D<D>DADD4DE8DD<DE@DEDDFPDIPD^XD_\Da`DNhDSxDXDYD[DcDfDhDXDm Do Dp (Dr HDr LDs XDr \Ds `Dr dDt hDv pDy |D} D~ D D D D D D D D D D D <D HD LD TD `D lD pD tD xD D D D D D D D D D D D D D D D D D (D DD TD XD hD hD pD D D D E@Y@i@s@@@@@8@@ Y@,i@-s@.@/@0@1@2 $ $+@@@DD$( p (x (|1(܀I(܄](܈d+d+pd+&<5d~'s5Zt 0Zn$oFz$C+@C@D@E@F@GDHDI$($S, @S@T@U @V@WDXDY$(d,Hd,Hd,H&<5d~'s5Zt 0Z&& nT*FUk !Հ"#% & $' :( P p- 6 7 G ՀH a!Iu!x!!р!!""(">"T"k""""À"؀"###+#?#S#h#~####׀#$$$)$@ $V $l $$$ɀ ' At$݀%%[%%؀%& &L&f 2x A ƒ&}&À? A'Ȁ)Ѐ*u*0,,-G-c9-yl?--|-.9./M/f/Wh//,00JA0`0ۀX0p'1 2͂2w23333/3Ā4sz44Ђ455/5E-|5[5 5΀&6 =6 566%6 67&7>7S7l77 7 7 8 8 8 8+ 8< 8H 8W 8d 8r 8~ 8 8 8 8 8 8 9 39$$@,HD@DA$092$R,xDRDSDxDy(Dv0Dz4Dv8Dz8D{h9?&S͸9d@vh$p9n$,DDDD(D,D0D0D`9d@`$h9~$-PDDD D(D4D@DLDXDdDp$9$-9@DDD DD(D,D4D@9@@$H9$.D9ĠHDDDD DD D,DXDdD|DDDDDDDDDPDXDDDDDDDD D(D4D8D<DPDlDxDDDDD D DDDD DD D0D<D#PD)`D*lD)pD+tD-|D.D0D2D7D9D:D>D?DB DCDDIDDJhDPtDQDWDSDWDSDWDXD\D]D_8Da@DptDqDtDuDvDwDxDzD{(D}0D~<DD9@9@9@ D$d9$5DDD(DDDhDp$|:$5DDDXDDDDDDD DDD D$D(D,D0DHDXD\D`DdDhDlDpDtDxDDDDDDDDDDDDD DD(D4D@DPD`DdDpDDDDDDDDDDD,D<$D:#$9@:6@DDD D$D,D4D4DTD lD D D DDDDDDD(D0DdDD D!D$D#D$D$D)D)D*HD,D4D6D4D6D6D7D8D:D=D;D=D=D>D?DDDE0DF<DGDDNHDOXDQdDetDR|DTDUDZD\ D]0DbDDkPDlXDl\DmdDclDhDiDpDqDrDtDuDvDyDzD{D|0D}HD~pDxDDDDDD:D@ 4:Q h$ :[$?LDDDDD(D(D,D0D4D8DLDXD`DdDlDpDDDDDDDDDDD$D,D4D<D@:qh@$H:~$@:@:@DDD DD0D<$P:$@:@DDD DDDDD D D4D@DLDXD `DhD|DDDDD DD:@:@:ڀ:&;%@;1@$;:$A:6@;K@DD&D( D D&D D(D(D((D+0D.DD0dD1D2D7D8D9D:DCDDDGDHDIDRDT DUDV,DX@D[TDc`DdlDepDfxDiDjDkDl;X@;d@;z&(;%@ ;@!@$;$sCDsDtDvDx Dz,D{@DHDDDDDD(DTD\DdDDDDDDDDlDl;@tl$t;$F;@DDDD0DpDDDD$D(D(D0D8D<D@DDDHDLDTDXDhDlDpDtDxDDDD DDDD D$D(DXDdDDDDDDDDDDDD D,D `D D D  DDDhDDDDDD@D@DPDDDD D!DD$DD%PD'D(D)D+D,D-D0D1 D.D/HD.LD/PD5\D7lD9xD=xD>D@DADDDJ0DK@DIDDKDDMXDO\DPDQDPDSDTDUDTDVDUDXDYDZ D[ DY D[ DZ D] D_ DDa PD_ TDa XD^ \D` `Dc dDe tDf Dg Dh Dj Dl Dm Do Dq Dr (Ds \Dt xDv Dx Dy Dz D| ;@;<@< @<.@@<:@PD@' DD@\DBhDClDBpDCtDEDFDGDHDJDK@=@=@=@ $Y>@DDD<D@DLDdDtDDDDDDDDDDD DDDD,D,D0D4DxDDDD9@9@,$>+$[l>=@DDD DD D$DXDdDDDDDDDDDDDDD0D8>I@>\@>q@8$@>$$\>@$D%D(D* D)$D*(D+@D6`D7h>&&hh$h>$=]D=D>D?D@ DB,$<> > ? ?D ?j ? ? ? ? ? ? ? ? ? @ @ @0 @B @X @j @} @ @ @ @ @ @ d]Pd]P@d]P&<5d~'s5Zt 0Znw5E6@A' A_&A+A0A=jK*FAՀABBB* BF!B["Bn#B%B&B'B(B׀B-C6C)7CDGC\HCvaCЀuD,xDEDXDnDDDDŀDۀDE E E6EJE_EsEEEEŀEۀEFFF4FJF_FrFF F Fɀ F݀FG& ' At 2x A G:Gw? AH{JK'KA0MOMlMNNs&lN&θN&N&4N&pO OB OO O\$]POn@OHOLOPOTOXO\DD2D3 DD3D4D D20D3TD7\D9`D7dD8lD7pD9tD:|D<D>D<D>D?DEDDDCDEDFDDDEDGDHDIDKDKDLDJDKDM$DN(DO4DT4DP8DT<DULDT`DWlDXDVDYD_D]D^D_D`DaD`DaDfDeDfDgDhDiDj(Dq,Do0Dj4Dn8Dp@DrDDsHDwLDyXDz`DydDzhD~DDDDDDDDDDDD DDDD(D<D<D@DpD|DDDDDDDDDDDDDDDDDDDDDDDDD(D4DHDXD\D`D`DhDDDDDDDDDDDDDDDDDD8D<D@DXDXD`DwpDDO@ O@OO@ P@P@ P@!@"P"@#P+@$P4@%P>@&PH'PQ(`Pn)P@*P+P@, P@-P@.$P$bP@DDDDDD$D$P@P>@$$,P$cQDQHQLQ'@DDDDD D(D,D0D4D8D<D@DDDHDPDTDDDD D D D hD DD DDDDDDDDDD DD!PD TD$`D%D&D'D(D*D) D+D,xD-D.D-D.D/D4D/ D4,D/<D0@D4HD5LD7tD7|D9D;D:D<D?D@DBD@DBDCDEDFDHDDODPDNDODPDSDTQ1@@Q:@QC@QL@QVQ_Qh@Qq@$Qz$Zh$DZD[DcDb DmDdDhDbDi Dd$Dm(Dm0DnDoDpDqDr0Ds8Dw<DyXDzD{D}D~DDDDDDDD@[QC@\Qh@]Qq@^$Q$j4DDDDD D4D<D@DDDPDdDhDlDxDDDDDDDDDDDDDDDD4D<D@D\D`DhDpDpv@QlQdQhQ€`Qˀpp$xQ$kDDDDD DDD|DDDDDDDDlDtDxDDD D(D,D4D8DDDXD`DdDhDtD|DDDDDDDD D D `DxDDDDDDDD$D(D0DDD\DdDlDD!D D!D#D$D&D)$D*D,D+D,D.D/D0D2D6D?D@D:D;D?D@DB8DC@DDPDFXDH\DIdDHhDIlDKDLDQDSDTDZD_D_D`DaDD"D-D[Db v@@ Q@@@QQQQ€R@R@R@R&Qh@Qq@ $RD$grRY@gDiDqDpDq DuDpDuDvDwDvD{D|D}DDDD$D0D@DHDTRc@jQh@kQq@lT$\Rl$tDDDDD DDDDD D,D0DDDLDXDhDDDDDR{R@R@$R R R  dtdtRdt&<5d~'s5Zt 0Znwj$oP*F ' At 2x A ? AR&R$t;@R@DDDD D$D0D<D@$Hdu du Rdu &<5d~'s5Zt 0Znwj$oP*F ' At 2x A ? AR&`R&cTS%&fSMSƀS݀TT&T&4T&PT&pU $Mu U@MU0@NDODPDZDV DWDXDVDW DX$DZ(D^4D]PD^TD`dD`lDaD`D^DiDmDiDmDiDmDlDmDnDoDoDpDoDmDu DwPDvTDw\DvdDwhDxDwDuD~DDDDDLDDDDDDDD U@@PUI@R UW@S Uc@T  $(Uo$x4DDDD$DHDlDpDxDDDDD$U$xU@U@DDD DDD D DHDDDDDDDU@U@$ U$yU@DDDD DDDDD D$D(D,D0D4D8DLDdDhDpDDDDDDDDDD D D$D(DPD `DlDxD|DDDDDDDDDDD!D"D#D$D%$D&4D(LD)dD+hD,lD!xD.U@UU@V V@V,@P@U@@V:@VC@VO@V\@$Vl$9|U@9V~@:D;DDD=DDDEDD,DE0DD8DNDDOTDPXDRdDVDNDWV<V@= VC@> U@@?@O T$V$b}V@bDcDfDo DdDoDeDiDo Dq$Do0Dh4Do8Dq<Dr`DspDuDqDDDDDD(D@DPDxDDDDDDDDDDDDDD,D0D<D@D@DLDdDhDpD|U@dV,@eV@f U@@gV:@g V@hV@i(|$W$U@V~@DDDD DDD(D8DTDXD\DtDDDDDDDDDDDDD DDDD(U@@W@W(@W6@WE@WR@Wc@($0Wt$U@V~@DDDD DDD(D@DLDPDhDtDDDDDDD DD(D,D 8D <D PD TD \D`DpU@@ W@ W(@W6@WE@WR@ Wc@ p$xW$@DDDDD,D)8D(@D)DD(hD)xD,D0W@$W$8W@8W@8W@8D9D@DADBDC(DEHDEXDC`DHlDJ|DKW@:$W$SX@SX@TX,@UDVDZD]DZ D](D`HDwLD`PDcXDw\Dc`DlhDppDltDoxDp|DqDwDoDpDqDoDpDoDqDwDwDDDDDDDDDD$D8D@DDDLDTDtDDDDDDDX7@W XG@WW@X$XZ$dXj@Xv@DDDD D,D<D@DDDLDlDpDxDDDDDDDDD DDD D$D(D,D0D<D\D`DdDlDDDDDDDDDDDDDD<X@X@X@<$DX$X@X@DDD DDDDDTDpDxD|DDDDDDDDD D D D D$D0D4D<DDDPD\X@X@X@Y@Y @Y@Y#@Y/@ \$dY<$# D#D$D'D$D% D&D'D(,D)XD*D.U@@$YR@% Yd@& $Yt(ܐY(Y(xY(Z(pZ8( ZI(,Zj( Zz($Z((Z(hZ(hZ(h[([ (X[F( X[V( \[g( `[y(  d[(  e[( h[( l[( p[( t[ [ dd\d&<5d~'s5Zt 0Zn$oFwP*F ' At 2x A ? A\ $o\@oDpDqDr DqDrDq Dr$DsTDthDslDtpDttDuDvDwDx$\%$|\@|D}D}DD \4@~ $(\=$DDD$,\R$\e@\r@\@\@DDD(D\D`DdDxDDDDDDDDDDDDD D,D0D0D<DHDTDXDxDxDDDDDDDDDDDDDDDD D0D8DDDXD`DlDpDtD\\΀\xPD@`DCDDDGDIDJDIDKDLDRDLDRDLDRDRDSDT$DV4DW@DXLDZPD[\D\lD]|D_DaDbDcDdDeDgDiDlDkDlDkDlDkDmDoDpDqDsDt8DuHDwXDx\n@n@nn@o@o@o @o/@o=oK@o\oko}ov@ 9@ o@ o@ llv@P\$dddod&<5d~'s5Zt 0Znwj$oP*F ' At 2x A ? Ao$`D`DaDfDgDfDgDixDjDkDlDpDpDqDpDq$Dr(Dp,Dt8DuDDLD\D`DhDlDDDDDDDDD@aU@bU@@c$ V$DDDD DD8D8D<D@DDDLDPDTDXDdDtDDDDDDDDDDD o@ @ o@ o@ $o$;@R@DDDDD DDD D(D0DDDHDLDPDTD\D`DdDhDpDDD D$D0D8D8D<D@DDDHDPDTD\DDDDDDDD$DtDDDDDD@pp@ pp,@8$p8(! pH(" pW($ p{()p(/ p(0p(2p(Ap(Dddpd&<5d~'s5Zt 0Znwj$oP*F ' At 2x A ? Ap .p /q$6;@6D7D8D=D?D= D?DD=HD:LD?TD?XD@DCDEDFDGDKDODWDXDWDXD[ DP(DRLDSXD\\q&@8\$dq7$f;@fR@fDgDhDnDoDn DoDqDs Dh,Ds0Di4Dl8Ds<DtTDuhDtlDutDt|DuDtDuDtDuDtDuDtDuDyD{D}D~DDDDD(D,D4D8D@DHDLD\D`DhDpDxDDDD0D\D|DDDDDDDDD D$D,D4D8D@DDDHD\DpDDDDDDDDDDDDDDDDDD8D<DLDlDpDDD4DLDTDxD|DDDDDDqD@hqT@iU@@jqdkq@l=@{q@q@ 0|$q ,q -ddqd&<5d~'s5Zt 0Zn22w44455/U*F ' At  2x A y? A-33/5E-|q$0;@0R@0D1D3D2D3D4@D5PD6TD5XD6\D5`D6hD7pD8D9D;D;$q$EXq@E q@F DGDLDM DNDODPDQ0DRLDTXDU\DV\q@Hr&Jє\$dr $\D\D]D^D_ D]D^D_ $,r$fr1@fDgDkDl DkDlDkDl$Dm(Dn<DoHDsPDtTDtXDv`DwpDpDqDxDyDzD|D}D|D}D|D~D|D}D~D@h $r?$DDDD(D<D@$HrT$DDDD$D8DLD`Dd$lri$lr{@r@r@DDD DDDD D@@@$Hr$r@DDDDHD\r@\$dr$r@DDDDr@$$r$<r@DDD D  $s $Ps"@DDDDD$D(D<DHr@ H$Ps/$?sB@?sW@@su@ADBDFDI DGDJDL(DM8DODDSPDT\DOtDPDQDVDWDXD^DZD^D_D`DdDaDdDeDhDeDh$Di4DjDDkPDh`DolDpDqDrr@Cs@Ds@Es@Fs@G$s$xDs@xDyDzD{,$<s$s@ DDD $\s$DDDDDD,D8D<DDDHD`Dh9@h$ps$LDDDD DD(D0D8D@9@@$Ht$t@t(@t4@DDD $dtI$t\@ti@tx@DDDDD D,DDDHDLDdDhDlDlDxDDDDDD DXDhtr@t@t@t@ `h$pt$ht@DDD D t@ $(t ddu"d&<5d~'s5Zt 0Zn5E6Fu*$$D$D*D+D.D/D0HD1D3D4u7*p@+]@, $dDdDuVdD&<5d~'s5Zt 0Znwj$oP*F ' At 2x A ? A5/-33/u\$"D;@"R@"D#D3D7D*D1 D8D1D7D8D3 D8(D3,D80D74D88D3<D/@D3DD(LD/PD(TD3XD6\D8`D3hD)lD.tD8xD/|D0D/D0D1D7D.D8D3D8D%D&D.D8D;(D=<D=@D>HD?TDAhDBDDDEDEDFDEDFDGDH DIDJDL DY(DZ@D[XD^\D[`D]dD_lug%ur&u@El$tu$hX@ht@iDjDoDj DoDpDq0Dv8Dw@DvHDwLDvPDxTDr\DsdDyd<:@kd$lu u(d$d$ud$&<5d~'s5Zt 0Znuɂvvv&v:vO5E,@A' A_&vc0vv$D$v@CDDDT$<d`bits.c/usr2/SOURCES/S25/gzip-1.3.3/gcc2_compiled.int:t(0,1)=r(0,1);0020000000000;0017777777777;char:t(0,2)=r(0,2);0;127;long int:t(0,3)=r(0,1);0020000000000;0017777777777;unsigned int:t(0,4)=r(0,1);0000000000000;0037777777777;long unsigned int:t(0,5)=r(0,1);0000000000000;0037777777777;long long int:t(0,6)=r(0,1);01000000000000000000000;0777777777777777777777;long long unsigned int:t(0,7)=r(0,1);0000000000000;01777777777777777777777;short int:t(0,8)=r(0,8);-32768;32767;short unsigned int:t(0,9)=r(0,9);0;65535;signed char:t(0,10)=r(0,10);-128;127;unsigned char:t(0,11)=r(0,11);0;255;float:t(0,12)=r(0,1);4;0;double:t(0,13)=r(0,1);8;0;long double:t(0,14)=r(0,1);16;0;complex int:t(0,15)=s8real:(0,1),0,32;imag:(0,1),32,32;;complex float:t(0,16)=r(0,16);4;0;complex double:t(0,17)=r(0,17);8;0;complex long double:t(0,18)=r(0,18);16;0;void:t(0,19)=(0,19)config.htailor.hgzip.hvoidp:t(3,1)=(3,2)=*(0,19)/usr/include/stdio.h/usr/include/sys/feature_tests.h/usr/include/sys/va_list.h__va_list:t(6,1)=(3,2)size_t:t(4,1)=(0,4)fpos_t:t(4,2)=(0,3)FILE:t(4,3)=(4,4)=s16_cnt:(0,1),0,32;_ptr:(4,5)=*(0,11),32,32;_base:(4,5),64,32;_flag:(0,11),96,8;_file:(0,11),104,8;;/usr/include/sys/types.h/usr/include/sys/isa_defs.h/usr/include/sys/machtypes.h_physadr_t:T(9,1)=s4r:(9,2)=ar(0,1);0;0;(0,1),0,32;;physadr_t:t(9,3)=(9,4)=*(9,1)_label_t:T(9,5)=s8val:(9,6)=ar(0,1);0;1;(0,1),0,64;;label_t:t(9,7)=(9,5)lock_t:t(9,8)=(0,11)uchar_t:t(7,1)=(0,11)ushort_t:t(7,2)=(0,9)uint_t:t(7,3)=(0,4)ulong_t:t(7,4)=(0,5)caddr_t:t(7,5)=(7,6)=*(0,2)daddr_t:t(7,7)=(0,3)off_t:t(7,8)=(0,3)cnt_t:t(7,9)=(0,8)paddr_t:t(7,10)=(7,4)use_t:t(7,11)=(7,1)sysid_t:t(7,12)=(0,8)index_t:t(7,13)=(0,8) :T(7,14)=eB_FALSE:0,B_TRUE:1,;boolean_t:t(7,15)=(7,14)longlong_t:t(7,16)=(0,6)u_longlong_t:t(7,17)=(0,7)offset_t:t(7,18)=(7,16)diskaddr_t:t(7,19)=(7,16)lloff_t:t(7,20)=(7,21)=u8_f:(7,18),0,64;_p:(7,22)=s8_u:(0,3),0,32;_l:(7,8),32,32;;,0,64;;lldaddr_t:t(7,23)=(7,24)=u8_f:(7,19),0,64;_p:(7,25)=s8_u:(0,3),0,32;_l:(7,7),32,32;;,0,64;;k_fltset_t:t(7,26)=(7,4)id_t:t(7,27)=(0,3)major_t:t(7,28)=(7,4)minor_t:t(7,29)=(7,4)pri_t:t(7,30)=(0,8)o_mode_t:t(7,31)=(7,2)o_dev_t:t(7,32)=(0,8)o_uid_t:t(7,33)=(7,2)o_gid_t:t(7,34)=(7,33)o_nlink_t:t(7,35)=(0,8)o_pid_t:t(7,36)=(0,8)o_ino_t:t(7,37)=(7,2)key_t:t(7,38)=(0,1)mode_t:t(7,39)=(7,4)uid_t:t(7,40)=(0,3)gid_t:t(7,41)=(7,40)nlink_t:t(7,42)=(7,4)dev_t:t(7,43)=(7,4)ino_t:t(7,44)=(7,4)pid_t:t(7,45)=(0,3)ssize_t:t(7,46)=(0,1)time_t:t(7,47)=(0,3)clock_t:t(7,48)=(0,3)clockid_t:t(7,49)=(0,1)timer_t:t(7,50)=(0,1)unchar:t(7,51)=(0,11)ushort:t(7,52)=(0,9)uint:t(7,53)=(0,4)ulong:t(7,54)=(0,5)hostid_t:t(7,55)=(0,3)u_char:t(7,56)=(0,11)u_short:t(7,57)=(0,9)u_int:t(7,58)=(0,4)u_long:t(7,59)=(0,5)_quad:T(7,60)=s8val:(7,61)=ar(0,1);0;1;(0,3),0,64;;quad:t(7,62)=(7,60)/usr/include/sys/select.h/usr/include/sys/time.htimeval:T(11,1)=s8tv_sec:(0,3),0,32;tv_usec:(0,3),32,32;;timezone:T(11,2)=s8tz_minuteswest:(0,1),0,32;tz_dsttime:(0,1),32,32;;itimerval:T(11,3)=s16it_interval:(11,1),0,64;it_value:(11,1),64,64;;timespec:T(11,4)=s8tv_sec:(7,47),0,32;tv_nsec:(0,3),32,32;;timespec_t:t(11,5)=(11,4)timestruc_t:t(11,6)=(11,4)itimerspec:T(11,7)=s16it_interval:(11,4),0,64;it_value:(11,4),64,64;;itimerspec_t:t(11,8)=(11,7)hrtime_t:t(11,9)=(7,16)/usr/include/time.htm:T(13,1)=s36tm_sec:(0,1),0,32;tm_min:(0,1),32,32;tm_hour:(0,1),64,32;tm_mday:(0,1),96,32;tm_mon:(0,1),128,32;tm_year:(0,1),160,32;tm_wday:(0,1),192,32;tm_yday:(0,1),224,32;tm_isdst:(0,1),256,32;;/usr/include/sys/siginfo.hsigval:T(15,1)=u4sival_int:(0,1),0,32;sival_ptr:(3,2),0,32;;sigevent:T(15,2)=s24sigev_notify:(0,1),0,32;_sigev_un:(15,3)=u4_sigev_signo:(0,1),0,32;_sigev_notify_function:(15,4)=*(15,5)=f(0,19),0,32;;,32,32;sigev_value:(15,1),64,32;_sigev_pad1:(0,1),96,32;_sigev_notify_attributes:(3,2),128,32;_sigev_pad2:(0,1),160,32;;/usr/include/sys/machsig.hsiginfo:T(15,6)=s128si_signo:(0,1),0,32;si_code:(0,1),32,32;si_errno:(0,1),64,32;_data:(15,7)=u116_pad:(15,8)=ar(0,1);0;28;(0,1),0,928;_proc:(15,9)=s16_pid:(7,45),0,32;_pdata:(15,10)=u12_kill:(15,11)=s8_uid:(7,40),0,32;_value:(15,1),32,32;;,0,64;_cld:(15,12)=s12_utime:(7,48),0,32;_status:(0,1),32,32;_stime:(7,48),64,32;;,0,96;;,32,96;;,0,128;_fault:(15,13)=s8_addr:(7,5),0,32;_trapno:(0,1),32,32;;,0,64;_file:(15,14)=s8_fd:(0,1),0,32;_band:(0,3),32,32;;,0,64;_prof:(15,15)=s116_faddr:(7,5),0,32;_tstamp:(11,6),32,64;\_syscall:(0,8),96,16;_nsysarg:(0,2),112,8;_fault:(0,2),120,8;_sysarg:(15,16)=ar(0,1);0;7;(0,3),128,256;_mstate:(15,17)=ar(0,1);0;16;(0,3),384,544;;,0,928;;,96,928;;siginfo_t:t(15,18)=(15,6)k_siginfo:T(15,19)=s28si_signo:(0,1),0,32;si_code:(0,1),32,32;si_errno:(0,1),64,32;_data:(15,20)=u16_proc:(15,21)=s16_pid:(7,45),0,32;_pdata:(15,22)=u12_kill:(15,23)=s8_uid:(7,40),0,32;_value:(15,1),32,32;;,0,64;_cld:(15,24)=s12_utime:(7,48),0,32;_status:(0,1),32,32;_stime:(7,48),64,32;;,0,96;;,32,96;;,0,128;_fault:(15,25)=s8_addr:(7,5),0,32;_trapno:(0,1),32,32;;,0,64;_file:(15,26)=s8_fd:(0,1),0,32;_band:(0,3),32,32;;,0,64;_prof:(15,27)=s16_faddr:(7,5),0,32;_tstamp:(11,6),32,64;_syscall:(0,8),96,16;_nsysarg:(0,2),112,8;\_fault:(0,2),120,8;;,0,128;;,96,128;;k_siginfo_t:t(15,28)=(15,19)sigqueue:T(15,29)=s40sq_next:(15,30)=*(15,29),0,32;sq_info:(15,28),32,224;sq_func:(15,31)=*(15,32)=f(0,19),256,32;sq_backptr:(3,2),288,32;;sigqueue_t:t(15,33)=(15,29)fd_mask:t(10,1)=(0,3)fd_set:T(10,2)=s128fds_bits:(10,3)=ar(0,1);0;31;(10,1),0,1024;;fd_set:t(10,4)=(10,2)/usr/include/string.huch:t(3,3)=(0,11)ush:t(3,4)=(0,9)ulg:t(3,5)=(0,5)file_t:t(3,6)=(0,1)crypt.hbi_init:F(0,19)zipfile:P(3,6)send_bits:F(0,19)value:P(0,1)length:P(0,1)bi_reverse:F(0,4)code:P(0,4)len:P(0,1)res:r(0,4)bi_windup:F(0,19)copy_block:F(0,19)buf:P(7,6)len:P(0,4)header:P(0,1)read_buf:G(0,20)=*(0,21)=f(0,1)zfile:S(3,6)bi_buf:S(0,9)bi_valid:S(0,1)crypt.cdeflate.c__va_list:t(4,1)=(4,2)=*(0,19)voidp:t(6,1)=(4,2)uch:t(6,2)=(0,11)ush:t(6,3)=(0,9)ulg:t(6,4)=(0,5)file_t:t(6,5)=(0,1)lzw.hPos:t(0,20)=(6,3)IPos:t(0,21)=(0,4)window_size:G(6,4)config:T(0,22)=s8good_length:(6,3),0,16;max_lazy:(6,3),16,16;nice_length:(6,3),32,16;max_chain:(6,3),48,16;;config:t(0,23)=(0,22)configuration_table:S(0,24)=ar(0,1);0;9;(0,23)lm_init:F(0,19)pack_level:P(0,1)flags:P(0,25)=*(6,3)j:r(0,4)longest_match:F(0,1)cur_match:P(0,21)chain_length:r(0,4)scan:r(0,26)=*(6,2)match:r(0,26)len:r(0,1)best_len:r(0,1)limit:r(0,21)strend:r(0,26)scan_end1:r(6,2)scan_end:r(6,2)fill_window:f(0,19)n:r(0,4)m:r(0,4)more:r(0,4)deflate_fast:f(7,8)hash_head:r(0,21)flush:r(0,1)match_length:r(0,4)deflate:F(7,8)prev_match:r(0,21)match_available:r(0,1)block_start:G(0,3)ins_h:S(0,4)prev_length:G(0,4)strstart:G(0,4)match_start:G(0,4)eofile:S(0,1)lookahead:S(0,4)max_chain_length:G(0,4)max_lazy_match:S(0,4)compr_level:S(0,1)good_match:G(0,4)nice_match:G(0,1)getopt.cgetopt.h/usr/include/ctype.hoption:T(5,1)=s16name:(5,2)=*(0,2),0,32;has_arg:(0,1),32,32;flag:(5,3)=*(0,1),64,32;val:(0,1),96,32;;optind:G(0,1)opterr:G(0,1)optopt:G(0,1) :T(0,20)=eREQUIRE_ORDER:0,PERMUTE:1,RETURN_IN_ORDER:2,;my_index:f(0,21)=*(0,2)str:P(5,2)chr:P(0,1)exchange:f(0,19)argv:P(0,22)=*(0,21)bottom:r(0,1)middle:r(0,1)top:r(0,1)tem:r(0,21)i:r(0,1)_getopt_initialize:f(5,2)argc:P(0,1)argv:P(0,23)=*(0,21)optstring:P(5,2)_getopt_internal:F(0,1)argc:p(0,1)argv:P(0,23)optstring:p(5,2)longopts:p(0,24)=*(5,1)longind:p(5,3)long_only:P(0,1)print_errors:r(0,1)nameend:r(0,21)p:r(0,24)pfound:r(0,24)exact:r(0,1)ambig:r(0,1)indfound:r(0,1)option_index:r(0,1)c:r(0,2)temp:r(0,21)getopt:F(0,1)optarg:G(0,21)__getopt_initialized:G(0,1)nextchar:S(0,21)ordering:S(0,20)posixly_correct:S(0,21)first_nonopt:S(0,1)last_nonopt:S(0,1)getopt1.cgetopt_long:F(0,1)argv:P(0,20)=*(0,21)=*(0,2)options:P(2,2)long_options:P(0,22)=*(2,1)opt_index:P(2,3)getopt_long_only:F(0,1)argv:P(0,20)long_options:P(0,22)gzip.clicense_msg:S(0,20)=ar(0,1);0;-1;(0,21)=*(0,2)uchar_t:t(4,1)=(0,11)ushort_t:t(4,2)=(0,9)uint_t:t(4,3)=(0,4)ulong_t:t(4,4)=(0,5)caddr_t:t(4,5)=(0,21)daddr_t:t(4,6)=(0,3)off_t:t(4,7)=(0,3)cnt_t:t(4,8)=(0,8)paddr_t:t(4,9)=(4,4)use_t:t(4,10)=(4,1)sysid_t:t(4,11)=(0,8)index_t:t(4,12)=(0,8) :T(4,13)=eB_FALSE:0,B_TRUE:1,;boolean_t:t(4,14)=(4,13)longlong_t:t(4,15)=(0,6)u_longlong_t:t(4,16)=(0,7)offset_t:t(4,17)=(4,15)diskaddr_t:t(4,18)=(4,15)lloff_t:t(4,19)=(4,20)=u8_f:(4,17),0,64;_p:(4,21)=s8_u:(0,3),0,32;_l:(4,7),32,32;;,0,64;;lldaddr_t:t(4,22)=(4,23)=u8_f:(4,18),0,64;_p:(4,24)=s8_u:(0,3),0,32;_l:(4,6),32,32;;,0,64;;k_fltset_t:t(4,25)=(4,4)id_t:t(4,26)=(0,3)major_t:t(4,27)=(4,4)minor_t:t(4,28)=(4,4)pri_t:t(4,29)=(0,8)o_mode_t:t(4,30)=(4,2)o_dev_t:t(4,31)=(0,8)o_uid_t:t(4,32)=(4,2)o_gid_t:t(4,33)=(4,32)o_nlink_t:t(4,34)=(0,8)o_pid_t:t(4,35)=(0,8)o_ino_t:t(4,36)=(4,2)key_t:t(4,37)=(0,1)mode_t:t(4,38)=(4,4)uid_t:t(4,39)=(0,3)gid_t:t(4,40)=(4,39)nlink_t:t(4,41)=(4,4)dev_t:t(4,42)=(4,4)ino_t:t(4,43)=(4,4)pid_t:t(4,44)=(0,3)size_t:t(4,45)=(4,3)ssize_t:t(4,46)=(0,1)time_t:t(4,47)=(0,3)clock_t:t(4,48)=(0,3)clockid_t:t(4,49)=(0,1)timer_t:t(4,50)=(0,1)unchar:t(4,51)=(0,11)ushort:t(4,52)=(0,9)uint:t(4,53)=(0,4)ulong:t(4,54)=(0,5)hostid_t:t(4,55)=(0,3)u_char:t(4,56)=(0,11)u_short:t(4,57)=(0,9)u_int:t(4,58)=(0,4)u_long:t(4,59)=(0,5)_quad:T(4,60)=s8val:(4,61)=ar(0,1);0;1;(0,3),0,64;;quad:t(4,62)=(4,60)timeval:T(8,1)=s8tv_sec:(0,3),0,32;tv_usec:(0,3),32,32;;timezone:T(8,2)=s8tz_minuteswest:(0,1),0,32;tz_dsttime:(0,1),32,32;;itimerval:T(8,3)=s16it_interval:(8,1),0,64;it_value:(8,1),64,64;;timespec:T(8,4)=s8tv_sec:(4,47),0,32;tv_nsec:(0,3),32,32;;timespec_t:t(8,5)=(8,4)timestruc_t:t(8,6)=(8,4)itimerspec:T(8,7)=s16it_interval:(8,4),0,64;it_value:(8,4),64,64;;itimerspec_t:t(8,8)=(8,7)hrtime_t:t(8,9)=(4,15)sigval:T(12,1)=u4sival_int:(0,1),0,32;sival_ptr:(12,2)=*(0,19),0,32;;sigevent:T(12,3)=s24sigev_notify:(0,1),0,32;_sigev_un:(12,4)=u4_sigev_signo:(0,1),0,32;_sigev_notify_function:(12,5)=*(12,6)=f(0,19),0,32;;,32,32;sigev_value:(12,1),64,32;_sigev_pad1:(0,1),96,32;_sigev_notify_attributes:(12,2),128,32;_sigev_pad2:(0,1),160,32;;siginfo:T(12,7)=s128si_signo:(0,1),0,32;si_code:(0,1),32,32;si_errno:(0,1),64,32;_data:(12,8)=u116_pad:(12,9)=ar(0,1);0;28;(0,1),0,928;_proc:(12,10)=s16_pid:(4,44),0,32;_pdata:(12,11)=u12_kill:(12,12)=s8_uid:(4,39),0,32;_value:(12,1),32,32;;,0,64;_cld:(12,13)=s12_utime:(4,48),0,32;_status:(0,1),32,32;_stime:(4,48),64,32;;,0,96;;,32,96;;,0,128;_fault:(12,14)=s8_addr:(4,5),0,32;_trapno:(0,1),32,32;;,0,64;_file:(12,15)=s8_fd:(0,1),0,32;_band:(0,3),32,32;;,0,64;_prof:(12,16)=s116_faddr:(4,5),0,32;_tstamp:(8,6),32,64;\_syscall:(0,8),96,16;_nsysarg:(0,2),112,8;_fault:(0,2),120,8;_sysarg:(12,17)=ar(0,1);0;7;(0,3),128,256;_mstate:(12,18)=ar(0,1);0;16;(0,3),384,544;;,0,928;;,96,928;;siginfo_t:t(12,19)=(12,7)k_siginfo:T(12,20)=s28si_signo:(0,1),0,32;si_code:(0,1),32,32;si_errno:(0,1),64,32;_data:(12,21)=u16_proc:(12,22)=s16_pid:(4,44),0,32;_pdata:(12,23)=u12_kill:(12,24)=s8_uid:(4,39),0,32;_value:(12,1),32,32;;,0,64;_cld:(12,25)=s12_utime:(4,48),0,32;_status:(0,1),32,32;_stime:(4,48),64,32;;,0,96;;,32,96;;,0,128;_fault:(12,26)=s8_addr:(4,5),0,32;_trapno:(0,1),32,32;;,0,64;_file:(12,27)=s8_fd:(0,1),0,32;_band:(0,3),32,32;;,0,64;_prof:(12,28)=s16_faddr:(4,5),0,32;_tstamp:(8,6),32,64;_syscall:(0,8),96,16;_nsysarg:(0,2),112,8;\k_siginfo_t:t(12,29)=(12,20)sigqueue:T(12,30)=s40sq_next:(12,31)=*(12,30),0,32;sq_info:(12,29),32,224;sq_func:(12,32)=*(12,33)=f(0,19),256,32;sq_backptr:(12,2),288,32;;sigqueue_t:t(12,34)=(12,30)/usr/include/signal.h/usr/include/sys/signal.h/usr/include/sys/unistd.hsigset_t:t(16,1)=(16,2)=s16__sigbits:(16,3)=ar(0,1);0;3;(0,5),0,128;;k_sigset_t:t(16,4)=(16,5)=s8__sigbits:(16,6)=ar(0,1);0;1;(0,5),0,64;;sigaction:T(16,7)=s32sa_flags:(0,1),0,32;_funcptr:(16,8)=u4_handler:(16,9)=*(16,10)=f(0,19),0,32;_sigaction:(16,11)=*(16,12)=f(0,19),0,32;;,32,32;sa_mask:(16,1),64,128;sa_resv:(6,6),192,64;;sigaltstack:T(16,13)=s12ss_sp:(0,21),0,32;ss_size:(0,1),32,32;ss_flags:(0,1),64,32;;stack_t:t(16,14)=(16,13)sig_atomic_t:t(15,1)=(0,1)/usr/include/sys/procset.hidtype:T(18,1)=eP_PID:0,P_PPID:1,P_PGID:2,P_SID:3,P_CID:4,P_UID:5,P_GID:6,P_ALL:7,P_LWPID:8,;idtype_t:t(18,2)=(18,1)idop:T(18,3)=ePOP_DIFF:0,POP_AND:1,POP_OR:2,POP_XOR:3,;idop_t:t(18,4)=(18,3)procset:T(18,5)=s20p_op:(18,4),0,32;p_lidtype:(18,2),32,32;p_lid:(4,26),64,32;p_ridtype:(18,2),96,32;p_rid:(4,26),128,32;;procset_t:t(18,6)=(18,5)/usr/include/sys/stat.hstat:T(19,1)=s136st_dev:(4,42),0,32;st_pad1:(19,2)=ar(0,1);0;2;(0,3),32,96;st_ino:(4,43),128,32;st_mode:(4,38),160,32;st_nlink:(4,41),192,32;st_uid:(4,39),224,32;st_gid:(4,40),256,32;st_rdev:(4,42),288,32;st_pad2:(4,61),320,64;st_size:(4,7),384,32;st_pad3:(0,3),416,32;st_atim:(8,6),448,64;st_mtim:(8,6),512,64;st_ctim:(8,6),576,64;st_blksize:(0,3),640,32;st_blocks:(0,3),672,32;st_fstype:(19,3)=ar(0,1);0;15;(0,2),704,128;st_pad4:(12,17),832,256;;/usr/include/errno.h/usr/include/sys/errno.hfpos_t:t(24,1)=(0,3)FILE:t(24,2)=(24,3)=s16_cnt:(0,1),0,32;_ptr:(24,4)=*(0,11),32,32;_base:(24,4),64,32;_flag:(0,11),96,8;_file:(0,11),104,8;;revision.h/usr/include/fcntl.h/usr/include/sys/fcntl.hflock:T(31,1)=s36l_type:(0,8),0,16;l_whence:(0,8),16,16;l_start:(4,7),32,32;l_len:(4,7),64,32;l_sysid:(0,3),96,32;l_pid:(4,44),128,32;l_pad:(31,2)=ar(0,1);0;3;(0,3),160,128;;flock_t:t(31,3)=(31,1)/usr/local/lib/gcc-lib/sparc-sun-solaris2.5.1/2.95.3/include/limits.h/usr/local/lib/gcc-lib/sparc-sun-solaris2.5.1/2.95.3/include/syslimits.h/usr/include/limits.h/usr/include/unistd.h/usr/include/stdlib.hdiv_t:t(37,1)=(37,2)=s8quot:(0,1),0,32;rem:(0,1),32,32;;ldiv_t:t(37,3)=(37,4)=s8quot:(0,3),0,32;rem:(0,3),32,32;;lldiv_t:t(37,5)=(37,6)=s16quot:(0,6),0,64;rem:(0,6),64,64;;wchar_t:t(37,7)=(0,3)/usr/include/dirent.hDIR:t(38,1)=(38,2)=s16dd_fd:(0,1),0,32;dd_loc:(0,1),32,32;dd_size:(0,1),64,32;dd_buf:(0,21),96,32;;/usr/include/sys/dirent.hdirent:T(39,1)=s12d_ino:(4,43),0,32;d_off:(4,7),32,32;d_reclen:(0,9),64,16;d_name:(39,2)=ar(0,1);0;0;(0,2),80,8;;dirent_t:t(39,3)=(39,1)/usr/include/utime.h/usr/include/sys/utime.hutimbuf:T(41,1)=s8actime:(4,47),0,32;modtime:(4,47),32,32;;sig_type:t(0,22)=(0,23)=*(0,24)=f(0,19)ascii:G(0,1)to_stdout:G(0,1)decompress:G(0,1)force:G(0,1)no_name:G(0,1)no_time:G(0,1)recursive:G(0,1)list:G(0,1)verbose:G(0,1)quiet:G(0,1)do_lzw:G(0,1)test:G(0,1)maxbits:G(0,1)method:G(0,1)level:G(0,1)exit_code:G(0,1)args:G(0,25)=*(0,21)remove_ofname:G(0,1)longopts:G(0,26)=ar(0,1);0;-1;(29,1)work:G(0,27)=*(0,28)=f(0,1)usage:f(0,19)help:f(0,19)help_msg:V(0,29)=ar(0,1);0;18;(0,21)p:r(0,25)license:f(0,19)version:f(0,19)progerror:f(0,19)string:P(0,21)e:r(0,1)main:F(0,1)argv:p(0,25)file_count:r(0,1)proglen:r(0,1)optc:r(0,1)input_eof:f(0,1)treat_stdin:f(0,19)treat_file:f(0,19)iname:P(0,21)cflag:r(0,1)st:(19,1)create_outfile:f(0,1)ostat:(19,1)do_stat:f(0,1)name:P(0,21)sbuf:P(0,30)=*(19,1)get_suffix:f(0,21)nlen:r(0,1)slen:r(0,1)suffix:(0,31)=ar(0,1);0;32;(0,2)known_suffixes:V(0,32)=ar(0,1);0;8;(0,21)suf:r(0,25)s:r(0,1)get_istat:f(0,1)sbuf:P(0,30)ilen:r(0,1)z_suffix_errno:r(0,1)suffixes:V(0,33)=ar(0,1);0;5;(0,21)s:r(0,21)make_ofname:f(0,1)suff:r(0,21)get_method:f(0,1)in:P(0,1)flags:r(23,2)magic:(0,34)=ar(0,1);0;1;(0,2)imagic1:r(0,1)stamp:r(23,4)part:r(0,4)len:r(0,4)p:r(0,21)base:r(0,21)inbyte:r(0,1)do_list:f(0,19)ifd:P(0,1)method:P(0,1)crc:r(23,4)first_time:V(0,1)methods:V(0,35)=ar(0,1);0;8;(0,21)date:r(0,21)positive_off_t_width:r(0,1)o:r(4,7)buf:(0,36)=ar(0,1);0;7;(23,2)same_file:f(0,1)stat1:P(0,30)stat2:P(0,30)name_too_long:f(0,1)statb:P(0,30)tstat:(19,1)res:r(0,1)shorten_name:f(0,19)trunc:r(0,21)plen:r(0,1)min_part:r(0,1)check_ofname:f(0,1)ok:r(0,1)reset_times:f(0,19)timep:(41,1)copy_stat:f(0,19)ifstat:P(0,30)treat_dir:f(0,19)dir:P(0,21)dp:r(0,37)=*(39,1)dirp:r(0,38)=*(38,1)nbuf:(0,39)=ar(0,1);0;1023;(0,2)do_exit:f(0,19)exitcode:P(0,1)in_exit:V(0,1)abort_gzip:F(0,19)inbuf:G(0,40)=ar(0,1);0;32831;(23,2)outbuf:G(0,41)=ar(0,1);0;18431;(23,2)d_buf:G(0,42)=ar(0,1);0;32767;(23,3)window:G(0,43)=ar(0,1);0;65535;(23,2)prev:G(0,44)=ar(0,1);0;65535;(23,3)insize:G(0,4)inptr:G(0,4)outcnt:G(0,4)bytes_in:G(4,7)bytes_out:G(4,7)ifd:G(0,1)ofd:G(0,1)ifname:G(0,39)ofname:G(0,39)progname:G(0,21)time_stamp:G(4,47)ifile_size:G(4,7)save_orig_name:G(0,1)foreground:G(0,1)last_member:G(0,1)part_nb:G(0,1)env:G(0,21)z_suffix:G(0,21)z_len:G(4,45)total_in:G(4,7)total_out:G(4,7)istat:G(19,1)inflate.cdiv_t:t(3,1)=(3,2)=s8quot:(0,1),0,32;rem:(0,1),32,32;;ldiv_t:t(3,3)=(3,4)=s8quot:(0,3),0,32;rem:(0,3),32,32;;lldiv_t:t(3,5)=(3,6)=s16quot:(0,6),0,64;rem:(0,6),64,64;;size_t:t(3,7)=(0,4)uid_t:t(3,8)=(0,3)wchar_t:t(3,9)=(0,3)uchar_t:t(8,1)=(0,11)ushort_t:t(8,2)=(0,9)uint_t:t(8,3)=(0,4)ulong_t:t(8,4)=(0,5)caddr_t:t(8,5)=(8,6)=*(0,2)daddr_t:t(8,7)=(0,3)off_t:t(8,8)=(0,3)cnt_t:t(8,9)=(0,8)paddr_t:t(8,10)=(8,4)use_t:t(8,11)=(8,1)sysid_t:t(8,12)=(0,8)index_t:t(8,13)=(0,8) :T(8,14)=eB_FALSE:0,B_TRUE:1,;boolean_t:t(8,15)=(8,14)longlong_t:t(8,16)=(0,6)u_longlong_t:t(8,17)=(0,7)offset_t:t(8,18)=(8,16)diskaddr_t:t(8,19)=(8,16)lloff_t:t(8,20)=(8,21)=u8_f:(8,18),0,64;_p:(8,22)=s8_u:(0,3),0,32;_l:(8,8),32,32;;,0,64;;lldaddr_t:t(8,23)=(8,24)=u8_f:(8,19),0,64;_p:(8,25)=s8_u:(0,3),0,32;_l:(8,7),32,32;;,0,64;;k_fltset_t:t(8,26)=(8,4)id_t:t(8,27)=(0,3)major_t:t(8,28)=(8,4)minor_t:t(8,29)=(8,4)pri_t:t(8,30)=(0,8)o_mode_t:t(8,31)=(8,2)o_dev_t:t(8,32)=(0,8)o_uid_t:t(8,33)=(8,2)o_gid_t:t(8,34)=(8,33)o_nlink_t:t(8,35)=(0,8)o_pid_t:t(8,36)=(0,8)o_ino_t:t(8,37)=(8,2)key_t:t(8,38)=(0,1)mode_t:t(8,39)=(8,4)gid_t:t(8,40)=(3,8)nlink_t:t(8,41)=(8,4)dev_t:t(8,42)=(8,4)ino_t:t(8,43)=(8,4)pid_t:t(8,44)=(0,3)ssize_t:t(8,45)=(0,1)time_t:t(8,46)=(0,3)clock_t:t(8,47)=(0,3)clockid_t:t(8,48)=(0,1)timer_t:t(8,49)=(0,1)unchar:t(8,50)=(0,11)ushort:t(8,51)=(0,9)uint:t(8,52)=(0,4)ulong:t(8,53)=(0,5)hostid_t:t(8,54)=(0,3)u_char:t(8,55)=(0,11)u_short:t(8,56)=(0,9)u_int:t(8,57)=(0,4)u_long:t(8,58)=(0,5)_quad:T(8,59)=s8val:(8,60)=ar(0,1);0;1;(0,3),0,64;;quad:t(8,61)=(8,59)sigval:T(16,1)=u4sival_int:(0,1),0,32;sival_ptr:(5,2),0,32;;sigevent:T(16,2)=s24sigev_notify:(0,1),0,32;_sigev_un:(16,3)=u4_sigev_signo:(0,1),0,32;_sigev_notify_function:(16,4)=*(16,5)=f(0,19),0,32;;,32,32;sigev_value:(16,1),64,32;_sigev_pad1:(0,1),96,32;_sigev_notify_attributes:(5,2),128,32;_sigev_pad2:(0,1),160,32;;siginfo:T(16,6)=s128si_signo:(0,1),0,32;si_code:(0,1),32,32;si_errno:(0,1),64,32;_data:(16,7)=u116_pad:(16,8)=ar(0,1);0;28;(0,1),0,928;_proc:(16,9)=s16_pid:(8,44),0,32;_pdata:(16,10)=u12_kill:(16,11)=s8_uid:(3,8),0,32;_value:(16,1),32,32;;,0,64;_cld:(16,12)=s12_utime:(8,47),0,32;_status:(0,1),32,32;_stime:(8,47),64,32;;,0,96;;,32,96;;,0,128;_fault:(16,13)=s8_addr:(8,5),0,32;_trapno:(0,1),32,32;;,0,64;_file:(16,14)=s8_fd:(0,1),0,32;_band:(0,3),32,32;;,0,64;_prof:(16,15)=s116_faddr:(8,5),0,32;_tstamp:(12,6),32,64;\_syscall:(0,8),96,16;_nsysarg:(0,2),112,8;_fault:(0,2),120,8;_sysarg:(16,16)=ar(0,1);0;7;(0,3),128,256;_mstate:(16,17)=ar(0,1);0;16;(0,3),384,544;;,0,928;;,96,928;;siginfo_t:t(16,18)=(16,6)k_siginfo:T(16,19)=s28si_signo:(0,1),0,32;si_code:(0,1),32,32;si_errno:(0,1),64,32;_data:(16,20)=u16_proc:(16,21)=s16_pid:(8,44),0,32;_pdata:(16,22)=u12_kill:(16,23)=s8_uid:(3,8),0,32;_value:(16,1),32,32;;,0,64;_cld:(16,24)=s12_utime:(8,47),0,32;_status:(0,1),32,32;_stime:(8,47),64,32;;,0,96;;,32,96;;,0,128;_fault:(16,25)=s8_addr:(8,5),0,32;_trapno:(0,1),32,32;;,0,64;_file:(16,26)=s8_fd:(0,1),0,32;_band:(0,3),32,32;;,0,64;_prof:(16,27)=s16_faddr:(8,5),0,32;_tstamp:(12,6),32,64;_syscall:(0,8),96,16;_nsysarg:(0,2),112,8;\k_siginfo_t:t(16,28)=(16,19)sigqueue:T(16,29)=s40sq_next:(16,30)=*(16,29),0,32;sq_info:(16,28),32,224;sq_func:(16,31)=*(16,32)=f(0,19),256,32;sq_backptr:(5,2),288,32;;sigqueue_t:t(16,33)=(16,29)huft:T(0,20)=s8e:(5,3),0,8;b:(5,3),8,8;v:(0,21)=u4n:(5,4),0,16;t:(0,22)=*(0,20),0,32;;,32,32;;border:S(0,23)=ar(0,1);0;-1;(0,4)cplens:S(0,24)=ar(0,1);0;-1;(5,4)cplext:S(0,25)=ar(0,1);0;-1;(5,4)cpdist:S(0,26)=ar(0,1);0;-1;(5,4)cpdext:S(0,27)=ar(0,1);0;-1;(5,4)mask_bits:G(0,28)=ar(0,1);0;-1;(5,4)lbits:G(0,1)dbits:G(0,1)huft_build:F(0,1)b:P(0,29)=*(0,4)n:p(0,4)s:p(0,4)d:p(0,30)=*(5,4)e:p(0,30)t:p(0,31)=*(0,22)m:p(0,32)=*(0,1)m:r(0,32)a:r(0,4)c:(0,33)=ar(0,1);0;16;(0,4)f:r(0,4)g:r(0,1)h:r(0,1)i:r(0,4)k:r(0,1)l:r(0,1)p:r(0,29)q:r(0,22)r:(0,20)u:(0,34)=ar(0,1);0;15;(0,22)v:(0,35)=ar(0,1);0;287;(0,4)w:r(0,1)x:(0,36)=ar(0,1);0;16;(0,4)xp:r(0,29)y:r(0,1)z:r(0,4)huft_free:F(0,1)t:P(0,22)p:r(0,22)inflate_codes:F(0,1)tl:p(0,22)td:p(0,22)bl:p(0,1)bd:P(0,1)e:r(0,4)d:r(0,4)w:r(0,4)t:r(0,22)ml:(0,4)md:(0,4)b:r(5,5)k:r(0,4)inflate_stored:F(0,1)inflate_fixed:F(0,1)tl:(0,22)td:(0,22)bl:(0,1)bd:(0,1)l:(0,37)=ar(0,1);0;287;(0,4)inflate_dynamic:F(0,1)l:r(0,4)nb:r(0,4)nl:r(0,4)nd:r(0,4)ll:(0,38)=ar(0,1);0;315;(0,4)inflate_block:F(0,1)e:P(0,32)t:r(0,4)inflate:F(0,1)e:(0,1)r:r(0,1)h:r(0,4)bb:G(5,5)bk:G(0,4)hufts:G(0,4)lzw.cmsg_done:S(0,1)lzw:F(0,1)out:P(0,1)trees.cextra_lbits:S(16,8)extra_dbits:S(0,20)=ar(0,1);0;29;(0,1)extra_blbits:S(0,21)=ar(0,1);0;18;(0,1)ct_data:T(0,22)=s4fc:(0,23)=u2freq:(5,4),0,16;code:(5,4),0,16;;,0,16;dl:(0,24)=u2dad:(5,4),0,16;len:(5,4),0,16;;,16,16;;ct_data:t(0,25)=(0,22)tree_desc:T(0,26)=s28dyn_tree:(0,27)=*(0,25),0,32;static_tree:(0,27),32,32;extra_bits:(0,28)=*(0,1),64,32;extra_base:(0,1),96,32;elems:(0,1),128,32;max_length:(0,1),160,32;max_code:(0,1),192,32;;tree_desc:t(0,29)=(0,26)l_desc:S(0,29)d_desc:S(0,29)bl_desc:S(0,29)bl_order:S(0,30)=ar(0,1);0;18;(5,3)ct_init:F(0,19)attr:P(0,31)=*(5,4)methodp:P(0,28)n:r(0,1)length:r(0,1)code:r(0,1)dist:r(0,1)init_block:f(0,19)pqdownheap:f(0,19)tree:P(0,27)k:P(0,1)v:r(0,1)j:r(0,1)gen_bitlen:f(0,19)desc:P(0,32)=*(0,29)tree:r(0,27)extra:(0,28)base:r(0,1)max_code:(0,1)max_length:r(0,1)stree:r(0,27)m:r(0,1)bits:r(0,1)xbits:r(0,1)overflow:r(0,1)gen_codes:f(0,19)max_code:P(0,1)next_code:(0,33)=ar(0,1);0;15;(5,4)code:r(5,4)build_tree:f(0,19)desc:P(0,32)elems:r(0,1)max_code:r(0,1)node:r(0,1)scan_tree:f(0,19)prevlen:r(0,1)curlen:r(0,1)nextlen:r(0,1)count:r(0,1)max_count:r(0,1)min_count:r(0,1)send_tree:f(0,19)build_bl_tree:f(0,1)max_blindex:r(0,1)send_all_trees:f(0,19)lcodes:P(0,1)dcodes:P(0,1)blcodes:P(0,1)rank:r(0,1)flush_block:F(8,8)buf:P(8,6)stored_len:P(5,5)eof:P(0,1)opt_lenb:r(5,5)static_lenb:r(5,5)ct_tally:F(0,1)dist:P(0,1)lc:P(0,1)out_length:r(5,5)in_length:r(5,5)dcode:r(0,1)compress_block:f(0,19)ltree:P(0,27)dtree:P(0,27)dist:r(0,4)lc:r(0,1)lx:r(0,4)dx:r(0,4)fx:r(0,4)flag:r(5,3)code:r(0,4)extra:r(0,1)set_file_type:f(0,19)ascii_freq:r(0,4)bin_freq:r(0,4)dyn_ltree:S(0,34)=ar(0,1);0;572;(0,25)dyn_dtree:S(0,35)=ar(0,1);0;60;(0,25)static_ltree:S(0,36)=ar(0,1);0;287;(0,25)static_dtree:S(0,37)=ar(0,1);0;29;(0,25)bl_tree:S(0,38)=ar(0,1);0;38;(0,25)bl_count:S(0,33)heap:S(0,39)=ar(0,1);0;572;(0,1)heap_len:S(0,1)heap_max:S(0,1)depth:S(0,40)=ar(0,1);0;572;(5,3)length_code:S(0,41)=ar(0,1);0;255;(5,3)dist_code:S(0,42)=ar(0,1);0;511;(5,3)base_length:S(16,8)base_dist:S(0,20)flag_buf:S(0,43)=ar(0,1);0;4095;(5,3)last_lit:S(0,4)last_dist:S(0,4)last_flags:S(0,4)flags:S(5,3)flag_bit:S(5,3)opt_len:S(5,5)static_len:S(5,5)compressed_len:S(8,8)input_len:S(8,8)file_type:G(0,31)file_method:G(0,28)unlzh.cfillbuf:f(0,19)n:P(0,1)getbits:f(0,4)x:r(0,4)init_getbits:f(0,19)make_table:f(0,19)nchar:P(0,1)bitlen:P(0,20)=*(6,2)tablebits:P(0,1)table:P(0,21)=*(6,3)count:(0,22)=ar(0,1);0;16;(6,3)weight:(0,23)=ar(0,1);0;16;(6,3)start:(0,24)=ar(0,1);0;17;(6,3)ch:r(0,4)jutbits:r(0,4)avail:r(0,4)nextcode:r(0,4)mask:r(0,4)read_pt_len:f(0,19)nn:P(0,1)nbit:P(0,1)i_special:P(0,1)c:r(0,1)read_c_len:f(0,19)decode_c:f(0,4)decode_p:f(0,4)huf_decode_start:f(0,19)decode_start:f(0,19)decode:f(0,4)count:P(0,4)buffer:P(0,20)i:V(0,4)r:r(0,4)c:r(0,4)unlzh:F(0,1)pt_len:S(0,25)=ar(0,1);0;18;(6,2)blocksize:S(0,4)pt_table:S(0,26)=ar(0,1);0;255;(6,3)bitbuf:S(6,3)subbitbuf:S(0,4)bitcount:S(0,1)j:S(0,1)done:S(0,1)unlzw.cuchar_t:t(5,1)=(0,11)ushort_t:t(5,2)=(0,9)uint_t:t(5,3)=(0,4)ulong_t:t(5,4)=(0,5)caddr_t:t(5,5)=(5,6)=*(0,2)daddr_t:t(5,7)=(0,3)off_t:t(5,8)=(0,3)cnt_t:t(5,9)=(0,8)paddr_t:t(5,10)=(5,4)use_t:t(5,11)=(5,1)sysid_t:t(5,12)=(0,8)index_t:t(5,13)=(0,8) :T(5,14)=eB_FALSE:0,B_TRUE:1,;boolean_t:t(5,15)=(5,14)longlong_t:t(5,16)=(0,6)u_longlong_t:t(5,17)=(0,7)offset_t:t(5,18)=(5,16)diskaddr_t:t(5,19)=(5,16)lloff_t:t(5,20)=(5,21)=u8_f:(5,18),0,64;_p:(5,22)=s8_u:(0,3),0,32;_l:(5,8),32,32;;,0,64;;lldaddr_t:t(5,23)=(5,24)=u8_f:(5,19),0,64;_p:(5,25)=s8_u:(0,3),0,32;_l:(5,7),32,32;;,0,64;;k_fltset_t:t(5,26)=(5,4)id_t:t(5,27)=(0,3)major_t:t(5,28)=(5,4)minor_t:t(5,29)=(5,4)pri_t:t(5,30)=(0,8)o_mode_t:t(5,31)=(5,2)o_dev_t:t(5,32)=(0,8)o_uid_t:t(5,33)=(5,2)o_gid_t:t(5,34)=(5,33)o_nlink_t:t(5,35)=(0,8)o_pid_t:t(5,36)=(0,8)o_ino_t:t(5,37)=(5,2)key_t:t(5,38)=(0,1)mode_t:t(5,39)=(5,4)uid_t:t(5,40)=(0,3)gid_t:t(5,41)=(5,40)nlink_t:t(5,42)=(5,4)dev_t:t(5,43)=(5,4)ino_t:t(5,44)=(5,4)pid_t:t(5,45)=(0,3)size_t:t(5,46)=(5,3)ssize_t:t(5,47)=(0,1)time_t:t(5,48)=(0,3)clock_t:t(5,49)=(0,3)clockid_t:t(5,50)=(0,1)timer_t:t(5,51)=(0,1)unchar:t(5,52)=(0,11)ushort:t(5,53)=(0,9)uint:t(5,54)=(0,4)ulong:t(5,55)=(0,5)hostid_t:t(5,56)=(0,3)u_char:t(5,57)=(0,11)u_short:t(5,58)=(0,9)u_int:t(5,59)=(0,4)u_long:t(5,60)=(0,5)_quad:T(5,61)=s8val:(5,62)=ar(0,1);0;1;(0,3),0,64;;quad:t(5,63)=(5,61)timeval:T(9,1)=s8tv_sec:(0,3),0,32;tv_usec:(0,3),32,32;;timezone:T(9,2)=s8tz_minuteswest:(0,1),0,32;tz_dsttime:(0,1),32,32;;itimerval:T(9,3)=s16it_interval:(9,1),0,64;it_value:(9,1),64,64;;timespec:T(9,4)=s8tv_sec:(5,48),0,32;tv_nsec:(0,3),32,32;;timespec_t:t(9,5)=(9,4)timestruc_t:t(9,6)=(9,4)itimerspec:T(9,7)=s16it_interval:(9,4),0,64;it_value:(9,4),64,64;;itimerspec_t:t(9,8)=(9,7)hrtime_t:t(9,9)=(5,16)sigval:T(13,1)=u4sival_int:(0,1),0,32;sival_ptr:(13,2)=*(0,19),0,32;;sigevent:T(13,3)=s24sigev_notify:(0,1),0,32;_sigev_un:(13,4)=u4_sigev_signo:(0,1),0,32;_sigev_notify_function:(13,5)=*(13,6)=f(0,19),0,32;;,32,32;sigev_value:(13,1),64,32;_sigev_pad1:(0,1),96,32;_sigev_notify_attributes:(13,2),128,32;_sigev_pad2:(0,1),160,32;;siginfo:T(13,7)=s128si_signo:(0,1),0,32;si_code:(0,1),32,32;si_errno:(0,1),64,32;_data:(13,8)=u116_pad:(13,9)=ar(0,1);0;28;(0,1),0,928;_proc:(13,10)=s16_pid:(5,45),0,32;_pdata:(13,11)=u12_kill:(13,12)=s8_uid:(5,40),0,32;_value:(13,1),32,32;;,0,64;_cld:(13,13)=s12_utime:(5,49),0,32;_status:(0,1),32,32;_stime:(5,49),64,32;;,0,96;;,32,96;;,0,128;_fault:(13,14)=s8_addr:(5,5),0,32;_trapno:(0,1),32,32;;,0,64;_file:(13,15)=s8_fd:(0,1),0,32;_band:(0,3),32,32;;,0,64;_prof:(13,16)=s116_faddr:(5,5),0,32;_tstamp:(9,6),32,64;\_syscall:(0,8),96,16;_nsysarg:(0,2),112,8;_fault:(0,2),120,8;_sysarg:(13,17)=ar(0,1);0;7;(0,3),128,256;_mstate:(13,18)=ar(0,1);0;16;(0,3),384,544;;,0,928;;,96,928;;siginfo_t:t(13,19)=(13,7)k_siginfo:T(13,20)=s28si_signo:(0,1),0,32;si_code:(0,1),32,32;si_errno:(0,1),64,32;_data:(13,21)=u16_proc:(13,22)=s16_pid:(5,45),0,32;_pdata:(13,23)=u12_kill:(13,24)=s8_uid:(5,40),0,32;_value:(13,1),32,32;;,0,64;_cld:(13,25)=s12_utime:(5,49),0,32;_status:(0,1),32,32;_stime:(5,49),64,32;;,0,96;;,32,96;;,0,128;_fault:(13,26)=s8_addr:(5,5),0,32;_trapno:(0,1),32,32;;,0,64;_file:(13,27)=s8_fd:(0,1),0,32;_band:(0,3),32,32;;,0,64;_prof:(13,28)=s16_faddr:(5,5),0,32;_tstamp:(9,6),32,64;_syscall:(0,8),96,16;_nsysarg:(0,2),112,8;\k_siginfo_t:t(13,29)=(13,20)sigqueue:T(13,30)=s40sq_next:(13,31)=*(13,30),0,32;sq_info:(13,29),32,224;sq_func:(13,32)=*(13,33)=f(0,19),256,32;sq_backptr:(13,2),288,32;;sigqueue_t:t(13,34)=(13,30)flock:T(18,1)=s36l_type:(0,8),0,16;l_whence:(0,8),16,16;l_start:(5,8),32,32;l_len:(5,8),64,32;l_sysid:(0,3),96,32;l_pid:(5,45),128,32;l_pad:(18,2)=ar(0,1);0;3;(0,3),160,128;;flock_t:t(18,3)=(18,1)char_type:t(0,20)=(0,11)code_int:t(0,21)=(0,3)count_int:t(0,22)=(0,5)count_short:t(0,23)=(0,9)cmp_code_int:t(0,24)=(0,5)bytes:T(0,25)=u4word:(0,3),0,32;bytes:(0,26)=s4dummy:(0,1),0,32;;,0,32;;block_mode:G(0,1)unlzw:F(0,1)in:p(0,1)out:p(0,1)stackp:r(0,27)=*(0,20)code:r(0,21)finchar:(0,1)oldcode:r(0,21)incode:r(0,21)inbits:r(0,3)posbits:r(0,3)outpos:r(0,1)bitmask:(0,4)free_ent:r(0,21)maxcode:(0,21)maxmaxcode:(0,21)n_bits:(0,1)rsize:(0,1)o:r(0,1)p:r(0,27)unpack.cread_tree:f(0,19)nodes:r(0,1)prefixp:r(0,20)=*(3,3)prefixes:r(0,1)unpack:F(0,1)eob:(0,4)peek:r(0,4)peek_mask:(0,4)mask:r(3,5)orig_len:S(3,5)max_len:S(0,1)literal:S(0,21)=ar(0,1);0;255;(3,3)lit_base:S(0,22)=ar(0,1);0;25;(0,1)leaves:S(0,22)parents:S(0,22)peek_bits:S(0,1)bitbuf:S(3,5)valid:S(0,1)unzip.cpkzip:G(0,1)ext_header:G(0,1)check_zipfile:F(0,1)h:r(0,20)=*(3,3)unzip:F(0,1)orig_crc:r(3,5)orig_len:r(3,5)buf:(0,21)=ar(0,1);0;15;(3,3)err:r(0,1)n:r(3,5)c:r(3,3)decrypt:G(0,1)key:G(7,6)util.ccopy:F(0,1)updcrc:F(27,4)s:P(0,20)=*(27,2)n:P(0,4)c:r(27,4)crc:V(27,4)clear_bufs:F(0,19)fill_inbuf:F(0,1)eof_ok:P(0,1)flush_outbuf:F(0,19)flush_window:F(0,19)write_buf:F(0,19)fd:P(0,1)buf:P(27,1)cnt:P(0,4)strlwr:F(13,6)s:P(13,6)t:r(13,6)base_name:F(13,6)fname:P(13,6)p:r(13,6)xunlink:F(0,1)filename:P(13,6)make_simple_name:F(0,19)name:P(13,6)add_envopt:F(13,6)argcp:P(0,21)=*(0,1)argvp:P(0,22)=*(0,23)=*(13,6)env:P(13,6)oargv:r(0,23)nargv:r(0,23)oargc:r(0,1)nargc:r(0,1)error:F(0,19)m:P(13,6)warning:F(0,19)read_error:F(0,19)write_error:F(0,19)display_ratio:F(0,19)num:P(13,8)den:P(13,8)file:P(0,24)=*(28,2)fprint_off:F(0,19)file:P(0,24)offset:P(13,8)width:P(0,1)buf:(0,25)=ar(0,1);0;31;(0,2)negative:r(0,1)remainder:r(0,1)quotient:r(0,1)xmalloc:F(27,1)size:P(0,4)cp:r(27,1)crc_32_tab:G(0,26)=ar(0,1);0;-1;(27,4)yesno.cyesno:F(0,1)buf:(0,20)=ar(0,1);0;127;(0,2)zip.czip:F(0,1)attr:(5,4)deflate_flags:(5,4)p:r(8,6)file_read:F(0,1)header_bytes:G(8,8)crc:S(5,5)rpmatch.c/usr/local/lib/gcc-lib/sparc-sun-solaris2.5.1/2.95.3/include/stddef.hptrdiff_t:t(2,1)=(0,1)size_t:t(2,2)=(0,4)wchar_t:t(2,3)=(0,3)wint_t:t(2,4)=(0,4)uid_t:t(3,7)=(0,3)rpmatch:F(0,1)response:P(0,20)=*(0,2) <values-Xa.cXt ; V=2.0as: WorkShop Compilers 4.2 dev 13 May 1996 as: WorkShop Compilers 4.2 dev 13 May 1996 @(#)SunOS 5.5.1 Generic May 1996as: WorkShop Compilers 4.2 dev 13 May 1996 GCC: (GNU) 2.95.3 20010315 (release)GCC: (GNU) 2.95.3 20010315 (release)GCC: (GNU) 2.95.3 20010315 (release)GCC: (GNU) 2.95.3 20010315 (release)GCC: (GNU) 2.95.3 20010315 (release)GCC: (GNU) 2.95.3 20010315 (release)GCC: (GNU) 2.95.3 20010315 (release)GCC: (GNU) 2.95.3 20010315 (release)GCC: (GNU) 2.95.3 20010315 (release)GCC: (GNU) 2.95.3 20010315 (release)GCC: (GNU) 2.95.3 20010315 (release)GCC: (GNU) 2.95.3 20010315 (release)GCC: (GNU) 2.95.3 20010315 (release)GCC: (GNU) 2.95.3 20010315 (release)GCC: (GNU) 2.95.3 20010315 (release)GCC: (GNU) 2.95.3 20010315 (release)GCC: (GNU) 2.95.3 20010315 (release)GCC: (GNU) 2.95.3 20010315 (release)as: WorkShop Compilers 4.2 dev 13 May 1996 GCC: (GNU) 2.95.3 20010315 (release)as: WorkShop Compilers 4.2 dev 13 May 1996 .symtab.strtab.shstrtab.interp.hash.dynsym.dynstr.rela.got.rela.bss.rela.plt.init.text.fini.rodata.data.eh_frame.ctors.dtors.plt.got.dynamic.sbss.bss.stab.stabstr.stab.index.stab.indexstr.comment#4) 1o9  C $ $< M ` `X W ] ciqhh 0w՘՘՜՜դդլլ 88 XX vIx IIM{R m A  $ `     h ՘ ՜դլ8X @h ՜(դ6 P L H [՘ np | \ l  ՘ h L` n՘  ըՠ X\` &, 4>tP Rt^pmlwh~dP  \ &\<  ܈܄ x܀|+ &,H & #,H0 )͸ 4,xp 9,h A-P I-H S\h [9@  f5D rP z5| F  A [l@ Y Ct ?LH Y V8 Td U @P  @ !( -@ ;D$ FT|4 Ph ]P &[elL lθ> s> z4< p< t & u &t Tx L  ܐx4 xP pp  p( t2h>htJxTh^ g| qx4 | e l h ` \ X dx  , (=y $} 0 x @  +X4  Bd  &QY a h q {( ,  pp       ( D$    xhD 0 & &   * 3 ; hBhK  Sh[ea &k &szє  &D &$ &` &(@Dh( hX   h8p , P4   d  'l+p6tH :+( F <  WbXk p0ytt x t r\ `$d     ј  !$( -$ 7TC K0@S<8ZHHa8hTq|x`4 ld 0d x|<H ք8֐8 լш  b, ֜8  $ &( 0k @(( NϬ" X֨8 `ִp gH j pu ( x$ ~L 8   @  0  ]< l     t 8 $ D  $ p !  -LH 9,h A J Q88 X c nlH xDP    $ < c ь  +( Ph .d ( \   p ( \ , ( PP * 0h  7ѐ Bj4x P V \ h( qth x׀d ׌, ט8 D<   , 0H     h$ \   פ8    8 $h )װ . 7$< ?׼ D0 L, W  ^ fDt j8 qXd x ~ d h8  $  @ 8 ]P < @  $  dD ,  ʹ #l 0  <(0crtstuff.cobject.11p.3__CTOR_LIST____DTOR_LIST____do_global_dtors_auxgcc2_compiled.__EH_FRAME_BEGIN__force_to_datafini_dummyinit_dummycompleted.4frame_dummycrti.s__FRAME_END____do_global_ctors_aux__DTOR_END____CTOR_END__crtn.svalues-Xa.cbits.czfilebi_bufbi_validLetext*ABS*crypt.cdeflate.cconfiguration_tablecompr_levelmax_lazy_matchlookaheadeofileins_hfill_windowdeflate_fastgetopt.cmy_indexexchangelast_nonoptfirst_nonopt_getopt_initializenextcharposixly_correctorderinggetopt1.cgzip.clicense_msgusagehelp_msg.6helplicenseversionprogerrordo_exittreat_filetreat_stdindo_listinput_eofget_methodget_istattreat_dirreset_timesmake_ofnamecreate_outfilecopy_statcheck_ofnamename_too_longshorten_namedo_statknown_suffixes.37get_suffixsuffixes.41first_time.51methods.52same_filein_exit.77inflate.cbordercplenscplextcpdistcpdextlzw.cmsg_donetrees.cextra_lbitsextra_dbitsextra_blbitsl_descdyn_ltreestatic_ltreed_descdyn_dtreestatic_dtreebl_descbl_treebl_ordercompressed_leninput_lenlength_codebase_lengthbase_distdist_codebl_countgen_codesinit_blockflag_bitstatic_lenopt_lenlast_flagslast_distlast_litflagspqdownheapheapheap_lendepthgen_bitlenheap_maxbuild_treescan_treesend_treebuild_bl_treesend_all_treesflag_bufset_file_typecompress_blockunlzh.cfillbufbitbufbitcountsubbitbufgetbitsinit_getbitsmake_tableread_pt_lenpt_lenpt_tableread_c_lendecode_cblocksizedecode_phuf_decode_startdecode_startjdonei.33decodeunlzw.cunpack.cread_treeorig_lenmax_lenleaveslit_baseliteralparentspeek_bitsvalidunzip.cutil.ccrc.6yesno.czip.ccrcrpmatch.cinbufbkxmallocstrcpydecryptsend_bitsdeflateprognameprintfutimewindow_sizeargsfile_typelongoptsquietto_stdoutstrlwr__ctypeofdtime_stamplzwgetopt_long_getopt_internalnice_match_DYNAMIClist__flsbufd_buftotal_outgetenvforegrounderrno_etextunlzhinflateinflate_blockheader_bytes__getopt_initializedcheck_zipfilememcpylm_initverbosecrc_32_tabadd_envoptperrorcopybase_namefile_methodno_nametolowermallocisattyoptarg__filbufinsizeoutcnt.divopterrreaddirdisplay_ratiounlzwfflush_environistatflush_outbuflseekchowndecompress_PROCEDURE_LINKAGE_TABLE_block_moderecursivehuft_freechmod_initexit_codeinflate_dynamiclongest_matchmask_bitsstrrchrcallocbbforcect_initwritehuftsfstatfprintfctimestrcatdo_lzw__deregister_frame_inforemove_ofnameoptindabort_gzipfile_readtestbi_windup_startlstatlevelsignalreadfprint_offlast_memberwrite_errorstrncmpbytes_inofnameunlinkfill_inbufifile_sizewrite_bufmemcmpsave_orig_namebytes_outz_lenxunlinkinflate_codespkzip__bss_startgetoptmemsetmainprevopendirprev_lengthread_errorifnamekeygetopt_long_onlymake_simple_nameunzipstrcmpext_headerinflate_fixed_finilbitsblock_starttotal_inatexitstrcspn.urem.remerrorasciiflush_blockenvoutbufoptoptyesnounpackgood_matchinflate_storedwarning_lib_versiondbitsstatcopy_block_edata_GLOBAL_OFFSET_TABLE__endexitread_bufrpmatchatoipart_nbclear_bufsmethodno_timezipwindowupdcrc_exitmax_chain_lengthstrspnbi_initstrlenopen.umul__iobinptrhuft_buildifdz_suffixclosedir__register_frame_infoclosemaxbitsct_tallybi_reversestrstartworkflush_windowmatch_startfree07070100014da3000081a40000000a0000000a000000013ca6200f000007ac000000200000001c00000000000000000000001000000004reloc/bin/zdiff#!/bin/bash # 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="/usr/local/bin:$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 2 fi ;; esac done if test -z "$FILES"; then echo "Usage: $prog [${comp}_options] file [file]" exit 2 fi set $FILES if test $# -eq 1; then FILE=`echo "$1" | sed 's/[-.][zZtga]*$//'` gzip -cd "$1" | $comp $OPTIONS - "$FILE" 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]*||'` set -C trap 'rm -f /tmp/"$F".$$; exit 2' 1 2 13 15 0 gzip -cdfq "$2" > /tmp/"$F".$$ || exit gzip -cdfq "$1" | $comp $OPTIONS - /tmp/"$F".$$ STAT="$?" /bin/rm -f /tmp/"$F".$$ || STAT=2 trap 1 2 13 15 0 exit $STAT;; *) gzip -cdfq "$1" | $comp $OPTIONS - "$2";; esac;; *) case "$2" in *[-.]gz* | *[-.][zZ] | *.t[ga]z) gzip -cdfq "$2" | $comp $OPTIONS "$1" -;; *) $comp $OPTIONS "$1" "$2";; esac;; esac else echo "Usage: $prog [${comp}_options] file [file]" exit 2 fi 07070100014da4000081a40000000a0000000a000000013ca6200f000003f4000000200000001c00000000000000000000001100000004reloc/bin/zforce#!/bin/bash # 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="/usr/local/bin:$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 07070100014da5000081a40000000a0000000a000000013ca6200f00000b82000000200000001c00000000000000000000001000000004reloc/bin/zgrep#!/bin/bash # zgrep -- a wrapper around a grep program that decompresses files as needed # Adapted from a version sent by Charles Levert # Copyright (C) 1998, 2001 Free Software Foundation # Copyright (C) 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., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. PATH="/usr/local/bin:$PATH"; export PATH prog=`echo $0 | sed 's|.*/||'` case "$prog" in *egrep) grep=${EGREP-egrep} ;; *fgrep) grep=${FGREP-fgrep} ;; *) grep=${GREP-grep} ;; esac pat="" after_dash_dash="" files_with_matches=0 files_without_matches=0 no_filename=0 with_filename=0 while test $# -ne 0; do case "$after_dash_dash$1" in --d* | --rec*) echo >&2 "$0: $1: option not supported"; exit 1;; --files-with-*) files_with_matches=1;; --files-witho*) files_without_matches=1;; --no-f*) no_filename=1;; --wi*) with_filename=1;; --*) ;; -*) case "$1" in -*[dr]*) echo >&2 "$0: $1: option not supported"; exit 1;; esac case "$1" in -*H*) with_filename=1;; esac case "$1" in -*h*) no_filename=1;; esac case "$1" in -*L*) files_without_matches=1;; esac case "$1" in -*l*) files_with_matches=1;; esac;; esac case "$after_dash_dash$1" in -[ef]) opt="$opt $1"; shift; pat="$1" if test "$grep" = grep; then # grep is buggy with -e on SVR4 grep=egrep fi;; -[ABCdm])opt="$opt $1 $2"; shift;; --) opt="$opt $1"; after_dash_dash=1;; -*) 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 if test $# -eq 0; then gzip -cdfq | $grep $opt "$pat" exit $? fi res=0 for i do gzip -cdfq "$i" | if test $files_with_matches -eq 1; then $grep $opt "$pat" > /dev/null && echo $i elif test $files_without_matches -eq 1; then $grep $opt "$pat" > /dev/null || echo $i elif test $with_filename -eq 0 && { test $# -eq 1 || test $no_filename -eq 1; }; then $grep $opt "$pat" else if test $with_filename -eq 1; then sed_script="s|^[^:]*:|${i}:|" else sed_script="s|^|${i}:|" fi $grep $opt "$pat" | sed "$sed_script" fi r=$? test $res -lt $r && res=$r done exit $res 07070100014da6000081a40000000a0000000a000000013ca6200f00000069000000200000001c00000000000000000000001000000004reloc/bin/zless#!/bin/bash : ${PAGER=less} export PAGER PATH="/usr/local/bin:$PATH" export PATH exec zmore ${1+"$@"} 07070100014da7000081a40000000a0000000a000000013ca6201000000755000000200000001c00000000000000000000001000000004reloc/bin/zmore#!/bin/bash # Copyright (C) 2001 Free Software Foundation # 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., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. PATH="/usr/local/bin:$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 < "$FILE" || continue 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 07070100014da8000081a40000000a0000000a000000013ca6201000000dbd000000200000001c00000000000000000000000f00000004reloc/bin/znew#!/bin/bash PATH="/usr/local/bin:$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.$$ set -C 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 07070100016ab2000041ed0000000a0000000a000000033ca623fa00000000000000200000001c00000000000000000000000a00000004reloc/doc0707010001d029000041ed0000000a0000000a000000023ca623fa00000000000000200000001c00000000000000000000000f00000004reloc/doc/gzip0707010001d02a000081a40000000a0000000a000000013ca620a300000062000000200000001c00000000000000000000001700000004reloc/doc/gzip/AUTHORSgzip was written by Jean-loup Gailly , and Mark Adler for the decompression code. 0707010001d02b000081a40000000a0000000a000000013ca620a300004648000000200000001c00000000000000000000001700000004reloc/doc/gzip/COPYING GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 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 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. Copyright (C) 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 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) year 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. , 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. 0707010001d02c000081a40000000a0000000a000000013ca620a300009cf3000000200000001c00000000000000000000001900000004reloc/doc/gzip/ChangeLog2002-03-08 Paul Eggert * NEWS, README, revision.h, gzip.texi, configure.in (AM_INIT_AUTOMAKE): Revision 1.3.3, dated today. * README-alpha: Now using latest stable GNU tools. Using the latest tools allows gzip to build correctly on hosts conforming to POSIX 1003.1-2001. * configure.in (match): Use AC_LIBOBJ; Autoconf 2.53 requires it. (LIBOBJS): No longer need to subst, since AC_LIBOBJ does it. (AC_PREREQ): Bump to 2.53. * Makefile.am (install-exec-hook, remove-installed-links): Work even when configured with --program-transform-name. * gzip.c (license_msg): Update copyright. (z_len): Now of type size_t. 2001-11-03 Paul Eggert * NEWS, README, revision.h, gzip.texi, configure.in (AM_INIT_AUTOMAKE): Revision 1.3.2, dated today. * Makefile.am (LN_S): New macro. (install-exec-hook): Depend on remove-installed-links. Affect $(DESTDIR)$(bindir), not just $(bindir). (uninstall-local, remove-installed-links): New rules. * README-alpha: This release built with autoconf 2.52f. * TODO: Add rsync patch. * configure.in: Add AC_PREREQ(2.52) and AC_PROG_LN_S. * gzip.1, zmore.1: Fix troff glitches, using Eric S. Raymond's suggestions for inspiration. * m4/shell.m4(AC_PROG_SHELL): Add commentary and cleanup. * gzip.texi, gzip.1: Add pointers to RFCs 1951 and 1952. Mention that gzip --list reports file sizes modulo 2^32. * gzip.1: Remove incorrect report of 2 GB bug. Add copyright notice. 2001-09-30 Paul Eggert * NEWS, README, revision.h, gzip.texi, configure.in (AM_INIT_AUTOMAKE): Revision 1.3.1, dated today. * INSTALL, getopt.c, getopt.h, getopt1.c, install-sh, missing, mkinstalldirs, texinfo.tex: Sync with latest version in other packages. * acinclude.m4, config.guess, config.sub: Remove. * depcomp, rpmatch.c, yesno.c: New files. * ChangeLog, README, NEWS, TODO, configure.in, zgrep.in, zmore.in: Add copyright notice. * Makefile.am (ACLOCAL_AMFLAGS): New macro. (ACINCLUDE_INPUTS): Remove all but shell.m4. ($(srcdir)/acinclude.m4): Remove. (gzip_sources): Add yesno.c. * TODO: Add i18n. * configure.in (AC_CANONICAL_HOST): Remove. (AC_AIX, AC_MINIX): Move earlier. (AC_REPLACE_FUNCS): Add rpmatch. * gzip.c (main): Report error if -b operand is not a nonnegative integer. (treat_file): Don't assume tab width is 8, or that characters are one column wide. (make_ofname): Use WARN to warn about unchanged files. (get_method): "get newer version of gzip" -> "not supported" (check_ofname): Use yesno instead of checking for 'y' ourselves. (treat_file): Do not assume link count fits in int. * gzip.h (yesno): New decl. * util.c (display_ratio): Use floating point to compute ratio: this avoids problems with integer overflow. * zgrep.in: Add support for --, -H, -h, -L, -l, -C, -d, -m and their long equivalents. Warn that -r and -d are not supported. * zmore.in: Check that file is readable before attempting to decompress it. 2000-10-09 Paul Eggert * configure.in (AC_CHECK_FUNCS): Add lstat. 2000-07-20 Paul Eggert Use a POSIX-compliant shell instead of /bin/sh. Idea suggested by Albert Chin-A-Young . * m4/shell.m4: New file. * configure.in (AC_PROG_SHELL): Add it. * Makefile.am (ACINCLUDE_INPUTS): Add $(M4DIR)/shell.m4. (.in): Replace /bin/sh with $(SHELL). 2000-04-17 Bruno Haible * Makefile.am (install-exec-hook): If hard links fail, try symlinks. 2000-04-02 Jim Meyering * Makefile.am (install-exec-hook): Remove link targets before installing. 2000-01-02 Albert Chin-A-Young * gzip.texi: Add direntry. 1999-12-21 Paul Eggert * NEWS, README, revision.h, gzip.texi: Revision 1.3, dated today. * gzip.c (license_msg, usage, version, help, license): Adjust to current GNU coding standards. (total_in, total_out): Remove unnecessary initialization. * zip.c (file_read): Report read errors. * util.c (fill_inbuf): Likewise. * gzip.c (main): Don't assume EOF == -1. * unlzw.c (unlzw): Likewise. * util.c (copy, fill_inbuf): Likewise. 1999-11-18 Paul Eggert * m4/largefile.m4 (AC_SYS_LARGEFILE_FLAGS): Work around a bug in the QNX shell, which doesn't propagate exit status of failed commands inside shell assignments. 1999-10-07 Paul Eggert * NEWS, README, revision.h, gzip.texi: Revision 1.2.4294967306 dated today. This is the successor to revision 1.2.4.4294967305; automake requires the new (shorter) number. Convert to automake. * Makefile.am, gunzip.1, zcat.1, zcmp.1, AUTHORS: New files. * revision.h (VERSION): Remove; moved to config.h. * configure.in (AM_INIT_AUTOMAKE, AM_CONFIG_HEADER, AC_CANONICAL_HOST, AC_OBJEXT): Add. (AC_PROG_CPP): Remove. (AC_SYS_LARGEFILE): Add, replacing older inline code. (ASCPP): Use $OBJEXT. (LIBOBJS): Add match.o if needed. (AC_PROG_INSTALL): Remove. (AC_EXT, AC_C_CONST): Add. (AC_CHECK_HEADERS): Add, replacing lots of AC_HEADER_CHECKs. All instances of defined(NO_TIME_H) changed to !defined(HAVE_TIME_H), etc. (AC_CHECK_FUNCS): Add utime. (SEDCMD): Use $interpval, not $ac_cv_sys_interpreter. (AC_PREFIX_PROGRAM): Add, replacing AC_PREFIX. (ZCAT, G): Remove. (LIBOBJS): Add. (OBJA): Remove; LIBOBJS now does this. * bits.c, gzip.c, deflate.c, inflate.c, lzw.c, trees.c, unlzh.c, unlzw.c, unpack.c, unzip.c, util.c, zip.c: Include first; this is needed for proper large-file support, given the new way of configuring large files. * gzip.c: Include ; Ultrix needs this. (TIME_OPT): Use STRUCT_UTIMBUF instead of empty string. (help): Add bug-report address. (do_stat): Depend on HAVE_LSTAT, not S_IFLNK, S_ISLNK, and NO_SYMLINK. 1999-06-25 Paul Eggert * inflate.c (huft_build): Set n to length of v, to detect improper tables. Don't accidentally grow j past z. 1999-06-24 Paul Eggert * Makefile.in (check): Update texinfo.tex size. * configure.in (ASMV): Define with AC_DEFINE; do not manipulate DEFS directly, as this doesn't work with recent autoconf versions. 1999-02-06 Paul Eggert * NEWS, README, revision.h, gzip.texi: Revision 1.2.4.4294967305, dated today. This merges the changes from gzip 1.2.4a, which fix some typographical errors in the documentation and update the bug-reporting address. 1999-01-27 Paul Eggert * NEWS, README, revision.h (VERSION, REVDATE): Revision 1.2.4.4294967304, dated today. Port to autoconf 2.13. * Makefile.in (next, next-fat, coherent): Update dirent headers to match Autoconf 2.13. * configure.in (AC_RETSIGTYP): Remove; superseded by AC_TYPE_SIGNAL. (AC_DYNIX_SEQ, AC_XENIX_DIR, AC_DIR_HEADER): Remove; superseded by AC_HEADER_DIRENT. * tailor.h (HAVE_DIRENT_H, HAVE_SYS_DIR_H): Define instad of DIRENT, SYSDIR. * gzip.c (NAMLEN): Renamed from NLENGTH. Depend on Autoconf 2.13 names HAVE_DIRENT_H, HAVE_SYS_NDIR_H, HAVE_SYS_DIR_H, HAVE_NDIR_H instead of the oldfashioned names DIRENT, SYSDIR, SYSNDIR, NDIR. (CLOSEDIR): New macro. (progerror): New function. (treat_stdin, treat_file, creat_outfile, get_istat, check_ofname, treat_dir): Use it, for brevity. (treat_dir): Report any I/O errors when reading directories. * COPYING, INSTALL, doc/texinfo.tex, install-sh: Update to latest public versions. 1998-11-18 Paul Eggert * NEWS, README, revision.h (VERSION, REVDATE): Revision 1.2.4.4294967303, dated today. * gzip.c (get_method): Don't complain about trailing zeros at the end of a gzipped file, as they're commonly appended to fill out a block (e.g. by GNU tar). * configure.in (CPPFLAGS, LDFLAGS, LIBS): Add large-file support for HP-UX 10.20 and later. * getopt.c, getopt.h, texinfo.tex: Sync with latest version at gnu.org. * getopt1.c: New file. * Makefile.in (SRCS): Add getopt1.c. (OBJS): Add getopt1$O. (getopt1$O): New dependency. (check): Adjust desired size of compressed texinfo.tex to 55637, to reflect the 1998-11-13 edition of texinfo.tex. * gpl.texinfo: Remove; its addresses were out of date and these days the GPL isn't reprinted in manuals anyway. * gzip.texi: Remove reference to gpl.texinfo. * Makefile.in (GENFILES): Remove gpl.texinfo. 1998-11-13 Paul Eggert * NEWS, README, revision.h (VERSION, REVDATE): Revision 1.2.4.4294967302, dated today. * gzip.c (input_eof): New function. (treat_stdin, treat_file): Use it to fix premature detection of EOF bug when a gzipped file concatenation boundary is at a multiple of INBUFSIZ. * Makefile.in (installman): Fix bug when installing from subdirectory. ($(srcdir)/gzip.info): Renamed from gzip.info. ($(srcdir)/gzip.info, realclean): Do not split gzip.info. 1998-10-26 Paul Eggert * NEWS, README, revision.h (VERSION, REVDATE): Revision 1.2.4.4294967301, dated today. * TODO: Update bug reporting address. * Makefile.in (datadir, libdir): Remove unused macros. (mandir): Let configure set it. (manextdir): New macro. (alldirs): Remove datadir, libdir; add manextdir. (TEXI2HTML): New macro. (installman, uninstall): Install into manextdir, not mandir. (install-strip): New rule. (installdirs): No need to build $(prefix)/man separately, as it's now in alldirs. (match$O): Compile with $(CFLAGS). (gzip_1.html): New rule. * gzip.c (get_istat): Remove lint by initializing z_suffix_errno. (check_ofname): Do not assume unsigned char. * util.c (strlwr): Don't assume char is unsigned. (warning): Renamed from `warn'. * gzip.h (tolow): Use tolower instead of relying on 'A'-'a'. (warning): Renamed from warn. * trees.c (warning): Renamed from warn. 1998-10-14 Paul Eggert Merge patches from Debian. * NEWS, README, revision.h (VERSION, REVDATE): Revision 1.2.4.4294967300, dated today. * README, algorithm.doc, gzip.texi: Update maintainer address. * gzexe.in, zdiff.in, znew.in: Close security hole portably, using `set -C'. * zgrep.in: Add -A, -B. * gzexe.in: Use `gzip', not full path, to run gzip. * zdiff.in: Report proper exit status. * gzip.h (base_name): Renamed from basename. All uses changed. * gzip.c (z_suffix): Now char *, so that there's no limit to length. All uses change. (main): If --quiet, abort gzip when SIGPIPE received. (get_suffix): Don't assume z_suffix's address is a constant. (get_istat): Likewise. Check for buffer overflow. Preserve errno correctly. (make_ofname): Check for buffer overflow. * util.c (fill_inbuf): Flush window before reporting read error. * inflate.c (inflate_dynamic): Don't dump core if tl == NULL. * Makefile.in (GENFILES): Add zless.in. (SCRIPTS): Add zless. (default): Build all programs, not just gzip. (all): Add zless. (installbin): Install zegrep, zfgrep. (installman): Install zless man page. (install_compress): Don't install compress. (zless): New rule. 1998-09-16 Paul Eggert * NEWS, README, revision.h: Bump version number to 1.2.4.4294967299. * tailor.h (UNLINK_READONLY_BUG): New macro. * gzip.h (unlink): New decl. * util.c (xunlink): New function. * gzip.c (treat_file, create_outfile, check_ofname, copy_stat, abort_gzip): Use xunlink rather than unlink. Do not chmod the file; xunlink will do that if need be. 1998-05-21 Paul Eggert * NEWS, README, revision.h: Bump version number to 1.2.4.4294967298. * Makefile.in (prefix): Set from @prefix@. (distclean): Remove config.cache. 1998-01-15 Paul Eggert * NEWS, README, revision.h: Bump version number to indicate large-file support. 1997-10-08 Paul Eggert * gzip.c (CHAR_BIT): Define if doesn't. (OFF_T_MIN, OFF_T_MAX): New macros. (do_list): Revert to fixed format, but this time don't assume that 9 digits suffice; use a width taken from the maximum value that off_t can represent. (off_t): Do not typedef; autoconf handles this now. * gzip.c, util.c (): Include if HAVE_LIMITS_H. * gzip.h, util.c (fprint_off): Now takes int width argument. * configure.in (AC_HAVE_HEADERS): Check for limits.h. (AC_TYPE_OFF_T): Use this instead of grepping sys/types.h for off_t. (AC_TYPE_SIZE_T): Use this instead of obsolescent AC_SIZE_T. * tailor.h (NO_OFF_T): Remove. (off_t): Define this instead. 1997-10-03 Paul Eggert * Makefile.in, bits.c, configure.in, deflate.c, gzip.c, gzip.h, inflate.c, trees.c, unlzw.c, unpack.c, unzip.c, util.c, zip.c: Adjust to Solaris 2.6, which has large files but small off_t by default. * gzip.c: Output more reasonable message if input file is too large. * gzip.c, util.c: Propagate errno from point of error to `perror'. * unzip.c: Allow uncompressing files larger than 4 gigabytes. http://www.gzip.org/4g.patch (1996-07-21) 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 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. Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Copyright (C) 1992, 1993 Jean-loup Gailly This file is part of gzip (GNU zip). gzip 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. gzip 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 gzip; see the file COPYING. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 0707010001d02d000081a40000000a0000000a000000013ca620a300002405000000200000001c00000000000000000000001700000004reloc/doc/gzip/INSTALLBasic Installation ================== These are generic installation instructions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). It can also use an optional file (typically called `config.cache' and enabled with `--cache-file=config.cache' or simply `-C') that saves the results of its tests to speed up reconfiguring. (Caching is disabled by default to prevent problems with accidental use of stale cache files.) If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If you are using the cache, and at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' (or `configure.in') is used to create `configure' by a program called `autoconf'. You only need `configure.ac' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. 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. Running `configure' takes awhile. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package. 4. Type `make install' to install the programs and any data files and documentation. 5. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. Run `./configure --help' for details on some of the pertinent environment variables. You can give `configure' initial values for variables by setting them in the environment. You can do that on the command line like this: ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix *Note Environment Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, 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 the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. If you have to use a `make' that does not support the `VPATH' variable, you have to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. Installation Names ================== By default, `make install' will install the package's files in `/usr/local/bin', `/usr/local/man', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PATH'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you give `configure' the option `--exec-prefix=PATH', the package will use PATH as the prefix for installing programs and libraries. Documentation and other data files will still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=PATH' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Optional Features ================= Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Specifying the System Type ========================== There may be some features `configure' cannot figure out automatically, but needs to determine by the type of host the package will run on. Usually `configure' can figure that out, but if it prints a message saying it cannot guess the host type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the host type. If you are _building_ compiler tools for cross-compiling, you should use the `--target=TYPE' option to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the host platform (i.e., that on which the generated programs will eventually be run) with `--host=TYPE'. In this case, you should also specify the build platform with `--build=TYPE', because, in this case, it may not be possible to guess the build platform (it sometimes involves compiling and running simple test programs, and this can't be done if the compiler is a cross compiler). Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Environment Variables ===================== Variables not defined in a site shell script can be set in the environment passed to configure. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the `configure' command line, using `VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc will cause the specified gcc to be used as the C compiler (unless it is overridden in the site shell script). `configure' Invocation ====================== `configure' recognizes the following options to control how it operates. `--help' `-h' Print a summary of the options to `configure', and exit. `--version' `-V' Print the version of Autoconf used to generate the `configure' script, and exit. `--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally `config.cache'. FILE defaults to `/dev/null' to disable caching. `--config-cache' `-C' Alias for `--cache-file=config.cache'. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. 0707010001d02e000081a40000000a0000000a000000013ca620a300005837000000200000001c00000000000000000000001800000004reloc/doc/gzip/Makefile# Makefile.in generated by automake 1.6 from Makefile.am. # Makefile. Generated from Makefile.in by configure. # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 # Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. # Make gzip (GNU zip). SHELL = /bin/bash srcdir = . top_srcdir = . prefix = /usr/local exec_prefix = ${prefix} bindir = ${exec_prefix}/bin sbindir = ${exec_prefix}/sbin libexecdir = ${exec_prefix}/libexec datadir = ${prefix}/share sysconfdir = ${prefix}/etc sharedstatedir = ${prefix}/com localstatedir = ${prefix}/var libdir = ${exec_prefix}/lib infodir = ${prefix}/info mandir = ${prefix}/man includedir = ${prefix}/include oldincludedir = /usr/include pkgdatadir = $(datadir)/gzip pkglibdir = $(libdir)/gzip pkgincludedir = $(includedir)/gzip top_builddir = . ACLOCAL = ${SHELL} /usr2/SOURCES/S25/gzip-1.3.3/missing --run aclocal-1.6 AUTOCONF = ${SHELL} /usr2/SOURCES/S25/gzip-1.3.3/missing --run autoconf AUTOMAKE = ${SHELL} /usr2/SOURCES/S25/gzip-1.3.3/missing --run automake-1.6 AUTOHEADER = ${SHELL} /usr2/SOURCES/S25/gzip-1.3.3/missing --run autoheader am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = /usr/local/bin/install -c INSTALL_PROGRAM = ${INSTALL} INSTALL_DATA = ${INSTALL} -m 644 install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c INSTALL_SCRIPT = ${INSTALL} INSTALL_HEADER = $(INSTALL_DATA) transform = s,x,x, NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : EXEEXT = OBJEXT = o PATH_SEPARATOR = : AMTAR = ${SHELL} /usr2/SOURCES/S25/gzip-1.3.3/missing --run tar ASCPP = gcc -E -DNO_UNDERLINE AWK = gawk CC = gcc CFLAGS = -g -O2 DEPDIR = .deps INSTALL_STRIP_PROGRAM = ${SHELL} $(install_sh) -c -s LN_S = ln -s PACKAGE = gzip SEDCMD = 1d STRIP = VERSION = 1.3.3 am__include = include am__quote = install_sh = /usr2/SOURCES/S25/gzip-1.3.3/install-sh AUTOMAKE_OPTIONS = gnits dist-shar ACLOCAL_AMFLAGS = -I m4 man_MANS = gunzip.1 gzexe.1 gzip.1 \ zcat.1 zcmp.1 zdiff.1 zforce.1 zgrep.1 zless.1 zmore.1 znew.1 M4DIR = $(srcdir)/m4 ACINCLUDE_INPUTS = $(M4DIR)/shell.m4 EXTRA_DIST = $(ACINCLUDE_INPUTS) $(man_MANS) \ algorithm.doc amiga/match.a amiga/Makefile.gcc amiga/Makefile.sasc \ amiga/tailor.c amiga/utime.h atari/Makefile.st crypt.h getopt.h \ gzexe.in gzip.doc gzip.h lzw.h msdos/match.asm msdos/tailor.c \ msdos/gzip.prj msdos/doturboc.bat msdos/Makefile.msc msdos/Makefile.bor \ msdos/Makefile.djg nt/Makefile.nt os2/gzip.def os2/Makefile.os2 \ os2/gzip16.def primos/include/errno.h primos/include/fcntl.h \ primos/include/stdlib.h primos/include/sysStat.h \ primos/include/sysTypes.h primos/build.cpl primos/readme \ primos/primos.c primos/ci.opts revision.h sample/makecrc.c \ sample/ztouch sample/add.c sample/sub.c sample/zread.c sample/zfile \ tailor.h vms/Makefile.mms vms/gzip.hlp vms/vms.c vms/Readme.vms \ vms/Makefile.vms vms/Makefile.gcc vms/makegzip.com zdiff.in \ zforce.in zgrep.in zless.in zmore.in znew.in bin_PROGRAMS = gzip bin_SCRIPTS = gzexe zdiff zgrep zforce zless zmore znew gzip_SOURCES = \ bits.c crypt.c deflate.c getopt.c getopt1.c gzip.c inflate.c lzw.c \ trees.c unlzh.c unlzw.c unpack.c unzip.c util.c yesno.c zip.c gzip_LDADD = rpmatch.o info_TEXINFOS = gzip.texi SUFFIXES = .in MAINTAINERCLEANFILES = gzip.doc MOSTLYCLEANFILES = _match.s gzexe zdiff zforce zgrep zless zmore znew subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = bin_PROGRAMS = gzip$(EXEEXT) PROGRAMS = $(bin_PROGRAMS) am_gzip_OBJECTS = bits.$(OBJEXT) crypt.$(OBJEXT) deflate.$(OBJEXT) \ getopt.$(OBJEXT) getopt1.$(OBJEXT) gzip.$(OBJEXT) \ inflate.$(OBJEXT) lzw.$(OBJEXT) trees.$(OBJEXT) unlzh.$(OBJEXT) \ unlzw.$(OBJEXT) unpack.$(OBJEXT) unzip.$(OBJEXT) util.$(OBJEXT) \ yesno.$(OBJEXT) zip.$(OBJEXT) gzip_OBJECTS = $(am_gzip_OBJECTS) gzip_DEPENDENCIES = rpmatch.o gzip_LDFLAGS = SCRIPTS = $(bin_SCRIPTS) DEFS = -DHAVE_CONFIG_H DEFAULT_INCLUDES = -I. -I$(srcdir) -I. CPPFLAGS = LDFLAGS = -L/usr/local/lib -R/usr/local/lib -R/usr/lib -L/usr/lib -R/usr/openwin/lib -L/usr/openwin/lib -L/usr/local/ssl/lib -R/usr/local/ssl/lib LIBS = depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles DEP_FILES = $(DEPDIR)/match.Po $(DEPDIR)/rpmatch.Po \ ./$(DEPDIR)/bits.Po ./$(DEPDIR)/crypt.Po \ ./$(DEPDIR)/deflate.Po ./$(DEPDIR)/getopt.Po \ ./$(DEPDIR)/getopt1.Po ./$(DEPDIR)/gzip.Po \ ./$(DEPDIR)/inflate.Po ./$(DEPDIR)/lzw.Po \ ./$(DEPDIR)/trees.Po ./$(DEPDIR)/unlzh.Po \ ./$(DEPDIR)/unlzw.Po ./$(DEPDIR)/unpack.Po \ ./$(DEPDIR)/unzip.Po ./$(DEPDIR)/util.Po \ ./$(DEPDIR)/yesno.Po ./$(DEPDIR)/zip.Po COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ DIST_SOURCES = $(gzip_SOURCES) INFO_DEPS = gzip.info DVIS = gzip.dvi TEXINFOS = gzip.texi NROFF = nroff MANS = $(man_MANS) DIST_COMMON = README AUTHORS COPYING ChangeLog INSTALL Makefile.am \ Makefile.in NEWS README-alpha THANKS TODO aclocal.m4 \ config.h.in configure configure.in depcomp install-sh match.c \ missing mkinstalldirs rpmatch.c texinfo.tex SOURCES = $(gzip_SOURCES) all: config.h $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .in .c .dvi .info .o .obj .ps .texi $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && \ $(AUTOMAKE) --gnits Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe) $(top_builddir)/config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(srcdir)/configure: $(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES) cd $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): configure.in m4/shell.m4 cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) config.h: stamp-h1 @if test ! -f $@; then \ rm -f stamp-h1; \ $(MAKE) stamp-h1; \ else :; fi stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOHEADER) touch $(srcdir)/config.h.in distclean-hdr: -rm -f config.h binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(bindir) @list='$(bin_PROGRAMS)'; for p in $$list; do \ p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ if test -f $$p \ ; then \ p1=`echo "$$p1" | sed -e 's,^.*/,,'`; \ f=`echo $$p1|sed '$(transform);s/$$/$(EXEEXT)/'`; \ echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) $$p $(DESTDIR)$(bindir)/$$f"; \ $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) $$p $(DESTDIR)$(bindir)/$$f; \ else :; fi; \ done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; for p in $$list; do \ f=`echo $$p|sed 's/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ f=`echo "$$f" | sed -e 's,^.*/,,'`; \ echo " rm -f $(DESTDIR)$(bindir)/$$f"; \ rm -f $(DESTDIR)$(bindir)/$$f; \ done clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) gzip$(EXEEXT): $(gzip_OBJECTS) $(gzip_DEPENDENCIES) @rm -f gzip$(EXEEXT) $(LINK) $(gzip_LDFLAGS) $(gzip_OBJECTS) $(gzip_LDADD) $(LIBS) install-binSCRIPTS: $(bin_SCRIPTS) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(bindir) @list='$(bin_SCRIPTS)'; for p in $$list; do \ f="`echo $$p|sed '$(transform)'`"; \ if test -f $$p; then \ echo " $(INSTALL_SCRIPT) $$p $(DESTDIR)$(bindir)/$$f"; \ $(INSTALL_SCRIPT) $$p $(DESTDIR)$(bindir)/$$f; \ elif test -f $(srcdir)/$$p; then \ echo " $(INSTALL_SCRIPT) $(srcdir)/$$p $(DESTDIR)$(bindir)/$$f"; \ $(INSTALL_SCRIPT) $(srcdir)/$$p $(DESTDIR)$(bindir)/$$f; \ else :; fi; \ done uninstall-binSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(bin_SCRIPTS)'; for p in $$list; do \ f="`echo $$p|sed '$(transform)'`"; \ echo " rm -f $(DESTDIR)$(bindir)/$$f"; \ rm -f $(DESTDIR)$(bindir)/$$f; \ done mostlyclean-compile: -rm -f *.$(OBJEXT) core *.core distclean-compile: -rm -f *.tab.c include $(DEPDIR)/match.Po include $(DEPDIR)/rpmatch.Po include ./$(DEPDIR)/bits.Po include ./$(DEPDIR)/crypt.Po include ./$(DEPDIR)/deflate.Po include ./$(DEPDIR)/getopt.Po include ./$(DEPDIR)/getopt1.Po include ./$(DEPDIR)/gzip.Po include ./$(DEPDIR)/inflate.Po include ./$(DEPDIR)/lzw.Po include ./$(DEPDIR)/trees.Po include ./$(DEPDIR)/unlzh.Po include ./$(DEPDIR)/unlzw.Po include ./$(DEPDIR)/unpack.Po include ./$(DEPDIR)/unzip.Po include ./$(DEPDIR)/util.Po include ./$(DEPDIR)/yesno.Po include ./$(DEPDIR)/zip.Po distclean-depend: -rm -rf $(DEPDIR) ./$(DEPDIR) .c.o: source='$<' object='$@' libtool=no \ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' \ $(CCDEPMODE) $(depcomp) \ $(COMPILE) -c `test -f $< || echo '$(srcdir)/'`$< .c.obj: source='$<' object='$@' libtool=no \ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' \ $(CCDEPMODE) $(depcomp) \ $(COMPILE) -c `cygpath -w $<` CCDEPMODE = depmode=gcc gzip.info: gzip.texi gzip.dvi: gzip.texi .texi.info: @cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9] cd $(srcdir) \ && $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) \ `echo $< | sed 's,.*/,,'` .texi.dvi: TEXINPUTS="$(srcdir)$(PATH_SEPARATOR)$$TEXINPUTS" \ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ $(TEXI2DVI) $< .texi: @cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9] cd $(srcdir) \ && $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) \ `echo $< | sed 's,.*/,,'` MAKEINFO = ${SHELL} /usr2/SOURCES/S25/gzip-1.3.3/missing --run makeinfo TEXI2DVI = texi2dvi DVIPS = dvips .dvi.ps: $(DVIPS) $< -o $@ uninstall-info-am: $(PRE_UNINSTALL) @if (install-info --version && \ install-info --version | fgrep -i -v debian) >/dev/null 2>&1; then \ list='$(INFO_DEPS)'; \ for file in $$list; do \ echo " install-info --info-dir=$(DESTDIR)$(infodir) --remove $(DESTDIR)$(infodir)/$$file"; \ install-info --info-dir=$(DESTDIR)$(infodir) --remove $(DESTDIR)$(infodir)/$$file; \ done; \ else :; fi @$(NORMAL_UNINSTALL) @list='$(INFO_DEPS)'; \ for file in $$list; do \ (if cd $(DESTDIR)$(infodir); then \ echo " rm -f $$file $$file-[0-9] $$file-[0-9][0-9])"; \ rm -f $$file $$file-[0-9] $$file-[0-9][0-9]; \ else :; fi); \ done dist-info: $(INFO_DEPS) list='$(INFO_DEPS)'; \ for base in $$list; do \ d=$(srcdir); \ for file in $$d/$$base*; do \ relfile=`expr "$$file" : "$$d/\(.*\)"`; \ test -f $(distdir)/$$relfile || \ cp -p $$file $(distdir)/$$relfile; \ done; \ done mostlyclean-aminfo: -rm -f gzip.aux gzip.cp gzip.cps gzip.dvi gzip.fn gzip.ky gzip.log gzip.pg \ gzip.ps gzip.toc gzip.tp gzip.vr maintainer-clean-aminfo: cd $(srcdir) && \ for i in $(INFO_DEPS); do \ rm -f $$i; \ if test "`echo $$i-[0-9]*`" != "$$i-[0-9]*"; then \ rm -f $$i-[0-9]*; \ fi; \ done man1dir = $(mandir)/man1 install-man1: $(man1_MANS) $(man_MANS) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(man1dir) @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ for i in $$l2; do \ case "$$i" in \ *.1*) list="$$list $$i" ;; \ esac; \ done; \ for i in $$list; do \ if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ else file=$$i; fi; \ ext=`echo $$i | sed -e 's/^.*\\.//'`; \ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ inst=`echo $$inst | sed -e 's/^.*\///'`; \ inst=`echo $$inst | sed '$(transform)'`.$$ext; \ echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst"; \ $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst; \ done uninstall-man1: @$(NORMAL_UNINSTALL) @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ for i in $$l2; do \ case "$$i" in \ *.1*) list="$$list $$i" ;; \ esac; \ done; \ for i in $$list; do \ ext=`echo $$i | sed -e 's/^.*\\.//'`; \ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ inst=`echo $$inst | sed -e 's/^.*\///'`; \ inst=`echo $$inst | sed '$(transform)'`.$$ext; \ echo " rm -f $(DESTDIR)$(man1dir)/$$inst"; \ rm -f $(DESTDIR)$(man1dir)/$$inst; \ done ETAGS = etags ETAGSFLAGS = tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique TAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$tags$$unique" \ || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) top_distdir = . distdir = $(PACKAGE)-$(VERSION) am__remove_distdir = \ { test ! -d $(distdir) \ || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -fr $(distdir); }; } GZIP_ENV = --best distcleancheck_listfiles = find . -type f -print distdir: $(DISTFILES) @if sed 15q $(srcdir)/NEWS | fgrep -e "$(VERSION)" >/dev/null; \ then :; else \ echo "NEWS not updated; not releasing" 1>&2; \ exit 1; \ fi $(am__remove_distdir) mkdir $(distdir) $(mkinstalldirs) $(distdir)/$(M4DIR) $(distdir)/amiga $(distdir)/atari $(distdir)/msdos $(distdir)/nt $(distdir)/os2 $(distdir)/primos $(distdir)/primos/include $(distdir)/sample $(distdir)/vms @for file in $(DISTFILES); do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkinstalldirs) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ cp -pR $$d/$$file $(distdir)$$dir \ || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="${top_distdir}" distdir="$(distdir)" \ dist-info -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r $(distdir) dist-gzip: distdir $(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist dist-all: distdir $(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist $(am__remove_distdir) GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(AMTAR) xf - chmod -R a-w $(distdir); chmod a+w $(distdir) mkdir $(distdir)/=build mkdir $(distdir)/=inst chmod a-w $(distdir) dc_install_base=`$(am__cd) $(distdir)/=inst && pwd` \ && cd $(distdir)/=build \ && ../configure --srcdir=.. --prefix=$$dc_install_base \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && (test `find $$dc_install_base -type f -print | wc -l` -le 1 \ || { echo "ERROR: files left after uninstall:" ; \ find $$dc_install_base -type f -print ; \ exit 1; } >&2 ) \ && $(MAKE) $(AM_MAKEFLAGS) dist-gzip \ && rm -f $(distdir).tar.gz \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck $(am__remove_distdir) @echo "$(distdir).tar.gz is ready for distribution" | \ sed 'h;s/./=/g;p;x;p;x' distcleancheck: distclean if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-am all-am: Makefile $(INFO_DEPS) $(PROGRAMS) $(SCRIPTS) $(MANS) config.h installdirs: $(mkinstalldirs) $(DESTDIR)$(bindir) $(DESTDIR)$(bindir) $(DESTDIR)$(infodir) $(DESTDIR)$(man1dir) install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) stamp-h stamp-h[0-9]* maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-binPROGRAMS clean-generic mostlyclean-am distclean: distclean-am -rm -f config.status config.cache config.log distclean-am: clean-am distclean-compile distclean-depend \ distclean-generic distclean-hdr distclean-tags dvi: dvi-am dvi-am: $(DVIS) info: info-am info-am: $(INFO_DEPS) install-data-am: install-info-am install-man install-exec-am: install-binPROGRAMS install-binSCRIPTS @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-exec-hook install-info: install-info-am install-info-am: $(INFO_DEPS) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(infodir) @list='$(INFO_DEPS)'; \ for file in $$list; do \ d=$(srcdir); \ for ifile in echo $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9]; do \ if test -f $$ifile; then \ relfile=`expr "$$ifile" : "$$d/\(.*\)"`; \ echo " $(INSTALL_DATA) $$ifile $(DESTDIR)$(infodir)/$$relfile"; \ $(INSTALL_DATA) $$ifile $(DESTDIR)$(infodir)/$$relfile; \ else : ; fi; \ done; \ done @$(POST_INSTALL) @if (install-info --version && \ install-info --version | fgrep -i -v debian) >/dev/null 2>&1; then \ list='$(INFO_DEPS)'; \ for file in $$list; do \ echo " install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/$$file";\ install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/$$file || :;\ done; \ else : ; fi install-man: install-man1 installcheck-am: maintainer-clean: maintainer-clean-am maintainer-clean-am: distclean-am maintainer-clean-aminfo \ maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-aminfo mostlyclean-compile \ mostlyclean-generic uninstall-am: uninstall-binPROGRAMS uninstall-binSCRIPTS \ uninstall-info-am uninstall-local uninstall-man uninstall-man: uninstall-man1 .PHONY: GTAGS all all-am check check-am clean clean-binPROGRAMS \ clean-generic dist dist-all dist-gzip dist-info dist-shar \ distcheck distclean distclean-compile distclean-depend \ distclean-generic distclean-hdr distclean-tags distcleancheck \ distdir dvi dvi-am info info-am install install-am \ install-binPROGRAMS install-binSCRIPTS install-data \ install-data-am install-exec install-exec-am install-info \ install-info-am install-man install-man1 install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-aminfo maintainer-clean-generic mostlyclean \ mostlyclean-aminfo mostlyclean-compile mostlyclean-generic tags \ uninstall uninstall-am uninstall-binPROGRAMS \ uninstall-binSCRIPTS uninstall-info-am uninstall-local \ uninstall-man uninstall-man1 match.$(OBJEXT): match.c $(ASCPP) $(srcdir)/match.c >_match.s $(CC) -c $(CFLAGS) _match.s mv _match.$(OBJEXT) match.$(OBJEXT) rm -f _match.s gzip.doc: gzip.1 groff -man -Tascii $(srcdir)/gzip.1 | col -b | uniq >$@ .in: sed \ -e '$(SEDCMD)' \ -e 's|/bin/sh|$(SHELL)|g' \ -e 's|BINDIR|$(bindir)|g' \ $(srcdir)/$@.in >$@ chmod a+x $@ install-exec-hook: remove-installed-links install-exec-hook remove-installed-links: @for prog_ext in $(bin_PROGRAMS) $(bin_SCRIPTS); do \ prog=`echo "$$prog_ext"|sed 's/$(EXEEXT)$$//'`; \ case $$prog in \ gzip) aliases='gunzip zcat';; \ zdiff) aliases='zcmp';; \ zgrep) aliases='zegrep zfgrep';; \ *) continue;; \ esac; \ transform='$(transform)'; \ test "X$$prog" = "X$$prog_ext" || \ transform="$$transform"';s/$$/$(EXEEXT)/'; \ source=$(DESTDIR)$(bindir)/`echo "$$prog"|sed "$$transform"`; \ for alias in $$aliases; do \ dest=$(DESTDIR)$(bindir)/`echo "$$alias"|sed "$$transform"`; \ (set -x; \ rm -f "$$dest" && \ case $@ in \ install-exec-hook) \ for ln in ln "$(LN_S)"; do \ $$ln "$$source" "$$dest" && break; \ done;; \ esac \ ) || exit; \ done; \ done uninstall-local: remove-installed-links # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: 0707010001d02f000081a40000000a0000000a000000013ca620a300000df6000000200000001c00000000000000000000001b00000004reloc/doc/gzip/Makefile.am# Make gzip (GNU zip). ## Copyright (C) 1999, 2001, 2002 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., 59 Temple Place - Suite 330, Boston, MA ## 02111-1307, USA. AUTOMAKE_OPTIONS = gnits dist-shar ACLOCAL_AMFLAGS = -I m4 man_MANS = gunzip.1 gzexe.1 gzip.1 \ zcat.1 zcmp.1 zdiff.1 zforce.1 zgrep.1 zless.1 zmore.1 znew.1 M4DIR = $(srcdir)/m4 ACINCLUDE_INPUTS = $(M4DIR)/shell.m4 EXTRA_DIST = $(ACINCLUDE_INPUTS) $(man_MANS) \ algorithm.doc amiga/match.a amiga/Makefile.gcc amiga/Makefile.sasc \ amiga/tailor.c amiga/utime.h atari/Makefile.st crypt.h getopt.h \ gzexe.in gzip.doc gzip.h lzw.h msdos/match.asm msdos/tailor.c \ msdos/gzip.prj msdos/doturboc.bat msdos/Makefile.msc msdos/Makefile.bor \ msdos/Makefile.djg nt/Makefile.nt os2/gzip.def os2/Makefile.os2 \ os2/gzip16.def primos/include/errno.h primos/include/fcntl.h \ primos/include/stdlib.h primos/include/sysStat.h \ primos/include/sysTypes.h primos/build.cpl primos/readme \ primos/primos.c primos/ci.opts revision.h sample/makecrc.c \ sample/ztouch sample/add.c sample/sub.c sample/zread.c sample/zfile \ tailor.h vms/Makefile.mms vms/gzip.hlp vms/vms.c vms/Readme.vms \ vms/Makefile.vms vms/Makefile.gcc vms/makegzip.com zdiff.in \ zforce.in zgrep.in zless.in zmore.in znew.in bin_PROGRAMS = gzip bin_SCRIPTS = gzexe zdiff zgrep zforce zless zmore znew gzip_SOURCES = \ bits.c crypt.c deflate.c getopt.c getopt1.c gzip.c inflate.c lzw.c \ trees.c unlzh.c unlzw.c unpack.c unzip.c util.c yesno.c zip.c gzip_LDADD = @LIBOBJS@ info_TEXINFOS = gzip.texi ASCPP = @ASCPP@ LN_S = @LN_S@ match.$(OBJEXT): match.c $(ASCPP) $(srcdir)/match.c >_match.s $(CC) -c $(CFLAGS) _match.s mv _match.$(OBJEXT) match.$(OBJEXT) rm -f _match.s gzip.doc: gzip.1 groff -man -Tascii $(srcdir)/gzip.1 | col -b | uniq >$@ SUFFIXES = .in .in: sed \ -e '$(SEDCMD)' \ -e 's|/bin/sh|$(SHELL)|g' \ -e 's|BINDIR|$(bindir)|g' \ $(srcdir)/$@.in >$@ chmod a+x $@ install-exec-hook: remove-installed-links install-exec-hook remove-installed-links: @for prog_ext in $(bin_PROGRAMS) $(bin_SCRIPTS); do \ prog=`echo "$$prog_ext"|sed 's/$(EXEEXT)$$//'`; \ case $$prog in \ gzip) aliases='gunzip zcat';; \ zdiff) aliases='zcmp';; \ zgrep) aliases='zegrep zfgrep';; \ *) continue;; \ esac; \ transform='$(transform)'; \ test "X$$prog" = "X$$prog_ext" || \ transform="$$transform"';s/$$/$(EXEEXT)/'; \ source=$(DESTDIR)$(bindir)/`echo "$$prog"|sed "$$transform"`; \ for alias in $$aliases; do \ dest=$(DESTDIR)$(bindir)/`echo "$$alias"|sed "$$transform"`; \ (set -x; \ rm -f "$$dest" && \ case $@ in \ install-exec-hook) \ for ln in ln "$(LN_S)"; do \ $$ln "$$source" "$$dest" && break; \ done;; \ esac \ ) || exit; \ done; \ done uninstall-local: remove-installed-links MAINTAINERCLEANFILES = gzip.doc MOSTLYCLEANFILES = _match.s gzexe zdiff zforce zgrep zless zmore znew 0707010001d030000081a40000000a0000000a000000013ca620a300005a75000000200000001c00000000000000000000001b00000004reloc/doc/gzip/Makefile.in# Makefile.in generated by automake 1.6 from Makefile.am. # @configure_input@ # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 # Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Make gzip (GNU zip). SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = . ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_HEADER = $(INSTALL_DATA) transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : EXEEXT = @EXEEXT@ OBJEXT = @OBJEXT@ PATH_SEPARATOR = @PATH_SEPARATOR@ AMTAR = @AMTAR@ ASCPP = @ASCPP@ AWK = @AWK@ CC = @CC@ CFLAGS = @CFLAGS@ DEPDIR = @DEPDIR@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LN_S = @LN_S@ PACKAGE = @PACKAGE@ SEDCMD = @SEDCMD@ STRIP = @STRIP@ VERSION = @VERSION@ am__include = @am__include@ am__quote = @am__quote@ install_sh = @install_sh@ AUTOMAKE_OPTIONS = gnits dist-shar ACLOCAL_AMFLAGS = -I m4 man_MANS = gunzip.1 gzexe.1 gzip.1 \ zcat.1 zcmp.1 zdiff.1 zforce.1 zgrep.1 zless.1 zmore.1 znew.1 M4DIR = $(srcdir)/m4 ACINCLUDE_INPUTS = $(M4DIR)/shell.m4 EXTRA_DIST = $(ACINCLUDE_INPUTS) $(man_MANS) \ algorithm.doc amiga/match.a amiga/Makefile.gcc amiga/Makefile.sasc \ amiga/tailor.c amiga/utime.h atari/Makefile.st crypt.h getopt.h \ gzexe.in gzip.doc gzip.h lzw.h msdos/match.asm msdos/tailor.c \ msdos/gzip.prj msdos/doturboc.bat msdos/Makefile.msc msdos/Makefile.bor \ msdos/Makefile.djg nt/Makefile.nt os2/gzip.def os2/Makefile.os2 \ os2/gzip16.def primos/include/errno.h primos/include/fcntl.h \ primos/include/stdlib.h primos/include/sysStat.h \ primos/include/sysTypes.h primos/build.cpl primos/readme \ primos/primos.c primos/ci.opts revision.h sample/makecrc.c \ sample/ztouch sample/add.c sample/sub.c sample/zread.c sample/zfile \ tailor.h vms/Makefile.mms vms/gzip.hlp vms/vms.c vms/Readme.vms \ vms/Makefile.vms vms/Makefile.gcc vms/makegzip.com zdiff.in \ zforce.in zgrep.in zless.in zmore.in znew.in bin_PROGRAMS = gzip bin_SCRIPTS = gzexe zdiff zgrep zforce zless zmore znew gzip_SOURCES = \ bits.c crypt.c deflate.c getopt.c getopt1.c gzip.c inflate.c lzw.c \ trees.c unlzh.c unlzw.c unpack.c unzip.c util.c yesno.c zip.c gzip_LDADD = @LIBOBJS@ info_TEXINFOS = gzip.texi SUFFIXES = .in MAINTAINERCLEANFILES = gzip.doc MOSTLYCLEANFILES = _match.s gzexe zdiff zforce zgrep zless zmore znew subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = bin_PROGRAMS = gzip$(EXEEXT) PROGRAMS = $(bin_PROGRAMS) am_gzip_OBJECTS = bits.$(OBJEXT) crypt.$(OBJEXT) deflate.$(OBJEXT) \ getopt.$(OBJEXT) getopt1.$(OBJEXT) gzip.$(OBJEXT) \ inflate.$(OBJEXT) lzw.$(OBJEXT) trees.$(OBJEXT) unlzh.$(OBJEXT) \ unlzw.$(OBJEXT) unpack.$(OBJEXT) unzip.$(OBJEXT) util.$(OBJEXT) \ yesno.$(OBJEXT) zip.$(OBJEXT) gzip_OBJECTS = $(am_gzip_OBJECTS) gzip_DEPENDENCIES = @LIBOBJS@ gzip_LDFLAGS = SCRIPTS = $(bin_SCRIPTS) DEFS = @DEFS@ DEFAULT_INCLUDES = -I. -I$(srcdir) -I. CPPFLAGS = @CPPFLAGS@ LDFLAGS = @LDFLAGS@ LIBS = @LIBS@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles @AMDEP_TRUE@DEP_FILES = $(DEPDIR)/match.Po $(DEPDIR)/rpmatch.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/bits.Po ./$(DEPDIR)/crypt.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/deflate.Po ./$(DEPDIR)/getopt.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/getopt1.Po ./$(DEPDIR)/gzip.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/inflate.Po ./$(DEPDIR)/lzw.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/trees.Po ./$(DEPDIR)/unlzh.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/unlzw.Po ./$(DEPDIR)/unpack.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/unzip.Po ./$(DEPDIR)/util.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/yesno.Po ./$(DEPDIR)/zip.Po COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ DIST_SOURCES = $(gzip_SOURCES) INFO_DEPS = gzip.info DVIS = gzip.dvi TEXINFOS = gzip.texi NROFF = nroff MANS = $(man_MANS) DIST_COMMON = README AUTHORS COPYING ChangeLog INSTALL Makefile.am \ Makefile.in NEWS README-alpha THANKS TODO aclocal.m4 \ config.h.in configure configure.in depcomp install-sh match.c \ missing mkinstalldirs rpmatch.c texinfo.tex SOURCES = $(gzip_SOURCES) all: config.h $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .in .c .dvi .info .o .obj .ps .texi $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && \ $(AUTOMAKE) --gnits Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe) $(top_builddir)/config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(srcdir)/configure: $(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES) cd $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): configure.in m4/shell.m4 cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) config.h: stamp-h1 @if test ! -f $@; then \ rm -f stamp-h1; \ $(MAKE) stamp-h1; \ else :; fi stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOHEADER) touch $(srcdir)/config.h.in distclean-hdr: -rm -f config.h binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(bindir) @list='$(bin_PROGRAMS)'; for p in $$list; do \ p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ if test -f $$p \ ; then \ p1=`echo "$$p1" | sed -e 's,^.*/,,'`; \ f=`echo $$p1|sed '$(transform);s/$$/$(EXEEXT)/'`; \ echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) $$p $(DESTDIR)$(bindir)/$$f"; \ $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) $$p $(DESTDIR)$(bindir)/$$f; \ else :; fi; \ done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; for p in $$list; do \ f=`echo $$p|sed 's/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ f=`echo "$$f" | sed -e 's,^.*/,,'`; \ echo " rm -f $(DESTDIR)$(bindir)/$$f"; \ rm -f $(DESTDIR)$(bindir)/$$f; \ done clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) gzip$(EXEEXT): $(gzip_OBJECTS) $(gzip_DEPENDENCIES) @rm -f gzip$(EXEEXT) $(LINK) $(gzip_LDFLAGS) $(gzip_OBJECTS) $(gzip_LDADD) $(LIBS) install-binSCRIPTS: $(bin_SCRIPTS) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(bindir) @list='$(bin_SCRIPTS)'; for p in $$list; do \ f="`echo $$p|sed '$(transform)'`"; \ if test -f $$p; then \ echo " $(INSTALL_SCRIPT) $$p $(DESTDIR)$(bindir)/$$f"; \ $(INSTALL_SCRIPT) $$p $(DESTDIR)$(bindir)/$$f; \ elif test -f $(srcdir)/$$p; then \ echo " $(INSTALL_SCRIPT) $(srcdir)/$$p $(DESTDIR)$(bindir)/$$f"; \ $(INSTALL_SCRIPT) $(srcdir)/$$p $(DESTDIR)$(bindir)/$$f; \ else :; fi; \ done uninstall-binSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(bin_SCRIPTS)'; for p in $$list; do \ f="`echo $$p|sed '$(transform)'`"; \ echo " rm -f $(DESTDIR)$(bindir)/$$f"; \ rm -f $(DESTDIR)$(bindir)/$$f; \ done mostlyclean-compile: -rm -f *.$(OBJEXT) core *.core distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/match.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/rpmatch.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bits.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/crypt.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/deflate.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getopt.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getopt1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gzip.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/inflate.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lzw.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/trees.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unlzh.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unlzw.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unpack.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unzip.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/util.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/yesno.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip.Po@am__quote@ distclean-depend: -rm -rf $(DEPDIR) ./$(DEPDIR) .c.o: @AMDEP_TRUE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ $(COMPILE) -c `test -f $< || echo '$(srcdir)/'`$< .c.obj: @AMDEP_TRUE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ $(COMPILE) -c `cygpath -w $<` CCDEPMODE = @CCDEPMODE@ gzip.info: gzip.texi gzip.dvi: gzip.texi .texi.info: @cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9] cd $(srcdir) \ && $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) \ `echo $< | sed 's,.*/,,'` .texi.dvi: TEXINPUTS="$(srcdir)$(PATH_SEPARATOR)$$TEXINPUTS" \ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ $(TEXI2DVI) $< .texi: @cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9] cd $(srcdir) \ && $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) \ `echo $< | sed 's,.*/,,'` MAKEINFO = @MAKEINFO@ TEXI2DVI = texi2dvi DVIPS = dvips .dvi.ps: $(DVIPS) $< -o $@ uninstall-info-am: $(PRE_UNINSTALL) @if (install-info --version && \ install-info --version | fgrep -i -v debian) >/dev/null 2>&1; then \ list='$(INFO_DEPS)'; \ for file in $$list; do \ echo " install-info --info-dir=$(DESTDIR)$(infodir) --remove $(DESTDIR)$(infodir)/$$file"; \ install-info --info-dir=$(DESTDIR)$(infodir) --remove $(DESTDIR)$(infodir)/$$file; \ done; \ else :; fi @$(NORMAL_UNINSTALL) @list='$(INFO_DEPS)'; \ for file in $$list; do \ (if cd $(DESTDIR)$(infodir); then \ echo " rm -f $$file $$file-[0-9] $$file-[0-9][0-9])"; \ rm -f $$file $$file-[0-9] $$file-[0-9][0-9]; \ else :; fi); \ done dist-info: $(INFO_DEPS) list='$(INFO_DEPS)'; \ for base in $$list; do \ d=$(srcdir); \ for file in $$d/$$base*; do \ relfile=`expr "$$file" : "$$d/\(.*\)"`; \ test -f $(distdir)/$$relfile || \ cp -p $$file $(distdir)/$$relfile; \ done; \ done mostlyclean-aminfo: -rm -f gzip.aux gzip.cp gzip.cps gzip.dvi gzip.fn gzip.ky gzip.log gzip.pg \ gzip.ps gzip.toc gzip.tp gzip.vr maintainer-clean-aminfo: cd $(srcdir) && \ for i in $(INFO_DEPS); do \ rm -f $$i; \ if test "`echo $$i-[0-9]*`" != "$$i-[0-9]*"; then \ rm -f $$i-[0-9]*; \ fi; \ done man1dir = $(mandir)/man1 install-man1: $(man1_MANS) $(man_MANS) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(man1dir) @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ for i in $$l2; do \ case "$$i" in \ *.1*) list="$$list $$i" ;; \ esac; \ done; \ for i in $$list; do \ if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ else file=$$i; fi; \ ext=`echo $$i | sed -e 's/^.*\\.//'`; \ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ inst=`echo $$inst | sed -e 's/^.*\///'`; \ inst=`echo $$inst | sed '$(transform)'`.$$ext; \ echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst"; \ $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst; \ done uninstall-man1: @$(NORMAL_UNINSTALL) @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ for i in $$l2; do \ case "$$i" in \ *.1*) list="$$list $$i" ;; \ esac; \ done; \ for i in $$list; do \ ext=`echo $$i | sed -e 's/^.*\\.//'`; \ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ inst=`echo $$inst | sed -e 's/^.*\///'`; \ inst=`echo $$inst | sed '$(transform)'`.$$ext; \ echo " rm -f $(DESTDIR)$(man1dir)/$$inst"; \ rm -f $(DESTDIR)$(man1dir)/$$inst; \ done ETAGS = etags ETAGSFLAGS = tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique TAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$tags$$unique" \ || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) top_distdir = . distdir = $(PACKAGE)-$(VERSION) am__remove_distdir = \ { test ! -d $(distdir) \ || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -fr $(distdir); }; } GZIP_ENV = --best distcleancheck_listfiles = find . -type f -print distdir: $(DISTFILES) @if sed 15q $(srcdir)/NEWS | fgrep -e "$(VERSION)" >/dev/null; \ then :; else \ echo "NEWS not updated; not releasing" 1>&2; \ exit 1; \ fi $(am__remove_distdir) mkdir $(distdir) $(mkinstalldirs) $(distdir)/$(M4DIR) $(distdir)/amiga $(distdir)/atari $(distdir)/msdos $(distdir)/nt $(distdir)/os2 $(distdir)/primos $(distdir)/primos/include $(distdir)/sample $(distdir)/vms @for file in $(DISTFILES); do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkinstalldirs) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ cp -pR $$d/$$file $(distdir)$$dir \ || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="${top_distdir}" distdir="$(distdir)" \ dist-info -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r $(distdir) dist-gzip: distdir $(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist dist-all: distdir $(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist $(am__remove_distdir) GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(AMTAR) xf - chmod -R a-w $(distdir); chmod a+w $(distdir) mkdir $(distdir)/=build mkdir $(distdir)/=inst chmod a-w $(distdir) dc_install_base=`$(am__cd) $(distdir)/=inst && pwd` \ && cd $(distdir)/=build \ && ../configure --srcdir=.. --prefix=$$dc_install_base \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && (test `find $$dc_install_base -type f -print | wc -l` -le 1 \ || { echo "ERROR: files left after uninstall:" ; \ find $$dc_install_base -type f -print ; \ exit 1; } >&2 ) \ && $(MAKE) $(AM_MAKEFLAGS) dist-gzip \ && rm -f $(distdir).tar.gz \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck $(am__remove_distdir) @echo "$(distdir).tar.gz is ready for distribution" | \ sed 'h;s/./=/g;p;x;p;x' distcleancheck: distclean if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-am all-am: Makefile $(INFO_DEPS) $(PROGRAMS) $(SCRIPTS) $(MANS) config.h installdirs: $(mkinstalldirs) $(DESTDIR)$(bindir) $(DESTDIR)$(bindir) $(DESTDIR)$(infodir) $(DESTDIR)$(man1dir) install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) stamp-h stamp-h[0-9]* maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-binPROGRAMS clean-generic mostlyclean-am distclean: distclean-am -rm -f config.status config.cache config.log distclean-am: clean-am distclean-compile distclean-depend \ distclean-generic distclean-hdr distclean-tags dvi: dvi-am dvi-am: $(DVIS) info: info-am info-am: $(INFO_DEPS) install-data-am: install-info-am install-man install-exec-am: install-binPROGRAMS install-binSCRIPTS @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-exec-hook install-info: install-info-am install-info-am: $(INFO_DEPS) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(infodir) @list='$(INFO_DEPS)'; \ for file in $$list; do \ d=$(srcdir); \ for ifile in echo $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9]; do \ if test -f $$ifile; then \ relfile=`expr "$$ifile" : "$$d/\(.*\)"`; \ echo " $(INSTALL_DATA) $$ifile $(DESTDIR)$(infodir)/$$relfile"; \ $(INSTALL_DATA) $$ifile $(DESTDIR)$(infodir)/$$relfile; \ else : ; fi; \ done; \ done @$(POST_INSTALL) @if (install-info --version && \ install-info --version | fgrep -i -v debian) >/dev/null 2>&1; then \ list='$(INFO_DEPS)'; \ for file in $$list; do \ echo " install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/$$file";\ install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/$$file || :;\ done; \ else : ; fi install-man: install-man1 installcheck-am: maintainer-clean: maintainer-clean-am maintainer-clean-am: distclean-am maintainer-clean-aminfo \ maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-aminfo mostlyclean-compile \ mostlyclean-generic uninstall-am: uninstall-binPROGRAMS uninstall-binSCRIPTS \ uninstall-info-am uninstall-local uninstall-man uninstall-man: uninstall-man1 .PHONY: GTAGS all all-am check check-am clean clean-binPROGRAMS \ clean-generic dist dist-all dist-gzip dist-info dist-shar \ distcheck distclean distclean-compile distclean-depend \ distclean-generic distclean-hdr distclean-tags distcleancheck \ distdir dvi dvi-am info info-am install install-am \ install-binPROGRAMS install-binSCRIPTS install-data \ install-data-am install-exec install-exec-am install-info \ install-info-am install-man install-man1 install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-aminfo maintainer-clean-generic mostlyclean \ mostlyclean-aminfo mostlyclean-compile mostlyclean-generic tags \ uninstall uninstall-am uninstall-binPROGRAMS \ uninstall-binSCRIPTS uninstall-info-am uninstall-local \ uninstall-man uninstall-man1 match.$(OBJEXT): match.c $(ASCPP) $(srcdir)/match.c >_match.s $(CC) -c $(CFLAGS) _match.s mv _match.$(OBJEXT) match.$(OBJEXT) rm -f _match.s gzip.doc: gzip.1 groff -man -Tascii $(srcdir)/gzip.1 | col -b | uniq >$@ .in: sed \ -e '$(SEDCMD)' \ -e 's|/bin/sh|$(SHELL)|g' \ -e 's|BINDIR|$(bindir)|g' \ $(srcdir)/$@.in >$@ chmod a+x $@ install-exec-hook: remove-installed-links install-exec-hook remove-installed-links: @for prog_ext in $(bin_PROGRAMS) $(bin_SCRIPTS); do \ prog=`echo "$$prog_ext"|sed 's/$(EXEEXT)$$//'`; \ case $$prog in \ gzip) aliases='gunzip zcat';; \ zdiff) aliases='zcmp';; \ zgrep) aliases='zegrep zfgrep';; \ *) continue;; \ esac; \ transform='$(transform)'; \ test "X$$prog" = "X$$prog_ext" || \ transform="$$transform"';s/$$/$(EXEEXT)/'; \ source=$(DESTDIR)$(bindir)/`echo "$$prog"|sed "$$transform"`; \ for alias in $$aliases; do \ dest=$(DESTDIR)$(bindir)/`echo "$$alias"|sed "$$transform"`; \ (set -x; \ rm -f "$$dest" && \ case $@ in \ install-exec-hook) \ for ln in ln "$(LN_S)"; do \ $$ln "$$source" "$$dest" && break; \ done;; \ esac \ ) || exit; \ done; \ done uninstall-local: remove-installed-links # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: 0707010001d031000081a40000000a0000000a000000013ca620a300002ea5000000200000001c00000000000000000000001400000004reloc/doc/gzip/NEWSCurrent Version: 1.3.3. See the file ChangeLog for the details of all changes. No major changes in 1.3.2 or 1.3.3 Major changes from 1.3 to 1.3.1 * zgrep now supports --, -H, -h, -L, -l, -C, -d, -m and their long equivalents. Major changes from 1.2.4 to 1.3 * Add support for large files, e.g. files larger than 2 GB on Solaris 2.6. * Adjust file size listing format for files larger than 10 GB. * New command `zless'. * `zdiff' now reports exit status like `diff' does. * `zcat' is now always called `zcat', not `gzcat'. Similarly for `zdiff', `zgrep', `zmore', `znew', `zforce'. * Warn about a compressed file's trailing zeros only if verbose, for compatibility with recent versions of GNU tar. * Conform to changes to GNU makefile standards. * Port to Autoconf 2.13. * Convert to Automake. * Fix bugs in the following areas: - files larger than 4 GB - security hole involving symlinks from /tmp - security hole involving long file names - permissions bug when compressing a symbolic link to a file - core dumps - concatenated compressed files on INBUFSIZ boundaries - porting bugs on hosts with signed chars - porting bug with upper and lower case - porting bug for hosts that reserve the names `basename' or `warning' 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. Copyright (C) 1999, 2001, 2002 Free Software Foundation, Inc. Copyright (C) 1992, 1993 Jean-loup Gailly This file is part of GNU tar. GNU tar 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. GNU tar 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 tar; see the file COPYING. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 0707010001d032000081a40000000a0000000a000000013ca620a300001d18000000200000001c00000000000000000000001600000004reloc/doc/gzip/READMEThis is the file README for the gzip distribution, test version 1.3.1. Copyright (C) 1999, 2001 Free Software Foundation, Inc. Copyright (C) 1992, 1993 Jean-loup Gailly This file is part of gzip (GNU zip). gzip 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. gzip 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 tar; see the file COPYING. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 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 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. 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 in ftp://gatekeeper.dec.com/pub/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 from ftp://ftp.gnu.org/gnu/gzip or in any of the gnu mirror sites. - sources in gzip-*.tar (or .shar or .tar.gz). - 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 was compiled with djgpp 1.10 available in directory omnigate.clarkson.edu:/pub/msdos/djgpp. A VMS executable is in ftp://ftp.spc.edu/[.macro32.savesets]gzip-1-*.zip (use [.macro32]unzip.exe to extract). A PRIMOS executable is available in ftp://ftp.lysator.liu.se/pub/primos/run/gzip.run. 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 and later 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. See http://www.cdrom.com/pub/infozip/ for more about zip and unzip. 0707010001d033000081a40000000a0000000a000000013ca620a3000004d8000000200000001c00000000000000000000001c00000004reloc/doc/gzip/README-alphaThis is a test release of gzip. Please send comments and problem reports to . Copyright (C) 2001, 2002 Free Software Foundation, Inc. This file is part of GNU zip (gzip). gzip 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. gzip 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 gzip; see the file COPYING. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. If you make changes to the source code, you may need recent test versions of GNU build tools to regenerate the intermediate files. The following versions were used to generate the intermediate files in this distribution: * GNU Autoconf 2.53 * GNU Automake 1.6 0707010001d034000081a40000000a0000000a000000013ca620a4000032ea000000200000001c00000000000000000000001600000004reloc/doc/gzip/THANKSgzip was written by Jean-loup Gailly , 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 0707010001d035000081a40000000a0000000a000000013ca620a400000e0a000000200000001c00000000000000000000001400000004reloc/doc/gzip/TODOTODO file for gzip. Copyright (C) 1999, 2001 Free Software Foundation, Inc. Copyright (C) 1992, 1993 Jean-loup Gailly This file is part of gzip (GNU zip). gzip 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. gzip 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 tar; see the file COPYING. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. Some of the planned features include: - Internationalize by using gettext and setlocale. - 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. For one possible approach to this, please see: http://www.samba.org/netfilter/diary/gzip.rsync.patch - 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 . 0707010001d036000081a40000000a0000000a000000013ca620a400001e43000000200000001c00000000000000000000001d00000004reloc/doc/gzip/algorithm.doc1. 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 . 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). 0707010001d037000081a40000000a0000000a000000013ca620a40000415a000000200000001c00000000000000000000001800000004reloc/doc/gzip/gzip.doc 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 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 com- pressed to gzi.msd.exe.gz. Names are not truncated on sys- tems 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 com- pressed 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 com- pressing, 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, SunOS 5.8 Last change: local 1 User Commands GZIP(1) 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 com- press.) zcat uncompresses either a list of files on the command line or its standard input and writes the uncom- pressed 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 decom- pressing. -c --stdout --to-stdout SunOS 5.8 Last change: local 2 User Commands GZIP(1) 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. SunOS 5.8 Last change: local 3 User Commands GZIP(1) 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 decom- pressing, do not restore the original file name if pre- sent (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 com- press 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. SunOS 5.8 Last change: local 4 User Commands GZIP(1) -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 com- pression 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 uncom- pressed 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: SunOS 5.8 Last change: local 5 User Commands GZIP(1) 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) The gzip file format is specified in P. Deutsch, GZIP file format specification version 4.3, , Internet RFC 1952 (May 1996). The zip deflation format is specified in P. Deutsch, DEFLATE Com- pressed Data Format Specification version 1.3, , Internet RFC 1951 (May 1996). 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 SunOS 5.8 Last change: local 6 User Commands GZIP(1) machine. Recompress the file with gzip, which com- presses 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 directory, (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 nec- essary to pad the output with zeroes up to a block boundary. When the data is read and the whole block is passed to gun- zip 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 sup- press the warning. This option can be set in the GZIP envi- ronment 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 gzip format represents the the input size modulo 2^32, so the --list option reports incorrect uncompressed sizes and compression ratios for uncompressed files 4 GB and larger. To work around this problem, you can use the fol- lowing command to discover a large uncompressed file's true SunOS 5.8 Last change: local 7 User Commands GZIP(1) size: zcat file.gz | wc -c 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. COPYRIGHT NOTICE Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc. 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 per- mission notice are preserved on all copies. Permission is granted to copy and distribute modified ver- sions of this manual under the conditions for verbatim copy- ing, provided that the entire resulting derived work is dis- tributed 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 condi- tions for modified versions, except that this permission notice may be stated in a translation approved by the Foun- dation. SunOS 5.8 Last change: local 8 0707010001d038000081a40000000a0000000a000000013ca620a40000477a000000200000001c00000000000000000000001900000004reloc/doc/gzip/gzip.texi\input texinfo @c -*-texinfo-*- @c %**start of header @setfilename gzip.info @settitle Gzip User's Manual @finalout @setchapternewpage odd @c %**end of header @ifinfo @dircategory Utilities @direntry * Gzip: (gzip). The gzip command for compressing files. @end direntry This file documents the the GNU @code{gzip} command for compressing files. Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc. 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.3.3, for Gzip Version 1.3.3 @subtitle March 2002 @author by Jean-loup Gailly @page @vskip 0pt plus 1filll Copyright @copyright{} 1998, 1999, 2001, 2002 Free Software Foundation, Inc. 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 * 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 Overview, Sample, , 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. The @code{gzip} file format is specified in P. Deutsch, @sc{gzip} file format specification version 4.3, @uref{ftp://ftp.isi.edu/in-notes/rfc1952.txt, Internet RFC 1952} (May 1996). The @code{zip} deflation format is specified in P. Deutsch, @sc{deflate} Compressed Data Format Specification version 1.3, @uref{ftp://ftp.isi.edu/in-notes/rfc1951.txt, Internet RFC 1951} (May 1996). @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.3 (1999-12-21) 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. Report bugs to . @end example This is the output of the command @samp{gzip -v texinfo.tex}: @example texinfo.tex: 69.7% -- 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. The @code{gzip} format represents the the input size modulo @math{2^32}, so the uncompressed size and compression ratio are listed incorrectly for uncompressed files 4 GB and larger. To work around this problem, you can use the following command to discover a large uncompressed file's true size: @example zcat file.gz | wc -c @end example @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 if the garbage contains nonzero bytes. 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 @email{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 0707010001d039000081a40000000a0000000a000000013ca620a400033392000000200000001c00000000000000000000001b00000004reloc/doc/gzip/texinfo.tex% texinfo.tex -- TeX macros to handle Texinfo files. % % Load plain if necessary, i.e., if running under initex. \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi % \def\texinfoversion{2002-03-01.06} % % Copyright (C) 1985, 86, 88, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, % 2000, 01, 02 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, Inc., 59 Temple Place - Suite 330, % Boston, MA 02111-1307, 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! % % Please try the latest version of texinfo.tex before submitting bug % reports; you can get the latest version from: % ftp://ftp.gnu.org/gnu/texinfo.tex % (and all GNU mirrors, see http://www.gnu.org/order/ftp.html) % ftp://texinfo.org/texinfo/texinfo.tex % ftp://tug.org/tex/texinfo.tex % (and all CTAN mirrors, see http://www.ctan.org), % and /home/gd/gnu/doc/texinfo.tex on the GNU machines. % % The texinfo.tex in any given Texinfo distribution could well be out % of date, so if that's what you're using, please check. % % Texinfo has a small home page at http://texinfo.org/ and also % http://www.gnu.org/software/texinfo. % % Send bug reports to bug-texinfo@gnu.org. Please include including a % complete document in each bug report with which we can reproduce the % problem. Patches are, of course, greatly appreciated. % % To process a Texinfo manual with TeX, it's most reliable to use the % texi2dvi shell script that comes with the distribution. For a simple % manual foo.texi, however, you can get away with this: % tex foo.texi % texindex foo.?? % tex foo.texi % tex foo.texi % dvips foo.dvi -o # or whatever, to process the dvi file; this makes foo.ps. % The extra TeX runs get the cross-reference information correct. % Sometimes one run after texindex suffices, and sometimes you need more % than two; texi2dvi does it as many times as necessary. % % It is possible to adapt texinfo.tex for other languages. You can get % the existing language-specific files from the full Texinfo distribution. \message{Loading texinfo [version \texinfoversion]:} % If in a .fmt file, print the version number % and turn on active characters that we couldn't do earlier because % they might have appeared in the input file name. \everyjob{\message{[Texinfo version \texinfoversion]}% \catcode`+=\active \catcode`\_=\active} % Save some parts of plain tex whose names we will redefine. \let\ptexb=\b \let\ptexbullet=\bullet \let\ptexc=\c \let\ptexcomma=\, \let\ptexdot=\. \let\ptexdots=\dots \let\ptexend=\end \let\ptexequiv=\equiv \let\ptexexclam=\! \let\ptexi=\i \let\ptexlbrace=\{ \let\ptexrbrace=\} \let\ptexstar=\* \let\ptext=\t % We never want plain's outer \+ definition in Texinfo. % For @tex, we can use \tabalign. \let\+ = \relax \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 % Set up fixed words for English if not already set. \ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi \ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi \ifx\putwordfile\undefined \gdef\putwordfile{file}\fi \ifx\putwordin\undefined \gdef\putwordin{in}\fi \ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi \ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi \ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi \ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi \ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi \ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi \ifx\putwordof\undefined \gdef\putwordof{of}\fi \ifx\putwordon\undefined \gdef\putwordon{on}\fi \ifx\putwordpage\undefined \gdef\putwordpage{page}\fi \ifx\putwordsection\undefined \gdef\putwordsection{section}\fi \ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi \ifx\putwordsee\undefined \gdef\putwordsee{see}\fi \ifx\putwordSee\undefined \gdef\putwordSee{See}\fi \ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi \ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi % \ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi \ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi \ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi \ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi \ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi \ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi \ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi \ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi \ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi \ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi \ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi \ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi % \ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi \ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi \ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi \ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi \ifx\putwordDeftypevar\undefined\gdef\putwordDeftypevar{Variable}\fi \ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi \ifx\putwordDeftypefun\undefined\gdef\putwordDeftypefun{Function}\fi % Ignore a token. % \def\gobble#1{} \hyphenation{ap-pen-dix} \hyphenation{mini-buf-fer mini-buf-fers} \hyphenation{eshell} \hyphenation{white-space} % Margin to add to right of even pages, to left of odd pages. \newdimen \bindingoffset \newdimen \normaloffset \newdimen\pagewidth \newdimen\pageheight % 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}% \ifx\eTeXversion\undefined \def\loggingall{\tracingcommands2 \tracingstats2 \tracingpages1 \tracingoutput1 \tracinglostchars1 \tracingmacros2 \tracingparagraphs1 \tracingrestores1 \showboxbreadth\maxdimen\showboxdepth\maxdimen }% \else \def\loggingall{\tracingcommands3 \tracingstats2 \tracingpages1 \tracingoutput1 \tracinglostchars1 \tracingmacros2 \tracingparagraphs1 \tracingrestores1 \tracingscantokens1 \tracingassigns1 \tracingifs1 \tracinggroups1 \tracingnesting2 \showboxbreadth\maxdimen\showboxdepth\maxdimen }% \fi % add check for \lastpenalty to plain's definitions. If the last thing % we did was a \nobreak, we don't want to insert more space. % \def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount \removelastskip\penalty-50\smallskip\fi\fi} \def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount \removelastskip\penalty-100\medskip\fi\fi} \def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount \removelastskip\penalty-200\bigskip\fi\fi} % For @cropmarks command. % Do @cropmarks to get crop marks. % \newif\ifcropmarks \let\cropmarks = \cropmarkstrue % % Dimensions to add cropmarks at corners. % Added by P. A. MacKay, 12 Nov. 1986 % \newdimen\outerhsize \newdimen\outervsize % set by the paper size routines \newdimen\cornerlong \cornerlong=1pc \newdimen\cornerthick \cornerthick=.3pt \newdimen\topandbottommargin \topandbottommargin=.75in % Main output routine. \chardef\PAGE = 255 \output = {\onepageout{\pagecontents\PAGE}} \newbox\headlinebox \newbox\footlinebox % \onepageout takes a vbox as an argument. Note that \pagecontents % does insertions, but you have to call it yourself. \def\onepageout#1{% \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi % \ifodd\pageno \advance\hoffset by \bindingoffset \else \advance\hoffset by -\bindingoffset\fi % % Do this outside of the \shipout so @code etc. will be expanded in % the headline as they should be, not taken literally (outputting ''code). \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}% \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}% % {% % Have to do this stuff outside the \shipout because we want it to % take effect in \write's, yet the group defined by the \vbox ends % before the \shipout runs. % \escapechar = `\\ % use backslash in output files. \indexdummies % don't expand commands in the output. \normalturnoffactive % \ in index entries must not stay \, e.g., if % the page break happens to be in the middle of an example. \shipout\vbox{% % Do this early so pdf references go to the beginning of the page. \ifpdfmakepagedest \pdfmkdest{\the\pageno} \fi % \ifcropmarks \vbox to \outervsize\bgroup \hsize = \outerhsize \vskip-\topandbottommargin \vtop to0pt{% \line{\ewtop\hfil\ewtop}% \nointerlineskip \line{% \vbox{\moveleft\cornerthick\nstop}% \hfill \vbox{\moveright\cornerthick\nstop}% }% \vss}% \vskip\topandbottommargin \line\bgroup \hfil % center the page within the outer (page) hsize. \ifodd\pageno\hskip\bindingoffset\fi \vbox\bgroup \fi % \unvbox\headlinebox \pagebody{#1}% \ifdim\ht\footlinebox > 0pt % Only leave this space if the footline is nonempty. % (We lessened \vsize for it in \oddfootingxxx.) % The \baselineskip=24pt in plain's \makefootline has no effect. \vskip 2\baselineskip \unvbox\footlinebox \fi % \ifcropmarks \egroup % end of \vbox\bgroup \hfil\egroup % end of (centering) \line\bgroup \vskip\topandbottommargin plus1fill minus1fill \boxmaxdepth = \cornerthick \vbox to0pt{\vss \line{% \vbox{\moveleft\cornerthick\nsbot}% \hfill \vbox{\moveright\cornerthick\nsbot}% }% \nointerlineskip \line{\ewbot\hfil\ewbot}% }% \egroup % \vbox from first cropmarks clause \fi }% end of \shipout\vbox }% end of group with \turnoffactive \advancepageno \ifnum\outputpenalty>-20000 \else\dosupereject\fi } \newinsert\margin \dimen\margin=\maxdimen \def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}} {\catcode`\@ =11 \gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi % marginal hacks, juha@viisa.uucp (Juha Takala) \ifvoid\margin\else % marginal info is present \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\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 is the rest of % the input line (except we remove a trailing comment). #1 should be a % macro which expects an ordinary undelimited TeX argument. % \def\parsearg#1{% \let\next = #1% \begingroup \obeylines \futurelet\temp\parseargx } % If the next token is an obeyed space (from an @example environment or % the like), remove it and recurse. Otherwise, we're done. \def\parseargx{% % \obeyedspace is defined far below, after the definition of \sepspaces. \ifx\obeyedspace\temp \expandafter\parseargdiscardspace \else \expandafter\parseargline \fi } % Remove a single space (as the delimiter token to the macro call). {\obeyspaces % \gdef\parseargdiscardspace {\futurelet\temp\parseargx}} {\obeylines % \gdef\parseargline#1^^M{% \endgroup % End of the group started in \parsearg. % % First remove any @c comment, then any @comment. % Result of each macro is put in \toks0. \argremovec #1\c\relax % \expandafter\argremovecomment \the\toks0 \comment\relax % % % Call the caller's macro, saved as \next in \parsearg. \expandafter\next\expandafter{\the\toks0}% }% } % Since all \c{,omment} does is throw away the argument, we can let TeX % do that for us. The \relax here is matched by the \relax in the call % in \parseargline; it could be more or less anything, its purpose is % just to delimit the argument to the \c. \def\argremovec#1\c#2\relax{\toks0 = {#1}} \def\argremovecomment#1\comment#2\relax{\toks0 = {#1}} % \argremovec{,omment} might leave us with trailing spaces, though; e.g., % @end itemize @c foo % will have two active spaces as part of the argument with the % `itemize'. Here we remove all active spaces from #1, and assign the % result to \toks0. % % This loses if there are any *other* active characters besides spaces % in the argument -- _ ^ +, for example -- since they get expanded. % Fortunately, Texinfo does not define any such commands. (If it ever % does, the catcode of the characters in questionwill have to be changed % here.) But this means we cannot call \removeactivespaces as part of % \argremovec{,omment}, since @c uses \parsearg, and thus the argument % that \parsearg gets might well have any character at all in it. % \def\removeactivespaces#1{% \begingroup \ignoreactivespaces \edef\temp{#1}% \global\toks0 = \expandafter{\temp}% \endgroup } % Change the active space to expand to nothing. % \begingroup \obeyspaces \gdef\ignoreactivespaces{\obeyspaces\let =\empty} \endgroup \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; press 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{Press 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. % \def\end{\parsearg\endxxx} \def\endxxx #1{% \removeactivespaces{#1}% \edef\endthing{\the\toks0}% % \expandafter\ifx\csname E\endthing\endcsname\relax \expandafter\ifx\csname \endthing\endcsname\relax % There's no \foo, i.e., no ``environment'' foo. \errhelp = \EMsimple \errmessage{Undefined command `@end \endthing'}% \else \unmatchedenderror\endthing \fi \else % Everything's ok; the right environment has been started. \csname E\endthing\endcsname \fi } % There is an environment #1, but it hasn't been started. Give an error. % \def\unmatchedenderror#1{% \errhelp = \EMsimple \errmessage{This `@end #1' doesn't have a matching `@#1'}% } % Define the control sequence \E#1 to give an unmatched @end error. % \def\defineunmatchedend#1{% \expandafter\def\csname E#1\endcsname{\unmatchedenderror{#1}}% } % Single-spacing is done by various environments (specifically, in % \nonfillstart and \quotations). \newskip\singlespaceskip \singlespaceskip = 12.5pt \def\singlespace{% % Why was this kern here? It messes up equalizing space above and below % environments. --karl, 6may93 %{\advance \baselineskip by -\singlespaceskip %\kern \baselineskip}% \setleading\singlespaceskip } %% Simple single-character @ commands % @@ prints an @ % Kludge this until the fonts are right (grr). \def\@{{\tt\char64}} % This is turned off because it was never documented % and you can use @w{...} around a quote to suppress ligatures. %% Define @` and @' to be the same as ` and ' %% but suppressing ligatures. %\def\`{{`}} %\def\'{{'}} % Used to generate quoted braces. \def\mylbrace {{\tt\char123}} \def\myrbrace {{\tt\char125}} \let\{=\mylbrace \let\}=\myrbrace \begingroup % Definitions to produce actual \{ & \} command in an index. \catcode`\{ = 12 \catcode`\} = 12 \catcode`\[ = 1 \catcode`\] = 2 \catcode`\@ = 0 \catcode`\\ = 12 @gdef@lbracecmd[\{]% @gdef@rbracecmd[\}]% @endgroup % Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent % Others are defined by plain TeX: @` @' @" @^ @~ @= @v @H. \let\, = \c \let\dotaccent = \. \def\ringaccent#1{{\accent23 #1}} \let\tieaccent = \t \let\ubaraccent = \b \let\udotaccent = \d % Other special characters: @questiondown @exclamdown % Plain TeX defines: @AA @AE @O @OE @L (and lowercase versions) @ss. \def\questiondown{?`} \def\exclamdown{!`} % Dotless i and dotless j, used for accents. \def\imacro{i} \def\jmacro{j} \def\dotless#1{% \def\temp{#1}% \ifx\temp\imacro \ptexi \else\ifx\temp\jmacro \j \else \errmessage{@dotless can be used only with i or j}% \fi\fi } % Be sure we're in horizontal mode when doing a tie, since we make space % equivalent to this in @example-like environments. Otherwise, a space % at the beginning of a line will start with \penalty -- and % since \penalty is valid in vertical mode, we'd end up putting the % penalty on the vertical list instead of in the new paragraph. {\catcode`@ = 11 % Avoid using \@M directly, because that causes trouble % if the definition is written into an index file. \global\let\tiepenalty = \@M \gdef\tie{\leavevmode\penalty\tiepenalty\ } } % @: 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 } % @! is an end-of-sentence bang. \def\!{!\spacefactor=3000 } % @? is an end-of-sentence query. \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 % % The \vtop we start below produces a box with normal height and large % depth; thus, TeX puts \baselineskip glue before it, and (when the % next line of text is done) \lineskip glue after it. (See p.82 of % the TeXbook.) Thus, space below is not quite equal to space % above. But it's pretty close. \def\Egroup{% \egroup % End the \vtop. \endgroup % End the \group. }% % \vtop\bgroup % We have to put a strut on the last line in case the @group is in % the midst of an example, rather than completely enclosing it. % Otherwise, the interline space between the last line of the group % and the first line afterwards is too small. But we can't put the % strut in \Egroup, since there it would be on a line by itself. % Hence this just inserts a strut at the beginning of each line. \everypar = {\strut}% % % Since we have a strut on every line, we don't need any of TeX's % normal interline spacing. \offinterlineskip % % OK, but now we have to do something about blank % lines in the input in @example-like environments, which normally % just turn into \lisppar, which will insert no space now that we've % turned off the interline space. Simplest is to make them be an % empty paragraph. \ifx\par\lisppar \edef\par{\leavevmode \par}% % % Reset ^^M's definition to new definition of \par. \obeylines \fi % % Do @comment since we are called inside an environment such as % @example, where each end-of-line in the input causes an % end-of-line in the output. We don't want the end-of-line after % the `@group' to put extra space in the output. Since @group % should appear on a line by itself (according to the Texinfo % manual), we don't worry about eating any user text. \comment } % % 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\nobreak %\prevdepth=-1000pt %}} \def\needx#1{% % Ensure vertical mode, so we don't make a big box in the middle of a % paragraph. \par % % If the @need value is less than one line space, it's useless. \dimen0 = #1\mil \dimen2 = \ht\strutbox \advance\dimen2 by \dp\strutbox \ifdim\dimen0 > \dimen2 % % Do a \strut just to make the height of this box be normal, so the % normal leading is inserted relative to the preceding line. % And a page break here is fine. \vtop to #1\mil{\strut\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 \fi } % @br forces paragraph break \let\br = \par % @dots{} output an ellipsis using the current font. % We do .5em per period so that it has the same spacing in a typewriter % font as three actual period characters. % \def\dots{% \leavevmode \hbox to 1.5em{% \hskip 0pt plus 0.25fil minus 0.25fil .\hss.\hss.% \hskip 0pt plus 0.5fil minus 0.5fil }% } % @enddots{} is an end-of-sentence ellipsis. % \def\enddots{% \leavevmode \hbox to 2em{% \hskip 0pt plus 0.25fil minus 0.25fil .\hss.\hss.\hss.% \hskip 0pt plus 0.5fil minus 0.5fil }% \spacefactor=3000 } % @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}}}} % @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current % paragraph. For more general purposes, use the \margin insertion % class. WHICH is `l' or `r'. % \newskip\inmarginspacing \inmarginspacing=1cm \def\strutdepth{\dp\strutbox} % \def\doinmargin#1#2{\strut\vadjust{% \nobreak \kern-\strutdepth \vtop to \strutdepth{% \baselineskip=\strutdepth \vss % if you have multiple lines of stuff to put here, you'll need to % make the vbox yourself of the appropriate size. \ifx#1l% \llap{\ignorespaces #2\hskip\inmarginspacing}% \else \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}% \fi \null }% }} \def\inleftmargin{\doinmargin l} \def\inrightmargin{\doinmargin r} % % @inmargin{TEXT [, RIGHT-TEXT]} % (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right; % else use TEXT for both). % \def\inmargin#1{\parseinmargin #1,,\finish} \def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing. \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt \def\lefttext{#1}% have both texts \def\righttext{#2}% \else \def\lefttext{#1}% have only one text \def\righttext{#1}% \fi % \ifodd\pageno \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin \else \def\temp{\inleftmargin\lefttext}% \fi \temp } % @include file insert text of that file as input. % Allow normal characters that we make active in the argument (a file name). \def\include{\begingroup \catcode`\\=12 \catcode`~=12 \catcode`^=12 \catcode`_=12 \catcode`|=12 \catcode`<=12 \catcode`>=12 \catcode`+=12 \parsearg\includezzz} % Restore active chars for included file. \def\includezzz#1{\endgroup\begingroup % Read the included file in a group so nested @include's work. \def\thisfile{#1}% \input\thisfile \endgroup} \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{\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{\begingroup \catcode`\^^M=\other% \catcode`\@=\other \catcode`\{=\other \catcode`\}=\other% \commentxxx} {\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}} \let\c=\comment % @paragraphindent NCHARS % We'll use ems for NCHARS, close enough. % We cannot implement @paragraphindent asis, though. % \def\asisword{asis} % no translation, these are keywords \def\noneword{none} % \def\paragraphindent{\parsearg\doparagraphindent} \def\doparagraphindent#1{% \def\temp{#1}% \ifx\temp\asisword \else \ifx\temp\noneword \defaultparindent = 0pt \else \defaultparindent = #1em \fi \fi \parindent = \defaultparindent } % @exampleindent NCHARS % We'll use ems for NCHARS like @paragraphindent. % It seems @exampleindent asis isn't necessary, but % I preserve it to make it similar to @paragraphindent. \def\exampleindent{\parsearg\doexampleindent} \def\doexampleindent#1{% \def\temp{#1}% \ifx\temp\asisword \else \ifx\temp\noneword \lispnarrowing = 0pt \else \lispnarrowing = #1em \fi \fi } % @asis just yields its argument. Used with @table, for example. % \def\asis#1{#1} % @math outputs its argument in math mode. % We don't use $'s directly in the definition of \math because we need % to set catcodes according to plain TeX first, to allow for subscripts, % superscripts, special math chars, etc. % % @math does not do math typesetting in section titles, index % entries, and other such contexts where the catcodes are set before % @math gets a chance to work. This could perhaps be fixed, but for now % at least we can have real math in the main text, where it's needed most. % % \let\implicitmath = $%$ font-lock fix % % One complication: _ usually means subscripts, but it could also mean % an actual _ character, as in @math{@var{some_variable} + 1}. So make % _ within @math be active (mathcode "8000), and distinguish by seeing % if the current family is \slfam, which is what @var uses. % {\catcode95 = \active % 95 = _ \gdef\mathunderscore{% \catcode95=\active \def_{\ifnum\fam=\slfam\_\else\sb\fi}% }} % \def\math{\tex\mathcode`\_="8000\mathunderscore \implicitmath\finishmath} \def\finishmath#1{#1\implicitmath\Etex} % @bullet and @minus need the same treatment as @math, just above. \def\bullet{\implicitmath\ptexbullet\implicitmath} \def\minus{\implicitmath-\implicitmath} % @refill is a no-op. \let\refill=\relax % If working on a large document in chapters, it is convenient to % be able to disable indexing, cross-referencing, and contents, for test runs. % This is done with @novalidate (before @setfilename). % \newif\iflinks \linkstrue % by default we want the aux files. \let\novalidate = \linksfalse % @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{% \iflinks \readauxfile \fi % \openindices needs to do some work in any case. \openindices \fixbackslash % Turn off hack to swallow `\input texinfo'. \global\let\setfilename=\comment % Ignore extra @setfilename cmds. % % If texinfo.cnf is present on the system, read it. % Useful for site-wide @afourpaper, etc. % Just to be on the safe side, close the input stream before the \input. \openin 1 texinfo.cnf \ifeof1 \let\temp=\relax \else \def\temp{\input texinfo.cnf }\fi \closein1 \temp % \comment % Ignore the actual filename. } % Called from \setfilename. % \def\openindices{% \newindex{cp}% \newcodeindex{fn}% \newcodeindex{vr}% \newcodeindex{tp}% \newcodeindex{ky}% \newcodeindex{pg}% } % @bye. \outer\def\bye{\pagealignmacro\tracingstats=1\ptexend} \message{pdf,} % adobe `portable' document format \newcount\tempnum \newcount\lnkcount \newtoks\filename \newcount\filenamelength \newcount\pgn \newtoks\toksA \newtoks\toksB \newtoks\toksC \newtoks\toksD \newbox\boxA \newcount\countA \newif\ifpdf \newif\ifpdfmakepagedest \ifx\pdfoutput\undefined \pdffalse \let\pdfmkdest = \gobble \let\pdfurl = \gobble \let\endlink = \relax \let\linkcolor = \relax \let\pdfmakeoutlines = \relax \else \pdftrue \pdfoutput = 1 \input pdfcolor \def\dopdfimage#1#2#3{% \def\imagewidth{#2}% \def\imageheight{#3}% % without \immediate, pdftex seg faults when the same image is % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.) \ifnum\pdftexversion < 14 \immediate\pdfimage \else \immediate\pdfximage \fi \ifx\empty\imagewidth\else width \imagewidth \fi \ifx\empty\imageheight\else height \imageheight \fi \ifnum\pdftexversion<13 #1.pdf% \else {#1.pdf}% \fi \ifnum\pdftexversion < 14 \else \pdfrefximage \pdflastximage \fi} \def\pdfmkdest#1{{\normalturnoffactive \pdfdest name{#1} xyz}} \def\pdfmkpgn#1{#1} \let\linkcolor = \Blue % was Cyan, but that seems light? \def\endlink{\Black\pdfendlink} % Adding outlines to PDF; macros for calculating structure of outlines % come from Petr Olsak \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0% \else \csname#1\endcsname \fi} \def\advancenumber#1{\tempnum=\expnumber{#1}\relax \advance\tempnum by1 \expandafter\xdef\csname#1\endcsname{\the\tempnum}} \def\pdfmakeoutlines{{% \openin 1 \jobname.toc \ifeof 1\else\begingroup \closein 1 \indexnofonts \def\tt{} \let\_ = \normalunderscore % Thanh's hack / proper braces in bookmarks \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace % \def\chapentry ##1##2##3{} \let\appendixentry = \chapentry \def\unnumbchapentry ##1##2{} \def\secentry ##1##2##3##4{\advancenumber{chap##2}} \def\unnumbsecentry ##1##2{} \def\subsecentry ##1##2##3##4##5{\advancenumber{sec##2.##3}} \def\unnumbsubsecentry ##1##2{} \def\subsubsecentry ##1##2##3##4##5##6{\advancenumber{subsec##2.##3.##4}} \def\unnumbsubsubsecentry ##1##2{} \input \jobname.toc \def\chapentry ##1##2##3{% \pdfoutline goto name{\pdfmkpgn{##3}}count-\expnumber{chap##2}{##1}} \let\appendixentry = \chapentry \def\unnumbchapentry ##1##2{% \pdfoutline goto name{\pdfmkpgn{##2}}{##1}} \def\secentry ##1##2##3##4{% \pdfoutline goto name{\pdfmkpgn{##4}}count-\expnumber{sec##2.##3}{##1}} \def\unnumbsecentry ##1##2{% \pdfoutline goto name{\pdfmkpgn{##2}}{##1}} \def\subsecentry ##1##2##3##4##5{% \pdfoutline goto name{\pdfmkpgn{##5}}count-\expnumber{subsec##2.##3.##4}{##1}} \def\unnumbsubsecentry ##1##2{% \pdfoutline goto name{\pdfmkpgn{##2}}{##1}} \def\subsubsecentry ##1##2##3##4##5##6{% \pdfoutline goto name{\pdfmkpgn{##6}}{##1}} \def\unnumbsubsubsecentry ##1##2{% \pdfoutline goto name{\pdfmkpgn{##2}}{##1}} \input \jobname.toc \endgroup\fi }} \def\makelinks #1,{% \def\params{#1}\def\E{END}% \ifx\params\E \let\nextmakelinks=\relax \else \let\nextmakelinks=\makelinks \ifnum\lnkcount>0,\fi \picknum{#1}% \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{\the\pgn}}% \linkcolor #1% \advance\lnkcount by 1% \endlink \fi \nextmakelinks } \def\picknum#1{\expandafter\pn#1} \def\pn#1{% \def\p{#1}% \ifx\p\lbrace \let\nextpn=\ppn \else \let\nextpn=\ppnn \def\first{#1} \fi \nextpn } \def\ppn#1{\pgn=#1\gobble} \def\ppnn{\pgn=\first} \def\pdfmklnk#1{\lnkcount=0\makelinks #1,END,} \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} \def\skipspaces#1{\def\PP{#1}\def\D{|}% \ifx\PP\D\let\nextsp\relax \else\let\nextsp\skipspaces \ifx\p\space\else\addtokens{\filename}{\PP}% \advance\filenamelength by 1 \fi \fi \nextsp} \def\getfilename#1{\filenamelength=0\expandafter\skipspaces#1|\relax} \ifnum\pdftexversion < 14 \let \startlink \pdfannotlink \else \let \startlink \pdfstartlink \fi \def\pdfurl#1{% \begingroup \normalturnoffactive\def\@{@}% \let\value=\expandablevalue \leavevmode\Red \startlink attr{/Border [0 0 0]}% user{/Subtype /Link /A << /S /URI /URI (#1) >>}% % #1 \endgroup} \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}} \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks} \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}} \def\maketoks{% \expandafter\poptoks\the\toksA|ENDTOKS| \ifx\first0\adn0 \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3 \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6 \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9 \else \ifnum0=\countA\else\makelink\fi \ifx\first.\let\next=\done\else \let\next=\maketoks \addtokens{\toksB}{\the\toksD} \ifx\first,\addtokens{\toksB}{\space}\fi \fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next} \def\makelink{\addtokens{\toksB}% {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0} \def\pdflink#1{% \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}} \linkcolor #1\endlink} \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} \fi % \ifx\pdfoutput \message{fonts,} % Font-change commands. % Texinfo sort of 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. % We don't need math for this one. \def\ttsl{\tenttsl} % Default leading. \newdimen\textleading \textleading = 13.2pt % Set the baselineskip to #1, and the lineskip and strut size % correspondingly. There is no deep meaning behind these magic numbers % used as factors; they just match (closely enough) what Knuth defined. % \def\lineskipfactor{.08333} \def\strutheightpercent{.70833} \def\strutdepthpercent {.29167} % \def\setleading#1{% \normalbaselineskip = #1\relax \normallineskip = \lineskipfactor\normalbaselineskip \normalbaselines \setbox\strutbox =\hbox{% \vrule width0pt height\strutheightpercent\baselineskip depth \strutdepthpercent \baselineskip }% } % Set the font macro #1 to the font named #2, adding on the % specified font prefix (normally `cm'). % #3 is the font's design size, #4 is a scale factor \def\setfont#1#2#3#4{\font#1=\fontprefix#2#3 scaled #4} % Use cm as the default font prefix. % To specify the font prefix, you must define \fontprefix % before you read in texinfo.tex. \ifx\fontprefix\undefined \def\fontprefix{cm} \fi % Support font families that don't use the same naming scheme as CM. \def\rmshape{r} \def\rmbshape{bx} %where the normal face is bold \def\bfshape{b} \def\bxshape{bx} \def\ttshape{tt} \def\ttbshape{tt} \def\ttslshape{sltt} \def\itshape{ti} \def\itbshape{bxti} \def\slshape{sl} \def\slbshape{bxsl} \def\sfshape{ss} \def\sfbshape{ss} \def\scshape{csc} \def\scbshape{csc} \newcount\mainmagstep \ifx\bigger\relax % not really supported. \let\mainmagstep=\magstep1 \setfont\textrm\rmshape{12}{1000} \setfont\texttt\ttshape{12}{1000} \else \mainmagstep=\magstephalf \setfont\textrm\rmshape{10}{\mainmagstep} \setfont\texttt\ttshape{10}{\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. \setfont\textbf\bfshape{10}{\mainmagstep} \setfont\textit\itshape{10}{\mainmagstep} \setfont\textsl\slshape{10}{\mainmagstep} \setfont\textsf\sfshape{10}{\mainmagstep} \setfont\textsc\scshape{10}{\mainmagstep} \setfont\textttsl\ttslshape{10}{\mainmagstep} \font\texti=cmmi10 scaled \mainmagstep \font\textsy=cmsy10 scaled \mainmagstep % A few fonts for @defun, etc. \setfont\defbf\bxshape{10}{\magstep1} %was 1314 \setfont\deftt\ttshape{10}{\magstep1} \def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf} % Fonts for indices, footnotes, small examples (9pt). \setfont\smallrm\rmshape{9}{1000} \setfont\smalltt\ttshape{9}{1000} \setfont\smallbf\bfshape{10}{900} \setfont\smallit\itshape{9}{1000} \setfont\smallsl\slshape{9}{1000} \setfont\smallsf\sfshape{9}{1000} \setfont\smallsc\scshape{10}{900} \setfont\smallttsl\ttslshape{10}{900} \font\smalli=cmmi9 \font\smallsy=cmsy9 % Fonts for small examples (8pt). \setfont\smallerrm\rmshape{8}{1000} \setfont\smallertt\ttshape{8}{1000} \setfont\smallerbf\bfshape{10}{800} \setfont\smallerit\itshape{8}{1000} \setfont\smallersl\slshape{8}{1000} \setfont\smallersf\sfshape{8}{1000} \setfont\smallersc\scshape{10}{800} \setfont\smallerttsl\ttslshape{10}{800} \font\smalleri=cmmi8 \font\smallersy=cmsy8 % Fonts for title page: \setfont\titlerm\rmbshape{12}{\magstep3} \setfont\titleit\itbshape{10}{\magstep4} \setfont\titlesl\slbshape{10}{\magstep4} \setfont\titlett\ttbshape{12}{\magstep3} \setfont\titlettsl\ttslshape{10}{\magstep4} \setfont\titlesf\sfbshape{17}{\magstep1} \let\titlebf=\titlerm \setfont\titlesc\scbshape{10}{\magstep4} \font\titlei=cmmi12 scaled \magstep3 \font\titlesy=cmsy10 scaled \magstep4 \def\authorrm{\secrm} % Chapter (and unnumbered) fonts (17.28pt). \setfont\chaprm\rmbshape{12}{\magstep2} \setfont\chapit\itbshape{10}{\magstep3} \setfont\chapsl\slbshape{10}{\magstep3} \setfont\chaptt\ttbshape{12}{\magstep2} \setfont\chapttsl\ttslshape{10}{\magstep3} \setfont\chapsf\sfbshape{17}{1000} \let\chapbf=\chaprm \setfont\chapsc\scbshape{10}{\magstep3} \font\chapi=cmmi12 scaled \magstep2 \font\chapsy=cmsy10 scaled \magstep3 % Section fonts (14.4pt). \setfont\secrm\rmbshape{12}{\magstep1} \setfont\secit\itbshape{10}{\magstep2} \setfont\secsl\slbshape{10}{\magstep2} \setfont\sectt\ttbshape{12}{\magstep1} \setfont\secttsl\ttslshape{10}{\magstep2} \setfont\secsf\sfbshape{12}{\magstep1} \let\secbf\secrm \setfont\secsc\scbshape{10}{\magstep2} \font\seci=cmmi12 scaled \magstep1 \font\secsy=cmsy10 scaled \magstep2 % Subsection fonts (13.15pt). \setfont\ssecrm\rmbshape{12}{\magstephalf} \setfont\ssecit\itbshape{10}{1315} \setfont\ssecsl\slbshape{10}{1315} \setfont\ssectt\ttbshape{12}{\magstephalf} \setfont\ssecttsl\ttslshape{10}{1315} \setfont\ssecsf\sfbshape{12}{\magstephalf} \let\ssecbf\ssecrm \setfont\ssecsc\scbshape{10}{\magstep1} \font\sseci=cmmi12 scaled \magstephalf \font\ssecsy=cmsy10 scaled 1315 % The smallcaps and symbol fonts should actually be scaled \magstep1.5, % but that is not a standard magnification. % 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 except % in the main text, 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 font. Plain TeX does \def\bf{\fam=\bffam % \tenbf}, for example. 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 \let\tenttsl=\textttsl \resetmathfonts \setleading{\textleading}} \def\titlefonts{% \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy \let\tenttsl=\titlettsl \resetmathfonts \setleading{25pt}} \def\titlefont#1{{\titlefonts\rm #1}} \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 \let\tenttsl=\chapttsl \resetmathfonts \setleading{19pt}} \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 \let\tenttsl=\secttsl \resetmathfonts \setleading{16pt}} \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 \let\tenttsl=\ssecttsl \resetmathfonts \setleading{15pt}} \let\subsubsecfonts = \subsecfonts % Maybe make sssec fonts scaled magstephalf? \def\smallfonts{% \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy \let\tenttsl=\smallttsl \resetmathfonts \setleading{10.5pt}} \def\smallerfonts{% \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy \let\tenttsl=\smallerttsl \resetmathfonts \setleading{9.5pt}} \let\smallexamplefonts = \smallerfonts % Set up the default fonts, so we can use them for creating boxes. % \textfonts % Define these so they can be easily changed for other fonts. \def\angleleft{$\langle$} \def\angleright{$\rangle$} % Count depth in font-changes, for error checks \newcount\fontdepth \fontdepth=0 % Fonts for short table of contents. \setfont\shortcontrm\rmshape{12}{1000} \setfont\shortcontbf\bxshape{12}{1000} \setfont\shortcontsl\slshape{12}{1000} %% 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\smartslanted#1{{\sl #1}\futurelet\next\smartitalicx} \def\smartitalic#1{{\it #1}\futurelet\next\smartitalicx} \let\i=\smartitalic \let\var=\smartslanted \let\dfn=\smartslanted \let\emph=\smartitalic \let\cite=\smartslanted \def\b#1{{\bf #1}} \let\strong=\b % We can't just use \exhyphenpenalty, because that only has effect at % the end of a paragraph. Restore normal hyphenation at the end of the % group within which \nohyphenation is presumably called. % \def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation} \def\restorehyphenation{\hyphenchar\font = `- } \def\t#1{% {\tt \rawbackslash \frenchspacing #1}% \null } \let\ttfont=\t \def\samp#1{`\tclose{#1}'\null} \setfont\keyrm\rmshape{8}{1000} \font\keysy=cmsy9 \def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{% \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{% \vbox{\hrule\kern-0.4pt \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}% \kern-0.4pt\hrule}% \kern-.06em\raise0.4pt\hbox{\angleright}}}} % The old definition, with no lozenge: %\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null} \def\ctrl #1{{\tt \rawbackslash \hat}#1} % @file, @option are the same as @samp. \let\file=\samp \let\option=\samp % @code is a modification of @t, % which makes spaces the same size as normal in the surrounding text. \def\tclose#1{% {% % Change normal interword space to be same as for the current font. \spaceskip = \fontdimen2\font % % Switch to typewriter. \tt % % But `\ ' produces the large typewriter interword space. \def\ {{\spaceskip = 0pt{} }}% % % Turn off hyphenation. \nohyphenation % \rawbackslash \frenchspacing #1% }% \null } % We *must* turn on hyphenation at `-' and `_' in \code. % Otherwise, it is too hard to avoid overfull hboxes % in the Emacs manual, the Library manual, etc. % Unfortunately, TeX uses one parameter (\hyphenchar) to control % both hyphenation at - and hyphenation within words. % We must therefore turn them both off (\tclose does that) % and arrange explicitly to hyphenate at a dash. % -- rms. { \catcode`\-=\active \catcode`\_=\active % \global\def\code{\begingroup \catcode`\-=\active \let-\codedash \catcode`\_=\active \let_\codeunder \codex } % % If we end up with any active - characters when handling the index, % just treat them as a normal -. \global\def\indexbreaks{\catcode`\-=\active \let-\realdash} } \def\realdash{-} \def\codedash{-\discretionary{}{}{}} \def\codeunder{\ifusingtt{\normalunderscore\discretionary{}{}{}}{\_}} \def\codex #1{\tclose{#1}\endgroup} %\let\exp=\tclose %Was temporary % @kbd is like @code, except that if the argument is just one @key command, % then @kbd has no effect. % @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always), % `example' (@kbd uses ttsl only inside of @example and friends), % or `code' (@kbd uses normal tty font always). \def\kbdinputstyle{\parsearg\kbdinputstylexxx} \def\kbdinputstylexxx#1{% \def\arg{#1}% \ifx\arg\worddistinct \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}% \else\ifx\arg\wordexample \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}% \else\ifx\arg\wordcode \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}% \fi\fi\fi } \def\worddistinct{distinct} \def\wordexample{example} \def\wordcode{code} % Default is kbdinputdistinct. (Too much of a hassle to call the macro, % the catcodes are wrong for parsearg to work.) \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl} \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{\kbdfont\look}}\fi \else{\tclose{\kbdfont\look}}\fi} % For @url, @env, @command quotes seem unnecessary, so use \code. \let\url=\code \let\env=\code \let\command=\code % @uref (abbreviation for `urlref') takes an optional (comma-separated) % second argument specifying the text to display and an optional third % arg as text to display instead of (rather than in addition to) the url % itself. First (mandatory) arg is the url. Perhaps eventually put in % a hypertex \special here. % \def\uref#1{\douref #1,,,\finish} \def\douref#1,#2,#3,#4\finish{\begingroup \unsepspaces \pdfurl{#1}% \setbox0 = \hbox{\ignorespaces #3}% \ifdim\wd0 > 0pt \unhbox0 % third arg given, show only that \else \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt \ifpdf \unhbox0 % PDF: 2nd arg given, show only it \else \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url \fi \else \code{#1}% only url given, so show it \fi \fi \endlink \endgroup} % rms does not like angle brackets --karl, 17may97. % So now @email is just like @uref, unless we are pdf. % %\def\email#1{\angleleft{\tt #1}\angleright} \ifpdf \def\email#1{\doemail#1,,\finish} \def\doemail#1,#2,#3\finish{\begingroup \unsepspaces \pdfurl{mailto:#1}% \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi \endlink \endgroup} \else \let\email=\uref \fi % Check if we are currently using a typewriter font. 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 property, we can check that font parameter. % \def\ifmonospace{\ifdim\fontdimen3\font=0pt } % 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} % @l was never documented to mean ``switch to the Lisp font'', % and it is not used as such in any manual I can find. We need it for % Polish suppressed-l. --karl, 22sep96. %\def\l#1{{\li #1}\null} % Explicit font changes: @r, @sc, undocumented @ii. \def\r#1{{\rm #1}} % roman font \def\sc#1{{\smallcaps#1}} % smallcaps font \def\ii#1{{\it #1}} % italic font % @acronym downcases the argument and prints in smallcaps. \def\acronym#1{{\smallcaps \lowercase{#1}}} % @pounds{} is a sterling sign. \def\pounds{{\it\$}} \message{page headings,} \newskip\titlepagetopglue \titlepagetopglue = 1.5in \newskip\titlepagebottomglue \titlepagebottomglue = 2pc % First the title page. Must do @settitle before @titlepage. \newif\ifseenauthor \newif\iffinishedtitlepage % Do an implicit @contents or @shortcontents after @end titlepage if the % user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage. % \newif\ifsetcontentsaftertitlepage \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue \newif\ifsetshortcontentsaftertitlepage \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue \def\shorttitlepage{\parsearg\shorttitlepagezzz} \def\shorttitlepagezzz #1{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}% \endgroup\page\hbox{}\page} \def\titlepage{\begingroup \parindent=0pt \textfonts \let\subtitlerm=\tenrm \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{\titlefonts\rm ##1} % print a rule at the page bottom also. \finishedtitlepagefalse \vskip4pt \hrule height 4pt width \hsize \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 % % Need this before the \...aftertitlepage checks so that if they are % in effect the toc pages will come out with page numbers. \HEADINGSon % % If they want short, they certainly want long too. \ifsetshortcontentsaftertitlepage \shortcontents \contents \global\let\shortcontents = \relax \global\let\contents = \relax \fi % \ifsetcontentsaftertitlepage \contents \global\let\contents = \relax \global\let\shortcontents = \relax \fi % \ifpdf \pdfmakepagedesttrue \fi } \def\finishtitlepage{% \vskip4pt \hrule height 2pt width \hsize \vskip\titlepagebottomglue \finishedtitlepagetrue } %%% Set up page headings and footings. \let\thispage=\folio \newtoks\evenheadline % headline on even pages \newtoks\oddheadline % headline on odd pages \newtoks\evenfootline % footline on even pages \newtoks\oddfootline % footline on 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{\oddheadingxxx{#1}\evenheadingxxx{#1}}% \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}}% % % Leave some space for the footline. Hopefully ok to assume % @evenfooting will not be used by itself. \global\advance\pageheight by -\baselineskip \global\advance\vsize by -\baselineskip } \gdef\everyfootingxxx#1{\oddfootingxxx{#1}\evenfootingxxx{#1}} % }% 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 at the start of a document, % and turned `on' after @end titlepage. \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{ \global\pageno=1 \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\folio\hfil\thistitle}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chapoddpage } \let\contentsalignmacro = \chappager % For single-sided printing, chapter title goes across top left of page, % page number on top right. \def\HEADINGSsingle{ \global\pageno=1 \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapter\hfil\folio}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chappager } \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}} \global\let\contentsalignmacro = \chapoddpage } \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}} \global\let\contentsalignmacro = \chappager } % Subroutines used in generating headings % This produces Day Month Year style of output. % Only define if not already defined, in case a txi-??.tex file has set % up a different format (e.g., txi-cs.tex does this). \ifx\today\undefined \def\today{% \number\day\space \ifcase\month \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec \fi \space\number\year} \fi % @settitle line... specifies the title of the document, for headings. % It generates no output of its own. \def\thistitle{\putwordNoTitle} \def\settitle{\parsearg\settitlezzz} \def\settitlezzz #1{\gdef\thistitle{#1}} \message{tables,} % 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). \newif\ifitemxneedsnegativevskip \def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi} \def\internalBitem{\smallbreak \parsearg\itemzzz} \def\internalBitemx{\itemxpar \parsearg\itemzzz} \def\internalBxitem "#1"{\def\xitemsubtopix{#1} \smallbreak \parsearg\xitemzzz} \def\internalBxitemx "#1"{\def\xitemsubtopix{#1} \itemxpar \parsearg\xitemzzz} \def\internalBkitem{\smallbreak \parsearg\kitemzzz} \def\internalBkitemx{\itemxpar \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. % % 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 % % Make this a paragraph so we get the \parskip glue and wrapping, % but leave it ragged-right. \begingroup \advance\leftskip by-\tableindent \advance\hsize by\tableindent \advance\rightskip by0pt plus1fil \leavevmode\unhbox0\par \endgroup % % We're going to be starting a paragraph, but we don't want the % \parskip glue -- logically it's part of the @item we just started. \nobreak \vskip-\parskip % % Stop a page break at the \parskip glue coming up. Unfortunately % we can't prevent a possible page break at the following % \baselineskip glue. \nobreak \endgroup \itemxneedsnegativevskipfalse \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. \noindent % Do this with kerns and \unhbox so that if there is a footnote in % the item text, it can migrate to the main vertical list and % eventually be printed. \nobreak\kern-\tableindent \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0 \unhbox0 \nobreak\kern\dimen0 \endgroup \itemxneedsnegativevskiptrue \fi } \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}{}{}{}{}} % @table, @ftable, @vtable. \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\afterenvbreak\endgroup}% \let\Etable=\relax}} \def\vtable{\begingroup\inENV\obeylines\obeyspaces\vtablex} {\obeylines\obeyspaces% \gdef\vtablex #1^^M{% \tabley\vritemindex#1 \endtabley \def\Evtable{\endgraf\afterenvbreak\endgroup}% \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}% Necessary 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\afterenvbreak\endgroup}% \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 itemize \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\afterenvbreak\endgroup}% \def\itemcontents{#1}% \let\item=\itemizeitem} % 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 . % \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} % @multitable macros % Amy Hendrickson, 8/18/94, 3/6/96 % % @multitable ... @end multitable will make as many columns as desired. % Contents of each column will wrap at width given in preamble. Width % can be specified either with sample text given in a template line, % or in percent of \hsize, the current width of text on page. % Table can continue over pages but will only break between lines. % To make preamble: % % Either define widths of columns in terms of percent of \hsize: % @multitable @columnfractions .25 .3 .45 % @item ... % % Numbers following @columnfractions are the percent of the total % current hsize to be used for each column. You may use as many % columns as desired. % Or use a template: % @multitable {Column 1 template} {Column 2 template} {Column 3 template} % @item ... % using the widest term desired in each column. % % For those who want to use more than one line's worth of words in % the preamble, break the line within one argument and it % will parse correctly, i.e., % % @multitable {Column 1 template} {Column 2 template} {Column 3 % template} % Not: % @multitable {Column 1 template} {Column 2 template} % {Column 3 template} % Each new table line starts with @item, each subsequent new column % starts with @tab. Empty columns may be produced by supplying @tab's % with nothing between them for as many times as empty columns are needed, % ie, @tab@tab@tab will produce two empty columns. % @item, @tab, @multitable or @end multitable do not need to be on their % own lines, but it will not hurt if they are. % Sample multitable: % @multitable {Column 1 template} {Column 2 template} {Column 3 template} % @item first col stuff @tab second col stuff @tab third col % @item % first col stuff % @tab % second col stuff % @tab % third col % @item first col stuff @tab second col stuff % @tab Many paragraphs of text may be used in any column. % % They will wrap at the width determined by the template. % @item@tab@tab This will be in third column. % @end multitable % Default dimensions may be reset by user. % @multitableparskip is vertical space between paragraphs in table. % @multitableparindent is paragraph indent in table. % @multitablecolmargin is horizontal space to be left between columns. % @multitablelinespace is space to leave between table items, baseline % to baseline. % 0pt means it depends on current normal line spacing. % \newskip\multitableparskip \newskip\multitableparindent \newdimen\multitablecolspace \newskip\multitablelinespace \multitableparskip=0pt \multitableparindent=6pt \multitablecolspace=12pt \multitablelinespace=0pt % Macros used to set up halign preamble: % \let\endsetuptable\relax \def\xendsetuptable{\endsetuptable} \let\columnfractions\relax \def\xcolumnfractions{\columnfractions} \newif\ifsetpercent % #1 is the part of the @columnfraction before the decimal point, which % is presumably either 0 or the empty string (but we don't check, we % just throw it away). #2 is the decimal part, which we use as the % percent of \hsize for this column. \def\pickupwholefraction#1.#2 {% \global\advance\colcount by 1 \expandafter\xdef\csname col\the\colcount\endcsname{.#2\hsize}% \setuptable } \newcount\colcount \def\setuptable#1{% \def\firstarg{#1}% \ifx\firstarg\xendsetuptable \let\go = \relax \else \ifx\firstarg\xcolumnfractions \global\setpercenttrue \else \ifsetpercent \let\go\pickupwholefraction \else \global\advance\colcount by 1 \setbox0=\hbox{#1\unskip }% Add a normal word space as a separator; % typically that is always in the input, anyway. \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}% \fi \fi \ifx\go\pickupwholefraction % Put the argument back for the \pickupwholefraction call, so % we'll always have a period there to be parsed. \def\go{\pickupwholefraction#1}% \else \let\go = \setuptable \fi% \fi \go } % This used to have \hskip1sp. But then the space in a template line is % not enough. That is bad. So let's go back to just & until we % encounter the problem it was intended to solve again. % --karl, nathan@acm.org, 20apr99. \def\tab{&} % @multitable ... @end multitable definitions: % \def\multitable{\parsearg\dotable} \def\dotable#1{\bgroup \vskip\parskip \let\item\crcr \tolerance=9500 \hbadness=9500 \setmultitablespacing \parskip=\multitableparskip \parindent=\multitableparindent \overfullrule=0pt \global\colcount=0 \def\Emultitable{\global\setpercentfalse\cr\egroup\egroup}% % % To parse everything between @multitable and @item: \setuptable#1 \endsetuptable % % \everycr will reset column counter, \colcount, at the end of % each line. Every column entry will cause \colcount to advance by one. % The table preamble % looks at the current \colcount to find the correct column width. \everycr{\noalign{% % % \filbreak%% keeps underfull box messages off when table breaks over pages. % Maybe so, but it also creates really weird page breaks when the table % breaks over pages. Wouldn't \vfil be better? Wait until the problem % manifests itself, so it can be fixed for real --karl. \global\colcount=0\relax}}% % % This preamble sets up a generic column definition, which will % be used as many times as user calls for columns. % \vtop will set a single line and will also let text wrap and % continue for many paragraphs if desired. \halign\bgroup&\global\advance\colcount by 1\relax \multistrut\vtop{\hsize=\expandafter\csname col\the\colcount\endcsname % % In order to keep entries from bumping into each other % we will add a \leftskip of \multitablecolspace to all columns after % the first one. % % If a template has been used, we will add \multitablecolspace % to the width of each template entry. % % If the user has set preamble in terms of percent of \hsize we will % use that dimension as the width of the column, and the \leftskip % will keep entries from bumping into each other. Table will start at % left margin and final column will justify at right margin. % % Make sure we don't inherit \rightskip from the outer environment. \rightskip=0pt \ifnum\colcount=1 % The first column will be indented with the surrounding text. \advance\hsize by\leftskip \else \ifsetpercent \else % If user has not set preamble in terms of percent of \hsize % we will advance \hsize by \multitablecolspace. \advance\hsize by \multitablecolspace \fi % In either case we will make \leftskip=\multitablecolspace: \leftskip=\multitablecolspace \fi % Ignoring space at the beginning and end avoids an occasional spurious % blank line, when TeX decides to break the line at the space before the % box from the multistrut, so the strut ends up on a line by itself. % For example: % @multitable @columnfractions .11 .89 % @item @code{#} % @tab Legal holiday which is valid in major parts of the whole country. % Is automatically provided with highlighting sequences respectively marking % characters. \noindent\ignorespaces##\unskip\multistrut}\cr } \def\setmultitablespacing{% test to see if user has set \multitablelinespace. % If so, do nothing. If not, give it an appropriate dimension based on % current baselineskip. \ifdim\multitablelinespace=0pt \setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip \global\advance\multitablelinespace by-\ht0 %% strut to put in table in case some entry doesn't have descenders, %% to keep lines equally spaced \let\multistrut = \strut \else %% FIXME: what is \box0 supposed to be? \gdef\multistrut{\vrule height\multitablelinespace depth\dp0 width0pt\relax} \fi %% Test to see if parskip is larger than space between lines of %% table. If not, do nothing. %% If so, set to same dimension as multitablelinespace. \ifdim\multitableparskip>\multitablelinespace \global\multitableparskip=\multitablelinespace \global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller %% than skip between lines in the table. \fi% \ifdim\multitableparskip=0pt \global\multitableparskip=\multitablelinespace \global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller %% than skip between lines in the table. \fi} \message{conditionals,} % 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 } % Used in nested conditionals, where we have to parse the Texinfo source % and so want to turn off most commands, in case they are used % incorrectly. % \def\ignoremorecommands{% \let\defcodeindex = \relax \let\defcv = \relax \let\deffn = \relax \let\deffnx = \relax \let\defindex = \relax \let\defivar = \relax \let\defmac = \relax \let\defmethod = \relax \let\defop = \relax \let\defopt = \relax \let\defspec = \relax \let\deftp = \relax \let\deftypefn = \relax \let\deftypefun = \relax \let\deftypeivar = \relax \let\deftypeop = \relax \let\deftypevar = \relax \let\deftypevr = \relax \let\defun = \relax \let\defvar = \relax \let\defvr = \relax \let\ref = \relax \let\xref = \relax \let\printindex = \relax \let\pxref = \relax \let\settitle = \relax \let\setchapternewpage = \relax \let\setchapterstyle = \relax \let\everyheading = \relax \let\evenheading = \relax \let\oddheading = \relax \let\everyfooting = \relax \let\evenfooting = \relax \let\oddfooting = \relax \let\headings = \relax \let\include = \relax \let\lowersections = \relax \let\down = \relax \let\raisesections = \relax \let\up = \relax \let\set = \relax \let\clear = \relax \let\item = \relax } % Ignore @ignore ... @end ignore. % \def\ignore{\doignore{ignore}} % Also ignore @ifinfo, @ifhtml, @ifnottex, @html, @menu, % @documentdescription, and @direntry text. % \def\ifinfo{\doignore{ifinfo}} \def\ifhtml{\doignore{ifhtml}} \def\ifnottex{\doignore{ifnottex}} \def\html{\doignore{html}} \def\menu{\doignore{menu}} \def\documentdescription{\doignore{documentdescription}} \def\direntry{\doignore{direntry}} % @dircategory CATEGORY -- specify a category of the dir file % which this file should belong to. Ignore this in TeX. \let\dircategory = \comment % Ignore text until a line `@end #1'. % \def\doignore#1{\begingroup % Don't complain about control sequences we have declared \outer. \ignoresections % % Define a command to swallow text until we reach `@end #1'. % This @ is a catcode 12 token (that is the normal catcode of @ in % this texinfo.tex file). We change the catcode of @ below to match. \long\def\doignoretext##1@end #1{\enddoignore}% % % Make sure that spaces turn into tokens that match what \doignoretext wants. \catcode32 = 10 % % Ignore braces, too, so mismatched braces don't cause trouble. \catcode`\{ = 9 \catcode`\} = 9 % % We must not have @c interpreted as a control sequence. \catcode`\@ = 12 % % Make the letter c a comment character so that the rest of the line % will be ignored. This way, the document can have (for example) % @c @end ifinfo % and the @end ifinfo will be properly ignored. % (We've just changed @ to catcode 12.) \catcode`\c = 14 % % And now expand that command. \doignoretext } % What we do to finish off ignored text. % \def\enddoignore{\endgroup\ignorespaces}% \newif\ifwarnedobs\warnedobsfalse \def\obstexwarn{% \ifwarnedobs\relax\else % We need to warn folks that they may have trouble with TeX 3.0. % This uses \immediate\write16 rather than \message to get newlines. \immediate\write16{} \immediate\write16{WARNING: for users of Unix TeX 3.0!} \immediate\write16{This manual trips a bug in TeX version 3.0 (tex hangs).} \immediate\write16{If you are running another version of TeX, relax.} \immediate\write16{If you are running Unix TeX 3.0, kill this TeX process.} \immediate\write16{ Then upgrade your TeX installation if you can.} \immediate\write16{ (See ftp://ftp.gnu.org/pub/gnu/TeX.README.)} \immediate\write16{If you are stuck with version 3.0, run the} \immediate\write16{ script ``tex3patch'' from the Texinfo distribution} \immediate\write16{ to use a workaround.} \immediate\write16{} \global\warnedobstrue \fi } % **In TeX 3.0, setting text in \nullfont hangs tex. For a % workaround (which requires the file ``dummy.tfm'' to be installed), % uncomment the following line: %%%%%\font\nullfont=dummy\let\obstexwarn=\relax % Ignore text, except that we keep track of conditional commands for % purposes of nesting, up to an `@end #1' command. % \def\nestedignore#1{% \obstexwarn % We must actually expand the ignored text to look for the @end % command, so that nested ignore constructs work. Thus, we put the % text into a \vbox and then do nothing with the result. To minimize % the change of memory overflow, we follow the approach outlined on % page 401 of the TeXbook: make the current font be a dummy font. % \setbox0 = \vbox\bgroup % Don't complain about control sequences we have declared \outer. \ignoresections % % Define `@end #1' to end the box, which will in turn undefine the % @end command again. \expandafter\def\csname E#1\endcsname{\egroup\ignorespaces}% % % We are going to be parsing Texinfo commands. Most cause no % trouble when they are used incorrectly, but some commands do % complicated argument parsing or otherwise get confused, so we % undefine them. % % We can't do anything about stray @-signs, unfortunately; % they'll produce `undefined control sequence' errors. \ignoremorecommands % % Set the current font to be \nullfont, a TeX primitive, and define % all the font commands to also use \nullfont. We don't use % dummy.tfm, as suggested in the TeXbook, because not all sites % might have that installed. Therefore, math mode will still % produce output, but that should be an extremely small amount of % stuff compared to the main input. % \nullfont \let\tenrm=\nullfont \let\tenit=\nullfont \let\tensl=\nullfont \let\tenbf=\nullfont \let\tentt=\nullfont \let\smallcaps=\nullfont \let\tensf=\nullfont % Similarly for index fonts. \let\smallrm=\nullfont \let\smallit=\nullfont \let\smallsl=\nullfont \let\smallbf=\nullfont \let\smalltt=\nullfont \let\smallsc=\nullfont \let\smallsf=\nullfont % Similarly for smallexample fonts. \let\smallerrm=\nullfont \let\smallerit=\nullfont \let\smallersl=\nullfont \let\smallerbf=\nullfont \let\smallertt=\nullfont \let\smallersc=\nullfont \let\smallersf=\nullfont % % Don't complain when characters are missing from the fonts. \tracinglostchars = 0 % % Don't bother to do space factor calculations. \frenchspacing % % Don't report underfull hboxes. \hbadness = 10000 % % Do minimal line-breaking. \pretolerance = 10000 % % Do not execute instructions in @tex \def\tex{\doignore{tex}}% % Do not execute macro definitions. % `c' is a comment character, so the word `macro' will get cut off. \def\macro{\doignore{ma}}% } % @set VAR sets the variable VAR to an empty value. % @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE. % % Since we want to separate VAR from REST-OF-LINE (which might be % empty), we can't just use \parsearg; we have to insert a space of our % own to delimit the rest of the line, and then take it out again if we % didn't need it. Make sure the catcode of space is correct to avoid % losing inside @example, for instance. % \def\set{\begingroup\catcode` =10 \catcode`\-=12 \catcode`\_=12 % Allow - and _ in VAR. \parsearg\setxxx} \def\setxxx#1{\setyyy#1 \endsetyyy} \def\setyyy#1 #2\endsetyyy{% \def\temp{#2}% \ifx\temp\empty \global\expandafter\let\csname SET#1\endcsname = \empty \else \setzzz{#1}#2\endsetzzz % Remove the trailing space \setxxx inserted. \fi \endgroup } % Can't use \xdef to pre-expand #2 and save some time, since \temp or % \next or other control sequences that we've defined might get us into % an infinite loop. Consider `@set foo @cite{bar}'. \def\setzzz#1#2 \endsetzzz{\expandafter\gdef\csname SET#1\endcsname{#2}} % @clear VAR clears (i.e., unsets) the variable VAR. % \def\clear{\parsearg\clearxxx} \def\clearxxx#1{\global\expandafter\let\csname SET#1\endcsname=\relax} % @value{foo} gets the text saved in variable foo. { \catcode`\_ = \active % % We might end up with active _ or - characters in the argument if % we're called from @code, as @code{@value{foo-bar_}}. So \let any % such active characters to their normal equivalents. \gdef\value{\begingroup \catcode`\-=12 \catcode`\_=12 \indexbreaks \let_\normalunderscore \valuexxx} } \def\valuexxx#1{\expandablevalue{#1}\endgroup} % We have this subroutine so that we can handle at least some @value's % properly in indexes (we \let\value to this in \indexdummies). Ones % whose names contain - or _ still won't work, but we can't do anything % about that. The command has to be fully expandable, since the result % winds up in the index file. This means that if the variable's value % contains other Texinfo commands, it's almost certain it will fail % (although perhaps we could fix that with sufficient work to do a % one-level expansion on the result, instead of complete). % \def\expandablevalue#1{% \expandafter\ifx\csname SET#1\endcsname\relax {[No value for ``#1'']}% \else \csname SET#1\endcsname \fi } % @ifset VAR ... @end ifset reads the `...' iff VAR has been defined % with @set. % \def\ifset{\parsearg\ifsetxxx} \def\ifsetxxx #1{% \expandafter\ifx\csname SET#1\endcsname\relax \expandafter\ifsetfail \else \expandafter\ifsetsucceed \fi } \def\ifsetsucceed{\conditionalsucceed{ifset}} \def\ifsetfail{\nestedignore{ifset}} \defineunmatchedend{ifset} % @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been % defined with @set, or has been undefined with @clear. % \def\ifclear{\parsearg\ifclearxxx} \def\ifclearxxx #1{% \expandafter\ifx\csname SET#1\endcsname\relax \expandafter\ifclearsucceed \else \expandafter\ifclearfail \fi } \def\ifclearsucceed{\conditionalsucceed{ifclear}} \def\ifclearfail{\nestedignore{ifclear}} \defineunmatchedend{ifclear} % @iftex, @ifnothtml, @ifnotinfo always succeed; we read the text % following, through the first @end iftex (etc.). Make `@end iftex' % (etc.) valid only after an @iftex. % \def\iftex{\conditionalsucceed{iftex}} \def\ifnothtml{\conditionalsucceed{ifnothtml}} \def\ifnotinfo{\conditionalsucceed{ifnotinfo}} \defineunmatchedend{iftex} \defineunmatchedend{ifnothtml} \defineunmatchedend{ifnotinfo} % We can't just want to start a group at @iftex (for example) and end it % at @end iftex, since then @set commands inside the conditional have no % effect (they'd get reverted at the end of the group). So we must % define \Eiftex to redefine itself to be its previous value. (We can't % just define it to fail again with an ``unmatched end'' error, since % the @ifset might be nested.) % \def\conditionalsucceed#1{% \edef\temp{% % Remember the current value of \E#1. \let\nece{prevE#1} = \nece{E#1}% % % At the `@end #1', redefine \E#1 to be its previous value. \def\nece{E#1}{\let\nece{E#1} = \nece{prevE#1}}% }% \temp } % We need to expand lots of \csname's, but we don't want to expand the % control sequences after we've constructed them. % \def\nece#1{\expandafter\noexpand\csname#1\endcsname} % @defininfoenclose. \let\definfoenclose=\comment \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{% \iflinks \expandafter\newwrite \csname#1indfile\endcsname \openout \csname#1indfile\endcsname \jobname.#1 % Open the file \fi \expandafter\xdef\csname#1index\endcsname{% % Define @#1index \noexpand\doindex{#1}} } % @defindex foo == \newindex{foo} % \def\defindex{\parsearg\newindex} % Define @defcodeindex, like @defindex except put all entries in @code. % \def\defcodeindex{\parsearg\newcodeindex} % \def\newcodeindex#1{% \iflinks \expandafter\newwrite \csname#1indfile\endcsname \openout \csname#1indfile\endcsname \jobname.#1 \fi \expandafter\xdef\csname#1index\endcsname{% \noexpand\docodeindex{#1}}% } % @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. % % @syncodeindex foo bar similar, but put all entries made for index foo % inside @code. % \def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}} \def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}} % #1 is \doindex or \docodeindex, #2 the index getting redefined (foo), % #3 the target index (bar). \def\dosynindex#1#2#3{% % Only do \closeout if we haven't already done it, else we'll end up % closing the target index. \expandafter \ifx\csname donesynindex#2\endcsname \undefined % The \closeout helps reduce unnecessary open files; the limit on the % Acorn RISC OS is a mere 16 files. \expandafter\closeout\csname#2indfile\endcsname \expandafter\let\csname\donesynindex#2\endcsname = 1 \fi % redefine \fooindfile: \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname \expandafter\let\csname#2indfile\endcsname=\temp % redefine \fooindex: \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}% } % 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}}} % Take care of texinfo commands likely to appear in an index entry. % (Must be a way to avoid doing expansion at all, and thus not have to % laboriously list every single command here.) % \def\indexdummies{% \def\ { }% \def\@{@}% change to @@ when we switch to @ as escape char in aux files. % Need these in case \tex is in effect and \{ is a \delimiter again. % But can't use \lbracecmd and \rbracecmd because texindex assumes % braces and backslashes are used only as delimiters. \let\{ = \mylbrace \let\} = \myrbrace \def\_{{\realbackslash _}}% \normalturnoffactive % % Take care of the plain tex accent commands. \def\,##1{\realbackslash ,{##1}}% \def\"{\realbackslash "}% \def\`{\realbackslash `}% \def\'{\realbackslash '}% \def\^{\realbackslash ^}% \def\~{\realbackslash ~}% \def\={\realbackslash =}% \def\b{\realbackslash b}% \def\c{\realbackslash c}% \def\d{\realbackslash d}% \def\u{\realbackslash u}% \def\v{\realbackslash v}% \def\H{\realbackslash H}% \def\dotless##1{\realbackslash dotless {##1}}% % Take care of the plain tex special European modified letters. \def\AA{\realbackslash AA}% \def\AE{\realbackslash AE}% \def\L{\realbackslash L}% \def\OE{\realbackslash OE}% \def\O{\realbackslash O}% \def\aa{\realbackslash aa}% \def\ae{\realbackslash ae}% \def\l{\realbackslash l}% \def\oe{\realbackslash oe}% \def\o{\realbackslash o}% \def\ss{\realbackslash ss}% % % Although these internals commands shouldn't show up, sometimes they do. \def\bf{\realbackslash bf }% \def\gtr{\realbackslash gtr}% \def\hat{\realbackslash hat}% \def\less{\realbackslash less}% %\def\rm{\realbackslash rm }% \def\sf{\realbackslash sf}% \def\sl{\realbackslash sl }% \def\tclose##1{\realbackslash tclose {##1}}% \def\tt{\realbackslash tt}% % \def\b##1{\realbackslash b {##1}}% \def\i##1{\realbackslash i {##1}}% \def\sc##1{\realbackslash sc {##1}}% \def\t##1{\realbackslash t {##1}}% \def\r##1{\realbackslash r {##1}}% % \def\TeX{\realbackslash TeX}% \def\acronym##1{\realbackslash acronym {##1}}% \def\cite##1{\realbackslash cite {##1}}% \def\code##1{\realbackslash code {##1}}% \def\command##1{\realbackslash command {##1}}% \def\dfn##1{\realbackslash dfn {##1}}% \def\dots{\realbackslash dots }% \def\emph##1{\realbackslash emph {##1}}% \def\env##1{\realbackslash env {##1}}% \def\file##1{\realbackslash file {##1}}% \def\kbd##1{\realbackslash kbd {##1}}% \def\key##1{\realbackslash key {##1}}% \def\math##1{\realbackslash math {##1}}% \def\option##1{\realbackslash option {##1}}% \def\samp##1{\realbackslash samp {##1}}% \def\strong##1{\realbackslash strong {##1}}% \def\uref##1{\realbackslash uref {##1}}% \def\url##1{\realbackslash url {##1}}% \def\var##1{\realbackslash var {##1}}% \def\w{\realbackslash w }% % % These math commands don't seem likely to be used in index entries. \def\copyright{\realbackslash copyright}% \def\equiv{\realbackslash equiv}% \def\error{\realbackslash error}% \def\expansion{\realbackslash expansion}% \def\point{\realbackslash point}% \def\print{\realbackslash print}% \def\result{\realbackslash result}% % % Handle some cases of @value -- where the variable name does not % contain - or _, and the value does not contain any % (non-fully-expandable) commands. \let\value = \expandablevalue % \unsepspaces % Turn off macro expansion \turnoffmacros } % If an index command is used in an @example environment, any spaces % therein should become regular spaces in the raw index file, not the % expansion of \tie (\\leavevmode \penalty \@M \ ). {\obeyspaces \gdef\unsepspaces{\obeyspaces\let =\space}} % \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{% \def\@{@}% % how to handle braces? \def\_{\normalunderscore}% % \let\,=\indexdummyfont \let\"=\indexdummyfont \let\`=\indexdummyfont \let\'=\indexdummyfont \let\^=\indexdummyfont \let\~=\indexdummyfont \let\==\indexdummyfont \let\b=\indexdummyfont \let\c=\indexdummyfont \let\d=\indexdummyfont \let\u=\indexdummyfont \let\v=\indexdummyfont \let\H=\indexdummyfont \let\dotless=\indexdummyfont % Take care of the plain tex special European modified letters. \def\AA{AA}% \def\AE{AE}% \def\L{L}% \def\OE{OE}% \def\O{O}% \def\aa{aa}% \def\ae{ae}% \def\l{l}% \def\oe{oe}% \def\o{o}% \def\ss{ss}% % % Don't no-op \tt, since it isn't a user-level command % and is used in the definitions of the active chars like <, >, |, etc. % Likewise with the other plain tex font commands. %\let\tt=\indexdummyfont % \let\b=\indexdummyfont \let\i=\indexdummyfont \let\r=\indexdummyfont \let\sc=\indexdummyfont \let\t=\indexdummyfont % \let\TeX=\indexdummytex \let\acronym=\indexdummyfont \let\cite=\indexdummyfont \let\code=\indexdummyfont \let\command=\indexdummyfont \let\dfn=\indexdummyfont \let\dots=\indexdummydots \let\emph=\indexdummyfont \let\env=\indexdummyfont \let\file=\indexdummyfont \let\kbd=\indexdummyfont \let\key=\indexdummyfont \let\math=\indexdummyfont \let\option=\indexdummyfont \let\samp=\indexdummyfont \let\strong=\indexdummyfont \let\uref=\indexdummyfont \let\url=\indexdummyfont \let\var=\indexdummyfont \let\w=\indexdummyfont } % 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. \let\SETmarginindex=\relax % put index entries in margin (undocumented)? % For \ifx comparisons. \def\emptymacro{\empty} % Most index entries go through here, but \dosubind is the general case. % \def\doind#1#2{\dosubind{#1}{#2}\empty} % Workhorse for all \fooindexes. % #1 is name of index, #2 is stuff to put there, #3 is subentry -- % \empty if called from \doind, as we usually are. The main exception % is with defuns, which call us directly. % \def\dosubind#1#2#3{% % Put the index entry in the margin if desired. \ifx\SETmarginindex\relax\else \insert\margin{\hbox{\vrule height8pt depth3pt width0pt #2}}% \fi {% \count255=\lastpenalty {% \indexdummies % Must do this here, since \bf, etc expand at this stage \escapechar=`\\ {% \let\folio = 0% We will 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. % \def\thirdarg{#3}% % % If third arg is present, precede it with space in sort key. \ifx\thirdarg\emptymacro \let\subentry = \empty \else \def\subentry{ #3}% \fi % % First process the index entry with all font commands turned % off to get the string to sort by. {\indexnofonts \xdef\indexsorttmp{#2\subentry}}% % % Now the real index entry with the fonts. \toks0 = {#2}% % % If the third (subentry) arg is present, add it to the index % line to write. \ifx\thirdarg\emptymacro \else \toks0 = \expandafter{\the\toks0{#3}}% \fi % % Set up the complete index entry, with both the sort key and % the original text, including any font commands. We write % three arguments to \entry to the .?? file (four in the % subentry case), texindex reduces to two when writing the .??s % sorted result. \edef\temp{% \write\csname#1indfile\endcsname{% \realbackslash entry{\indexsorttmp}{\folio}{\the\toks0}}% }% % % If a skip is the last thing on the list now, preserve it % by backing up by \lastskip, doing the \write, then inserting % the skip again. Otherwise, the whatsit generated by the % \write will make \lastskip zero. The result is that sequences % like this: % @end defun % @tindex whatever % @defun ... % will have extra space inserted, because the \medbreak in the % start of the @defun won't see the skip inserted by the @end of % the previous defun. % % But don't do any of this if we're not in vertical mode. We % don't want to do a \vskip and prematurely end a paragraph. % % Avoid page breaks due to these extra skips, too. % \iflinks \ifvmode \skip0 = \lastskip \ifdim\lastskip = 0pt \else \nobreak\vskip-\lastskip \fi \fi % \temp % do the write % % \ifvmode \ifdim\skip0 = 0pt \else \nobreak\vskip\skip0 \fi \fi \fi }% }% \penalty\count255 }% } % 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. % @printindex causes a particular index (the ??s file) to get printed. % It does not print any chapter heading (usually an @unnumbered). % \def\printindex{\parsearg\doprintindex} \def\doprintindex#1{\begingroup \dobreak \chapheadingskip{10000}% % \smallfonts \rm \tolerance = 9500 \indexbreaks % % See if the index file exists and is nonempty. % Change catcode of @ here so that if the index file contains % \initial {@} % as its first line, TeX doesn't complain about mismatched braces % (because it thinks @} is a control sequence). \catcode`\@ = 11 \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. \putwordIndexNonexistent \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 \putwordIndexIsEmpty \else % Index files are almost Texinfo source, but we use \ as the escape % character. It would be better to use @, but that's too big a change % to make right now. \def\indexbackslash{\rawbackslashxx}% \catcode`\\ = 0 \escapechar = `\\ \begindoublecolumns \input \jobname.#1s \enddoublecolumns \fi \fi \closein 1 \endgroup} % These macros are used by the sorted index file itself. % Change them to control the appearance of the index. \def\initial#1{{% % Some minor font changes for the special characters. \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt % % Remove any glue we may have, we'll be inserting our own. \removelastskip % % We like breaks before the index initials, so insert a bonus. \penalty -300 % % Typeset the initial. Making this add up to a whole number of % baselineskips increases the chance of the dots lining up from column % to column. It still won't often be perfect, because of the stretch % we need before each entry, but it's better. % % No shrink because it confuses \balancecolumns. \vskip 1.67\baselineskip plus .5\baselineskip \leftline{\secbf #1}% \vskip .33\baselineskip plus .1\baselineskip % % Do our best not to break after the initial. \nobreak }} % This typesets a paragraph consisting of #1, dot leaders, and then #2 % flush to the right margin. It is used for index and table of contents % entries. The paragraph is indented by \leftskip. % \def\entry#1#2{\begingroup % % Start a new paragraph if necessary, so our assignments below can't % affect previous text. \par % % Do not fill out the last line with white space. \parfillskip = 0in % % No extra space above this paragraph. \parskip = 0in % % Do not prefer a separate line ending with a hyphen to fewer lines. \finalhyphendemerits = 0 % % \hangindent is only relevant when the entry text and page number % don't both fit on one line. In that case, bob suggests starting the % dots pretty far over on the line. Unfortunately, a large % indentation looks wrong when the entry text itself is broken across % lines. So we use a small indentation and put up with long leaders. % % \hangafter is reset to 1 (which is the value we want) at the start % of each paragraph, so we need not do anything with that. \hangindent = 2em % % When the entry text needs to be broken, just fill out the first line % with blank space. \rightskip = 0pt plus1fil % % A bit of stretch before each entry for the benefit of balancing columns. \vskip 0pt plus1pt % % Start a ``paragraph'' for the index entry so the line breaking % parameters we've set above will have an effect. \noindent % % Insert the text of the index entry. TeX will do line-breaking on it. #1% % The following is kludged to not output a line of dots in the index if % there are no page numbers. The next person who breaks this will be % cursed by a Unix daemon. \def\tempa{{\rm }}% \def\tempb{#2}% \edef\tempc{\tempa}% \edef\tempd{\tempb}% \ifx\tempc\tempd\ \else% % % 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 it, a spurious underfull % \hbox ensues. \ifpdf \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph. \else \ #2% The page number ends the paragraph. \fi \fi% \par \endgroup} % Like \dotfill except takes at least 1 em. \def\indexdotfill{\cleaders \hbox{$\mathsurround=0pt \mkern1.5mu ${\it .}$ \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 \ifpdf \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph. \else #2 \fi \par }} % Define two-column mode, which we use to typeset indexes. % Adapted from the TeXbook, page 416, which is to say, % the manmac.tex format used to print the TeXbook itself. \catcode`\@=11 \newbox\partialpage \newdimen\doublecolumnhsize \def\begindoublecolumns{\begingroup % ended by \enddoublecolumns % Grab any single-column material above us. \output = {% % % Here is a possibility not foreseen in manmac: if we accumulate a % whole lot of material, we might end up calling this \output % routine twice in a row (see the doublecol-lose test, which is % essentially a couple of indexes with @setchapternewpage off). In % that case we just ship out what is in \partialpage with the normal % output routine. Generally, \partialpage will be empty when this % runs and this will be a no-op. See the indexspread.tex test case. \ifvoid\partialpage \else \onepageout{\pagecontents\partialpage}% \fi % \global\setbox\partialpage = \vbox{% % Unvbox the main output page. \unvbox\PAGE \kern-\topskip \kern\baselineskip }% }% \eject % run that output routine to set \partialpage % % Use the double-column output routine for subsequent pages. \output = {\doublecolumnout}% % % Change the page size parameters. We could do this once outside this % routine, in each of @smallbook, @afourpaper, and the default 8.5x11 % format, but then we repeat the same computation. Repeating a couple % of assignments once per index is clearly meaningless for the % execution time, so we may as well do it in one place. % % First we halve the line length, less a little for the gutter between % the columns. We compute the gutter based on the line length, so it % changes automatically with the paper format. The magic constant % below is chosen so that the gutter has the same value (well, +-<1pt) % as it did when we hard-coded it. % % We put the result in a separate register, \doublecolumhsize, so we % can restore it in \pagesofar, after \hsize itself has (potentially) % been clobbered. % \doublecolumnhsize = \hsize \advance\doublecolumnhsize by -.04154\hsize \divide\doublecolumnhsize by 2 \hsize = \doublecolumnhsize % % Double the \vsize as well. (We don't need a separate register here, % since nobody clobbers \vsize.) \vsize = 2\vsize } % The double-column output routine for all double-column pages except % the last. % \def\doublecolumnout{% \splittopskip=\topskip \splitmaxdepth=\maxdepth % Get the available space for the double columns -- the normal % (undoubled) page height minus any material left over from the % previous page. \dimen@ = \vsize \divide\dimen@ by 2 \advance\dimen@ by -\ht\partialpage % % box0 will be the left-hand column, box2 the right. \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@ \onepageout\pagesofar \unvbox255 \penalty\outputpenalty } % % Re-output the contents of the output page -- any previous material, % followed by the two boxes we just split, in box0 and box2. \def\pagesofar{% \unvbox\partialpage % \hsize = \doublecolumnhsize \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}% } % % All done with double columns. \def\enddoublecolumns{% \output = {% % Split the last of the double-column material. Leave it on the % current page, no automatic page break. \balancecolumns % % If we end up splitting too much material for the current page, % though, there will be another page break right after this \output % invocation ends. Having called \balancecolumns once, we do not % want to call it again. Therefore, reset \output to its normal % definition right away. (We hope \balancecolumns will never be % called on to balance too much material, but if it is, this makes % the output somewhat more palatable.) \global\output = {\onepageout{\pagecontents\PAGE}}% }% \eject \endgroup % started in \begindoublecolumns % % \pagegoal was set to the doubled \vsize above, since we restarted % the current page. We're now back to normal single-column % typesetting, so reset \pagegoal to the normal \vsize (after the % \endgroup where \vsize got restored). \pagegoal = \vsize } % % Called at the end of the double column material. \def\balancecolumns{% \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120. \dimen@ = \ht0 \advance\dimen@ by \topskip \advance\dimen@ by-\baselineskip \divide\dimen@ by 2 % target to split to %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}% \splittopskip = \topskip % Loop until we get a decent breakpoint. {% \vbadness = 10000 \loop \global\setbox3 = \copy0 \global\setbox1 = \vsplit3 to \dimen@ \ifdim\ht3>\dimen@ \global\advance\dimen@ by 1pt \repeat }% %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}% \setbox0=\vbox to\dimen@{\unvbox1}% \setbox2=\vbox to\dimen@{\unvbox3}% % \pagesofar } \catcode`\@ = \other \message{sectioning,} % 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} % We do the following for the sake of pdftex, which needs the actual % letter in the expansion, not just typeset. \def\appendixletter{% \ifnum\appendixno=`A A% \else\ifnum\appendixno=`B B% \else\ifnum\appendixno=`C C% \else\ifnum\appendixno=`D D% \else\ifnum\appendixno=`E E% \else\ifnum\appendixno=`F F% \else\ifnum\appendixno=`G G% \else\ifnum\appendixno=`H H% \else\ifnum\appendixno=`I I% \else\ifnum\appendixno=`J J% \else\ifnum\appendixno=`K K% \else\ifnum\appendixno=`L L% \else\ifnum\appendixno=`M M% \else\ifnum\appendixno=`N N% \else\ifnum\appendixno=`O O% \else\ifnum\appendixno=`P P% \else\ifnum\appendixno=`Q Q% \else\ifnum\appendixno=`R R% \else\ifnum\appendixno=`S S% \else\ifnum\appendixno=`T T% \else\ifnum\appendixno=`U U% \else\ifnum\appendixno=`V V% \else\ifnum\appendixno=`W W% \else\ifnum\appendixno=`X X% \else\ifnum\appendixno=`Y Y% \else\ifnum\appendixno=`Z Z% % The \the is necessary, despite appearances, because \appendixletter is % expanded while writing the .toc file. \char\appendixno is not % expandable, thus it is written literally, thus all appendixes come out % with the same letter (or @) in the toc without it. \else\char\the\appendixno \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} % Each @chapter defines this as the name of the chapter. % page headings and footings can use it. @section does likewise. \def\thischapter{} \def\thissection{} \newcount\absseclevel % used to calculate proper heading level \newcount\secbase\secbase=0 % @raise/lowersections modify this count % @raisesections: treat @section as chapter, @subsection as section, etc. \def\raisesections{\global\advance\secbase by -1} \let\up=\raisesections % original BFox name % @lowersections: treat @chapter as section, @section as subsection, etc. \def\lowersections{\global\advance\secbase by 1} \let\down=\lowersections % original BFox name % Choose a numbered-heading macro % #1 is heading level if unmodified by @raisesections or @lowersections % #2 is text for heading \def\numhead#1#2{\absseclevel=\secbase\advance\absseclevel by #1 \ifcase\absseclevel \chapterzzz{#2} \or \seczzz{#2} \or \numberedsubseczzz{#2} \or \numberedsubsubseczzz{#2} \else \ifnum \absseclevel<0 \chapterzzz{#2} \else \numberedsubsubseczzz{#2} \fi \fi } % like \numhead, but chooses appendix heading levels \def\apphead#1#2{\absseclevel=\secbase\advance\absseclevel by #1 \ifcase\absseclevel \appendixzzz{#2} \or \appendixsectionzzz{#2} \or \appendixsubseczzz{#2} \or \appendixsubsubseczzz{#2} \else \ifnum \absseclevel<0 \appendixzzz{#2} \else \appendixsubsubseczzz{#2} \fi \fi } % like \numhead, but chooses numberless heading levels \def\unnmhead#1#2{\absseclevel=\secbase\advance\absseclevel by #1 \ifcase\absseclevel \unnumberedzzz{#2} \or \unnumberedseczzz{#2} \or \unnumberedsubseczzz{#2} \or \unnumberedsubsubseczzz{#2} \else \ifnum \absseclevel<0 \unnumberedzzz{#2} \else \unnumberedsubsubseczzz{#2} \fi \fi } % @chapter, @appendix, @unnumbered. \def\thischaptername{No Chapter Title} \outer\def\chapter{\parsearg\chapteryyy} \def\chapteryyy #1{\numhead0{#1}} % normally numhead0 calls chapterzzz \def\chapterzzz #1{% \secno=0 \subsecno=0 \subsubsecno=0 \global\advance \chapno by 1 \message{\putwordChapter\space \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{\putwordChapter{} \the\chapno: \noexpand\thischaptername}% \toks0 = {#1}% \edef\temp{\noexpand\writetocentry{\realbackslash chapentry{\the\toks0}% {\the\chapno}}}% \temp \donoderef \global\let\section = \numberedsec \global\let\subsection = \numberedsubsec \global\let\subsubsection = \numberedsubsubsec } \outer\def\appendix{\parsearg\appendixyyy} \def\appendixyyy #1{\apphead0{#1}} % normally apphead0 calls appendixzzz \def\appendixzzz #1{% \secno=0 \subsecno=0 \subsubsecno=0 \global\advance \appendixno by 1 \message{\putwordAppendix\space \appendixletter}% \chapmacro {#1}{\putwordAppendix{} \appendixletter}% \gdef\thissection{#1}% \gdef\thischaptername{#1}% \xdef\thischapter{\putwordAppendix{} \appendixletter: \noexpand\thischaptername}% \toks0 = {#1}% \edef\temp{\noexpand\writetocentry{\realbackslash appendixentry{\the\toks0}% {\appendixletter}}}% \temp \appendixnoderef \global\let\section = \appendixsec \global\let\subsection = \appendixsubsec \global\let\subsubsection = \appendixsubsubsec } % @centerchap is like @unnumbered, but the heading is centered. \outer\def\centerchap{\parsearg\centerchapyyy} \def\centerchapyyy #1{{\let\unnumbchapmacro=\centerchapmacro \unnumberedyyy{#1}}} % @top is like @unnumbered. \outer\def\top{\parsearg\unnumberedyyy} \outer\def\unnumbered{\parsearg\unnumberedyyy} \def\unnumberedyyy #1{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz \def\unnumberedzzz #1{% \secno=0 \subsecno=0 \subsubsecno=0 % % This used to be simply \message{#1}, but TeX fully expands the % argument to \message. Therefore, if #1 contained @-commands, TeX % expanded them. For example, in `@unnumbered The @cite{Book}', TeX % expanded @cite (which turns out to cause errors because \cite is meant % to be executed, not expanded). % % Anyway, we don't want the fully-expanded definition of @cite to appear % as a result of the \message, we just want `@cite' itself. We use % \the to achieve this: TeX expands \the only once, % simply yielding the contents of . (We also do this for % the toc entries.) \toks0 = {#1}\message{(\the\toks0)}% % \unnumbchapmacro {#1}% \gdef\thischapter{#1}\gdef\thissection{#1}% \toks0 = {#1}% \edef\temp{\noexpand\writetocentry{\realbackslash unnumbchapentry{\the\toks0}}}% \temp \unnumbnoderef \global\let\section = \unnumberedsec \global\let\subsection = \unnumberedsubsec \global\let\subsubsection = \unnumberedsubsubsec } % Sections. \outer\def\numberedsec{\parsearg\secyyy} \def\secyyy #1{\numhead1{#1}} % normally calls seczzz \def\seczzz #1{% \subsecno=0 \subsubsecno=0 \global\advance \secno by 1 % \gdef\thissection{#1}\secheading {#1}{\the\chapno}{\the\secno}% \toks0 = {#1}% \edef\temp{\noexpand\writetocentry{\realbackslash secentry{\the\toks0}% {\the\chapno}{\the\secno}}}% \temp \donoderef \nobreak } \outer\def\appendixsection{\parsearg\appendixsecyyy} \outer\def\appendixsec{\parsearg\appendixsecyyy} \def\appendixsecyyy #1{\apphead1{#1}} % normally calls appendixsectionzzz \def\appendixsectionzzz #1{% \subsecno=0 \subsubsecno=0 \global\advance \secno by 1 % \gdef\thissection{#1}\secheading {#1}{\appendixletter}{\the\secno}% \toks0 = {#1}% \edef\temp{\noexpand\writetocentry{\realbackslash secentry{\the\toks0}% {\appendixletter}{\the\secno}}}% \temp \appendixnoderef \nobreak } \outer\def\unnumberedsec{\parsearg\unnumberedsecyyy} \def\unnumberedsecyyy #1{\unnmhead1{#1}} % normally calls unnumberedseczzz \def\unnumberedseczzz #1{% \plainsecheading {#1}\gdef\thissection{#1}% \toks0 = {#1}% \edef\temp{\noexpand\writetocentry{\realbackslash unnumbsecentry{\the\toks0}}}% \temp \unnumbnoderef \nobreak } % Subsections. \outer\def\numberedsubsec{\parsearg\numberedsubsecyyy} \def\numberedsubsecyyy #1{\numhead2{#1}} % normally calls numberedsubseczzz \def\numberedsubseczzz #1{% \gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 % \subsecheading {#1}{\the\chapno}{\the\secno}{\the\subsecno}% \toks0 = {#1}% \edef\temp{\noexpand\writetocentry{\realbackslash subsecentry{\the\toks0}% {\the\chapno}{\the\secno}{\the\subsecno}}}% \temp \donoderef \nobreak } \outer\def\appendixsubsec{\parsearg\appendixsubsecyyy} \def\appendixsubsecyyy #1{\apphead2{#1}} % normally calls appendixsubseczzz \def\appendixsubseczzz #1{% \gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 % \subsecheading {#1}{\appendixletter}{\the\secno}{\the\subsecno}% \toks0 = {#1}% \edef\temp{\noexpand\writetocentry{\realbackslash subsecentry{\the\toks0}% {\appendixletter}{\the\secno}{\the\subsecno}}}% \temp \appendixnoderef \nobreak } \outer\def\unnumberedsubsec{\parsearg\unnumberedsubsecyyy} \def\unnumberedsubsecyyy #1{\unnmhead2{#1}} %normally calls unnumberedsubseczzz \def\unnumberedsubseczzz #1{% \plainsubsecheading {#1}\gdef\thissection{#1}% \toks0 = {#1}% \edef\temp{\noexpand\writetocentry{\realbackslash unnumbsubsecentry% {\the\toks0}}}% \temp \unnumbnoderef \nobreak } % Subsubsections. \outer\def\numberedsubsubsec{\parsearg\numberedsubsubsecyyy} \def\numberedsubsubsecyyy #1{\numhead3{#1}} % normally numberedsubsubseczzz \def\numberedsubsubseczzz #1{% \gdef\thissection{#1}\global\advance \subsubsecno by 1 % \subsubsecheading {#1} {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}% \toks0 = {#1}% \edef\temp{\noexpand\writetocentry{\realbackslash subsubsecentry{\the\toks0}% {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}}}% \temp \donoderef \nobreak } \outer\def\appendixsubsubsec{\parsearg\appendixsubsubsecyyy} \def\appendixsubsubsecyyy #1{\apphead3{#1}} % normally appendixsubsubseczzz \def\appendixsubsubseczzz #1{% \gdef\thissection{#1}\global\advance \subsubsecno by 1 % \subsubsecheading {#1} {\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}% \toks0 = {#1}% \edef\temp{\noexpand\writetocentry{\realbackslash subsubsecentry{\the\toks0}% {\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}}}% \temp \appendixnoderef \nobreak } \outer\def\unnumberedsubsubsec{\parsearg\unnumberedsubsubsecyyy} \def\unnumberedsubsubsecyyy #1{\unnmhead3{#1}} %normally unnumberedsubsubseczzz \def\unnumberedsubsubseczzz #1{% \plainsubsubsecheading {#1}\gdef\thissection{#1}% \toks0 = {#1}% \edef\temp{\noexpand\writetocentry{\realbackslash unnumbsubsubsecentry% {\the\toks0}}}% \temp \unnumbnoderef \nobreak } % 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} % @heading, @subheading, @subsubheading. \def\heading{\parsearg\plainsecheading} \def\subheading{\parsearg\plainsubsecheading} \def\subsubheading{\parsearg\plainsubsubsecheading} % 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 \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\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chapbreak \global\let\pagealignmacro=\chappager} \def\CHAPPAGon{% \global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chappager \global\let\pagealignmacro=\chappager \global\def\HEADINGSon{\HEADINGSsingle}} \def\CHAPPAGodd{ \global\let\contentsalignmacro = \chapoddpage \global\let\pchapsepmacro=\chapoddpage \global\let\pagealignmacro=\chapoddpage \global\def\HEADINGSon{\HEADINGSdouble}} \CHAPPAGon \def\CHAPFplain{ \global\let\chapmacro=\chfplain \global\let\unnumbchapmacro=\unnchfplain \global\let\centerchapmacro=\centerchfplain} % Plain chapter opening. % #1 is the text, #2 the chapter number or empty if unnumbered. \def\chfplain#1#2{% \pchapsepmacro {% \chapfonts \rm \def\chapnum{#2}% \setbox0 = \hbox{#2\ifx\chapnum\empty\else\enspace\fi}% \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright \hangindent = \wd0 \centerparametersmaybe \unhbox0 #1\par}% }% \nobreak\bigskip % no page break after a chapter title \nobreak } % Plain opening for unnumbered. \def\unnchfplain#1{\chfplain{#1}{}} % @centerchap -- centered and unnumbered. \let\centerparametersmaybe = \relax \def\centerchfplain#1{{% \def\centerparametersmaybe{% \advance\rightskip by 3\rightskip \leftskip = \rightskip \parfillskip = 0pt }% \chfplain{#1}{}% }} \CHAPFplain % The default \def\unnchfopen #1{% \chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 \parindent=0pt\raggedright \rm #1\hfill}}\bigskip \par\nobreak } \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\centerchfopen #1{% \chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 \parindent=0pt \hfill {\rm #1}\hfill}}\bigskip \par\nobreak } \def\CHAPFopen{ \global\let\chapmacro=\chfopen \global\let\unnumbchapmacro=\unnchfopen \global\let\centerchapmacro=\centerchfopen} % Section titles. \newskip\secheadingskip \def\secheadingbreak{\dobreak \secheadingskip {-1000}} \def\secheading#1#2#3{\sectionheading{sec}{#2.#3}{#1}} \def\plainsecheading#1{\sectionheading{sec}{}{#1}} % Subsection titles. \newskip \subsecheadingskip \def\subsecheadingbreak{\dobreak \subsecheadingskip {-500}} \def\subsecheading#1#2#3#4{\sectionheading{subsec}{#2.#3.#4}{#1}} \def\plainsubsecheading#1{\sectionheading{subsec}{}{#1}} % Subsubsection titles. \let\subsubsecheadingskip = \subsecheadingskip \let\subsubsecheadingbreak = \subsecheadingbreak \def\subsubsecheading#1#2#3#4#5{\sectionheading{subsubsec}{#2.#3.#4.#5}{#1}} \def\plainsubsubsecheading#1{\sectionheading{subsubsec}{}{#1}} % Print any size section title. % % #1 is the section type (sec/subsec/subsubsec), #2 is the section % number (maybe empty), #3 the text. \def\sectionheading#1#2#3{% {% \expandafter\advance\csname #1headingskip\endcsname by \parskip \csname #1headingbreak\endcsname }% {% % Switch to the right set of fonts. \csname #1fonts\endcsname \rm % % Only insert the separating space if we have a section number. \def\secnum{#2}% \setbox0 = \hbox{#2\ifx\secnum\empty\else\enspace\fi}% % \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright \hangindent = \wd0 % zero if no section number \unhbox0 #3}% }% \ifdim\parskip<10pt \nobreak\kern10pt\nobreak\kern-\parskip\fi \nobreak } \message{toc,} % Table of contents. \newwrite\tocfile % Write an entry to the toc file, opening it if necessary. % Called from @chapter, etc. We supply {\folio} at the end of the % argument, which will end up as the last argument to the \...entry macro. % % We open the .toc file here instead of at @setfilename or any other % given time so that @contents can be put in the document anywhere. % \newif\iftocfileopened \def\writetocentry#1{% \iftocfileopened\else \immediate\openout\tocfile = \jobname.toc \global\tocfileopenedtrue \fi \iflinks \write\tocfile{#1{\folio}}\fi } \newskip\contentsrightmargin \contentsrightmargin=1in \newcount\savepageno \newcount\lastnegativepageno \lastnegativepageno = -1 % Finish up the main text and prepare to read what we've written % to \tocfile. % \def\startcontents#1{% % If @setchapternewpage on, and @headings double, the contents should % start on an odd page, unlike chapters. Thus, we maintain % \contentsalignmacro in parallel with \pagealignmacro. % From: Torbjorn Granlund \contentsalignmacro \immediate\closeout\tocfile % % Don't need to put `Contents' or `Short Contents' in the headline. % It is abundantly clear what they are. \unnumbchapmacro{#1}\def\thischapter{}% \savepageno = \pageno \begingroup % Set up to handle contents files properly. \catcode`\\=0 \catcode`\{=1 \catcode`\}=2 \catcode`\@=11 % We can't do this, because then an actual ^ in a section % title fails, e.g., @chapter ^ -- exponentiation. --karl, 9jul97. %\catcode`\^=7 % to see ^^e4 as \"a etc. juha@piuha.ydi.vtt.fi \raggedbottom % Worry more about breakpoints than the bottom. \advance\hsize by -\contentsrightmargin % Don't use the full line length. % % Roman numerals for page numbers. \ifnum \pageno>0 \pageno = \lastnegativepageno \fi } % Normal (long) toc. \def\contents{% \startcontents{\putwordTOC}% \openin 1 \jobname.toc \ifeof 1 \else \closein 1 \input \jobname.toc \fi \vfill \eject \contentsalignmacro % in case @setchapternewpage odd is in effect \pdfmakeoutlines \endgroup \lastnegativepageno = \pageno \pageno = \savepageno } % And just the chapters. \def\summarycontents{% \startcontents{\putwordShortTOC}% % \let\chapentry = \shortchapentry \let\appendixentry = \shortappendixentry \let\unnumbchapentry = \shortunnumberedentry % We want a true roman here for the page numbers. \secfonts \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl \rm \hyphenpenalty = 10000 \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{} \openin 1 \jobname.toc \ifeof 1 \else \closein 1 \input \jobname.toc \fi \vfill \eject \contentsalignmacro % in case @setchapternewpage odd is in effect \endgroup \lastnegativepageno = \pageno \pageno = \savepageno } \let\shortcontents = \summarycontents \ifpdf \pdfcatalog{/PageMode /UseOutlines}% \fi % 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, ... % Chapters, in the main contents. \def\chapentry#1#2#3{\dochapentry{#2\labelspace#1}{#3}} % % Chapters, in the short toc. % See comments in \dochapentry re vbox and related settings. \def\shortchapentry#1#2#3{% \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#3\egroup}% } % Appendices, in the main contents. \def\appendixentry#1#2#3{\dochapentry{\putwordAppendix{} #2\labelspace#1}{#3}} % % Appendices, in the short toc. \let\shortappendixentry = \shortchapentry % Typeset the label for a chapter or appendix for the short contents. % The arg is, e.g., `Appendix A' for an appendix, or `3' for a chapter. % We could simplify the code here by writing out an \appendixentry % command in the toc file for appendices, instead of using \chapentry % for both, but it doesn't seem worth it. % \newdimen\shortappendixwidth % \def\shortchaplabel#1{% % This space should be enough, since a single number is .5em, and the % widest letter (M) is 1em, at least in the Computer Modern fonts. % But use \hss just in case. % (This space doesn't include the extra space that gets added after % the label; that gets put in by \shortchapentry above.) \dimen0 = 1em \hbox to \dimen0{#1\hss}% } % Unnumbered chapters. \def\unnumbchapentry#1#2{\dochapentry{#1}{#2}} \def\shortunnumberedentry#1#2{\tocentry{#1}{\doshortpageno\bgroup#2\egroup}} % 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 want it to be at chapters % if at all possible; hence the \penalty. \def\dochapentry#1#2{% \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip \begingroup \chapentryfonts \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup \nobreak\vskip .25\baselineskip plus.1\baselineskip } \def\dosecentry#1#2{\begingroup \secentryfonts \leftskip=\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} \def\dosubsecentry#1#2{\begingroup \subsecentryfonts \leftskip=2\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} \def\dosubsubsecentry#1#2{\begingroup \subsubsecentryfonts \leftskip=3\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} % Final typesetting of a toc entry; we use the same \entry macro as for % the index entries, but we want to suppress hyphenation here. (We % can't do that in the \entry macro, since index entries might consist % of hyphenated-identifiers-that-do-not-fit-on-a-line-and-nothing-else.) \def\tocentry#1#2{\begingroup \vskip 0pt plus1pt % allow a little stretch for the sake of nice page breaks % Do not use \turnoffactive in these arguments. Since the toc is % typeset in cmr, characters such as _ would come out wrong; we % have to do the usual translation tricks. \entry{#1}{#2}% \endgroup} % 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,} % @foo ... @end foo. % 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 %{\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} %} % @point{}, @result{}, @expansion{}, @print{}, @equiv{}. \def\point{$\star$} \def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}} \def\expansion{\leavevmode\raise.1ex\hbox to 1em