home *** CD-ROM | disk | FTP | other *** search
open in:
MacOS 8.1
|
Win98
|
DOS
browse contents |
view JSON data
|
view as text
This file was processed as: SHell self-extracting ARchive
(archive/shar).
Confidence | Program | Detection | Match Type | Support
|
---|
100%
| dexvert
| SHell self-extracting ARchive (archive/shar)
| magic
| Supported |
1%
| dexvert
| Movie Setter Project (other/movieSetterProject)
| ext
| Unsupported |
1%
| dexvert
| Text File (text/txt)
| fallback
| Supported |
100%
| file
| ASCII text
| default
| |
100%
| checkBytes
| Printable ASCII
| default
| |
100%
| perlTextCheck
| Likely Text (Perl)
| default
| |
100%
| siegfried
| fmt/329 Shell Archive Format
| default
| |
100%
| detectItEasy
| Format: plain text[LF]
| default (weak)
|
|
hex view+--------+-------------------------+-------------------------+--------+--------+
|00000000| 4e 65 77 73 67 72 6f 75 | 70 73 3a 20 63 6f 6d 70 |Newsgrou|ps: comp|
|00000010| 2e 73 6f 75 72 63 65 73 | 2e 6d 69 73 63 0a 73 75 |.sources|.misc.su|
|00000020| 62 6a 65 63 74 3a 20 76 | 30 39 69 30 30 35 3a 20 |bject: v|09i005: |
|00000030| 31 36 20 62 69 74 20 63 | 6f 6d 70 72 65 73 73 20 |16 bit c|ompress |
|00000040| 66 6f 72 20 4d 53 44 4f | 53 0a 46 72 6f 6d 3a 20 |for MSDO|S.From: |
|00000050| 61 6c 6c 62 65 72 79 40 | 75 75 6e 65 74 2e 55 55 |allbery@|uunet.UU|
|00000060| 2e 4e 45 54 20 28 42 72 | 61 6e 64 6f 6e 20 53 2e |.NET (Br|andon S.|
|00000070| 20 41 6c 6c 62 65 72 79 | 20 2d 20 63 6f 6d 70 2e | Allbery| - comp.|
|00000080| 73 6f 75 72 63 65 73 2e | 6d 69 73 63 29 0a 52 65 |sources.|misc).Re|
|00000090| 70 6c 79 2d 54 6f 3a 20 | 67 72 61 68 61 6d 40 74 |ply-To: |graham@t|
|000000a0| 73 6d 69 74 68 2e 55 55 | 43 50 0a 0a 50 6f 73 74 |smith.UU|CP..Post|
|000000b0| 69 6e 67 2d 6e 75 6d 62 | 65 72 3a 20 56 6f 6c 75 |ing-numb|er: Volu|
|000000c0| 6d 65 20 39 2c 20 49 73 | 73 75 65 20 35 0a 53 75 |me 9, Is|sue 5.Su|
|000000d0| 62 6d 69 74 74 65 64 2d | 62 79 3a 20 67 72 61 68 |bmitted-|by: grah|
|000000e0| 61 6d 40 74 73 6d 69 74 | 68 2e 55 55 43 50 0a 41 |am@tsmit|h.UUCP.A|
|000000f0| 72 63 68 69 76 65 2d 6e | 61 6d 65 3a 20 63 6f 6d |rchive-n|ame: com|
|00000100| 70 72 65 73 73 2e 6d 73 | 0a 0a 20 20 20 20 52 65 |press.ms|.. Re|
|00000110| 63 65 6e 74 6c 79 2c 20 | 74 68 65 72 65 20 68 61 |cently, |there ha|
|00000120| 76 65 20 62 65 65 6e 20 | 70 65 6f 70 6c 65 20 6c |ve been |people l|
|00000130| 6f 6f 6b 69 6e 67 20 66 | 6f 72 20 73 6f 75 72 63 |ooking f|or sourc|
|00000140| 65 20 66 6f 72 20 63 6f | 6d 70 72 65 73 73 2e 63 |e for co|mpress.c|
|00000150| 20 74 6f 20 72 75 6e 0a | 75 6e 64 65 72 20 4d 53 | to run.|under MS|
|00000160| 44 4f 53 2e 20 48 65 72 | 65 20 69 73 20 6f 6e 65 |DOS. Her|e is one|
|00000170| 20 74 68 61 74 20 6d 61 | 79 20 66 69 74 20 74 68 | that ma|y fit th|
|00000180| 65 20 62 69 6c 6c 2e 0a | 0a 44 6f 75 67 2e 0a 0a |e bill..|.Doug...|
|00000190| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000001a0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 20 43 |--------|------ C|
|000001b0| 75 74 20 48 65 72 65 20 | 2d 2d 2d 2d 2d 2d 2d 2d |ut Here |--------|
|000001c0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000001d0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 0a 23 21 20 |--------|----.#! |
|000001e0| 2f 62 69 6e 2f 73 68 0a | 23 20 54 68 69 73 20 69 |/bin/sh.|# This i|
|000001f0| 73 20 61 20 73 68 65 6c | 6c 20 61 72 63 68 69 76 |s a shel|l archiv|
|00000200| 65 2e 20 20 52 65 6d 6f | 76 65 20 61 6e 79 74 68 |e. Remo|ve anyth|
|00000210| 69 6e 67 20 62 65 66 6f | 72 65 20 74 68 69 73 20 |ing befo|re this |
|00000220| 6c 69 6e 65 2c 20 74 68 | 65 6e 20 66 65 65 64 20 |line, th|en feed |
|00000230| 69 74 0a 23 20 69 6e 74 | 6f 20 61 20 73 68 65 6c |it.# int|o a shel|
|00000240| 6c 20 76 69 61 20 22 73 | 68 20 66 69 6c 65 22 20 |l via "s|h file" |
|00000250| 6f 72 20 73 69 6d 69 6c | 61 72 2e 20 20 54 6f 20 |or simil|ar. To |
|00000260| 6f 76 65 72 77 72 69 74 | 65 20 65 78 69 73 74 69 |overwrit|e existi|
|00000270| 6e 67 20 66 69 6c 65 73 | 2c 0a 23 20 74 79 70 65 |ng files|,.# type|
|00000280| 20 22 73 68 20 66 69 6c | 65 20 2d 63 22 2e 0a 23 | "sh fil|e -c"..#|
|00000290| 20 54 68 65 20 74 6f 6f | 6c 20 74 68 61 74 20 67 | The too|l that g|
|000002a0| 65 6e 65 72 61 74 65 64 | 20 74 68 69 73 20 61 70 |enerated| this ap|
|000002b0| 70 65 61 72 65 64 20 69 | 6e 20 74 68 65 20 63 6f |peared i|n the co|
|000002c0| 6d 70 2e 73 6f 75 72 63 | 65 73 2e 75 6e 69 78 20 |mp.sourc|es.unix |
|000002d0| 6e 65 77 73 67 72 6f 75 | 70 3b 0a 23 20 73 65 6e |newsgrou|p;.# sen|
|000002e0| 64 20 6d 61 69 6c 20 74 | 6f 20 63 6f 6d 70 2d 73 |d mail t|o comp-s|
|000002f0| 6f 75 72 63 65 73 2d 75 | 6e 69 78 40 75 75 6e 65 |ources-u|nix@uune|
|00000300| 74 2e 75 75 2e 6e 65 74 | 20 69 66 20 79 6f 75 20 |t.uu.net| if you |
|00000310| 77 61 6e 74 20 74 68 61 | 74 20 74 6f 6f 6c 2e 0a |want tha|t tool..|
|00000320| 23 20 49 66 20 74 68 69 | 73 20 61 72 63 68 69 76 |# If thi|s archiv|
|00000330| 65 20 69 73 20 63 6f 6d | 70 6c 65 74 65 2c 20 79 |e is com|plete, y|
|00000340| 6f 75 20 77 69 6c 6c 20 | 73 65 65 20 74 68 65 20 |ou will |see the |
|00000350| 66 6f 6c 6c 6f 77 69 6e | 67 20 6d 65 73 73 61 67 |followin|g messag|
|00000360| 65 20 61 74 20 74 68 65 | 20 65 6e 64 3a 0a 23 09 |e at the| end:.#.|
|00000370| 09 22 45 6e 64 20 6f 66 | 20 73 68 65 6c 6c 20 61 |."End of| shell a|
|00000380| 72 63 68 69 76 65 2e 22 | 0a 23 20 43 6f 6e 74 65 |rchive."|.# Conte|
|00000390| 6e 74 73 3a 20 20 52 45 | 41 44 4d 45 20 6d 61 6b |nts: RE|ADME mak|
|000003a0| 65 66 69 6c 65 20 63 6f | 6d 70 72 65 73 73 2e 63 |efile co|mpress.c|
|000003b0| 0a 23 20 57 72 61 70 70 | 65 64 20 62 79 20 67 72 |.# Wrapp|ed by gr|
|000003c0| 61 68 61 6d 40 74 73 6d | 69 74 68 20 6f 6e 20 57 |aham@tsm|ith on W|
|000003d0| 65 64 20 4e 6f 76 20 31 | 35 20 32 30 3a 35 32 3a |ed Nov 1|5 20:52:|
|000003e0| 30 30 20 31 39 38 39 0a | 50 41 54 48 3d 2f 62 69 |00 1989.|PATH=/bi|
|000003f0| 6e 3a 2f 75 73 72 2f 62 | 69 6e 3a 2f 75 73 72 2f |n:/usr/b|in:/usr/|
|00000400| 75 63 62 20 3b 20 65 78 | 70 6f 72 74 20 50 41 54 |ucb ; ex|port PAT|
|00000410| 48 0a 69 66 20 74 65 73 | 74 20 2d 66 20 27 52 45 |H.if tes|t -f 'RE|
|00000420| 41 44 4d 45 27 20 2d 61 | 20 22 24 7b 31 7d 22 20 |ADME' -a| "${1}" |
|00000430| 21 3d 20 22 2d 63 22 20 | 3b 20 74 68 65 6e 20 0a |!= "-c" |; then .|
|00000440| 20 20 65 63 68 6f 20 73 | 68 61 72 3a 20 57 69 6c | echo s|har: Wil|
|00000450| 6c 20 6e 6f 74 20 63 6c | 6f 62 62 65 72 20 65 78 |l not cl|obber ex|
|00000460| 69 73 74 69 6e 67 20 66 | 69 6c 65 20 5c 22 27 52 |isting f|ile \"'R|
|00000470| 45 41 44 4d 45 27 5c 22 | 0a 65 6c 73 65 0a 65 63 |EADME'\"|.else.ec|
|00000480| 68 6f 20 73 68 61 72 3a | 20 45 78 74 72 61 63 74 |ho shar:| Extract|
|00000490| 69 6e 67 20 5c 22 27 52 | 45 41 44 4d 45 27 5c 22 |ing \"'R|EADME'\"|
|000004a0| 20 5c 28 36 30 39 20 63 | 68 61 72 61 63 74 65 72 | \(609 c|haracter|
|000004b0| 73 5c 29 0a 73 65 64 20 | 22 73 2f 5e 58 2f 2f 22 |s\).sed |"s/^X//"|
|000004c0| 20 3e 27 52 45 41 44 4d | 45 27 20 3c 3c 27 45 4e | >'READM|E' <<'EN|
|000004d0| 44 5f 4f 46 5f 46 49 4c | 45 27 0a 58 48 65 72 65 |D_OF_FIL|E'.XHere|
|000004e0| 20 69 73 20 61 20 76 65 | 72 73 69 6f 6e 20 6f 66 | is a ve|rsion of|
|000004f0| 20 63 6f 6d 70 72 65 73 | 73 20 34 2e 30 20 68 61 | compres|s 4.0 ha|
|00000500| 63 6b 65 64 20 66 6f 72 | 20 4d 53 44 4f 53 2e 20 |cked for| MSDOS. |
|00000510| 41 20 6d 61 6b 65 66 69 | 6c 65 20 69 73 20 70 72 |A makefi|le is pr|
|00000520| 6f 76 69 64 65 64 0a 58 | 77 68 69 63 68 20 77 69 |ovided.X|which wi|
|00000530| 6c 6c 20 63 6f 6d 70 69 | 6c 65 20 69 74 20 75 73 |ll compi|le it us|
|00000540| 69 6e 67 20 4d 69 63 72 | 6f 73 6f 66 74 20 43 2c |ing Micr|osoft C,|
|00000550| 20 54 75 72 62 6f 20 43 | 2c 20 6f 72 20 5a 6f 72 | Turbo C|, or Zor|
|00000560| 74 65 63 68 20 43 2e 20 | 54 68 65 20 6d 61 6b 65 |tech C. |The make|
|00000570| 66 69 6c 65 0a 58 77 69 | 6c 6c 20 6e 65 65 64 20 |file.Xwi|ll need |
|00000580| 65 64 69 74 69 6e 67 20 | 69 66 20 6f 74 68 65 72 |editing |if other|
|00000590| 20 74 68 61 6e 20 74 68 | 65 20 4d 69 63 72 6f 73 | than th|e Micros|
|000005a0| 6f 66 74 20 63 6f 6d 70 | 69 6c 65 72 20 69 73 20 |oft comp|iler is |
|000005b0| 75 73 65 64 2e 0a 58 54 | 68 65 20 70 72 6f 67 72 |used..XT|he progr|
|000005c0| 61 6d 20 72 65 71 75 69 | 72 65 73 20 61 62 6f 75 |am requi|res abou|
|000005d0| 74 20 34 30 30 4b 20 74 | 6f 20 72 75 6e 2e 20 49 |t 400K t|o run. I|
|000005e0| 74 20 74 61 6b 65 73 20 | 74 68 65 20 73 61 6d 65 |t takes |the same|
|000005f0| 20 63 6f 6d 6d 61 6e 64 | 20 6c 69 6e 65 0a 58 61 | command| line.Xa|
|00000600| 72 67 73 20 61 73 20 64 | 6f 65 73 20 74 68 65 20 |rgs as d|oes the |
|00000610| 55 4e 49 58 20 70 72 6f | 67 72 61 6d 20 6f 66 20 |UNIX pro|gram of |
|00000620| 74 68 65 20 73 61 6d 65 | 20 6e 61 6d 65 2c 20 61 |the same| name, a|
|00000630| 6e 64 20 73 68 6f 75 6c | 64 20 62 65 20 63 6f 6d |nd shoul|d be com|
|00000640| 70 61 74 69 62 6c 65 0a | 58 69 6e 20 61 6c 6c 20 |patible.|Xin all |
|00000650| 77 61 79 73 20 77 69 74 | 68 20 74 68 61 74 20 70 |ways wit|h that p|
|00000660| 72 6f 67 72 61 6d 2e 20 | 49 74 20 77 69 6c 6c 20 |rogram. |It will |
|00000670| 64 65 63 6f 64 65 20 61 | 20 31 36 20 62 69 74 20 |decode a| 16 bit |
|00000680| 63 6f 6d 70 72 65 73 73 | 65 64 20 66 69 6c 65 2c |compress|ed file,|
|00000690| 0a 58 61 6e 64 20 63 61 | 6e 20 67 65 6e 65 72 61 |.Xand ca|n genera|
|000006a0| 74 65 20 74 68 65 20 73 | 61 6d 65 2e 20 4f 6e 20 |te the s|ame. On |
|000006b0| 6d 79 20 6d 61 63 68 69 | 6e 65 2c 20 69 74 20 64 |my machi|ne, it d|
|000006c0| 65 63 6f 64 65 73 20 61 | 62 6f 75 74 20 74 77 69 |ecodes a|bout twi|
|000006d0| 63 65 20 61 73 20 71 75 | 69 63 6b 6c 79 0a 58 61 |ce as qu|ickly.Xa|
|000006e0| 73 20 74 68 65 20 22 75 | 31 36 22 20 64 65 63 6f |s the "u|16" deco|
|000006f0| 6d 70 72 65 73 73 20 70 | 72 6f 67 72 61 6d 20 70 |mpress p|rogram p|
|00000700| 6f 73 74 65 64 20 65 61 | 72 6c 69 65 72 20 74 6f |osted ea|rlier to|
|00000710| 20 63 2e 73 2e 6d 2e 0a | 58 0a 58 44 6f 75 67 20 | c.s.m..|X.XDoug |
|00000720| 47 72 61 68 61 6d 2e 0a | 58 75 75 6e 65 74 21 6d |Graham..|Xuunet!m|
|00000730| 69 74 65 6c 21 73 63 65 | 21 74 73 6d 69 74 68 21 |itel!sce|!tsmith!|
|00000740| 67 72 61 68 61 6d 0a 45 | 4e 44 5f 4f 46 5f 46 49 |graham.E|ND_OF_FI|
|00000750| 4c 45 0a 69 66 20 74 65 | 73 74 20 36 30 39 20 2d |LE.if te|st 609 -|
|00000760| 6e 65 20 60 77 63 20 2d | 63 20 3c 27 52 45 41 44 |ne `wc -|c <'READ|
|00000770| 4d 45 27 60 3b 20 74 68 | 65 6e 0a 20 20 20 20 65 |ME'`; th|en. e|
|00000780| 63 68 6f 20 73 68 61 72 | 3a 20 5c 22 27 52 45 41 |cho shar|: \"'REA|
|00000790| 44 4d 45 27 5c 22 20 75 | 6e 70 61 63 6b 65 64 20 |DME'\" u|npacked |
|000007a0| 77 69 74 68 20 77 72 6f | 6e 67 20 73 69 7a 65 21 |with wro|ng size!|
|000007b0| 0a 66 69 0a 23 20 65 6e | 64 20 6f 66 20 27 52 45 |.fi.# en|d of 'RE|
|000007c0| 41 44 4d 45 27 0a 66 69 | 0a 69 66 20 74 65 73 74 |ADME'.fi|.if test|
|000007d0| 20 2d 66 20 27 6d 61 6b | 65 66 69 6c 65 27 20 2d | -f 'mak|efile' -|
|000007e0| 61 20 22 24 7b 31 7d 22 | 20 21 3d 20 22 2d 63 22 |a "${1}"| != "-c"|
|000007f0| 20 3b 20 74 68 65 6e 20 | 0a 20 20 65 63 68 6f 20 | ; then |. echo |
|00000800| 73 68 61 72 3a 20 57 69 | 6c 6c 20 6e 6f 74 20 63 |shar: Wi|ll not c|
|00000810| 6c 6f 62 62 65 72 20 65 | 78 69 73 74 69 6e 67 20 |lobber e|xisting |
|00000820| 66 69 6c 65 20 5c 22 27 | 6d 61 6b 65 66 69 6c 65 |file \"'|makefile|
|00000830| 27 5c 22 0a 65 6c 73 65 | 0a 65 63 68 6f 20 73 68 |'\".else|.echo sh|
|00000840| 61 72 3a 20 45 78 74 72 | 61 63 74 69 6e 67 20 5c |ar: Extr|acting \|
|00000850| 22 27 6d 61 6b 65 66 69 | 6c 65 27 5c 22 20 5c 28 |"'makefi|le'\" \(|
|00000860| 31 30 38 33 20 63 68 61 | 72 61 63 74 65 72 73 5c |1083 cha|racters\|
|00000870| 29 0a 73 65 64 20 22 73 | 2f 5e 58 2f 2f 22 20 3e |).sed "s|/^X//" >|
|00000880| 27 6d 61 6b 65 66 69 6c | 65 27 20 3c 3c 27 45 4e |'makefil|e' <<'EN|
|00000890| 44 5f 4f 46 5f 46 49 4c | 45 27 0a 58 23 0a 58 23 |D_OF_FIL|E'.X#.X#|
|000008a0| 20 4d 61 6b 65 66 69 6c | 65 20 66 6f 72 20 63 6f | Makefil|e for co|
|000008b0| 6d 70 72 65 73 73 2e 0a | 58 23 0a 58 23 20 49 66 |mpress..|X#.X# If|
|000008c0| 20 6d 65 6d 6f 72 79 20 | 75 73 61 67 65 20 69 73 | memory |usage is|
|000008d0| 20 61 20 70 72 6f 62 6c | 65 6d 20 75 6e 64 65 72 | a probl|em under|
|000008e0| 20 44 4f 53 2c 20 79 6f | 75 20 6d 61 79 20 77 61 | DOS, yo|u may wa|
|000008f0| 6e 74 20 74 6f 20 64 6f | 20 61 0a 58 23 0a 58 23 |nt to do| a.X#.X#|
|00000900| 09 22 65 78 65 6d 6f 64 | 20 63 6f 6d 70 72 65 73 |."exemod| compres|
|00000910| 73 2e 65 78 65 20 2f 4d | 41 58 20 30 22 0a 58 23 |s.exe /M|AX 0".X#|
|00000920| 0a 58 23 20 69 6e 20 6f | 72 64 65 72 20 74 6f 20 |.X# in o|rder to |
|00000930| 72 65 64 75 63 65 20 74 | 68 65 20 73 69 7a 65 20 |reduce t|he size |
|00000940| 6f 66 20 74 68 65 20 6e | 65 61 72 20 68 65 61 70 |of the n|ear heap|
|00000950| 2e 20 49 66 20 74 68 69 | 73 20 69 73 20 64 6f 6e |. If thi|s is don|
|00000960| 65 20 6f 6e 20 74 68 65 | 0a 58 23 20 4d 69 63 72 |e on the|.X# Micr|
|00000970| 6f 73 6f 66 74 20 65 78 | 65 63 75 74 61 62 6c 65 |osoft ex|ecutable|
|00000980| 2c 20 6d 65 6d 6f 72 79 | 20 72 65 71 75 69 72 65 |, memory| require|
|00000990| 6d 65 6e 74 73 20 64 72 | 6f 70 20 74 6f 20 61 62 |ments dr|op to ab|
|000009a0| 6f 75 74 20 33 38 30 4b | 20 66 72 6f 6d 20 34 31 |out 380K| from 41|
|000009b0| 30 4b 0a 58 23 20 44 65 | 70 65 6e 64 69 6e 67 20 |0K.X# De|pending |
|000009c0| 6f 6e 20 68 6f 77 20 74 | 68 65 20 6f 74 68 65 72 |on how t|he other|
|000009d0| 20 63 6f 6d 70 69 6c 65 | 72 73 20 6d 61 6e 61 67 | compile|rs manag|
|000009e0| 65 20 74 68 65 69 72 20 | 6e 65 61 72 2f 66 61 72 |e their |near/far|
|000009f0| 20 68 65 61 70 73 2c 20 | 74 68 69 73 0a 58 23 20 | heaps, |this.X# |
|00000a00| 73 68 6f 75 6c 64 20 68 | 61 76 65 20 73 69 6d 69 |should h|ave simi|
|00000a10| 6c 61 72 20 72 65 73 75 | 6c 74 73 20 74 68 65 72 |lar resu|lts ther|
|00000a20| 65 20 61 73 20 77 65 6c | 6c 2e 0a 58 23 0a 58 0a |e as wel|l..X#.X.|
|00000a30| 58 44 4f 53 44 45 46 53 | 20 3d 20 20 2d 44 69 38 |XDOSDEFS| = -Di8|
|00000a40| 30 38 38 20 2d 44 4d 53 | 44 4f 53 20 2d 44 50 52 |088 -DMS|DOS -DPR|
|00000a50| 4f 54 4f 0a 58 0a 58 23 | 0a 58 23 20 4d 69 63 72 |OTO.X.X#|.X# Micr|
|00000a60| 6f 73 6f 66 74 20 43 20 | 35 2e 30 20 75 6e 64 65 |osoft C |5.0 unde|
|00000a70| 72 20 4d 53 44 4f 53 0a | 58 23 0a 58 23 20 54 68 |r MSDOS.|X#.X# Th|
|00000a80| 65 20 72 65 73 75 6c 74 | 69 6e 67 20 65 78 65 63 |e result|ing exec|
|00000a90| 75 74 61 62 6c 65 20 69 | 73 20 66 61 73 74 65 72 |utable i|s faster|
|00000aa0| 20 62 79 20 61 62 6f 75 | 74 20 32 30 25 20 74 68 | by abou|t 20% th|
|00000ab0| 61 6e 20 65 69 74 68 65 | 72 20 54 75 72 62 6f 20 |an eithe|r Turbo |
|00000ac0| 43 2c 0a 58 23 20 6f 72 | 20 5a 6f 72 74 65 63 68 |C,.X# or| Zortech|
|00000ad0| 20 43 2e 0a 58 23 0a 58 | 63 6f 6d 70 72 65 73 73 | C..X#.X|compress|
|00000ae0| 2e 65 78 65 3a 20 63 6f | 6d 70 72 65 73 73 2e 63 |.exe: co|mpress.c|
|00000af0| 0a 58 09 63 6c 20 2d 6f | 20 63 6f 6d 70 72 65 73 |.X.cl -o| compres|
|00000b00| 73 2e 65 78 65 20 2d 57 | 33 20 2d 4f 78 20 2d 44 |s.exe -W|3 -Ox -D|
|00000b10| 4d 53 43 20 24 28 44 4f | 53 44 45 46 53 29 20 63 |MSC $(DO|SDEFS) c|
|00000b20| 6f 6d 70 72 65 73 73 2e | 63 0a 58 0a 58 23 0a 58 |ompress.|c.X.X#.X|
|00000b30| 23 20 54 75 72 62 6f 20 | 43 20 32 2e 30 20 75 6e |# Turbo |C 2.0 un|
|00000b40| 64 65 72 20 4d 53 44 4f | 53 0a 58 23 0a 58 23 20 |der MSDO|S.X#.X# |
|00000b50| 63 6f 6d 70 72 65 73 73 | 2e 65 78 65 3a 20 63 6f |compress|.exe: co|
|00000b60| 6d 70 72 65 73 73 2e 63 | 0a 58 23 20 09 74 63 63 |mpress.c|.X# .tcc|
|00000b70| 20 2d 65 63 6f 6d 70 72 | 65 73 73 2e 65 78 65 20 | -ecompr|ess.exe |
|00000b80| 2d 5a 20 2d 4f 20 2d 47 | 20 2d 77 20 24 28 44 4f |-Z -O -G| -w $(DO|
|00000b90| 53 44 45 46 53 29 20 63 | 6f 6d 70 72 65 73 73 2e |SDEFS) c|ompress.|
|00000ba0| 63 0a 58 0a 58 23 0a 58 | 23 20 5a 6f 72 74 65 63 |c.X.X#.X|# Zortec|
|00000bb0| 68 20 43 20 75 6e 64 65 | 72 20 4d 53 44 4f 53 0a |h C unde|r MSDOS.|
|00000bc0| 58 23 0a 58 23 20 63 6f | 6d 70 72 65 73 73 2e 65 |X#.X# co|mpress.e|
|00000bd0| 78 65 3a 20 63 6f 6d 70 | 72 65 73 73 2e 63 0a 58 |xe: comp|ress.c.X|
|00000be0| 23 20 09 7a 74 63 20 2d | 6f 63 6f 6d 70 72 65 73 |# .ztc -|ocompres|
|00000bf0| 73 2e 65 78 65 20 2d 6f | 20 24 28 44 4f 53 44 45 |s.exe -o| $(DOSDE|
|00000c00| 46 53 29 20 63 6f 6d 70 | 72 65 73 73 2e 63 0a 58 |FS) comp|ress.c.X|
|00000c10| 0a 58 23 0a 58 23 20 53 | 75 6e 20 4f 53 20 33 2e |.X#.X# S|un OS 3.|
|00000c20| 35 2e 0a 58 23 20 43 6f | 6d 70 72 65 73 73 69 6f |5..X# Co|mpressio|
|00000c30| 6e 20 69 73 20 73 6c 69 | 67 68 74 6c 79 20 73 6c |n is sli|ghtly sl|
|00000c40| 6f 77 65 72 20 74 68 61 | 6e 20 2f 75 73 72 2f 75 |ower tha|n /usr/u|
|00000c50| 63 62 2f 63 6f 6d 70 72 | 65 73 73 20 70 72 6f 62 |cb/compr|ess prob|
|00000c60| 61 62 6c 79 0a 58 23 20 | 62 65 63 61 75 73 65 20 |ably.X# |because |
|00000c70| 74 68 65 20 63 6f 6d 70 | 69 6c 65 72 20 69 73 20 |the comp|iler is |
|00000c80| 64 6f 69 6e 67 20 6c 6f | 74 73 20 6f 66 20 22 65 |doing lo|ts of "e|
|00000c90| 78 74 6c 22 27 73 2e 20 | 44 65 63 6f 6d 70 72 65 |xtl"'s. |Decompre|
|00000ca0| 73 73 69 6f 6e 0a 58 23 | 20 69 73 20 73 6c 69 67 |ssion.X#| is slig|
|00000cb0| 68 74 6c 79 20 66 61 73 | 74 65 72 2e 0a 58 23 0a |htly fas|ter..X#.|
|00000cc0| 58 23 20 63 6f 6d 70 72 | 65 73 73 3a 09 63 6f 6d |X# compr|ess:.com|
|00000cd0| 70 72 65 73 73 2e 63 0a | 58 23 20 09 63 63 20 2d |press.c.|X# .cc -|
|00000ce0| 4f 20 2d 44 42 53 44 34 | 5f 32 20 2d 6f 20 63 6f |O -DBSD4|_2 -o co|
|00000cf0| 6d 70 72 65 73 73 20 63 | 6f 6d 70 72 65 73 73 2e |mpress c|ompress.|
|00000d00| 63 0a 45 4e 44 5f 4f 46 | 5f 46 49 4c 45 0a 69 66 |c.END_OF|_FILE.if|
|00000d10| 20 74 65 73 74 20 31 30 | 38 33 20 2d 6e 65 20 60 | test 10|83 -ne `|
|00000d20| 77 63 20 2d 63 20 3c 27 | 6d 61 6b 65 66 69 6c 65 |wc -c <'|makefile|
|00000d30| 27 60 3b 20 74 68 65 6e | 0a 20 20 20 20 65 63 68 |'`; then|. ech|
|00000d40| 6f 20 73 68 61 72 3a 20 | 5c 22 27 6d 61 6b 65 66 |o shar: |\"'makef|
|00000d50| 69 6c 65 27 5c 22 20 75 | 6e 70 61 63 6b 65 64 20 |ile'\" u|npacked |
|00000d60| 77 69 74 68 20 77 72 6f | 6e 67 20 73 69 7a 65 21 |with wro|ng size!|
|00000d70| 0a 66 69 0a 23 20 65 6e | 64 20 6f 66 20 27 6d 61 |.fi.# en|d of 'ma|
|00000d80| 6b 65 66 69 6c 65 27 0a | 66 69 0a 69 66 20 74 65 |kefile'.|fi.if te|
|00000d90| 73 74 20 2d 66 20 27 63 | 6f 6d 70 72 65 73 73 2e |st -f 'c|ompress.|
|00000da0| 63 27 20 2d 61 20 22 24 | 7b 31 7d 22 20 21 3d 20 |c' -a "$|{1}" != |
|00000db0| 22 2d 63 22 20 3b 20 74 | 68 65 6e 20 0a 20 20 65 |"-c" ; t|hen . e|
|00000dc0| 63 68 6f 20 73 68 61 72 | 3a 20 57 69 6c 6c 20 6e |cho shar|: Will n|
|00000dd0| 6f 74 20 63 6c 6f 62 62 | 65 72 20 65 78 69 73 74 |ot clobb|er exist|
|00000de0| 69 6e 67 20 66 69 6c 65 | 20 5c 22 27 63 6f 6d 70 |ing file| \"'comp|
|00000df0| 72 65 73 73 2e 63 27 5c | 22 0a 65 6c 73 65 0a 65 |ress.c'\|".else.e|
|00000e00| 63 68 6f 20 73 68 61 72 | 3a 20 45 78 74 72 61 63 |cho shar|: Extrac|
|00000e10| 74 69 6e 67 20 5c 22 27 | 63 6f 6d 70 72 65 73 73 |ting \"'|compress|
|00000e20| 2e 63 27 5c 22 20 5c 28 | 33 32 37 30 30 20 63 68 |.c'\" \(|32700 ch|
|00000e30| 61 72 61 63 74 65 72 73 | 5c 29 0a 73 65 64 20 22 |aracters|\).sed "|
|00000e40| 73 2f 5e 58 2f 2f 22 20 | 3e 27 63 6f 6d 70 72 65 |s/^X//" |>'compre|
|00000e50| 73 73 2e 63 27 20 3c 3c | 27 45 4e 44 5f 4f 46 5f |ss.c' <<|'END_OF_|
|00000e60| 46 49 4c 45 27 0a 58 2f | 2a 20 0a 58 20 2a 20 43 |FILE'.X/|* .X * C|
|00000e70| 6f 6d 70 72 65 73 73 20 | 2d 20 64 61 74 61 20 63 |ompress |- data c|
|00000e80| 6f 6d 70 72 65 73 73 69 | 6f 6e 20 70 72 6f 67 72 |ompressi|on progr|
|00000e90| 61 6d 20 0a 58 20 2a 2f | 0a 58 73 74 61 74 69 63 |am .X */|.Xstatic|
|00000ea0| 20 63 68 61 72 20 72 63 | 73 5f 69 64 65 6e 74 5b | char rc|s_ident[|
|00000eb0| 5d 20 3d 20 22 40 28 23 | 29 20 63 6f 6d 70 72 65 |] = "@(#|) compre|
|00000ec0| 73 73 2c 76 20 34 2e 31 | 20 28 44 4f 53 29 20 38 |ss,v 4.1| (DOS) 8|
|00000ed0| 39 2f 31 31 2f 31 30 20 | 30 32 3a 34 33 3a 30 30 |9/11/10 |02:43:00|
|00000ee0| 20 64 6f 75 67 20 52 65 | 6c 65 61 73 65 20 24 22 | doug Re|lease $"|
|00000ef0| 3b 0a 58 0a 58 2f 2a 0a | 58 20 2a 20 63 6f 6d 70 |;.X.X/*.|X * comp|
|00000f00| 72 65 73 73 2e 63 20 2d | 20 46 69 6c 65 20 63 6f |ress.c -| File co|
|00000f10| 6d 70 72 65 73 73 69 6f | 6e 20 61 6c 61 20 49 45 |mpressio|n ala IE|
|00000f20| 45 45 20 43 6f 6d 70 75 | 74 65 72 2c 20 4a 75 6e |EE Compu|ter, Jun|
|00000f30| 65 20 31 39 38 34 2e 0a | 58 20 2a 0a 58 20 2a 20 |e 1984..|X *.X * |
|00000f40| 41 75 74 68 6f 72 73 3a | 09 53 70 65 6e 63 65 72 |Authors:|.Spencer|
|00000f50| 20 57 2e 20 54 68 6f 6d | 61 73 09 28 64 65 63 76 | W. Thom|as.(decv|
|00000f60| 61 78 21 68 61 72 70 6f | 21 75 74 61 68 2d 63 73 |ax!harpo|!utah-cs|
|00000f70| 21 75 74 61 68 2d 67 72 | 21 74 68 6f 6d 61 73 29 |!utah-gr|!thomas)|
|00000f80| 0a 58 20 2a 09 09 4a 69 | 6d 20 4d 63 4b 69 65 09 |.X *..Ji|m McKie.|
|00000f90| 09 28 64 65 63 76 61 78 | 21 6d 63 76 61 78 21 6a |.(decvax|!mcvax!j|
|00000fa0| 69 6d 29 0a 58 20 2a 09 | 09 53 74 65 76 65 20 44 |im).X *.|.Steve D|
|00000fb0| 61 76 69 65 73 09 09 28 | 64 65 63 76 61 78 21 76 |avies..(|decvax!v|
|00000fc0| 61 78 31 33 35 21 70 65 | 74 73 64 21 70 65 6f 72 |ax135!pe|tsd!peor|
|00000fd0| 61 21 73 72 64 29 0a 58 | 20 2a 09 09 4b 65 6e 20 |a!srd).X| *..Ken |
|00000fe0| 54 75 72 6b 6f 77 73 6b | 69 09 09 28 64 65 63 76 |Turkowsk|i..(decv|
|00000ff0| 61 78 21 64 65 63 77 72 | 6c 21 74 75 72 74 6c 65 |ax!decwr|l!turtle|
|00001000| 76 61 78 21 6b 65 6e 29 | 0a 58 20 2a 09 09 4a 61 |vax!ken)|.X *..Ja|
|00001010| 6d 65 73 20 41 2e 20 57 | 6f 6f 64 73 09 09 28 64 |mes A. W|oods..(d|
|00001020| 65 63 76 61 78 21 69 68 | 6e 70 34 21 61 6d 65 73 |ecvax!ih|np4!ames|
|00001030| 21 6a 61 77 29 0a 58 20 | 2a 09 09 4a 6f 65 20 4f |!jaw).X |*..Joe O|
|00001040| 72 6f 73 74 09 09 28 64 | 65 63 76 61 78 21 76 61 |rost..(d|ecvax!va|
|00001050| 78 31 33 35 21 70 65 74 | 73 64 21 6a 6f 65 29 0a |x135!pet|sd!joe).|
|00001060| 58 20 2a 09 09 44 6f 75 | 67 20 47 72 61 68 61 6d |X *..Dou|g Graham|
|00001070| 09 09 28 75 75 6e 65 74 | 21 6d 69 74 65 6c 21 73 |..(uunet|!mitel!s|
|00001080| 63 65 21 74 73 6d 69 74 | 68 21 67 72 61 68 61 6d |ce!tsmit|h!graham|
|00001090| 29 0a 58 20 2a 0a 58 20 | 2a 20 52 65 76 69 73 69 |).X *.X |* Revisi|
|000010a0| 6f 6e 20 34 2e 31 20 28 | 44 4f 53 29 20 38 39 2f |on 4.1 (|DOS) 89/|
|000010b0| 31 31 2f 31 30 20 30 32 | 3a 34 33 3a 30 30 20 64 |11/10 02|:43:00 d|
|000010c0| 6f 75 67 0a 58 20 2a 20 | 50 6f 72 74 65 64 20 74 |oug.X * |Ported t|
|000010d0| 6f 20 4d 53 44 4f 53 2e | 20 53 74 69 6c 6c 20 77 |o MSDOS.| Still w|
|000010e0| 6f 72 6b 73 20 65 6c 73 | 65 77 68 65 72 65 2c 20 |orks els|ewhere, |
|000010f0| 62 75 74 20 6d 61 79 62 | 65 20 6e 6f 74 20 61 73 |but mayb|e not as|
|00001100| 20 71 75 69 63 6b 6c 79 | 2e 0a 58 20 2a 20 52 65 | quickly|..X * Re|
|00001110| 6d 6f 76 65 64 20 61 73 | 20 6d 75 63 68 20 6c 6f |moved as| much lo|
|00001120| 6e 67 20 61 72 69 74 68 | 6d 65 74 69 63 20 61 73 |ng arith|metic as|
|00001130| 20 70 6f 73 73 69 62 6c | 65 20 66 6f 72 20 73 70 | possibl|e for sp|
|00001140| 65 65 64 20 6f 6e 20 31 | 36 20 62 69 74 20 6d 61 |eed on 1|6 bit ma|
|00001150| 63 68 69 6e 65 73 2e 0a | 58 20 2a 20 55 73 65 20 |chines..|X * Use |
|00001160| 75 6e 73 69 67 6e 65 64 | 20 73 68 6f 72 74 27 73 |unsigned| short's|
|00001170| 20 69 6e 73 74 65 61 64 | 2e 20 43 68 61 6e 67 65 | instead|. Change|
|00001180| 64 20 73 65 63 6f 6e 64 | 61 72 79 20 68 61 73 68 |d second|ary hash|
|00001190| 69 6e 67 20 66 75 6e 63 | 74 69 6f 6e 20 74 6f 20 |ing func|tion to |
|000011a0| 6c 69 6d 69 74 0a 58 20 | 2a 20 68 61 73 68 20 74 |limit.X |* hash t|
|000011b0| 61 62 6c 65 20 73 69 7a | 65 20 74 6f 20 36 34 4b |able siz|e to 64K|
|000011c0| 2e 20 54 68 69 73 20 6d | 65 61 6e 73 20 74 61 62 |. This m|eans tab|
|000011d0| 6c 65 20 69 6e 64 65 78 | 65 73 20 63 61 6e 20 62 |le index|es can b|
|000011e0| 65 20 31 36 20 62 69 74 | 20 73 68 6f 72 74 73 2e |e 16 bit| shorts.|
|000011f0| 0a 58 20 2a 20 54 68 69 | 73 20 63 6f 6d 70 72 65 |.X * Thi|s compre|
|00001200| 73 73 20 77 69 6c 6c 20 | 6e 6f 74 20 67 65 6e 65 |ss will |not gene|
|00001210| 72 61 74 65 20 63 6f 64 | 65 73 20 66 72 6f 6d 20 |rate cod|es from |
|00001220| 4d 41 58 4d 41 58 43 4f | 44 45 20 28 30 78 66 30 |MAXMAXCO|DE (0xf0|
|00001230| 30 30 29 20 74 68 72 75 | 0a 58 20 2a 20 30 78 66 |00) thru|.X * 0xf|
|00001240| 66 66 66 2e 20 44 6f 65 | 73 6e 27 74 20 61 70 70 |fff. Doe|sn't app|
|00001250| 65 61 72 20 74 6f 20 68 | 75 72 74 20 63 6f 6d 70 |ear to h|urt comp|
|00001260| 72 65 73 73 69 6f 6e 20 | 6d 75 63 68 2e 20 52 65 |ression |much. Re|
|00001270| 6d 6f 76 65 64 20 73 70 | 65 65 64 20 68 61 63 6b |moved sp|eed hack|
|00001280| 73 20 66 6f 72 0a 58 20 | 2a 20 6f 74 68 65 72 20 |s for.X |* other |
|00001290| 6d 61 63 68 69 6e 65 73 | 20 73 6f 20 49 20 63 6f |machines| so I co|
|000012a0| 75 6c 64 20 75 6e 64 65 | 72 73 74 61 6e 64 20 74 |uld unde|rstand t|
|000012b0| 68 65 20 63 6f 64 65 2e | 20 41 64 64 65 64 20 73 |he code.| Added s|
|000012c0| 6f 6d 65 20 66 6f 72 20 | 74 68 65 20 69 38 30 38 |ome for |the i808|
|000012d0| 38 2e 0a 58 20 2a 20 53 | 65 6e 64 20 43 4c 45 41 |8..X * S|end CLEA|
|000012e0| 52 20 69 6d 6d 65 64 69 | 61 74 65 6c 79 20 77 68 |R immedi|ately wh|
|000012f0| 65 6e 20 68 61 73 68 20 | 74 61 62 6c 65 20 66 69 |en hash |table fi|
|00001300| 6c 6c 73 20 69 6e 73 74 | 65 61 64 20 6f 66 20 77 |lls inst|ead of w|
|00001310| 61 69 74 69 6e 67 20 66 | 6f 72 20 74 68 65 0a 58 |aiting f|or the.X|
|00001320| 20 2a 20 63 6f 6d 70 72 | 65 73 73 69 6f 6e 20 72 | * compr|ession r|
|00001330| 61 74 69 6f 20 74 6f 20 | 64 72 6f 70 2e 20 54 68 |atio to |drop. Th|
|00001340| 69 73 20 69 73 20 66 61 | 73 74 65 72 2c 20 61 6e |is is fa|ster, an|
|00001350| 64 20 69 6e 20 73 6f 6d | 65 20 63 61 73 65 73 20 |d in som|e cases |
|00001360| 69 6d 70 72 6f 76 65 73 | 0a 58 20 2a 20 63 6f 6d |improves|.X * com|
|00001370| 70 72 65 73 73 69 6f 6e | 20 28 62 75 74 20 6d 6f |pression| (but mo|
|00001380| 72 65 20 6f 66 74 65 6e | 20 72 65 64 75 63 65 73 |re often| reduces|
|00001390| 20 69 74 20 73 6c 69 67 | 68 74 6c 79 29 2e 20 4a | it slig|htly). J|
|000013a0| 75 6e 6b 65 64 20 74 68 | 65 20 76 61 72 69 61 62 |unked th|e variab|
|000013b0| 6c 65 0a 58 20 2a 20 73 | 69 7a 65 20 68 61 73 68 |le.X * s|ize hash|
|000013c0| 20 74 61 62 6c 65 20 73 | 74 75 66 66 20 62 65 63 | table s|tuff bec|
|000013d0| 61 75 73 65 20 49 20 61 | 6d 20 64 65 70 65 6e 64 |ause I a|m depend|
|000013e0| 69 6e 67 20 6f 6e 20 31 | 36 20 62 69 74 20 75 6e |ing on 1|6 bit un|
|000013f0| 73 69 67 6e 65 64 20 69 | 6e 74 65 67 65 72 0a 58 |signed i|nteger.X|
|00001400| 20 2a 20 77 72 61 70 20 | 61 72 6f 75 6e 64 20 66 | * wrap |around f|
|00001410| 6f 72 20 69 6e 64 65 78 | 69 6e 67 20 69 6e 74 6f |or index|ing into|
|00001420| 20 68 61 73 68 20 74 61 | 62 6c 65 2c 20 73 6f 20 | hash ta|ble, so |
|00001430| 74 68 65 20 74 61 62 6c | 65 20 6d 75 73 74 20 68 |the tabl|e must h|
|00001440| 61 76 65 20 32 5e 31 36 | 0a 58 20 2a 20 65 6e 74 |ave 2^16|.X * ent|
|00001450| 72 69 65 73 2e 20 54 6f | 6f 6b 20 6f 75 74 20 74 |ries. To|ok out t|
|00001460| 68 65 20 58 45 4e 49 58 | 5f 31 36 20 73 74 75 66 |he XENIX|_16 stuf|
|00001470| 66 2e 20 54 68 65 20 44 | 4f 53 20 77 61 79 20 6f |f. The D|OS way o|
|00001480| 75 67 68 74 20 74 6f 20 | 77 6f 72 6b 20 6f 6e 20 |ught to |work on |
|00001490| 58 65 6e 69 78 0a 58 20 | 2a 20 61 73 20 77 65 6c |Xenix.X |* as wel|
|000014a0| 6c 2c 20 61 6e 64 20 73 | 68 6f 75 6c 64 20 62 65 |l, and s|hould be|
|000014b0| 20 66 61 73 74 65 72 2c | 20 62 75 74 20 49 20 64 | faster,| but I d|
|000014c0| 6f 6e 27 74 20 68 61 76 | 65 20 61 63 63 65 73 73 |on't hav|e access|
|000014d0| 20 74 6f 20 58 65 6e 69 | 78 20 69 6e 20 6f 72 64 | to Xeni|x in ord|
|000014e0| 65 72 0a 58 20 2a 20 74 | 6f 20 66 69 6e 64 20 6f |er.X * t|o find o|
|000014f0| 75 74 2e 20 41 64 64 65 | 64 20 73 6f 6d 65 20 65 |ut. Adde|d some e|
|00001500| 78 74 72 61 20 65 72 72 | 6f 72 20 63 68 65 63 6b |xtra err|or check|
|00001510| 69 6e 67 20 6f 6e 20 64 | 65 63 6f 6d 70 72 65 73 |ing on d|ecompres|
|00001520| 73 69 6f 6e 20 74 6f 20 | 74 72 79 20 74 6f 0a 58 |sion to |try to.X|
|00001530| 20 2a 20 61 76 6f 69 64 | 20 62 6c 6f 77 69 6e 67 | * avoid| blowing|
|00001540| 20 74 68 65 20 6d 61 63 | 68 69 6e 65 20 6f 75 74 | the mac|hine out|
|00001550| 20 6f 66 20 74 68 65 20 | 77 61 74 65 72 20 77 68 | of the |water wh|
|00001560| 65 6e 20 64 65 63 6f 6d | 70 72 65 73 73 69 6e 67 |en decom|pressing|
|00001570| 20 61 20 63 6f 72 72 75 | 70 74 0a 58 20 2a 20 66 | a corru|pt.X * f|
|00001580| 69 6c 65 2e 20 41 64 64 | 20 22 6f 6b 75 6e 6c 69 |ile. Add| "okunli|
|00001590| 6e 6b 22 20 74 6f 20 61 | 76 6f 69 64 20 74 68 65 |nk" to a|void the|
|000015a0| 20 70 72 6f 62 6c 65 6d | 20 6f 66 20 6c 6f 73 69 | problem| of losi|
|000015b0| 6e 67 20 74 68 65 20 6f | 75 74 70 75 74 20 66 69 |ng the o|utput fi|
|000015c0| 6c 65 20 61 73 0a 58 20 | 2a 20 77 65 6c 6c 20 61 |le as.X |* well a|
|000015d0| 73 20 74 68 65 20 69 6e | 70 75 74 20 66 69 6c 65 |s the in|put file|
|000015e0| 20 69 66 20 5e 43 20 69 | 73 20 68 69 74 20 61 74 | if ^C i|s hit at|
|000015f0| 20 74 68 65 20 77 72 6f | 6e 67 20 74 69 6d 65 2e | the wro|ng time.|
|00001600| 20 4c 6f 74 27 73 20 6f | 66 20 6f 74 68 65 72 0a | Lot's o|f other.|
|00001610| 58 20 2a 20 63 6f 73 6d | 65 74 69 63 20 63 68 61 |X * cosm|etic cha|
|00001620| 6e 67 65 73 2e 0a 58 20 | 2a 0a 58 20 2a 20 52 65 |nges..X |*.X * Re|
|00001630| 76 69 73 69 6f 6e 20 34 | 2e 30 20 20 38 35 2f 30 |vision 4|.0 85/0|
|00001640| 37 2f 33 30 20 20 31 32 | 3a 35 30 3a 30 30 20 20 |7/30 12|:50:00 |
|00001650| 6a 6f 65 0a 58 20 2a 20 | 52 65 6d 6f 76 65 64 20 |joe.X * |Removed |
|00001660| 66 65 72 72 6f 72 28 29 | 20 63 61 6c 6c 73 20 69 |ferror()| calls i|
|00001670| 6e 20 6f 75 74 70 75 74 | 20 72 6f 75 74 69 6e 65 |n output| routine|
|00001680| 20 6f 6e 20 65 76 65 72 | 79 20 6f 75 74 70 75 74 | on ever|y output|
|00001690| 20 65 78 63 65 70 74 20 | 66 69 72 73 74 2e 0a 58 | except |first..X|
|000016a0| 20 2a 20 50 72 65 70 61 | 72 65 64 20 66 6f 72 20 | * Prepa|red for |
|000016b0| 72 65 6c 65 61 73 65 20 | 74 6f 20 74 68 65 20 77 |release |to the w|
|000016c0| 6f 72 6c 64 2e 0a 58 20 | 2a 20 0a 58 20 2a 20 52 |orld..X |* .X * R|
|000016d0| 65 76 69 73 69 6f 6e 20 | 33 2e 36 20 20 38 35 2f |evision |3.6 85/|
|000016e0| 30 37 2f 30 34 20 20 30 | 31 3a 32 32 3a 32 31 20 |07/04 0|1:22:21 |
|000016f0| 20 6a 6f 65 0a 58 20 2a | 20 52 65 6d 6f 76 65 20 | joe.X *| Remove |
|00001700| 6d 75 63 68 20 77 61 73 | 74 65 64 20 73 74 6f 72 |much was|ted stor|
|00001710| 61 67 65 20 62 79 20 6f | 76 65 72 6c 61 79 69 6e |age by o|verlayin|
|00001720| 67 20 68 61 73 68 20 74 | 61 62 6c 65 20 77 69 74 |g hash t|able wit|
|00001730| 68 20 74 68 65 20 74 61 | 62 6c 65 73 0a 58 20 2a |h the ta|bles.X *|
|00001740| 20 75 73 65 64 20 62 79 | 20 64 65 63 6f 6d 70 72 | used by| decompr|
|00001750| 65 73 73 3a 20 74 61 62 | 5f 73 75 66 66 69 78 5b |ess: tab|_suffix[|
|00001760| 31 3c 3c 42 49 54 53 5d | 2c 20 73 74 61 63 6b 5b |1<<BITS]|, stack[|
|00001770| 38 30 30 30 5d 2e 20 20 | 55 70 64 61 74 65 64 20 |8000]. |Updated |
|00001780| 55 53 45 52 4d 45 4d 0a | 58 20 2a 20 63 6f 6d 70 |USERMEM.|X * comp|
|00001790| 75 74 61 74 69 6f 6e 73 | 2e 20 20 46 69 78 65 64 |utations|. Fixed|
|000017a0| 20 64 75 6d 70 5f 74 61 | 62 28 29 20 44 45 42 55 | dump_ta|b() DEBU|
|000017b0| 47 20 72 6f 75 74 69 6e | 65 2e 0a 58 20 2a 0a 58 |G routin|e..X *.X|
|000017c0| 20 2a 20 52 65 76 69 73 | 69 6f 6e 20 33 2e 35 20 | * Revis|ion 3.5 |
|000017d0| 20 38 35 2f 30 36 2f 33 | 30 20 20 32 30 3a 34 37 | 85/06/3|0 20:47|
|000017e0| 3a 32 31 20 20 6a 61 77 | 0a 58 20 2a 20 43 68 61 |:21 jaw|.X * Cha|
|000017f0| 6e 67 65 20 68 61 73 68 | 20 66 75 6e 63 74 69 6f |nge hash| functio|
|00001800| 6e 20 74 6f 20 75 73 65 | 20 65 78 63 6c 75 73 69 |n to use| exclusi|
|00001810| 76 65 2d 6f 72 2e 20 20 | 52 69 70 20 6f 75 74 20 |ve-or. |Rip out |
|00001820| 68 61 73 68 20 63 61 63 | 68 65 2e 20 20 54 68 65 |hash cac|he. The|
|00001830| 73 65 0a 58 20 2a 20 73 | 70 65 65 64 75 70 73 20 |se.X * s|peedups |
|00001840| 72 65 6e 64 65 72 20 74 | 68 65 20 6d 65 67 61 6d |render t|he megam|
|00001850| 65 6d 6f 72 79 20 76 65 | 72 73 69 6f 6e 20 64 65 |emory ve|rsion de|
|00001860| 66 75 6e 63 74 2c 20 66 | 6f 72 20 6e 6f 77 2e 20 |funct, f|or now. |
|00001870| 20 4d 61 6b 65 20 64 65 | 63 6f 64 65 72 0a 58 20 | Make de|coder.X |
|00001880| 2a 20 73 74 61 63 6b 20 | 67 6c 6f 62 61 6c 2e 20 |* stack |global. |
|00001890| 20 50 61 72 74 73 20 6f | 66 20 74 68 65 20 52 43 | Parts o|f the RC|
|000018a0| 53 20 74 72 75 6e 6b 73 | 20 32 2e 37 2c 20 32 2e |S trunks| 2.7, 2.|
|000018b0| 36 2c 20 61 6e 64 20 32 | 2e 31 20 6e 6f 20 6c 6f |6, and 2|.1 no lo|
|000018c0| 6e 67 65 72 20 61 70 70 | 6c 79 2e 0a 58 20 2a 0a |nger app|ly..X *.|
|000018d0| 58 20 2a 20 52 65 76 69 | 73 69 6f 6e 20 33 2e 34 |X * Revi|sion 3.4|
|000018e0| 20 20 38 35 2f 30 36 2f | 32 37 20 20 31 32 3a 30 | 85/06/|27 12:0|
|000018f0| 30 3a 30 30 20 20 6b 65 | 6e 0a 58 20 2a 20 47 65 |0:00 ke|n.X * Ge|
|00001900| 74 20 72 69 64 20 6f 66 | 20 61 6c 6c 20 66 6c 6f |t rid of| all flo|
|00001910| 61 74 69 6e 67 2d 70 6f | 69 6e 74 20 63 61 6c 63 |ating-po|int calc|
|00001920| 75 6c 61 74 69 6f 6e 73 | 20 62 79 20 64 6f 69 6e |ulations| by doin|
|00001930| 67 20 61 6c 6c 20 63 6f | 6d 70 72 65 73 73 69 6f |g all co|mpressio|
|00001940| 6e 20 72 61 74 69 6f 0a | 58 20 2a 20 63 61 6c 63 |n ratio.|X * calc|
|00001950| 75 6c 61 74 69 6f 6e 73 | 20 69 6e 20 66 69 78 65 |ulations| in fixe|
|00001960| 64 20 70 6f 69 6e 74 2e | 0a 58 20 2a 0a 58 20 2a |d point.|.X *.X *|
|00001970| 20 52 65 76 69 73 69 6f | 6e 20 33 2e 33 20 20 38 | Revisio|n 3.3 8|
|00001980| 35 2f 30 36 2f 32 34 20 | 20 32 31 3a 35 33 3a 32 |5/06/24 | 21:53:2|
|00001990| 34 20 20 6a 6f 65 0a 58 | 20 2a 20 49 6e 63 6f 72 |4 joe.X| * Incor|
|000019a0| 70 6f 72 61 74 65 20 70 | 6f 72 74 61 62 69 6c 69 |porate p|ortabili|
|000019b0| 74 79 20 73 75 67 67 65 | 73 74 69 6f 6e 20 66 6f |ty sugge|stion fo|
|000019c0| 72 20 4d 5f 58 45 4e 49 | 58 2e 20 20 47 6f 74 20 |r M_XENI|X. Got |
|000019d0| 72 69 64 20 6f 66 20 74 | 65 78 74 20 6f 6e 20 23 |rid of t|ext on #|
|000019e0| 65 6c 73 65 0a 58 20 2a | 20 61 6e 64 20 23 65 6e |else.X *| and #en|
|000019f0| 64 69 66 20 6c 69 6e 65 | 73 2e 20 20 43 6c 65 61 |dif line|s. Clea|
|00001a00| 6e 65 64 20 75 70 20 23 | 69 66 64 65 66 73 20 66 |ned up #|ifdefs f|
|00001a10| 6f 72 20 76 61 78 20 61 | 6e 64 20 69 6e 74 65 72 |or vax a|nd inter|
|00001a20| 64 61 74 61 2e 0a 58 20 | 2a 0a 58 20 2a 20 52 65 |data..X |*.X * Re|
|00001a30| 76 69 73 69 6f 6e 20 33 | 2e 32 20 20 38 35 2f 30 |vision 3|.2 85/0|
|00001a40| 36 2f 30 36 20 20 32 31 | 3a 35 33 3a 32 34 20 20 |6/06 21|:53:24 |
|00001a50| 6a 61 77 0a 58 20 2a 20 | 49 6e 63 6f 72 70 6f 72 |jaw.X * |Incorpor|
|00001a60| 61 74 65 20 70 6f 72 74 | 61 62 69 6c 69 74 79 20 |ate port|ability |
|00001a70| 73 75 67 67 65 73 74 69 | 6f 6e 73 20 66 6f 72 20 |suggesti|ons for |
|00001a80| 5a 38 30 30 30 2c 20 49 | 42 4d 20 50 43 2f 58 54 |Z8000, I|BM PC/XT|
|00001a90| 20 66 72 6f 6d 20 6d 61 | 69 6c 69 6e 67 20 6c 69 | from ma|iling li|
|00001aa0| 73 74 2e 0a 58 20 2a 20 | 44 65 66 61 75 6c 74 20 |st..X * |Default |
|00001ab0| 74 6f 20 22 71 75 69 65 | 74 22 20 6f 75 74 70 75 |to "quie|t" outpu|
|00001ac0| 74 20 28 6e 6f 20 63 6f | 6d 70 72 65 73 73 69 6f |t (no co|mpressio|
|00001ad0| 6e 20 73 74 61 74 69 73 | 74 69 63 73 29 2e 0a 58 |n statis|tics)..X|
|00001ae0| 20 2a 0a 58 20 2a 20 52 | 65 76 69 73 69 6f 6e 20 | *.X * R|evision |
|00001af0| 33 2e 31 20 20 38 35 2f | 30 35 2f 31 32 20 20 31 |3.1 85/|05/12 1|
|00001b00| 38 3a 35 36 3a 31 33 20 | 20 6a 61 77 0a 58 20 2a |8:56:13 | jaw.X *|
|00001b10| 20 49 6e 74 65 67 72 61 | 74 65 20 64 65 63 6f 6d | Integra|te decom|
|00001b20| 70 72 65 73 73 28 29 20 | 73 74 61 63 6b 20 73 70 |press() |stack sp|
|00001b30| 65 65 64 75 70 73 20 28 | 66 72 6f 6d 20 65 61 72 |eedups (|from ear|
|00001b40| 6c 79 20 70 6f 69 6e 74 | 65 72 20 6d 6f 64 73 20 |ly point|er mods |
|00001b50| 62 79 20 4d 63 4b 69 65 | 29 2e 0a 58 20 2a 20 52 |by McKie|)..X * R|
|00001b60| 65 70 61 69 72 20 6d 75 | 6c 74 69 2d 66 69 6c 65 |epair mu|lti-file|
|00001b70| 20 55 53 45 52 4d 45 4d | 20 67 61 66 66 65 2e 20 | USERMEM| gaffe. |
|00001b80| 20 55 6e 69 66 79 20 27 | 66 6f 72 63 65 27 20 66 | Unify '|force' f|
|00001b90| 6c 61 67 73 20 74 6f 20 | 6d 69 6d 69 63 20 73 65 |lags to |mimic se|
|00001ba0| 6d 61 6e 74 69 63 73 0a | 58 20 2a 20 6f 66 20 53 |mantics.|X * of S|
|00001bb0| 56 52 32 20 27 70 61 63 | 6b 27 2e 20 20 53 74 72 |VR2 'pac|k'. Str|
|00001bc0| 65 61 6d 6c 69 6e 65 20 | 62 6c 6f 63 6b 2d 63 6f |eamline |block-co|
|00001bd0| 6d 70 72 65 73 73 20 74 | 61 62 6c 65 20 63 6c 65 |mpress t|able cle|
|00001be0| 61 72 20 6c 6f 67 69 63 | 2e 20 20 49 6e 63 72 65 |ar logic|. Incre|
|00001bf0| 61 73 65 20 0a 58 20 2a | 20 6f 75 74 70 75 74 20 |ase .X *| output |
|00001c00| 62 79 74 65 20 63 6f 75 | 6e 74 20 62 79 20 6d 61 |byte cou|nt by ma|
|00001c10| 67 69 63 20 6e 75 6d 62 | 65 72 20 73 69 7a 65 2e |gic numb|er size.|
|00001c20| 0a 58 20 2a 20 0a 58 20 | 2a 20 52 65 76 69 73 69 |.X * .X |* Revisi|
|00001c30| 6f 6e 20 33 2e 30 20 20 | 20 38 34 2f 31 31 2f 32 |on 3.0 | 84/11/2|
|00001c40| 37 20 20 31 31 3a 35 30 | 3a 30 30 20 20 70 65 74 |7 11:50|:00 pet|
|00001c50| 73 64 21 6a 6f 65 0a 58 | 20 2a 20 53 65 74 20 48 |sd!joe.X| * Set H|
|00001c60| 53 49 5a 45 20 64 65 70 | 65 6e 64 69 6e 67 20 6f |SIZE dep|ending o|
|00001c70| 6e 20 42 49 54 53 2e 20 | 20 53 65 74 20 42 49 54 |n BITS. | Set BIT|
|00001c80| 53 20 64 65 70 65 6e 64 | 69 6e 67 20 6f 6e 20 55 |S depend|ing on U|
|00001c90| 53 45 52 4d 45 4d 2e 20 | 20 55 6e 72 6f 6c 6c 65 |SERMEM. | Unrolle|
|00001ca0| 64 0a 58 20 2a 20 6c 6f | 6f 70 73 20 69 6e 20 63 |d.X * lo|ops in c|
|00001cb0| 6c 65 61 72 20 72 6f 75 | 74 69 6e 65 73 2e 20 20 |lear rou|tines. |
|00001cc0| 41 64 64 65 64 20 22 2d | 43 22 20 66 6c 61 67 20 |Added "-|C" flag |
|00001cd0| 66 6f 72 20 32 2e 30 20 | 63 6f 6d 70 61 74 69 62 |for 2.0 |compatib|
|00001ce0| 69 6c 69 74 79 2e 20 20 | 55 73 65 64 0a 58 20 2a |ility. |Used.X *|
|00001cf0| 20 75 6e 73 69 67 6e 65 | 64 20 63 6f 6d 70 61 72 | unsigne|d compar|
|00001d00| 65 73 20 6f 6e 20 50 65 | 72 6b 69 6e 2d 45 6c 6d |es on Pe|rkin-Elm|
|00001d10| 65 72 2e 20 20 46 69 78 | 65 64 20 66 6f 72 65 67 |er. Fix|ed foreg|
|00001d20| 72 6f 75 6e 64 20 63 68 | 65 63 6b 2e 0a 58 20 2a |round ch|eck..X *|
|00001d30| 0a 58 20 2a 20 52 65 76 | 69 73 69 6f 6e 20 32 2e |.X * Rev|ision 2.|
|00001d40| 37 20 20 20 38 34 2f 31 | 31 2f 31 36 20 20 31 39 |7 84/1|1/16 19|
|00001d50| 3a 33 35 3a 33 39 20 20 | 61 6d 65 73 21 6a 61 77 |:35:39 |ames!jaw|
|00001d60| 0a 58 20 2a 20 43 61 63 | 68 65 20 63 6f 6d 6d 6f |.X * Cac|he commo|
|00001d70| 6e 20 68 61 73 68 20 63 | 6f 64 65 73 20 62 61 73 |n hash c|odes bas|
|00001d80| 65 64 20 6f 6e 20 69 6e | 70 75 74 20 73 74 61 74 |ed on in|put stat|
|00001d90| 69 73 74 69 63 73 3b 20 | 74 68 69 73 20 69 6d 70 |istics; |this imp|
|00001da0| 72 6f 76 65 73 0a 58 20 | 2a 20 70 65 72 66 6f 72 |roves.X |* perfor|
|00001db0| 6d 61 6e 63 65 20 66 6f | 72 20 6c 6f 77 2d 64 65 |mance fo|r low-de|
|00001dc0| 6e 73 69 74 79 20 72 61 | 73 74 65 72 20 69 6d 61 |nsity ra|ster ima|
|00001dd0| 67 65 73 2e 20 20 50 61 | 73 73 20 6f 6e 20 23 69 |ges. Pa|ss on #i|
|00001de0| 66 64 65 66 20 62 75 6e | 64 6c 65 0a 58 20 2a 20 |fdef bun|dle.X * |
|00001df0| 66 72 6f 6d 20 54 75 72 | 6b 6f 77 73 6b 69 2e 0a |from Tur|kowski..|
|00001e00| 58 20 2a 0a 58 20 2a 20 | 52 65 76 69 73 69 6f 6e |X *.X * |Revision|
|00001e10| 20 32 2e 36 20 20 20 38 | 34 2f 31 31 2f 30 35 20 | 2.6 8|4/11/05 |
|00001e20| 20 31 39 3a 31 38 3a 32 | 31 20 20 61 6d 65 73 21 | 19:18:2|1 ames!|
|00001e30| 6a 61 77 0a 58 20 2a 20 | 56 61 72 79 20 73 69 7a |jaw.X * |Vary siz|
|00001e40| 65 20 6f 66 20 68 61 73 | 68 20 74 61 62 6c 65 73 |e of has|h tables|
|00001e50| 20 74 6f 20 72 65 64 75 | 63 65 20 74 69 6d 65 20 | to redu|ce time |
|00001e60| 66 6f 72 20 73 6d 61 6c | 6c 20 66 69 6c 65 73 2e |for smal|l files.|
|00001e70| 0a 58 20 2a 20 54 75 6e | 65 20 50 44 50 2d 31 31 |.X * Tun|e PDP-11|
|00001e80| 20 68 61 73 68 20 66 75 | 6e 63 74 69 6f 6e 2e 0a | hash fu|nction..|
|00001e90| 58 20 2a 0a 58 20 2a 20 | 52 65 76 69 73 69 6f 6e |X *.X * |Revision|
|00001ea0| 20 32 2e 35 20 20 20 38 | 34 2f 31 30 2f 33 30 20 | 2.5 8|4/10/30 |
|00001eb0| 20 32 30 3a 31 35 3a 31 | 34 20 20 61 6d 65 73 21 | 20:15:1|4 ames!|
|00001ec0| 6a 61 77 0a 58 20 2a 20 | 4a 75 6e 6b 20 63 68 61 |jaw.X * |Junk cha|
|00001ed0| 69 6e 69 6e 67 3b 20 72 | 65 70 6c 61 63 65 20 77 |ining; r|eplace w|
|00001ee0| 69 74 68 20 74 68 65 20 | 73 69 6d 70 6c 65 72 20 |ith the |simpler |
|00001ef0| 28 61 6e 64 2c 20 6f 6e | 20 74 68 65 20 56 41 58 |(and, on| the VAX|
|00001f00| 2c 20 66 61 73 74 65 72 | 29 0a 58 20 2a 20 64 6f |, faster|).X * do|
|00001f10| 75 62 6c 65 20 68 61 73 | 68 69 6e 67 2c 20 64 69 |uble has|hing, di|
|00001f20| 73 63 75 73 73 65 64 20 | 77 69 74 68 69 6e 2e 20 |scussed |within. |
|00001f30| 20 4d 61 6b 65 20 62 6c | 6f 63 6b 20 63 6f 6d 70 | Make bl|ock comp|
|00001f40| 72 65 73 73 69 6f 6e 20 | 73 74 61 6e 64 61 72 64 |ression |standard|
|00001f50| 2e 0a 58 20 2a 0a 58 20 | 2a 20 52 65 76 69 73 69 |..X *.X |* Revisi|
|00001f60| 6f 6e 20 32 2e 34 20 20 | 20 38 34 2f 31 30 2f 31 |on 2.4 | 84/10/1|
|00001f70| 36 20 20 31 31 3a 31 31 | 3a 31 31 20 20 61 6d 65 |6 11:11|:11 ame|
|00001f80| 73 21 6a 61 77 0a 58 20 | 2a 20 49 6e 74 72 6f 64 |s!jaw.X |* Introd|
|00001f90| 75 63 65 20 61 64 61 70 | 74 69 76 65 20 72 65 73 |uce adap|tive res|
|00001fa0| 65 74 20 66 6f 72 20 62 | 6c 6f 63 6b 20 63 6f 6d |et for b|lock com|
|00001fb0| 70 72 65 73 73 69 6f 6e | 2c 20 74 6f 20 62 6f 6f |pression|, to boo|
|00001fc0| 73 74 20 74 68 65 20 72 | 61 74 65 0a 58 20 2a 20 |st the r|ate.X * |
|00001fd0| 61 6e 6f 74 68 65 72 20 | 73 65 76 65 72 61 6c 20 |another |several |
|00001fe0| 70 65 72 63 65 6e 74 2e | 20 20 28 53 65 65 20 6d |percent.| (See m|
|00001ff0| 61 69 6c 69 6e 67 20 6c | 69 73 74 20 6e 6f 74 65 |ailing l|ist note|
|00002000| 73 2e 29 0a 58 20 2a 0a | 58 20 2a 20 52 65 76 69 |s.).X *.|X * Revi|
|00002010| 73 69 6f 6e 20 32 2e 33 | 20 20 20 38 34 2f 30 39 |sion 2.3| 84/09|
|00002020| 2f 32 32 20 20 32 32 3a | 30 30 3a 30 30 20 20 70 |/22 22:|00:00 p|
|00002030| 65 74 73 64 21 6a 6f 65 | 0a 58 20 2a 20 49 6d 70 |etsd!joe|.X * Imp|
|00002040| 6c 65 6d 65 6e 74 65 64 | 20 22 2d 42 22 20 62 6c |lemented| "-B" bl|
|00002050| 6f 63 6b 20 63 6f 6d 70 | 72 65 73 73 2e 20 20 49 |ock comp|ress. I|
|00002060| 6d 70 6c 65 6d 65 6e 74 | 65 64 20 52 45 56 45 52 |mplement|ed REVER|
|00002070| 53 45 20 73 6f 72 74 69 | 6e 67 20 6f 66 20 74 61 |SE sorti|ng of ta|
|00002080| 62 5f 6e 65 78 74 2e 0a | 58 20 2a 20 42 75 67 20 |b_next..|X * Bug |
|00002090| 66 69 78 20 66 6f 72 20 | 6c 61 73 74 20 62 69 74 |fix for |last bit|
|000020a0| 73 2e 20 20 43 68 61 6e | 67 65 64 20 66 77 72 69 |s. Chan|ged fwri|
|000020b0| 74 65 20 74 6f 20 70 75 | 74 63 68 61 72 20 6c 6f |te to pu|tchar lo|
|000020c0| 6f 70 20 65 76 65 72 79 | 77 68 65 72 65 2e 0a 58 |op every|where..X|
|000020d0| 20 2a 0a 58 20 2a 20 52 | 65 76 69 73 69 6f 6e 20 | *.X * R|evision |
|000020e0| 32 2e 32 20 20 20 38 34 | 2f 30 39 2f 31 38 20 20 |2.2 84|/09/18 |
|000020f0| 31 34 3a 31 32 3a 32 31 | 20 20 61 6d 65 73 21 6a |14:12:21| ames!j|
|00002100| 61 77 0a 58 20 2a 20 46 | 6f 6c 64 20 69 6e 20 6e |aw.X * F|old in n|
|00002110| 65 77 73 20 63 68 61 6e | 67 65 73 2c 20 73 6d 61 |ews chan|ges, sma|
|00002120| 6c 6c 20 6d 61 63 68 69 | 6e 65 20 74 79 70 65 64 |ll machi|ne typed|
|00002130| 65 66 20 66 72 6f 6d 20 | 74 68 6f 6d 61 73 2c 0a |ef from |thomas,.|
|00002140| 58 20 2a 20 23 69 66 64 | 65 66 20 69 6e 74 65 72 |X * #ifd|ef inter|
|00002150| 64 61 74 61 20 66 72 6f | 6d 20 6a 6f 65 2e 0a 58 |data fro|m joe..X|
|00002160| 20 2a 0a 58 20 2a 20 52 | 65 76 69 73 69 6f 6e 20 | *.X * R|evision |
|00002170| 32 2e 31 20 20 20 38 34 | 2f 30 39 2f 31 30 20 20 |2.1 84|/09/10 |
|00002180| 31 32 3a 33 34 3a 35 36 | 20 20 61 6d 65 73 21 6a |12:34:56| ames!j|
|00002190| 61 77 0a 58 20 2a 20 43 | 6f 6e 66 69 67 75 72 65 |aw.X * C|onfigure|
|000021a0| 64 20 66 61 73 74 20 74 | 61 62 6c 65 20 6c 6f 6f |d fast t|able loo|
|000021b0| 6b 75 70 20 66 6f 72 20 | 33 32 2d 62 69 74 20 6d |kup for |32-bit m|
|000021c0| 61 63 68 69 6e 65 73 2e | 0a 58 20 2a 20 54 68 69 |achines.|.X * Thi|
|000021d0| 73 20 63 75 74 73 20 75 | 73 65 72 20 74 69 6d 65 |s cuts u|ser time|
|000021e0| 20 69 6e 20 68 61 6c 66 | 20 66 6f 72 20 62 20 3c | in half| for b <|
|000021f0| 3d 20 46 42 49 54 53 2c | 20 61 6e 64 20 69 73 20 |= FBITS,| and is |
|00002200| 75 73 65 66 75 6c 20 66 | 6f 72 20 6e 65 77 73 20 |useful f|or news |
|00002210| 62 61 74 63 68 69 6e 67 | 0a 58 20 2a 20 66 72 6f |batching|.X * fro|
|00002220| 6d 20 56 41 58 20 74 6f | 20 50 44 50 20 73 69 74 |m VAX to| PDP sit|
|00002230| 65 73 2e 20 20 41 6c 73 | 6f 20 73 70 65 64 20 75 |es. Als|o sped u|
|00002240| 70 20 64 65 63 6f 6d 70 | 72 65 73 73 28 29 20 5b |p decomp|ress() [|
|00002250| 66 77 72 69 74 65 2d 3e | 70 75 74 63 5d 20 61 6e |fwrite->|putc] an|
|00002260| 64 0a 58 20 2a 20 61 64 | 64 65 64 20 73 69 67 6e |d.X * ad|ded sign|
|00002270| 61 6c 20 63 61 74 63 68 | 65 72 20 5b 70 6c 75 73 |al catch|er [plus|
|00002280| 20 62 65 65 66 20 69 6e | 20 77 72 69 74 65 65 72 | beef in| writeer|
|00002290| 72 28 29 5d 20 74 6f 20 | 64 65 6c 65 74 65 20 65 |r()] to |delete e|
|000022a0| 66 66 6c 75 76 69 61 2e | 0a 58 20 2a 0a 58 20 2a |ffluvia.|.X *.X *|
|000022b0| 20 52 65 76 69 73 69 6f | 6e 20 32 2e 30 20 20 20 | Revisio|n 2.0 |
|000022c0| 38 34 2f 30 38 2f 32 38 | 20 20 32 32 3a 30 30 3a |84/08/28| 22:00:|
|000022d0| 30 30 20 20 70 65 74 73 | 64 21 6a 6f 65 0a 58 20 |00 pets|d!joe.X |
|000022e0| 2a 20 41 64 64 20 63 68 | 65 63 6b 20 66 6f 72 20 |* Add ch|eck for |
|000022f0| 66 6f 72 65 67 72 6f 75 | 6e 64 20 62 65 66 6f 72 |foregrou|nd befor|
|00002300| 65 20 70 72 6f 6d 70 74 | 69 6e 67 20 75 73 65 72 |e prompt|ing user|
|00002310| 2e 20 20 49 6e 73 65 72 | 74 20 6d 61 78 62 69 74 |. Inser|t maxbit|
|00002320| 73 20 69 6e 74 6f 0a 58 | 20 2a 20 63 6f 6d 70 72 |s into.X| * compr|
|00002330| 65 73 73 65 64 20 66 69 | 6c 65 2e 20 20 46 6f 72 |essed fi|le. For|
|00002340| 63 65 20 66 69 6c 65 20 | 62 65 69 6e 67 20 75 6e |ce file |being un|
|00002350| 63 6f 6d 70 72 65 73 73 | 65 64 20 74 6f 20 65 6e |compress|ed to en|
|00002360| 64 20 77 69 74 68 20 22 | 2e 5a 22 2e 0a 58 20 2a |d with "|.Z"..X *|
|00002370| 20 41 64 64 65 64 20 22 | 2d 63 22 20 66 6c 61 67 | Added "|-c" flag|
|00002380| 20 61 6e 64 20 22 7a 63 | 61 74 22 2e 20 20 50 72 | and "zc|at". Pr|
|00002390| 65 70 61 72 65 64 20 66 | 6f 72 20 72 65 6c 65 61 |epared f|or relea|
|000023a0| 73 65 2e 0a 58 20 2a 0a | 58 20 2a 20 52 65 76 69 |se..X *.|X * Revi|
|000023b0| 73 69 6f 6e 20 31 2e 31 | 30 20 20 38 34 2f 30 38 |sion 1.1|0 84/08|
|000023c0| 2f 32 34 20 20 31 38 3a | 32 38 3a 30 30 20 20 74 |/24 18:|28:00 t|
|000023d0| 75 72 74 6c 65 76 61 78 | 21 6b 65 6e 0a 58 20 2a |urtlevax|!ken.X *|
|000023e0| 20 57 69 6c 6c 20 6f 6e | 6c 79 20 63 6f 6d 70 72 | Will on|ly compr|
|000023f0| 65 73 73 20 72 65 67 75 | 6c 61 72 20 66 69 6c 65 |ess regu|lar file|
|00002400| 73 20 28 6e 6f 20 64 69 | 72 65 63 74 6f 72 69 65 |s (no di|rectorie|
|00002410| 73 29 2c 20 61 64 64 65 | 64 20 61 20 6d 61 67 69 |s), adde|d a magi|
|00002420| 63 20 6e 75 6d 62 65 72 | 0a 58 20 2a 20 68 65 61 |c number|.X * hea|
|00002430| 64 65 72 20 28 70 6c 75 | 73 20 61 6e 20 75 6e 64 |der (plu|s an und|
|00002440| 6f 63 75 6d 65 6e 74 65 | 64 20 2d 6e 20 66 6c 61 |ocumente|d -n fla|
|00002450| 67 20 74 6f 20 68 61 6e | 64 6c 65 20 6f 6c 64 20 |g to han|dle old |
|00002460| 66 69 6c 65 73 20 77 69 | 74 68 6f 75 74 20 68 65 |files wi|thout he|
|00002470| 61 64 65 72 73 29 2c 0a | 58 20 2a 20 61 64 64 65 |aders),.|X * adde|
|00002480| 64 20 2d 66 20 66 6c 61 | 67 20 74 6f 20 66 6f 72 |d -f fla|g to for|
|00002490| 63 65 20 6f 76 65 72 77 | 72 69 74 69 6e 67 20 6f |ce overw|riting o|
|000024a0| 66 20 70 6f 73 73 69 62 | 6c 79 20 65 78 69 73 74 |f possib|ly exist|
|000024b0| 69 6e 67 20 64 65 73 74 | 69 6e 61 74 69 6f 6e 20 |ing dest|ination |
|000024c0| 66 69 6c 65 2c 0a 58 20 | 2a 20 6f 74 68 65 72 77 |file,.X |* otherw|
|000024d0| 69 73 65 20 74 68 65 20 | 75 73 65 72 20 69 73 20 |ise the |user is |
|000024e0| 70 72 6f 6d 70 74 65 64 | 20 66 6f 72 20 61 20 72 |prompted| for a r|
|000024f0| 65 73 70 6f 6e 73 65 2e | 20 20 57 69 6c 6c 20 74 |esponse.| Will t|
|00002500| 61 63 6b 20 6f 6e 20 61 | 20 2e 5a 20 74 6f 20 61 |ack on a| .Z to a|
|00002510| 0a 58 20 2a 20 66 69 6c | 65 6e 61 6d 65 20 69 66 |.X * fil|ename if|
|00002520| 20 69 74 20 64 6f 65 73 | 6e 27 74 20 68 61 76 65 | it does|n't have|
|00002530| 20 6f 6e 65 20 77 68 65 | 6e 20 64 65 63 6f 6d 70 | one whe|n decomp|
|00002540| 72 65 73 73 69 6e 67 2e | 20 20 57 69 6c 6c 20 6f |ressing.| Will o|
|00002550| 6e 6c 79 20 72 65 70 6c | 61 63 65 0a 58 20 2a 20 |nly repl|ace.X * |
|00002560| 66 69 6c 65 20 69 66 20 | 69 74 20 77 61 73 20 63 |file if |it was c|
|00002570| 6f 6d 70 72 65 73 73 65 | 64 2e 0a 58 20 2a 0a 58 |ompresse|d..X *.X|
|00002580| 20 2a 20 52 65 76 69 73 | 69 6f 6e 20 31 2e 39 20 | * Revis|ion 1.9 |
|00002590| 20 38 34 2f 30 38 2f 31 | 36 20 20 31 37 3a 32 38 | 84/08/1|6 17:28|
|000025a0| 3a 30 30 20 20 74 75 72 | 74 6c 65 76 61 78 21 6b |:00 tur|tlevax!k|
|000025b0| 65 6e 0a 58 20 2a 20 52 | 65 6d 6f 76 65 64 20 73 |en.X * R|emoved s|
|000025c0| 63 61 6e 61 72 67 73 28 | 29 2c 20 67 65 74 6f 70 |canargs(|), getop|
|000025d0| 74 28 29 2c 20 61 64 64 | 65 64 20 2e 5a 20 65 78 |t(), add|ed .Z ex|
|000025e0| 74 65 6e 73 69 6f 6e 20 | 61 6e 64 20 75 6e 6c 69 |tension |and unli|
|000025f0| 6d 69 74 65 64 20 6e 75 | 6d 62 65 72 20 6f 66 0a |mited nu|mber of.|
|00002600| 58 20 2a 20 66 69 6c 65 | 6e 61 6d 65 73 20 74 6f |X * file|names to|
|00002610| 20 63 6f 6d 70 72 65 73 | 73 2e 20 20 46 6c 61 67 | compres|s. Flag|
|00002620| 73 20 6d 61 79 20 62 65 | 20 63 6c 75 73 74 65 72 |s may be| cluster|
|00002630| 65 64 20 28 2d 44 64 76 | 62 31 32 29 20 6f 72 20 |ed (-Ddv|b12) or |
|00002640| 73 65 70 61 72 61 74 65 | 64 0a 58 20 2a 20 28 2d |separate|d.X * (-|
|00002650| 44 20 2d 64 20 2d 76 20 | 2d 62 20 31 32 29 2c 20 |D -d -v |-b 12), |
|00002660| 6f 72 20 63 6f 6d 62 69 | 6e 61 74 69 6f 6e 20 74 |or combi|nation t|
|00002670| 68 65 72 65 6f 66 2e 20 | 20 4d 6f 64 65 73 20 61 |hereof. | Modes a|
|00002680| 6e 64 20 6f 74 68 65 72 | 20 73 74 61 74 75 73 20 |nd other| status |
|00002690| 69 73 0a 58 20 2a 20 63 | 6f 70 69 65 64 20 77 69 |is.X * c|opied wi|
|000026a0| 74 68 20 63 6f 70 79 73 | 74 61 74 28 29 2e 20 20 |th copys|tat(). |
|000026b0| 2d 4f 20 62 75 67 20 66 | 6f 72 20 34 2e 32 20 73 |-O bug f|or 4.2 s|
|000026c0| 65 65 6d 73 20 74 6f 20 | 68 61 76 65 20 64 69 73 |eems to |have dis|
|000026d0| 61 70 70 65 61 72 65 64 | 20 77 69 74 68 0a 58 20 |appeared| with.X |
|000026e0| 2a 20 31 2e 38 2e 0a 58 | 20 2a 0a 58 20 2a 20 52 |* 1.8..X| *.X * R|
|000026f0| 65 76 69 73 69 6f 6e 20 | 31 2e 38 20 20 38 34 2f |evision |1.8 84/|
|00002700| 30 38 2f 30 39 20 20 32 | 33 3a 31 35 3a 30 30 20 |08/09 2|3:15:00 |
|00002710| 20 6a 6f 65 0a 58 20 2a | 20 4d 61 64 65 20 69 74 | joe.X *| Made it|
|00002720| 20 63 6f 6d 70 61 74 69 | 62 6c 65 20 77 69 74 68 | compati|ble with|
|00002730| 20 76 61 78 20 76 65 72 | 73 69 6f 6e 2c 20 69 6e | vax ver|sion, in|
|00002740| 73 74 61 6c 6c 65 64 20 | 6a 69 6d 27 73 20 66 69 |stalled |jim's fi|
|00002750| 78 65 73 2f 65 6e 68 61 | 6e 63 65 6d 65 6e 74 73 |xes/enha|ncements|
|00002760| 0a 58 20 2a 0a 58 20 2a | 20 52 65 76 69 73 69 6f |.X *.X *| Revisio|
|00002770| 6e 20 31 2e 36 20 20 38 | 34 2f 30 38 2f 30 31 20 |n 1.6 8|4/08/01 |
|00002780| 20 32 32 3a 30 38 3a 30 | 30 20 20 6a 6f 65 0a 58 | 22:08:0|0 joe.X|
|00002790| 20 2a 20 53 70 65 64 20 | 75 70 20 61 6c 67 6f 72 | * Sped |up algor|
|000027a0| 69 74 68 6d 20 73 69 67 | 6e 69 66 69 63 61 6e 74 |ithm sig|nificant|
|000027b0| 6c 79 20 62 79 20 73 6f | 72 74 69 6e 67 20 74 68 |ly by so|rting th|
|000027c0| 65 20 63 6f 6d 70 72 65 | 73 73 20 63 68 61 69 6e |e compre|ss chain|
|000027d0| 2e 0a 58 20 2a 0a 58 20 | 2a 20 52 65 76 69 73 69 |..X *.X |* Revisi|
|000027e0| 6f 6e 20 31 2e 35 20 20 | 38 34 2f 30 37 2f 31 33 |on 1.5 |84/07/13|
|000027f0| 20 20 31 33 3a 31 31 3a | 30 30 20 20 73 72 64 0a | 13:11:|00 srd.|
|00002800| 58 20 2a 20 41 64 64 65 | 64 20 43 20 76 65 72 73 |X * Adde|d C vers|
|00002810| 69 6f 6e 20 6f 66 20 76 | 61 78 20 61 73 6d 20 72 |ion of v|ax asm r|
|00002820| 6f 75 74 69 6e 65 73 2e | 20 20 43 68 61 6e 67 65 |outines.| Change|
|00002830| 64 20 73 74 72 75 63 74 | 75 72 65 20 74 6f 20 61 |d struct|ure to a|
|00002840| 72 72 61 79 73 20 74 6f | 0a 58 20 2a 20 73 61 76 |rrays to|.X * sav|
|00002850| 65 20 6d 75 63 68 20 6d | 65 6d 6f 72 79 2e 20 20 |e much m|emory. |
|00002860| 44 6f 20 75 6e 73 69 67 | 6e 65 64 20 63 6f 6d 70 |Do unsig|ned comp|
|00002870| 61 72 65 73 20 77 68 65 | 72 65 20 70 6f 73 73 69 |ares whe|re possi|
|00002880| 62 6c 65 20 28 66 61 73 | 74 65 72 20 6f 6e 0a 58 |ble (fas|ter on.X|
|00002890| 20 2a 20 50 65 72 6b 69 | 6e 2d 45 6c 6d 65 72 29 | * Perki|n-Elmer)|
|000028a0| 0a 58 20 2a 0a 58 20 2a | 20 52 65 76 69 73 69 6f |.X *.X *| Revisio|
|000028b0| 6e 20 31 2e 34 20 20 38 | 34 2f 30 37 2f 30 35 20 |n 1.4 8|4/07/05 |
|000028c0| 20 30 33 3a 31 31 3a 31 | 31 20 20 74 68 6f 6d 61 | 03:11:1|1 thoma|
|000028d0| 73 0a 58 20 2a 20 43 6c | 65 61 6e 20 75 70 20 74 |s.X * Cl|ean up t|
|000028e0| 68 65 20 63 6f 64 65 20 | 61 20 6c 69 74 74 6c 65 |he code |a little|
|000028f0| 20 61 6e 64 20 6c 69 6e | 74 20 69 74 2e 20 20 28 | and lin|t it. (|
|00002900| 4c 69 6e 74 20 63 6f 6d | 70 6c 61 69 6e 73 20 61 |Lint com|plains a|
|00002910| 62 6f 75 74 20 61 6c 6c | 0a 58 20 2a 20 74 68 65 |bout all|.X * the|
|00002920| 20 72 65 67 73 20 75 73 | 65 64 20 69 6e 20 74 68 | regs us|ed in th|
|00002930| 65 20 61 73 6d 2c 20 62 | 75 74 20 49 27 6d 20 6e |e asm, b|ut I'm n|
|00002940| 6f 74 20 67 6f 69 6e 67 | 20 74 6f 20 22 66 69 78 |ot going| to "fix|
|00002950| 22 20 74 68 69 73 2e 29 | 0a 58 20 2a 0a 58 20 2a |" this.)|.X *.X *|
|00002960| 20 52 65 76 69 73 69 6f | 6e 20 31 2e 33 20 20 38 | Revisio|n 1.3 8|
|00002970| 34 2f 30 37 2f 30 35 20 | 20 30 32 3a 30 36 3a 35 |4/07/05 | 02:06:5|
|00002980| 34 20 20 74 68 6f 6d 61 | 73 0a 58 20 2a 20 4d 69 |4 thoma|s.X * Mi|
|00002990| 6e 6f 72 20 66 69 78 65 | 73 2e 0a 58 20 2a 0a 58 |nor fixe|s..X *.X|
|000029a0| 20 2a 20 52 65 76 69 73 | 69 6f 6e 20 31 2e 32 20 | * Revis|ion 1.2 |
|000029b0| 20 38 34 2f 30 37 2f 30 | 35 20 20 30 30 3a 32 37 | 84/07/0|5 00:27|
|000029c0| 3a 32 37 20 20 74 68 6f | 6d 61 73 0a 58 20 2a 20 |:27 tho|mas.X * |
|000029d0| 41 64 64 20 76 61 72 69 | 61 62 6c 65 20 62 69 74 |Add vari|able bit|
|000029e0| 20 6c 65 6e 67 74 68 20 | 6f 75 74 70 75 74 2e 0a | length |output..|
|000029f0| 58 20 2a 0a 58 20 2a 2f | 0a 58 0a 58 23 69 6e 63 |X *.X */|.X.X#inc|
|00002a00| 6c 75 64 65 20 3c 73 74 | 64 69 6f 2e 68 3e 0a 58 |lude <st|dio.h>.X|
|00002a10| 23 69 6e 63 6c 75 64 65 | 20 3c 63 74 79 70 65 2e |#include| <ctype.|
|00002a20| 68 3e 0a 58 23 69 6e 63 | 6c 75 64 65 20 3c 73 69 |h>.X#inc|lude <si|
|00002a30| 67 6e 61 6c 2e 68 3e 0a | 58 23 69 6e 63 6c 75 64 |gnal.h>.|X#includ|
|00002a40| 65 20 3c 73 79 73 2f 74 | 79 70 65 73 2e 68 3e 0a |e <sys/t|ypes.h>.|
|00002a50| 58 23 69 6e 63 6c 75 64 | 65 20 3c 73 79 73 2f 73 |X#includ|e <sys/s|
|00002a60| 74 61 74 2e 68 3e 0a 58 | 23 69 66 6e 64 65 66 20 |tat.h>.X|#ifndef |
|00002a70| 5f 5f 5a 54 43 5f 5f 0a | 58 23 69 6e 63 6c 75 64 |__ZTC__.|X#includ|
|00002a80| 65 20 3c 6d 61 6c 6c 6f | 63 2e 68 3e 0a 58 23 65 |e <mallo|c.h>.X#e|
|00002a90| 6e 64 69 66 0a 58 23 69 | 66 6e 64 65 66 20 42 53 |ndif.X#i|fndef BS|
|00002aa0| 44 34 5f 32 0a 58 23 69 | 6e 63 6c 75 64 65 20 3c |D4_2.X#i|nclude <|
|00002ab0| 73 74 64 6c 69 62 2e 68 | 3e 0a 58 23 69 6e 63 6c |stdlib.h|>.X#incl|
|00002ac0| 75 64 65 20 3c 69 6f 2e | 68 3e 0a 58 23 65 6e 64 |ude <io.|h>.X#end|
|00002ad0| 69 66 0a 58 23 69 6e 63 | 6c 75 64 65 20 3c 73 74 |if.X#inc|lude <st|
|00002ae0| 72 69 6e 67 2e 68 3e 0a | 58 23 69 6e 63 6c 75 64 |ring.h>.|X#includ|
|00002af0| 65 20 3c 66 63 6e 74 6c | 2e 68 3e 0a 58 23 69 66 |e <fcntl|.h>.X#if|
|00002b00| 64 65 66 20 4d 53 44 4f | 53 0a 58 23 69 6e 63 6c |def MSDO|S.X#incl|
|00002b10| 75 64 65 20 3c 64 6f 73 | 2e 68 3e 0a 58 23 65 6e |ude <dos|.h>.X#en|
|00002b20| 64 69 66 0a 58 0a 58 23 | 69 66 64 65 66 20 50 52 |dif.X.X#|ifdef PR|
|00002b30| 4f 54 4f 0a 58 2f 2a 0a | 58 20 2a 20 5a 6f 72 74 |OTO.X/*.|X * Zort|
|00002b40| 65 63 68 20 61 70 70 65 | 61 72 73 20 74 6f 20 62 |ech appe|ars to b|
|00002b50| 65 20 6d 69 73 73 69 6e | 67 20 74 68 69 73 20 70 |e missin|g this p|
|00002b60| 72 6f 74 6f 74 79 70 65 | 2c 20 61 6e 64 20 4d 53 |rototype|, and MS|
|00002b70| 43 20 75 73 65 73 20 73 | 6f 6d 65 0a 58 20 2a 20 |C uses s|ome.X * |
|00002b80| 73 69 6c 6c 79 20 73 74 | 72 75 63 74 75 72 65 20 |silly st|ructure |
|00002b90| 61 73 20 74 68 65 20 73 | 65 63 6f 6e 64 20 61 72 |as the s|econd ar|
|00002ba0| 67 2e 20 54 75 72 62 6f | 20 43 20 64 6f 65 73 6e |g. Turbo| C doesn|
|00002bb0| 27 74 20 73 75 70 70 6f | 72 74 20 74 68 69 73 0a |'t suppo|rt this.|
|00002bc0| 58 20 2a 20 63 61 6c 6c | 20 61 74 20 61 6c 6c 2e |X * call| at all.|
|00002bd0| 0a 58 20 2a 2f 0a 58 65 | 78 74 65 72 6e 20 69 6e |.X */.Xe|xtern in|
|00002be0| 74 20 75 74 69 6d 65 28 | 63 68 61 72 20 2a 70 61 |t utime(|char *pa|
|00002bf0| 74 68 2c 20 74 69 6d 65 | 5f 74 20 74 69 6d 65 73 |th, time|_t times|
|00002c00| 5b 5d 29 3b 0a 58 23 65 | 6e 64 69 66 0a 58 0a 58 |[]);.X#e|ndif.X.X|
|00002c10| 23 64 65 66 69 6e 65 20 | 42 49 54 53 09 09 31 36 |#define |BITS..16|
|00002c20| 09 09 2f 2a 20 6d 61 78 | 20 6e 75 6d 62 65 72 20 |../* max| number |
|00002c30| 6f 66 20 62 69 74 73 2f | 63 6f 64 65 20 2a 2f 0a |of bits/|code */.|
|00002c40| 58 23 64 65 66 69 6e 65 | 20 49 4e 49 54 5f 42 49 |X#define| INIT_BI|
|00002c50| 54 53 09 39 09 09 2f 2a | 20 69 6e 69 74 69 61 6c |TS.9../*| initial|
|00002c60| 20 6e 75 6d 62 65 72 20 | 6f 66 20 62 69 74 73 2f | number |of bits/|
|00002c70| 63 6f 64 65 20 2a 2f 0a | 58 0a 58 23 64 65 66 69 |code */.|X.X#defi|
|00002c80| 6e 65 20 4d 41 58 43 4f | 44 45 28 6e 5f 62 69 74 |ne MAXCO|DE(n_bit|
|00002c90| 73 29 09 09 28 28 63 6f | 64 65 5f 74 29 28 28 31 |s)..((co|de_t)((1|
|00002ca0| 4c 20 3c 3c 20 28 6e 5f | 62 69 74 73 29 29 20 2d |L << (n_|bits)) -|
|00002cb0| 20 31 29 29 0a 58 0a 58 | 2f 2a 0a 58 20 2a 20 4d | 1)).X.X|/*.X * M|
|00002cc0| 61 67 69 63 20 6e 75 6d | 62 65 72 73 20 77 68 69 |agic num|bers whi|
|00002cd0| 63 68 20 73 68 6f 75 6c | 64 20 61 70 70 65 61 72 |ch shoul|d appear|
|00002ce0| 20 61 74 20 74 68 65 20 | 62 65 67 69 6e 6e 69 6e | at the |beginnin|
|00002cf0| 67 20 6f 66 20 61 20 63 | 6f 6d 70 72 65 73 73 65 |g of a c|ompresse|
|00002d00| 64 20 66 69 6c 65 2e 0a | 58 20 2a 2f 0a 58 23 64 |d file..|X */.X#d|
|00002d10| 65 66 69 6e 65 20 4d 41 | 47 49 43 30 09 30 78 31 |efine MA|GIC0.0x1|
|00002d20| 66 0a 58 23 64 65 66 69 | 6e 65 20 4d 41 47 49 43 |f.X#defi|ne MAGIC|
|00002d30| 31 09 30 78 39 64 0a 58 | 0a 58 2f 2a 0a 58 20 2a |1.0x9d.X|.X/*.X *|
|00002d40| 20 44 65 66 69 6e 65 73 | 20 66 6f 72 20 74 68 69 | Defines| for thi|
|00002d50| 72 64 20 62 79 74 65 20 | 6f 66 20 68 65 61 64 65 |rd byte |of heade|
|00002d60| 72 0a 58 20 2a 2f 0a 58 | 23 64 65 66 69 6e 65 20 |r.X */.X|#define |
|00002d70| 42 49 54 5f 4d 41 53 4b | 09 30 78 31 66 0a 58 23 |BIT_MASK|.0x1f.X#|
|00002d80| 64 65 66 69 6e 65 20 42 | 4c 4f 43 4b 5f 4d 41 53 |define B|LOCK_MAS|
|00002d90| 4b 09 30 78 38 30 0a 58 | 0a 58 23 69 66 20 30 0a |K.0x80.X|.X#if 0.|
|00002da0| 58 23 64 65 66 69 6e 65 | 20 43 48 45 43 4b 5f 47 |X#define| CHECK_G|
|00002db0| 41 50 09 31 30 30 30 30 | 09 09 2f 2a 20 72 61 74 |AP.10000|../* rat|
|00002dc0| 69 6f 20 63 68 65 63 6b | 20 69 6e 74 65 72 76 61 |io check| interva|
|00002dd0| 6c 20 2a 2f 0a 58 23 65 | 6e 64 69 66 0a 58 0a 58 |l */.X#e|ndif.X.X|
|00002de0| 2f 2a 0a 58 20 2a 20 74 | 68 65 20 6e 65 78 74 20 |/*.X * t|he next |
|00002df0| 74 77 6f 20 63 6f 64 65 | 73 20 73 68 6f 75 6c 64 |two code|s should|
|00002e00| 20 6e 6f 74 20 62 65 20 | 63 68 61 6e 67 65 64 20 | not be |changed |
|00002e10| 6c 69 67 68 74 6c 79 2c | 20 61 73 20 74 68 65 79 |lightly,| as they|
|00002e20| 20 6d 75 73 74 20 6e 6f | 74 0a 58 20 2a 20 6c 69 | must no|t.X * li|
|00002e30| 65 20 77 69 74 68 69 6e | 20 74 68 65 20 63 6f 6e |e within| the con|
|00002e40| 74 69 67 75 6f 75 73 20 | 67 65 6e 65 72 61 6c 20 |tiguous |general |
|00002e50| 63 6f 64 65 20 73 70 61 | 63 65 2e 0a 58 20 2a 2f |code spa|ce..X */|
|00002e60| 20 0a 58 23 64 65 66 69 | 6e 65 20 46 49 52 53 54 | .X#defi|ne FIRST|
|00002e70| 09 32 35 37 09 09 2f 2a | 20 66 69 72 73 74 20 66 |.257../*| first f|
|00002e80| 72 65 65 20 65 6e 74 72 | 79 20 2a 2f 0a 58 23 64 |ree entr|y */.X#d|
|00002e90| 65 66 69 6e 65 09 43 4c | 45 41 52 09 32 35 36 09 |efine.CL|EAR.256.|
|00002ea0| 09 2f 2a 20 74 61 62 6c | 65 20 63 6c 65 61 72 20 |./* tabl|e clear |
|00002eb0| 6f 75 74 70 75 74 20 63 | 6f 64 65 20 2a 2f 0a 58 |output c|ode */.X|
|00002ec0| 0a 58 23 64 65 66 69 6e | 65 20 44 45 5f 53 54 41 |.X#defin|e DE_STA|
|00002ed0| 43 4b 4c 45 4e 09 38 31 | 39 32 09 2f 2a 20 53 69 |CKLEN.81|92./* Si|
|00002ee0| 7a 65 20 6f 66 20 64 65 | 63 6f 64 65 72 20 73 74 |ze of de|coder st|
|00002ef0| 61 63 6b 20 2a 2f 0a 58 | 0a 58 23 64 65 66 69 6e |ack */.X|.X#defin|
|00002f00| 65 20 48 53 49 5a 45 09 | 28 31 4c 20 3c 3c 20 31 |e HSIZE.|(1L << 1|
|00002f10| 36 29 09 2f 2a 20 53 69 | 7a 65 20 6f 66 20 74 68 |6)./* Si|ze of th|
|00002f20| 65 20 68 61 73 68 20 74 | 61 62 6c 65 2e 20 44 6f |e hash t|able. Do|
|00002f30| 6e 27 74 20 63 68 61 6e | 67 65 20 74 68 69 73 20 |n't chan|ge this |
|00002f40| 2a 2f 0a 58 0a 58 74 79 | 70 65 64 65 66 20 75 6e |*/.X.Xty|pedef un|
|00002f50| 73 69 67 6e 65 64 20 63 | 68 61 72 09 75 63 68 61 |signed c|har.ucha|
|00002f60| 72 3b 0a 58 74 79 70 65 | 64 65 66 20 75 6e 73 69 |r;.Xtype|def unsi|
|00002f70| 67 6e 65 64 20 6c 6f 6e | 67 09 75 6c 6f 6e 67 3b |gned lon|g.ulong;|
|00002f80| 0a 58 74 79 70 65 64 65 | 66 20 75 6e 73 69 67 6e |.Xtypede|f unsign|
|00002f90| 65 64 20 73 68 6f 72 74 | 09 63 6f 64 65 5f 74 3b |ed short|.code_t;|
|00002fa0| 0a 58 74 79 70 65 64 65 | 66 09 75 6e 73 69 67 6e |.Xtypede|f.unsign|
|00002fb0| 65 64 20 73 68 6f 72 74 | 09 68 61 73 68 5f 74 3b |ed short|.hash_t;|
|00002fc0| 0a 58 0a 58 23 69 66 64 | 65 66 20 50 52 4f 54 4f |.X.X#ifd|ef PROTO|
|00002fd0| 0a 58 23 64 65 66 69 6e | 65 20 41 52 47 53 28 78 |.X#defin|e ARGS(x|
|00002fe0| 29 09 78 0a 58 23 65 6c | 73 65 0a 58 23 64 65 66 |).x.X#el|se.X#def|
|00002ff0| 69 6e 65 20 41 52 47 53 | 28 78 29 09 28 29 0a 58 |ine ARGS|(x).().X|
|00003000| 23 65 6e 64 69 66 0a 58 | 0a 58 76 6f 69 64 09 09 |#endif.X|.Xvoid..|
|00003010| 6d 61 69 6e 20 41 52 47 | 53 28 28 69 6e 74 20 61 |main ARG|S((int a|
|00003020| 72 67 63 2c 20 63 68 61 | 72 20 2a 2a 61 72 67 76 |rgc, cha|r **argv|
|00003030| 29 29 3b 0a 58 76 6f 69 | 64 09 09 55 73 61 67 65 |));.Xvoi|d..Usage|
|00003040| 20 41 52 47 53 28 28 76 | 6f 69 64 29 29 3b 0a 58 | ARGS((v|oid));.X|
|00003050| 76 6f 69 64 09 09 76 65 | 72 73 69 6f 6e 20 41 52 |void..ve|rsion AR|
|00003060| 47 53 28 28 76 6f 69 64 | 29 29 3b 0a 58 76 6f 69 |GS((void|));.Xvoi|
|00003070| 64 09 09 63 6f 6d 70 72 | 65 73 73 20 41 52 47 53 |d..compr|ess ARGS|
|00003080| 28 28 76 6f 69 64 29 29 | 3b 0a 58 76 6f 69 64 09 |((void))|;.Xvoid.|
|00003090| 09 64 65 63 6f 6d 70 72 | 65 73 73 20 41 52 47 53 |.decompr|ess ARGS|
|000030a0| 28 28 76 6f 69 64 29 29 | 3b 0a 58 76 6f 69 64 09 |((void))|;.Xvoid.|
|000030b0| 09 63 6f 70 79 73 74 61 | 74 20 41 52 47 53 28 28 |.copysta|t ARGS((|
|000030c0| 76 6f 69 64 29 29 3b 0a | 58 76 6f 69 64 09 09 77 |void));.|Xvoid..w|
|000030d0| 72 69 74 65 65 72 72 20 | 41 52 47 53 28 28 76 6f |riteerr |ARGS((vo|
|000030e0| 69 64 29 29 3b 0a 58 76 | 6f 69 64 09 09 63 6c 5f |id));.Xv|oid..cl_|
|000030f0| 68 61 73 68 20 41 52 47 | 53 28 28 76 6f 69 64 29 |hash ARG|S((void)|
|00003100| 29 3b 0a 58 76 6f 69 64 | 09 09 70 75 74 63 6f 64 |);.Xvoid|..putcod|
|00003110| 65 20 41 52 47 53 28 28 | 63 6f 64 65 5f 74 20 63 |e ARGS((|code_t c|
|00003120| 6f 64 65 29 29 3b 0a 58 | 76 6f 69 64 09 09 70 72 |ode));.X|void..pr|
|00003130| 72 61 74 69 6f 20 41 52 | 47 53 28 28 6c 6f 6e 67 |ratio AR|GS((long|
|00003140| 20 6e 75 6d 2c 20 6c 6f | 6e 67 20 64 65 6e 29 29 | num, lo|ng den))|
|00003150| 3b 0a 58 69 6e 74 09 09 | 6f 66 6f 70 65 6e 20 41 |;.Xint..|ofopen A|
|00003160| 52 47 53 28 28 63 68 61 | 72 20 2a 66 69 6c 65 6e |RGS((cha|r *filen|
|00003170| 61 6d 65 29 29 3b 0a 58 | 69 6e 74 09 09 69 66 6f |ame));.X|int..ifo|
|00003180| 70 65 6e 20 41 52 47 53 | 28 28 63 68 61 72 20 2a |pen ARGS|((char *|
|00003190| 66 69 6c 65 6e 61 6d 65 | 29 29 3b 0a 58 69 6e 74 |filename|));.Xint|
|000031a0| 09 09 63 68 65 63 6b 5f | 6d 61 67 69 63 20 41 52 |..check_|magic AR|
|000031b0| 47 53 28 28 76 6f 69 64 | 29 29 3b 0a 58 69 6e 74 |GS((void|));.Xint|
|000031c0| 09 09 6e 65 65 64 5f 63 | 6c 65 61 72 20 41 52 47 |..need_c|lear ARG|
|000031d0| 53 28 28 76 6f 69 64 29 | 29 3b 0a 58 76 6f 69 64 |S((void)|);.Xvoid|
|000031e0| 09 09 6f 6e 69 6e 74 72 | 20 41 52 47 53 28 28 29 |..onintr| ARGS(()|
|000031f0| 29 3b 0a 58 76 6f 69 64 | 09 09 6f 6f 70 73 20 41 |);.Xvoid|..oops A|
|00003200| 52 47 53 28 28 29 29 3b | 0a 58 69 6e 74 09 09 74 |RGS(());|.Xint..t|
|00003210| 61 62 61 6c 6c 6f 63 20 | 41 52 47 53 28 28 76 6f |aballoc |ARGS((vo|
|00003220| 69 64 29 29 3b 0a 58 76 | 6f 69 64 09 09 63 6c 65 |id));.Xv|oid..cle|
|00003230| 61 72 68 61 73 68 20 41 | 52 47 53 28 28 76 6f 69 |arhash A|RGS((voi|
|00003240| 64 29 29 3b 0a 58 0a 58 | 2f 2a 0a 58 20 2a 20 62 |d));.X.X|/*.X * b|
|00003250| 6c 6f 63 6b 20 63 6f 6d | 70 72 65 73 73 69 6f 6e |lock com|pression|
|00003260| 20 70 61 72 61 6d 65 74 | 65 72 73 20 2d 2d 20 61 | paramet|ers -- a|
|00003270| 66 74 65 72 20 61 6c 6c | 20 63 6f 64 65 73 20 61 |fter all| codes a|
|00003280| 72 65 20 75 73 65 64 20 | 75 70 2c 0a 58 20 2a 20 |re used |up,.X * |
|00003290| 61 6e 64 20 63 6f 6d 70 | 72 65 73 73 69 6f 6e 20 |and comp|ression |
|000032a0| 72 61 74 65 20 63 68 61 | 6e 67 65 73 2c 20 73 74 |rate cha|nges, st|
|000032b0| 61 72 74 20 6f 76 65 72 | 2e 0a 58 20 2a 2f 0a 58 |art over|..X */.X|
|000032c0| 69 6e 74 09 09 62 6c 6f | 63 6b 5f 63 6f 6d 70 72 |int..blo|ck_compr|
|000032d0| 65 73 73 20 3d 20 42 4c | 4f 43 4b 5f 4d 41 53 4b |ess = BL|OCK_MASK|
|000032e0| 3b 0a 58 0a 58 69 6e 74 | 09 09 6d 61 78 62 69 74 |;.X.Xint|..maxbit|
|000032f0| 73 20 3d 20 42 49 54 53 | 3b 09 09 2f 2a 20 75 73 |s = BITS|;../* us|
|00003300| 65 72 20 73 65 74 74 61 | 62 6c 65 20 6d 61 78 20 |er setta|ble max |
|00003310| 23 20 62 69 74 73 2f 63 | 6f 64 65 20 2a 2f 0a 58 |# bits/c|ode */.X|
|00003320| 69 6e 74 09 09 6d 61 67 | 69 63 20 3d 20 31 3b 09 |int..mag|ic = 1;.|
|00003330| 09 2f 2a 20 33 2d 62 79 | 74 65 20 6d 61 67 69 63 |./* 3-by|te magic|
|00003340| 20 6e 75 6d 62 65 72 20 | 68 65 61 64 65 72 20 2a | number |header *|
|00003350| 2f 0a 58 69 6e 74 09 09 | 7a 63 61 74 5f 66 6c 67 |/.Xint..|zcat_flg|
|00003360| 20 3d 20 30 3b 09 09 2f | 2a 20 4f 75 74 70 75 74 | = 0;../|* Output|
|00003370| 20 6f 6e 20 73 74 64 6f | 75 74 20 2a 2f 0a 58 69 | on stdo|ut */.Xi|
|00003380| 6e 74 09 09 76 65 72 62 | 6f 73 65 20 3d 20 30 3b |nt..verb|ose = 0;|
|00003390| 09 09 2f 2a 20 64 6f 6e | 27 74 20 74 65 6c 6c 20 |../* don|'t tell |
|000033a0| 6d 65 20 61 62 6f 75 74 | 20 63 6f 6d 70 72 65 73 |me about| compres|
|000033b0| 73 69 6f 6e 20 2a 2f 0a | 58 69 6e 74 09 09 66 6f |sion */.|Xint..fo|
|000033c0| 72 63 65 20 3d 20 30 3b | 09 09 2f 2a 20 46 6f 72 |rce = 0;|../* For|
|000033d0| 63 65 20 6f 76 65 72 77 | 72 69 74 65 20 6f 66 20 |ce overw|rite of |
|000033e0| 6f 75 74 70 75 74 20 66 | 69 6c 65 20 2a 2f 0a 58 |output f|ile */.X|
|000033f0| 69 6e 74 09 09 64 6f 5f | 64 65 63 6f 6d 70 20 3d |int..do_|decomp =|
|00003400| 20 30 3b 09 09 2f 2a 20 | 44 65 63 6f 6d 70 72 65 | 0;../* |Decompre|
|00003410| 73 73 20 72 61 74 68 65 | 72 20 74 68 61 6e 20 63 |ss rathe|r than c|
|00003420| 6f 6d 70 72 65 73 73 2e | 20 2a 2f 0a 58 63 68 61 |ompress.| */.Xcha|
|00003430| 72 09 09 6f 66 6e 61 6d | 65 5b 31 30 30 5d 3b 09 |r..ofnam|e[100];.|
|00003440| 09 2f 2a 20 4f 75 74 70 | 75 74 20 66 69 6c 65 20 |./* Outp|ut file |
|00003450| 6e 61 6d 65 20 2a 2f 0a | 58 69 6e 74 09 09 66 6f |name */.|Xint..fo|
|00003460| 72 65 67 72 6f 75 6e 64 | 3b 09 09 2f 2a 20 52 75 |reground|;../* Ru|
|00003470| 6e 6e 69 6e 67 20 69 6e | 20 66 6f 72 65 67 72 6f |nning in| foregro|
|00003480| 75 6e 64 3f 20 2a 2f 0a | 58 69 6e 74 09 09 65 78 |und? */.|Xint..ex|
|00003490| 69 74 5f 73 74 61 74 20 | 3d 20 30 3b 09 09 2f 2a |it_stat |= 0;../*|
|000034a0| 20 45 78 69 74 20 73 74 | 61 74 75 73 20 2a 2f 0a | Exit st|atus */.|
|000034b0| 58 75 63 68 61 72 09 09 | 62 69 74 62 75 66 5b 42 |Xuchar..|bitbuf[B|
|000034c0| 49 54 53 2b 32 5d 3b 09 | 09 2f 2a 20 46 6f 72 20 |ITS+2];.|./* For |
|000034d0| 28 64 69 73 29 61 73 73 | 65 6d 62 6c 69 6e 67 20 |(dis)ass|embling |
|000034e0| 63 6f 64 65 20 62 79 74 | 65 73 20 2a 2f 0a 58 69 |code byt|es */.Xi|
|000034f0| 6e 74 09 09 6f 6b 75 6e | 6c 69 6e 6b 3b 09 09 2f |nt..okun|link;../|
|00003500| 2a 20 4f 4b 20 66 6f 72 | 20 73 69 67 20 68 61 6e |* OK for| sig han|
|00003510| 64 6c 65 72 20 74 6f 20 | 75 6e 6c 69 6e 6b 20 6f |dler to |unlink o|
|00003520| 75 74 70 75 74 20 66 69 | 6c 65 20 2a 2f 0a 58 63 |utput fi|le */.Xc|
|00003530| 68 61 72 09 09 2a 69 66 | 6e 61 6d 65 3b 0a 58 0a |har..*if|name;.X.|
|00003540| 58 23 69 66 64 65 66 20 | 69 38 30 38 38 0a 58 0a |X#ifdef |i8088.X.|
|00003550| 58 75 63 68 61 72 09 09 | 2a 64 65 5f 73 74 61 63 |Xuchar..|*de_stac|
|00003560| 6b 3b 0a 58 75 63 68 61 | 72 20 66 61 72 09 2a 63 |k;.Xucha|r far.*c|
|00003570| 68 61 72 70 74 72 31 3b | 0a 58 75 63 68 61 72 20 |harptr1;|.Xuchar |
|00003580| 66 61 72 09 2a 63 6f 64 | 65 70 74 72 73 31 5b 32 |far.*cod|eptrs1[2|
|00003590| 5d 3b 0a 58 75 63 68 61 | 72 20 66 61 72 09 2a 63 |];.Xucha|r far.*c|
|000035a0| 6f 64 65 70 74 72 73 32 | 5b 32 5d 3b 0a 58 0a 58 |odeptrs2|[2];.X.X|
|000035b0| 23 64 65 66 69 6e 65 20 | 64 65 5f 73 75 66 66 69 |#define |de_suffi|
|000035c0| 78 6f 66 28 69 29 09 63 | 68 61 72 70 74 72 31 5b |xof(i).c|harptr1[|
|000035d0| 69 5d 0a 58 23 64 65 66 | 69 6e 65 20 64 65 5f 70 |i].X#def|ine de_p|
|000035e0| 72 65 66 69 78 6f 66 28 | 69 29 09 28 2a 28 63 6f |refixof(|i).(*(co|
|000035f0| 64 65 5f 74 20 66 61 72 | 20 2a 29 26 63 6f 64 65 |de_t far| *)&code|
|00003600| 70 74 72 73 31 5b 69 26 | 31 5d 5b 69 26 7e 31 5d |ptrs1[i&|1][i&~1]|
|00003610| 29 0a 58 0a 58 23 64 65 | 66 69 6e 65 20 65 6e 5f |).X.X#de|fine en_|
|00003620| 68 61 73 68 63 68 61 72 | 28 69 29 09 63 68 61 72 |hashchar|(i).char|
|00003630| 70 74 72 31 5b 69 5d 0a | 58 23 64 65 66 69 6e 65 |ptr1[i].|X#define|
|00003640| 20 65 6e 5f 68 61 73 68 | 65 6e 74 28 69 29 09 28 | en_hash|ent(i).(|
|00003650| 2a 28 63 6f 64 65 5f 74 | 20 66 61 72 20 2a 29 26 |*(code_t| far *)&|
|00003660| 63 6f 64 65 70 74 72 73 | 31 5b 69 26 31 5d 5b 69 |codeptrs|1[i&1][i|
|00003670| 26 7e 31 5d 29 0a 58 23 | 64 65 66 69 6e 65 20 65 |&~1]).X#|define e|
|00003680| 6e 5f 68 61 73 68 63 6f | 64 65 28 69 29 09 28 2a |n_hashco|de(i).(*|
|00003690| 28 63 6f 64 65 5f 74 20 | 66 61 72 20 2a 29 26 63 |(code_t |far *)&c|
|000036a0| 6f 64 65 70 74 72 73 32 | 5b 69 26 31 5d 5b 69 26 |odeptrs2|[i&1][i&|
|000036b0| 7e 31 5d 29 0a 58 0a 58 | 23 69 66 6e 64 65 66 20 |~1]).X.X|#ifndef |
|000036c0| 4d 4b 5f 46 50 0a 58 23 | 64 65 66 69 6e 65 20 4d |MK_FP.X#|define M|
|000036d0| 4b 5f 46 50 28 73 65 67 | 2c 20 6f 66 73 29 20 5c |K_FP(seg|, ofs) \|
|000036e0| 0a 58 09 28 28 76 6f 69 | 64 20 66 61 72 20 2a 29 |.X.((voi|d far *)|
|000036f0| 28 28 28 75 6c 6f 6e 67 | 29 28 73 65 67 29 20 3c |(((ulong|)(seg) <|
|00003700| 3c 20 31 36 29 20 7c 20 | 28 75 6e 73 69 67 6e 65 |< 16) | |(unsigne|
|00003710| 64 29 28 6f 66 73 29 29 | 29 0a 58 23 65 6e 64 69 |d)(ofs))|).X#endi|
|00003720| 66 0a 58 0a 58 23 64 65 | 66 69 6e 65 09 50 41 52 |f.X.X#de|fine.PAR|
|00003730| 41 09 31 36 09 09 2f 2a | 20 53 69 7a 65 20 6f 66 |A.16../*| Size of|
|00003740| 20 61 20 70 61 72 61 67 | 72 61 70 68 20 2a 2f 0a | a parag|raph */.|
|00003750| 58 0a 58 2f 2a 0a 58 20 | 2a 20 52 65 74 75 72 6e |X.X/*.X |* Return|
|00003760| 20 61 20 73 65 67 6d 65 | 6e 74 20 61 64 64 72 65 | a segme|nt addre|
|00003770| 73 73 20 77 68 69 63 68 | 20 69 73 20 74 68 65 20 |ss which| is the |
|00003780| 73 65 67 6d 65 6e 74 20 | 70 61 72 74 20 6f 66 20 |segment |part of |
|00003790| 74 68 65 20 6e 6f 72 6d | 61 6c 69 7a 65 64 0a 58 |the norm|alized.X|
|000037a0| 20 2a 20 76 65 72 73 69 | 6f 6e 20 6f 66 20 22 66 | * versi|on of "f|
|000037b0| 70 22 20 72 6f 75 6e 64 | 65 64 20 75 70 77 61 72 |p" round|ed upwar|
|000037c0| 64 73 2e 0a 58 20 2a 20 | 49 20 75 73 65 20 74 68 |ds..X * |I use th|
|000037d0| 69 73 20 6f 6e 20 74 68 | 65 20 66 61 72 20 70 6f |is on th|e far po|
|000037e0| 69 6e 74 65 72 73 20 72 | 65 74 75 72 6e 65 64 20 |inters r|eturned |
|000037f0| 62 79 20 22 66 61 72 6d | 61 6c 6c 6f 63 22 2e 20 |by "farm|alloc". |
|00003800| 57 68 69 6c 65 0a 58 20 | 2a 20 74 68 65 79 20 61 |While.X |* they a|
|00003810| 72 65 20 70 72 6f 62 61 | 62 6c 79 20 61 6c 72 65 |re proba|bly alre|
|00003820| 61 64 79 20 6e 6f 72 6d | 61 6c 69 7a 65 64 2c 20 |ady norm|alized, |
|00003830| 49 20 68 61 76 65 20 6e | 65 76 65 72 20 73 65 65 |I have n|ever see|
|00003840| 6e 20 74 68 69 73 0a 58 | 20 2a 20 73 74 61 74 65 |n this.X| * state|
|00003850| 64 20 61 6e 79 77 68 65 | 72 65 20 69 6e 20 74 68 |d anywhe|re in th|
|00003860| 65 20 64 6f 63 27 73 2e | 0a 58 20 2a 0a 58 20 2a |e doc's.|.X *.X *|
|00003870| 20 54 68 65 72 65 20 69 | 73 20 61 20 6c 6f 74 20 | There i|s a lot |
|00003880| 6f 66 20 6a 75 6e 6b 20 | 62 65 6c 6f 77 20 77 68 |of junk |below wh|
|00003890| 69 63 68 20 77 6f 75 6c | 64 20 62 65 20 75 6e 65 |ich woul|d be une|
|000038a0| 63 65 73 73 61 72 79 20 | 69 66 20 6f 6e 6c 79 0a |cessary |if only.|
|000038b0| 58 20 2a 20 74 68 65 72 | 65 20 77 65 72 65 20 61 |X * ther|e were a|
|000038c0| 20 72 65 61 73 6f 6e 61 | 62 6c 79 20 63 6f 6d 70 | reasona|bly comp|
|000038d0| 69 6c 65 72 20 69 6e 64 | 65 70 65 6e 64 65 6e 74 |iler ind|ependent|
|000038e0| 20 77 61 79 20 6f 66 20 | 61 6c 6c 6f 63 61 74 69 | way of |allocati|
|000038f0| 6e 67 0a 58 20 2a 20 61 | 20 67 69 76 65 6e 20 6e |ng.X * a| given n|
|00003900| 75 6d 62 65 72 20 6f 66 | 20 50 41 52 41 47 52 41 |umber of| PARAGRA|
|00003910| 50 48 53 20 28 6c 69 6b | 65 20 54 43 27 73 20 61 |PHS (lik|e TC's a|
|00003920| 6c 6c 6f 63 6d 65 6d 29 | 2e 20 49 20 63 61 6e 27 |llocmem)|. I can'|
|00003930| 74 20 66 69 6e 64 0a 58 | 20 2a 20 6f 6e 65 20 74 |t find.X| * one t|
|00003940| 68 6f 75 67 68 2e 0a 58 | 20 2a 2f 0a 58 23 64 65 |hough..X| */.X#de|
|00003950| 66 69 6e 65 20 46 50 5f | 53 45 47 43 45 49 4c 28 |fine FP_|SEGCEIL(|
|00003960| 66 70 29 20 5c 0a 58 09 | 28 46 50 5f 53 45 47 28 |fp) \.X.|(FP_SEG(|
|00003970| 66 70 29 20 2b 20 28 46 | 50 5f 4f 46 46 28 66 70 |fp) + (F|P_OFF(fp|
|00003980| 29 20 2b 20 50 41 52 41 | 20 2d 20 31 29 2f 50 41 |) + PARA| - 1)/PA|
|00003990| 52 41 29 0a 58 0a 58 2f | 2a 0a 58 20 2a 20 41 6c |RA).X.X/|*.X * Al|
|000039a0| 6c 6f 63 61 74 65 20 73 | 70 61 63 65 20 66 6f 72 |locate s|pace for|
|000039b0| 20 74 68 65 20 74 61 62 | 6c 65 73 20 75 73 65 64 | the tab|les used|
|000039c0| 20 69 6e 20 7b 65 6e 2c | 64 65 7d 63 6f 64 69 6e | in {en,|de}codin|
|000039d0| 67 2e 20 54 68 65 73 65 | 20 74 61 62 6c 65 73 0a |g. These| tables.|
|000039e0| 58 20 2a 20 72 65 73 69 | 64 65 20 69 6e 20 74 68 |X * resi|de in th|
|000039f0| 65 20 66 61 72 20 68 65 | 61 70 2e 20 49 74 20 6d |e far he|ap. It m|
|00003a00| 61 79 20 73 65 65 6d 20 | 69 6e 65 66 66 69 63 69 |ay seem |ineffici|
|00003a10| 65 6e 74 20 74 6f 20 62 | 65 20 75 73 69 6e 67 20 |ent to b|e using |
|00003a20| 66 61 72 20 70 6f 69 6e | 74 65 72 73 0a 58 20 2a |far poin|ters.X *|
|00003a30| 20 66 6f 72 20 74 68 65 | 20 62 61 73 65 20 6f 66 | for the| base of|
|00003a40| 20 74 68 65 73 65 20 74 | 61 62 6c 65 73 2c 20 62 | these t|ables, b|
|00003a50| 65 63 61 75 73 65 20 74 | 68 65 20 6f 66 66 73 65 |ecause t|he offse|
|00003a60| 74 20 70 6f 72 74 69 6f | 6e 20 77 69 6c 6c 20 61 |t portio|n will a|
|00003a70| 6c 77 61 79 73 20 62 65 | 20 7a 65 72 6f 2e 0a 58 |lways be| zero..X|
|00003a80| 20 2a 20 57 65 20 63 6f | 75 6c 64 20 6a 75 73 74 | * We co|uld just|
|00003a90| 20 6b 65 65 70 20 74 68 | 65 20 73 65 67 6d 65 6e | keep th|e segmen|
|00003aa0| 74 20 61 64 64 72 65 73 | 73 20 6f 66 20 74 68 65 |t addres|s of the|
|00003ab0| 20 62 61 73 65 2c 20 61 | 6e 64 20 74 68 65 6e 20 | base, a|nd then |
|00003ac0| 64 6f 20 73 6f 6d 65 74 | 68 69 6e 67 0a 58 20 2a |do somet|hing.X *|
|00003ad0| 20 6c 69 6b 65 3a 0a 58 | 20 2a 09 09 20 2a 4d 4b | like:.X| *.. *MK|
|00003ae0| 5f 46 50 28 62 61 73 65 | 73 65 67 2c 20 6f 66 66 |_FP(base|seg, off|
|00003af0| 73 65 74 29 20 3d 20 62 | 6c 61 68 62 6c 61 68 3b |set) = b|lahblah;|
|00003b00| 0a 58 20 2a 0a 58 20 2a | 20 77 68 65 6e 65 76 65 |.X *.X *| wheneve|
|00003b10| 72 20 77 65 20 6e 65 65 | 64 20 74 6f 20 61 63 63 |r we nee|d to acc|
|00003b20| 65 73 73 20 74 68 65 20 | 74 61 62 6c 65 2e 20 54 |ess the |table. T|
|00003b30| 68 69 73 20 53 48 4f 55 | 4c 44 20 62 65 20 6d 6f |his SHOU|LD be mo|
|00003b40| 72 65 20 65 66 66 69 63 | 69 65 6e 74 2c 0a 58 20 |re effic|ient,.X |
|00003b50| 2a 20 62 75 74 20 74 68 | 65 20 63 6f 6d 70 69 6c |* but th|e compil|
|00003b60| 65 72 73 20 64 6f 20 6e | 6f 74 20 61 70 70 65 61 |ers do n|ot appea|
|00003b70| 72 20 74 6f 20 67 65 6e | 65 72 61 74 65 20 76 65 |r to gen|erate ve|
|00003b80| 72 79 20 65 66 66 69 63 | 69 65 6e 74 20 63 6f 64 |ry effic|ient cod|
|00003b90| 65 20 69 6e 20 74 68 69 | 73 0a 58 20 2a 20 63 61 |e in thi|s.X * ca|
|00003ba0| 73 65 2e 20 48 75 67 65 | 20 70 6f 69 6e 74 65 72 |se. Huge| pointer|
|00003bb0| 73 20 61 72 65 20 6e 6f | 74 20 75 73 65 64 2c 20 |s are no|t used, |
|00003bc0| 62 65 63 61 75 73 65 20 | 74 68 65 79 20 61 72 65 |because |they are|
|00003bd0| 20 73 6c 6f 77 2c 20 61 | 6e 64 20 62 65 63 61 75 | slow, a|nd becau|
|00003be0| 73 65 0a 58 20 2a 20 5a | 6f 72 74 65 63 68 20 64 |se.X * Z|ortech d|
|00003bf0| 6f 65 73 20 6e 6f 74 20 | 73 75 70 70 6f 72 74 20 |oes not |support |
|00003c00| 74 68 65 6d 2e 0a 58 20 | 2a 2f 0a 58 0a 58 23 69 |them..X |*/.X.X#i|
|00003c10| 66 64 65 66 20 4d 53 43 | 0a 58 23 64 65 66 69 6e |fdef MSC|.X#defin|
|00003c20| 65 20 66 61 72 6d 61 6c | 6c 6f 63 28 6e 29 09 68 |e farmal|loc(n).h|
|00003c30| 61 6c 6c 6f 63 28 6e 2c | 20 31 29 0a 58 23 65 6e |alloc(n,| 1).X#en|
|00003c40| 64 69 66 0a 58 0a 58 69 | 6e 74 20 74 61 62 61 6c |dif.X.Xi|nt tabal|
|00003c50| 6c 6f 63 28 29 0a 58 7b | 0a 58 09 63 68 61 72 20 |loc().X{|.X.char |
|00003c60| 66 61 72 20 2a 58 3b 0a | 58 0a 58 09 69 66 20 28 |far *X;.|X.X.if (|
|00003c70| 64 6f 5f 64 65 63 6f 6d | 70 29 20 7b 0a 58 09 09 |do_decom|p) {.X..|
|00003c80| 69 66 20 28 28 64 65 5f | 73 74 61 63 6b 20 3d 20 |if ((de_|stack = |
|00003c90| 6d 61 6c 6c 6f 63 28 44 | 45 5f 53 54 41 43 4b 4c |malloc(D|E_STACKL|
|00003ca0| 45 4e 29 29 20 3d 3d 20 | 30 29 0a 58 09 09 09 72 |EN)) == |0).X...r|
|00003cb0| 65 74 75 72 6e 20 28 30 | 29 3b 0a 58 09 7d 0a 58 |eturn (0|);.X.}.X|
|00003cc0| 09 65 6c 73 65 20 7b 0a | 58 09 09 69 66 20 28 28 |.else {.|X..if ((|
|00003cd0| 58 20 3d 20 66 61 72 6d | 61 6c 6c 6f 63 28 28 48 |X = farm|alloc((H|
|00003ce0| 53 49 5a 45 20 2b 20 50 | 41 52 41 29 20 2a 20 73 |SIZE + P|ARA) * s|
|00003cf0| 69 7a 65 6f 66 28 63 6f | 64 65 5f 74 29 29 29 20 |izeof(co|de_t))) |
|00003d00| 3d 3d 20 30 29 0a 58 09 | 09 09 72 65 74 75 72 6e |== 0).X.|..return|
|00003d10| 20 28 30 29 3b 0a 58 09 | 09 63 6f 64 65 70 74 72 | (0);.X.|.codeptr|
|00003d20| 73 32 5b 30 5d 20 3d 20 | 4d 4b 5f 46 50 28 46 50 |s2[0] = |MK_FP(FP|
|00003d30| 5f 53 45 47 43 45 49 4c | 28 58 29 2c 20 30 29 3b |_SEGCEIL|(X), 0);|
|00003d40| 0a 58 09 09 63 6f 64 65 | 70 74 72 73 32 5b 31 5d |.X..code|ptrs2[1]|
|00003d50| 20 3d 20 4d 4b 5f 46 50 | 28 46 50 5f 53 45 47 43 | = MK_FP|(FP_SEGC|
|00003d60| 45 49 4c 28 58 29 20 2b | 20 48 53 49 5a 45 2f 50 |EIL(X) +| HSIZE/P|
|00003d70| 41 52 41 2c 20 30 29 3b | 0a 58 09 7d 0a 58 0a 58 |ARA, 0);|.X.}.X.X|
|00003d80| 09 69 66 20 28 28 58 20 | 3d 20 66 61 72 6d 61 6c |.if ((X |= farmal|
|00003d90| 6c 6f 63 28 28 48 53 49 | 5a 45 20 2b 20 50 41 52 |loc((HSI|ZE + PAR|
|00003da0| 41 29 20 2a 20 73 69 7a | 65 6f 66 28 63 68 61 72 |A) * siz|eof(char|
|00003db0| 29 29 29 20 3d 3d 20 30 | 29 0a 58 09 09 72 65 74 |))) == 0|).X..ret|
|00003dc0| 75 72 6e 20 28 30 29 3b | 0a 58 09 63 68 61 72 70 |urn (0);|.X.charp|
|00003dd0| 74 72 31 20 3d 20 4d 4b | 5f 46 50 28 46 50 5f 53 |tr1 = MK|_FP(FP_S|
|00003de0| 45 47 43 45 49 4c 28 58 | 29 2c 20 30 29 3b 0a 58 |EGCEIL(X|), 0);.X|
|00003df0| 0a 58 09 69 66 20 28 28 | 58 20 3d 20 66 61 72 6d |.X.if ((|X = farm|
|00003e00| 61 6c 6c 6f 63 28 28 48 | 53 49 5a 45 20 2b 20 50 |alloc((H|SIZE + P|
|00003e10| 41 52 41 29 20 2a 20 73 | 69 7a 65 6f 66 28 63 6f |ARA) * s|izeof(co|
|00003e20| 64 65 5f 74 29 29 29 20 | 3d 3d 20 30 29 0a 58 09 |de_t))) |== 0).X.|
|00003e30| 09 72 65 74 75 72 6e 20 | 28 30 29 3b 0a 58 09 63 |.return |(0);.X.c|
|00003e40| 6f 64 65 70 74 72 73 31 | 5b 30 5d 20 3d 20 4d 4b |odeptrs1|[0] = MK|
|00003e50| 5f 46 50 28 46 50 5f 53 | 45 47 43 45 49 4c 28 58 |_FP(FP_S|EGCEIL(X|
|00003e60| 29 2c 20 30 29 3b 0a 58 | 09 63 6f 64 65 70 74 72 |), 0);.X|.codeptr|
|00003e70| 73 31 5b 31 5d 20 3d 20 | 4d 4b 5f 46 50 28 46 50 |s1[1] = |MK_FP(FP|
|00003e80| 5f 53 45 47 43 45 49 4c | 28 58 29 20 2b 20 48 53 |_SEGCEIL|(X) + HS|
|00003e90| 49 5a 45 2f 50 41 52 41 | 2c 20 30 29 3b 0a 58 0a |IZE/PARA|, 0);.X.|
|00003ea0| 58 09 72 65 74 75 72 6e | 20 28 31 29 3b 0a 58 7d |X.return| (1);.X}|
|00003eb0| 0a 58 0a 58 23 65 6c 73 | 65 0a 58 0a 58 75 63 68 |.X.X#els|e.X.Xuch|
|00003ec0| 61 72 09 63 68 61 72 74 | 61 62 31 5b 48 53 49 5a |ar.chart|ab1[HSIZ|
|00003ed0| 45 5d 3b 0a 58 63 6f 64 | 65 5f 74 09 63 6f 64 65 |E];.Xcod|e_t.code|
|00003ee0| 74 61 62 31 5b 48 53 49 | 5a 45 5d 3b 0a 58 63 6f |tab1[HSI|ZE];.Xco|
|00003ef0| 64 65 5f 74 09 63 6f 64 | 65 74 61 62 32 5b 48 53 |de_t.cod|etab2[HS|
|00003f00| 49 5a 45 5d 3b 0a 58 0a | 58 23 64 65 66 69 6e 65 |IZE];.X.|X#define|
|00003f10| 20 64 65 5f 73 75 66 66 | 69 78 6f 66 28 69 29 09 | de_suff|ixof(i).|
|00003f20| 63 68 61 72 74 61 62 31 | 5b 69 5d 0a 58 23 64 65 |chartab1|[i].X#de|
|00003f30| 66 69 6e 65 20 64 65 5f | 70 72 65 66 69 78 6f 66 |fine de_|prefixof|
|00003f40| 28 69 29 09 63 6f 64 65 | 74 61 62 31 5b 69 5d 0a |(i).code|tab1[i].|
|00003f50| 58 23 64 65 66 69 6e 65 | 20 64 65 5f 73 74 61 63 |X#define| de_stac|
|00003f60| 6b 09 28 75 63 68 61 72 | 20 2a 29 63 6f 64 65 74 |k.(uchar| *)codet|
|00003f70| 61 62 32 0a 58 0a 58 23 | 64 65 66 69 6e 65 20 65 |ab2.X.X#|define e|
|00003f80| 6e 5f 68 61 73 68 63 68 | 61 72 28 69 29 09 63 68 |n_hashch|ar(i).ch|
|00003f90| 61 72 74 61 62 31 5b 69 | 5d 0a 58 23 64 65 66 69 |artab1[i|].X#defi|
|00003fa0| 6e 65 20 65 6e 5f 68 61 | 73 68 65 6e 74 28 69 29 |ne en_ha|shent(i)|
|00003fb0| 09 63 6f 64 65 74 61 62 | 31 5b 69 5d 0a 58 23 64 |.codetab|1[i].X#d|
|00003fc0| 65 66 69 6e 65 20 65 6e | 5f 68 61 73 68 63 6f 64 |efine en|_hashcod|
|00003fd0| 65 28 69 29 09 63 6f 64 | 65 74 61 62 32 5b 69 5d |e(i).cod|etab2[i]|
|00003fe0| 0a 58 0a 58 23 65 6e 64 | 69 66 0a 58 0a 58 76 6f |.X.X#end|if.X.Xvo|
|00003ff0| 69 64 20 55 73 61 67 65 | 28 29 0a 58 7b 0a 58 09 |id Usage|().X{.X.|
|00004000| 66 70 72 69 6e 74 66 28 | 73 74 64 65 72 72 2c 20 |fprintf(|stderr, |
|00004010| 22 55 73 61 67 65 3a 20 | 63 6f 6d 70 72 65 73 73 |"Usage: |compress|
|00004020| 20 5b 2d 64 66 76 63 56 | 6e 43 5d 20 5b 2d 62 20 | [-dfvcV|nC] [-b |
|00004030| 6d 61 78 62 69 74 73 5d | 20 5b 66 69 6c 65 20 2e |maxbits]| [file .|
|00004040| 2e 2e 5d 5c 6e 22 29 3b | 0a 58 09 66 70 72 69 6e |..]\n");|.X.fprin|
|00004050| 74 66 28 73 74 64 65 72 | 72 2c 20 22 09 2d 56 20 |tf(stder|r, ".-V |
|00004060| 3d 3e 20 70 72 69 6e 74 | 20 56 65 72 73 69 6f 6e |=> print| Version|
|00004070| 5c 6e 22 29 3b 0a 58 09 | 66 70 72 69 6e 74 66 28 |\n");.X.|fprintf(|
|00004080| 73 74 64 65 72 72 2c 20 | 22 09 2d 64 20 3d 3e 20 |stderr, |".-d => |
|00004090| 64 65 63 6f 6d 70 72 65 | 73 73 5c 6e 22 29 3b 0a |decompre|ss\n");.|
|000040a0| 58 09 66 70 72 69 6e 74 | 66 28 73 74 64 65 72 72 |X.fprint|f(stderr|
|000040b0| 2c 20 22 09 2d 76 20 3d | 3e 20 76 65 72 62 6f 73 |, ".-v =|> verbos|
|000040c0| 65 5c 6e 22 29 3b 0a 58 | 09 66 70 72 69 6e 74 66 |e\n");.X|.fprintf|
|000040d0| 28 73 74 64 65 72 72 2c | 20 22 09 2d 66 20 3d 3e |(stderr,| ".-f =>|
|000040e0| 20 66 6f 72 63 65 20 6f | 76 65 72 77 72 69 74 65 | force o|verwrite|
|000040f0| 20 6f 66 20 6f 75 74 70 | 75 74 20 66 69 6c 65 5c | of outp|ut file\|
|00004100| 6e 22 29 3b 0a 58 09 66 | 70 72 69 6e 74 66 28 73 |n");.X.f|printf(s|
|00004110| 74 64 65 72 72 2c 20 22 | 09 2d 6e 20 3d 3e 20 6e |tderr, "|.-n => n|
|00004120| 6f 20 68 65 61 64 65 72 | 3a 20 75 73 65 66 75 6c |o header|: useful|
|00004130| 20 74 6f 20 75 6e 63 6f | 6d 70 72 65 73 73 20 6f | to unco|mpress o|
|00004140| 6c 64 20 66 69 6c 65 73 | 5c 6e 22 29 3b 0a 58 09 |ld files|\n");.X.|
|00004150| 66 70 72 69 6e 74 66 28 | 73 74 64 65 72 72 2c 20 |fprintf(|stderr, |
|00004160| 22 09 2d 62 20 6d 61 78 | 62 69 74 73 20 3d 3e 20 |".-b max|bits => |
|00004170| 6d 61 78 62 69 74 73 2e | 20 44 65 66 61 75 6c 74 |maxbits.| Default|
|00004180| 20 25 64 5c 6e 22 2c 20 | 42 49 54 53 29 3b 0a 58 | %d\n", |BITS);.X|
|00004190| 09 66 70 72 69 6e 74 66 | 28 73 74 64 65 72 72 2c |.fprintf|(stderr,|
|000041a0| 20 22 09 2d 63 20 3d 3e | 20 63 61 74 20 61 6c 6c | ".-c =>| cat all|
|000041b0| 20 6f 75 74 70 75 74 20 | 74 6f 20 73 74 64 6f 75 | output |to stdou|
|000041c0| 74 5c 6e 22 29 3b 0a 58 | 09 66 70 72 69 6e 74 66 |t\n");.X|.fprintf|
|000041d0| 28 73 74 64 65 72 72 2c | 20 22 09 2d 43 20 3d 3e |(stderr,| ".-C =>|
|000041e0| 20 67 65 6e 65 72 61 74 | 65 20 6f 75 74 70 75 74 | generat|e output|
|000041f0| 20 63 6f 6d 70 61 74 69 | 62 6c 65 20 77 69 74 68 | compati|ble with|
|00004200| 20 63 6f 6d 70 72 65 73 | 73 20 32 2e 30 2e 5c 6e | compres|s 2.0.\n|
|00004210| 22 29 3b 0a 58 7d 0a 58 | 0a 58 2f 2a 2a 2a 2a 2a |");.X}.X|.X/*****|
|00004220| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|00004230| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|00004240| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|00004250| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 0a 58 20 2a |********|****.X *|
|00004260| 20 54 41 47 28 20 6d 61 | 69 6e 20 29 0a 58 20 2a | TAG( ma|in ).X *|
|00004270| 0a 58 20 2a 20 41 6c 67 | 6f 72 69 74 68 6d 20 66 |.X * Alg|orithm f|
|00004280| 72 6f 6d 20 22 41 20 54 | 65 63 68 6e 69 71 75 65 |rom "A T|echnique|
|00004290| 20 66 6f 72 20 48 69 67 | 68 20 50 65 72 66 6f 72 | for Hig|h Perfor|
|000042a0| 6d 61 6e 63 65 20 44 61 | 74 61 20 43 6f 6d 70 72 |mance Da|ta Compr|
|000042b0| 65 73 73 69 6f 6e 22 2c | 0a 58 20 2a 20 54 65 72 |ession",|.X * Ter|
|000042c0| 72 79 20 41 2e 20 57 65 | 6c 63 68 2c 20 49 45 45 |ry A. We|lch, IEE|
|000042d0| 45 20 43 6f 6d 70 75 74 | 65 72 20 56 6f 6c 20 31 |E Comput|er Vol 1|
|000042e0| 37 2c 20 4e 6f 20 36 20 | 28 4a 75 6e 65 20 31 39 |7, No 6 |(June 19|
|000042f0| 38 34 29 2c 20 70 70 20 | 38 2d 31 39 2e 0a 58 20 |84), pp |8-19..X |
|00004300| 2a 0a 58 20 2a 20 55 73 | 61 67 65 3a 20 63 6f 6d |*.X * Us|age: com|
|00004310| 70 72 65 73 73 20 5b 2d | 64 66 76 63 5d 20 5b 2d |press [-|dfvc] [-|
|00004320| 62 20 62 69 74 73 5d 20 | 5b 66 69 6c 65 20 2e 2e |b bits] |[file ..|
|00004330| 2e 5d 0a 58 20 2a 20 49 | 6e 70 75 74 73 3a 0a 58 |.].X * I|nputs:.X|
|00004340| 20 2a 09 2d 64 3a 09 20 | 20 20 20 49 66 20 67 69 | *.-d:. | If gi|
|00004350| 76 65 6e 2c 20 64 65 63 | 6f 6d 70 72 65 73 73 69 |ven, dec|ompressi|
|00004360| 6f 6e 20 69 73 20 64 6f | 6e 65 20 69 6e 73 74 65 |on is do|ne inste|
|00004370| 61 64 2e 0a 58 20 2a 0a | 58 20 2a 20 20 20 20 20 |ad..X *.|X * |
|00004380| 20 2d 63 3a 20 20 20 20 | 20 20 20 20 20 57 72 69 | -c: | Wri|
|00004390| 74 65 20 6f 75 74 70 75 | 74 20 6f 6e 20 73 74 64 |te outpu|t on std|
|000043a0| 6f 75 74 2c 20 64 6f 6e | 27 74 20 72 65 6d 6f 76 |out, don|'t remov|
|000043b0| 65 20 6f 72 69 67 69 6e | 61 6c 2e 0a 58 20 2a 0a |e origin|al..X *.|
|000043c0| 58 20 2a 20 20 20 20 20 | 20 2d 62 3a 20 20 20 20 |X * | -b: |
|000043d0| 20 20 20 20 20 50 61 72 | 61 6d 65 74 65 72 20 6c | Par|ameter l|
|000043e0| 69 6d 69 74 73 20 74 68 | 65 20 6d 61 78 20 6e 75 |imits th|e max nu|
|000043f0| 6d 62 65 72 20 6f 66 20 | 62 69 74 73 2f 63 6f 64 |mber of |bits/cod|
|00004400| 65 2e 0a 58 20 2a 0a 58 | 20 2a 09 2d 66 3a 09 20 |e..X *.X| *.-f:. |
|00004410| 20 20 20 46 6f 72 63 65 | 73 20 6f 75 74 70 75 74 | Force|s output|
|00004420| 20 66 69 6c 65 20 74 6f | 20 62 65 20 67 65 6e 65 | file to| be gene|
|00004430| 72 61 74 65 64 2c 20 65 | 76 65 6e 20 69 66 20 6f |rated, e|ven if o|
|00004440| 6e 65 20 61 6c 72 65 61 | 64 79 0a 58 20 2a 09 09 |ne alrea|dy.X *..|
|00004450| 20 20 20 20 65 78 69 73 | 74 73 2c 20 61 6e 64 20 | exis|ts, and |
|00004460| 65 76 65 6e 20 69 66 20 | 6e 6f 20 73 70 61 63 65 |even if |no space|
|00004470| 20 69 73 20 73 61 76 65 | 64 20 62 79 20 63 6f 6d | is save|d by com|
|00004480| 70 72 65 73 73 69 6e 67 | 2e 0a 58 20 2a 09 09 20 |pressing|..X *.. |
|00004490| 20 20 20 49 66 20 2d 66 | 20 69 73 20 6e 6f 74 20 | If -f| is not |
|000044a0| 75 73 65 64 2c 20 74 68 | 65 20 75 73 65 72 20 77 |used, th|e user w|
|000044b0| 69 6c 6c 20 62 65 20 70 | 72 6f 6d 70 74 65 64 20 |ill be p|rompted |
|000044c0| 69 66 20 73 74 64 69 6e | 20 69 73 0a 58 20 2a 09 |if stdin| is.X *.|
|000044d0| 09 20 20 20 20 61 20 74 | 74 79 2c 20 6f 74 68 65 |. a t|ty, othe|
|000044e0| 72 77 69 73 65 2c 20 74 | 68 65 20 6f 75 74 70 75 |rwise, t|he outpu|
|000044f0| 74 20 66 69 6c 65 20 77 | 69 6c 6c 20 6e 6f 74 20 |t file w|ill not |
|00004500| 62 65 20 6f 76 65 72 77 | 72 69 74 74 65 6e 2e 0a |be overw|ritten..|
|00004510| 58 20 2a 0a 58 20 2a 20 | 20 20 20 20 20 2d 76 3a |X *.X * | -v:|
|00004520| 09 20 20 20 20 57 72 69 | 74 65 20 63 6f 6d 70 72 |. Wri|te compr|
|00004530| 65 73 73 69 6f 6e 20 73 | 74 61 74 69 73 74 69 63 |ession s|tatistic|
|00004540| 73 0a 58 20 2a 0a 58 20 | 2a 20 09 66 69 6c 65 20 |s.X *.X |* .file |
|00004550| 2e 2e 2e 3a 20 20 20 46 | 69 6c 65 73 20 74 6f 20 |...: F|iles to |
|00004560| 62 65 20 63 6f 6d 70 72 | 65 73 73 65 64 2e 20 20 |be compr|essed. |
|00004570| 49 66 20 6e 6f 6e 65 20 | 73 70 65 63 69 66 69 65 |If none |specifie|
|00004580| 64 2c 20 73 74 64 69 6e | 0a 58 20 2a 09 09 20 20 |d, stdin|.X *.. |
|00004590| 20 20 69 73 20 75 73 65 | 64 2e 0a 58 20 2a 20 4f | is use|d..X * O|
|000045a0| 75 74 70 75 74 73 3a 0a | 58 20 2a 09 66 69 6c 65 |utputs:.|X *.file|
|000045b0| 2e 5a 3a 09 20 20 20 20 | 43 6f 6d 70 72 65 73 73 |.Z:. |Compress|
|000045c0| 65 64 20 66 6f 72 6d 20 | 6f 66 20 66 69 6c 65 20 |ed form |of file |
|000045d0| 77 69 74 68 20 73 61 6d | 65 20 6d 6f 64 65 2c 20 |with sam|e mode, |
|000045e0| 6f 77 6e 65 72 2c 20 61 | 6e 64 20 75 74 69 6d 65 |owner, a|nd utime|
|000045f0| 73 0a 58 20 2a 20 09 6f | 72 20 73 74 64 6f 75 74 |s.X * .o|r stdout|
|00004600| 20 20 20 28 69 66 20 73 | 74 64 69 6e 20 75 73 65 | (if s|tdin use|
|00004610| 64 20 61 73 20 69 6e 70 | 75 74 29 0a 58 20 2a 0a |d as inp|ut).X *.|
|00004620| 58 20 2a 20 41 73 73 75 | 6d 70 74 69 6f 6e 73 3a |X * Assu|mptions:|
|00004630| 0a 58 20 2a 09 57 68 65 | 6e 20 66 69 6c 65 6e 61 |.X *.Whe|n filena|
|00004640| 6d 65 73 20 61 72 65 20 | 67 69 76 65 6e 2c 20 72 |mes are |given, r|
|00004650| 65 70 6c 61 63 65 73 20 | 77 69 74 68 20 74 68 65 |eplaces |with the|
|00004660| 20 63 6f 6d 70 72 65 73 | 73 65 64 20 76 65 72 73 | compres|sed vers|
|00004670| 69 6f 6e 0a 58 20 2a 09 | 28 2e 5a 20 73 75 66 66 |ion.X *.|(.Z suff|
|00004680| 69 78 29 20 6f 6e 6c 79 | 20 69 66 20 74 68 65 20 |ix) only| if the |
|00004690| 66 69 6c 65 20 64 65 63 | 72 65 61 73 65 73 20 69 |file dec|reases i|
|000046a0| 6e 20 73 69 7a 65 2e 0a | 58 20 2a 20 41 6c 67 6f |n size..|X * Algo|
|000046b0| 72 69 74 68 6d 3a 0a 58 | 20 2a 20 09 4d 6f 64 69 |rithm:.X| * .Modi|
|000046c0| 66 69 65 64 20 4c 65 6d | 70 65 6c 2d 5a 69 76 20 |fied Lem|pel-Ziv |
|000046d0| 6d 65 74 68 6f 64 20 28 | 4c 5a 57 29 2e 20 20 42 |method (|LZW). B|
|000046e0| 61 73 69 63 61 6c 6c 79 | 20 66 69 6e 64 73 20 63 |asically| finds c|
|000046f0| 6f 6d 6d 6f 6e 0a 58 20 | 2a 20 73 75 62 73 74 72 |ommon.X |* substr|
|00004700| 69 6e 67 73 20 61 6e 64 | 20 72 65 70 6c 61 63 65 |ings and| replace|
|00004710| 73 20 74 68 65 6d 20 77 | 69 74 68 20 61 20 76 61 |s them w|ith a va|
|00004720| 72 69 61 62 6c 65 20 73 | 69 7a 65 20 63 6f 64 65 |riable s|ize code|
|00004730| 2e 20 20 54 68 69 73 20 | 69 73 0a 58 20 2a 20 64 |. This |is.X * d|
|00004740| 65 74 65 72 6d 69 6e 69 | 73 74 69 63 2c 20 61 6e |etermini|stic, an|
|00004750| 64 20 63 61 6e 20 62 65 | 20 64 6f 6e 65 20 6f 6e |d can be| done on|
|00004760| 20 74 68 65 20 66 6c 79 | 2e 20 20 54 68 75 73 2c | the fly|. Thus,|
|00004770| 20 74 68 65 20 64 65 63 | 6f 6d 70 72 65 73 73 69 | the dec|ompressi|
|00004780| 6f 6e 0a 58 20 2a 20 70 | 72 6f 63 65 64 75 72 65 |on.X * p|rocedure|
|00004790| 20 6e 65 65 64 73 20 6e | 6f 20 69 6e 70 75 74 20 | needs n|o input |
|000047a0| 74 61 62 6c 65 2c 20 62 | 75 74 20 74 72 61 63 6b |table, b|ut track|
|000047b0| 73 20 74 68 65 20 77 61 | 79 20 74 68 65 20 74 61 |s the wa|y the ta|
|000047c0| 62 6c 65 20 77 61 73 20 | 62 75 69 6c 74 2e 0a 58 |ble was |built..X|
|000047d0| 20 2a 2f 0a 58 0a 58 23 | 69 66 64 65 66 20 5f 5f | */.X.X#|ifdef __|
|000047e0| 5a 54 43 5f 5f 0a 58 23 | 69 6e 63 6c 75 64 65 20 |ZTC__.X#|include |
|000047f0| 3c 69 6e 74 2e 68 3e 0a | 58 69 6e 74 20 73 69 6c |<int.h>.|Xint sil|
|00004800| 6c 79 5f 6e 6f 6e 73 65 | 6e 73 65 28 73 74 72 75 |ly_nonse|nse(stru|
|00004810| 63 74 20 49 4e 54 5f 44 | 41 54 41 20 2a 66 6f 6f |ct INT_D|ATA *foo|
|00004820| 29 20 7b 72 61 69 73 65 | 28 53 49 47 49 4e 54 29 |) {raise|(SIGINT)|
|00004830| 3b 20 72 65 74 75 72 6e | 20 31 3b 7d 0a 58 23 65 |; return| 1;}.X#e|
|00004840| 6e 64 69 66 0a 58 0a 58 | 23 64 65 66 69 6e 65 20 |ndif.X.X|#define |
|00004850| 41 52 47 56 41 4c 28 29 | 20 28 2a 2b 2b 28 2a 61 |ARGVAL()| (*++(*a|
|00004860| 72 67 76 29 20 7c 7c 20 | 28 2d 2d 61 72 67 63 20 |rgv) || |(--argc |
|00004870| 26 26 20 2a 2b 2b 61 72 | 67 76 29 29 0a 58 0a 58 |&& *++ar|gv)).X.X|
|00004880| 76 6f 69 64 20 6d 61 69 | 6e 28 61 72 67 63 2c 20 |void mai|n(argc, |
|00004890| 61 72 67 76 29 0a 58 69 | 6e 74 20 61 72 67 63 3b |argv).Xi|nt argc;|
|000048a0| 0a 58 63 68 61 72 20 2a | 2a 61 72 67 76 3b 0a 58 |.Xchar *|*argv;.X|
|000048b0| 7b 0a 58 09 63 68 61 72 | 20 74 65 6d 70 6e 61 6d |{.X.char| tempnam|
|000048c0| 65 5b 31 30 30 5d 2c 20 | 2a 63 70 3b 0a 58 0a 58 |e[100], |*cp;.X.X|
|000048d0| 09 69 66 20 28 73 69 67 | 6e 61 6c 28 53 49 47 49 |.if (sig|nal(SIGI|
|000048e0| 4e 54 2c 20 53 49 47 5f | 49 47 4e 29 20 21 3d 20 |NT, SIG_|IGN) != |
|000048f0| 53 49 47 5f 49 47 4e 29 | 20 7b 0a 58 09 09 73 69 |SIG_IGN)| {.X..si|
|00004900| 67 6e 61 6c 28 53 49 47 | 49 4e 54 2c 20 6f 6e 69 |gnal(SIG|INT, oni|
|00004910| 6e 74 72 29 3b 0a 58 23 | 69 66 64 65 66 20 5f 5f |ntr);.X#|ifdef __|
|00004920| 5a 54 43 5f 5f 0a 58 09 | 09 2f 2a 0a 58 09 09 20 |ZTC__.X.|./*.X.. |
|00004930| 2a 20 54 68 65 20 22 73 | 69 67 6e 61 6c 22 20 63 |* The "s|ignal" c|
|00004940| 61 6c 6c 20 61 62 6f 76 | 65 20 69 73 6e 27 74 20 |all abov|e isn't |
|00004950| 67 6f 6f 64 20 65 6e 6f | 75 67 68 20 66 6f 72 20 |good eno|ugh for |
|00004960| 5a 6f 72 74 65 63 68 0a | 58 09 09 20 2a 2f 0a 58 |Zortech.|X.. */.X|
|00004970| 09 09 69 6e 74 5f 69 6e | 74 65 72 63 65 70 74 28 |..int_in|tercept(|
|00004980| 30 78 32 33 2c 20 73 69 | 6c 6c 79 5f 6e 6f 6e 73 |0x23, si|lly_nons|
|00004990| 65 6e 73 65 2c 20 32 35 | 36 29 3b 0a 58 23 65 6e |ense, 25|6);.X#en|
|000049a0| 64 69 66 0a 58 23 69 66 | 64 65 66 20 53 49 47 53 |dif.X#if|def SIGS|
|000049b0| 45 47 56 0a 58 09 09 73 | 69 67 6e 61 6c 28 53 49 |EGV.X..s|ignal(SI|
|000049c0| 47 53 45 47 56 2c 20 6f | 6f 70 73 29 3b 0a 58 23 |GSEGV, o|ops);.X#|
|000049d0| 65 6e 64 69 66 0a 58 09 | 09 69 66 20 28 69 73 61 |endif.X.|.if (isa|
|000049e0| 74 74 79 28 32 29 29 0a | 58 09 09 09 66 6f 72 65 |tty(2)).|X...fore|
|000049f0| 67 72 6f 75 6e 64 20 3d | 20 31 3b 0a 58 09 7d 0a |ground =| 1;.X.}.|
|00004a00| 58 0a 58 23 69 66 6e 64 | 65 66 20 4d 53 44 4f 53 |X.X#ifnd|ef MSDOS|
|00004a10| 0a 58 09 69 66 20 28 28 | 63 70 20 3d 20 73 74 72 |.X.if ((|cp = str|
|00004a20| 72 63 68 72 28 61 72 67 | 76 5b 30 5d 2c 20 27 2f |rchr(arg|v[0], '/|
|00004a30| 27 29 29 20 21 3d 20 30 | 29 0a 58 09 09 63 70 2b |')) != 0|).X..cp+|
|00004a40| 2b 3b 0a 58 09 65 6c 73 | 65 0a 58 09 09 63 70 20 |+;.X.els|e.X..cp |
|00004a50| 3d 20 61 72 67 76 5b 30 | 5d 3b 0a 58 23 65 6c 73 |= argv[0|];.X#els|
|00004a60| 65 0a 58 09 66 6f 72 20 | 28 63 70 20 3d 20 61 72 |e.X.for |(cp = ar|
|00004a70| 67 76 5b 30 5d 3b 20 2a | 63 70 3b 20 63 70 2b 2b |gv[0]; *|cp; cp++|
|00004a80| 29 0a 58 09 09 69 66 20 | 28 2a 63 70 20 3d 3d 20 |).X..if |(*cp == |
|00004a90| 27 2f 27 20 7c 7c 20 2a | 63 70 20 3d 3d 20 27 5c |'/' || *|cp == '\|
|00004aa0| 5c 27 29 0a 58 09 09 09 | 61 72 67 76 5b 30 5d 20 |\').X...|argv[0] |
|00004ab0| 3d 20 63 70 20 2b 20 31 | 3b 0a 58 09 63 70 20 3d |= cp + 1|;.X.cp =|
|00004ac0| 20 73 74 72 6c 77 72 28 | 61 72 67 76 5b 30 5d 29 | strlwr(|argv[0])|
|00004ad0| 3b 0a 58 23 65 6e 64 69 | 66 0a 58 09 2f 2a 20 4c |;.X#endi|f.X./* L|
|00004ae0| 69 6d 69 74 65 64 20 74 | 6f 20 38 20 63 68 61 72 |imited t|o 8 char|
|00004af0| 20 66 69 6c 65 6e 61 6d | 65 73 20 75 6e 64 65 72 | filenam|es under|
|00004b00| 20 44 4f 53 20 2a 2f 0a | 58 09 69 66 20 28 73 74 | DOS */.|X.if (st|
|00004b10| 72 6e 63 6d 70 28 63 70 | 2c 20 22 75 6e 63 6f 6d |rncmp(cp|, "uncom|
|00004b20| 70 72 65 73 73 22 2c 20 | 38 29 20 3d 3d 20 30 29 |press", |8) == 0)|
|00004b30| 0a 58 09 09 64 6f 5f 64 | 65 63 6f 6d 70 20 3d 20 |.X..do_d|ecomp = |
|00004b40| 31 3b 0a 58 09 65 6c 73 | 65 20 69 66 20 28 73 74 |1;.X.els|e if (st|
|00004b50| 72 6e 63 6d 70 28 63 70 | 2c 20 22 7a 63 61 74 22 |rncmp(cp|, "zcat"|
|00004b60| 2c 20 34 29 20 3d 3d 20 | 30 29 20 7b 0a 58 09 09 |, 4) == |0) {.X..|
|00004b70| 64 6f 5f 64 65 63 6f 6d | 70 20 3d 20 31 3b 0a 58 |do_decom|p = 1;.X|
|00004b80| 09 09 7a 63 61 74 5f 66 | 6c 67 20 3d 20 31 3b 0a |..zcat_f|lg = 1;.|
|00004b90| 58 09 7d 0a 58 0a 58 23 | 69 66 64 65 66 20 42 53 |X.}.X.X#|ifdef BS|
|00004ba0| 44 34 5f 32 0a 58 09 2f | 2a 20 34 2e 32 42 53 44 |D4_2.X./|* 4.2BSD|
|00004bb0| 20 64 65 70 65 6e 64 65 | 6e 74 20 2d 20 74 61 6b | depende|nt - tak|
|00004bc0| 65 20 69 74 20 6f 75 74 | 20 69 66 20 6e 6f 74 20 |e it out| if not |
|00004bd0| 2a 2f 0a 58 09 73 65 74 | 6c 69 6e 65 62 75 66 28 |*/.X.set|linebuf(|
|00004be0| 73 74 64 65 72 72 29 3b | 0a 58 23 65 6e 64 69 66 |stderr);|.X#endif|
|00004bf0| 20 2f 2a 20 42 53 44 34 | 5f 32 20 2a 2f 0a 58 0a | /* BSD4|_2 */.X.|
|00004c00| 58 09 66 6f 72 20 28 61 | 72 67 63 2d 2d 2c 20 61 |X.for (a|rgc--, a|
|00004c10| 72 67 76 2b 2b 3b 20 61 | 72 67 63 20 3e 20 30 20 |rgv++; a|rgc > 0 |
|00004c20| 26 26 20 2a 2a 61 72 67 | 76 20 3d 3d 20 27 2d 27 |&& **arg|v == '-'|
|00004c30| 3b 20 61 72 67 63 2d 2d | 2c 20 61 72 67 76 2b 2b |; argc--|, argv++|
|00004c40| 29 20 7b 0a 58 09 09 77 | 68 69 6c 65 20 28 2a 2b |) {.X..w|hile (*+|
|00004c50| 2b 28 2a 61 72 67 76 29 | 29 20 7b 09 2f 2a 20 50 |+(*argv)|) {./* P|
|00004c60| 72 6f 63 65 73 73 20 61 | 6c 6c 20 66 6c 61 67 73 |rocess a|ll flags|
|00004c70| 20 69 6e 20 74 68 69 73 | 20 61 72 67 20 2a 2f 0a | in this| arg */.|
|00004c80| 58 09 09 09 73 77 69 74 | 63 68 20 28 2a 2a 61 72 |X...swit|ch (**ar|
|00004c90| 67 76 29 20 7b 0a 58 09 | 09 09 63 61 73 65 20 27 |gv) {.X.|..case '|
|00004ca0| 56 27 3a 0a 58 09 09 09 | 09 76 65 72 73 69 6f 6e |V':.X...|.version|
|00004cb0| 28 29 3b 0a 58 09 09 09 | 09 62 72 65 61 6b 3b 0a |();.X...|.break;.|
|00004cc0| 58 09 09 09 63 61 73 65 | 20 27 76 27 3a 0a 58 09 |X...case| 'v':.X.|
|00004cd0| 09 09 09 76 65 72 62 6f | 73 65 20 3d 20 31 3b 0a |...verbo|se = 1;.|
|00004ce0| 58 09 09 09 09 62 72 65 | 61 6b 3b 0a 58 09 09 09 |X....bre|ak;.X...|
|00004cf0| 63 61 73 65 20 27 64 27 | 3a 0a 58 09 09 09 09 64 |case 'd'|:.X....d|
|00004d00| 6f 5f 64 65 63 6f 6d 70 | 20 3d 20 31 3b 0a 58 09 |o_decomp| = 1;.X.|
|00004d10| 09 09 09 62 72 65 61 6b | 3b 0a 58 09 09 09 63 61 |...break|;.X...ca|
|00004d20| 73 65 20 27 66 27 3a 0a | 58 09 09 09 63 61 73 65 |se 'f':.|X...case|
|00004d30| 20 27 46 27 3a 0a 58 09 | 09 09 09 66 6f 72 63 65 | 'F':.X.|...force|
|00004d40| 20 3d 20 31 3b 0a 58 09 | 09 09 09 62 72 65 61 6b | = 1;.X.|...break|
|00004d50| 3b 0a 58 09 09 09 63 61 | 73 65 20 27 6e 27 3a 0a |;.X...ca|se 'n':.|
|00004d60| 58 09 09 09 09 6d 61 67 | 69 63 20 3d 20 30 3b 0a |X....mag|ic = 0;.|
|00004d70| 58 09 09 09 09 62 72 65 | 61 6b 3b 0a 58 09 09 09 |X....bre|ak;.X...|
|00004d80| 63 61 73 65 20 27 43 27 | 3a 0a 58 09 09 09 09 62 |case 'C'|:.X....b|
|00004d90| 6c 6f 63 6b 5f 63 6f 6d | 70 72 65 73 73 20 3d 20 |lock_com|press = |
|00004da0| 30 3b 0a 58 09 09 09 09 | 62 72 65 61 6b 3b 0a 58 |0;.X....|break;.X|
|00004db0| 09 09 09 63 61 73 65 20 | 27 62 27 3a 0a 58 09 09 |...case |'b':.X..|
|00004dc0| 09 09 69 66 20 28 21 41 | 52 47 56 41 4c 28 29 29 |..if (!A|RGVAL())|
|00004dd0| 20 7b 0a 58 09 09 09 09 | 09 66 70 72 69 6e 74 66 | {.X....|.fprintf|
|00004de0| 28 73 74 64 65 72 72 2c | 20 22 4d 69 73 73 69 6e |(stderr,| "Missin|
|00004df0| 67 20 6d 61 78 62 69 74 | 73 5c 6e 22 29 3b 0a 58 |g maxbit|s\n");.X|
|00004e00| 09 09 09 09 09 55 73 61 | 67 65 28 29 3b 0a 58 09 |.....Usa|ge();.X.|
|00004e10| 09 09 09 09 65 78 69 74 | 28 31 29 3b 0a 58 09 09 |....exit|(1);.X..|
|00004e20| 09 09 7d 0a 58 09 09 09 | 09 6d 61 78 62 69 74 73 |..}.X...|.maxbits|
|00004e30| 20 3d 20 61 74 6f 69 28 | 2a 61 72 67 76 29 3b 0a | = atoi(|*argv);.|
|00004e40| 58 09 09 09 09 67 6f 74 | 6f 20 6e 65 78 74 61 72 |X....got|o nextar|
|00004e50| 67 3b 0a 58 09 09 09 63 | 61 73 65 20 27 63 27 3a |g;.X...c|ase 'c':|
|00004e60| 0a 58 09 09 09 09 7a 63 | 61 74 5f 66 6c 67 20 3d |.X....zc|at_flg =|
|00004e70| 20 31 3b 0a 58 09 09 09 | 09 62 72 65 61 6b 3b 0a | 1;.X...|.break;.|
|00004e80| 58 09 09 09 63 61 73 65 | 20 27 71 27 3a 0a 58 09 |X...case| 'q':.X.|
|00004e90| 09 09 09 76 65 72 62 6f | 73 65 20 3d 20 30 3b 0a |...verbo|se = 0;.|
|00004ea0| 58 09 09 09 09 62 72 65 | 61 6b 3b 0a 58 09 09 09 |X....bre|ak;.X...|
|00004eb0| 64 65 66 61 75 6c 74 3a | 0a 58 09 09 09 09 66 70 |default:|.X....fp|
|00004ec0| 72 69 6e 74 66 28 73 74 | 64 65 72 72 2c 20 22 55 |rintf(st|derr, "U|
|00004ed0| 6e 6b 6e 6f 77 6e 20 66 | 6c 61 67 3a 20 27 25 63 |nknown f|lag: '%c|
|00004ee0| 27 3b 20 22 2c 20 2a 2a | 61 72 67 76 29 3b 0a 58 |'; ", **|argv);.X|
|00004ef0| 09 09 09 09 55 73 61 67 | 65 28 29 3b 0a 58 09 09 |....Usag|e();.X..|
|00004f00| 09 09 65 78 69 74 28 31 | 29 3b 0a 58 09 09 09 7d |..exit(1|);.X...}|
|00004f10| 0a 58 09 09 7d 0a 58 6e | 65 78 74 61 72 67 3a 3b |.X..}.Xn|extarg:;|
|00004f20| 0a 58 09 7d 0a 58 0a 58 | 23 69 66 64 65 66 20 69 |.X.}.X.X|#ifdef i|
|00004f30| 38 30 38 38 0a 58 09 69 | 66 20 28 21 20 74 61 62 |8088.X.i|f (! tab|
|00004f40| 61 6c 6c 6f 63 28 29 29 | 20 7b 0a 58 09 09 66 70 |alloc())| {.X..fp|
|00004f50| 72 69 6e 74 66 28 73 74 | 64 65 72 72 2c 20 22 63 |rintf(st|derr, "c|
|00004f60| 6f 6d 70 72 65 73 73 3a | 20 6f 75 74 20 6f 66 20 |ompress:| out of |
|00004f70| 6d 65 6d 6f 72 79 5c 6e | 22 29 3b 0a 58 09 09 65 |memory\n|");.X..e|
|00004f80| 78 69 74 28 31 29 3b 0a | 58 09 7d 0a 58 23 65 6e |xit(1);.|X.}.X#en|
|00004f90| 64 69 66 0a 58 09 2f 2a | 0a 58 09 20 2a 20 49 66 |dif.X./*|.X. * If|
|00004fa0| 20 6e 6f 20 66 69 6c 65 | 6e 61 6d 65 20 61 72 67 | no file|name arg|
|00004fb0| 73 2c 20 64 6f 20 73 74 | 61 6e 64 61 72 64 20 69 |s, do st|andard i|
|00004fc0| 6e 70 75 74 2e 0a 58 09 | 20 2a 2f 0a 58 09 69 66 |nput..X.| */.X.if|
|00004fd0| 20 28 61 72 67 63 20 3c | 3d 20 30 29 20 7b 0a 58 | (argc <|= 0) {.X|
|00004fe0| 09 09 69 66 20 28 21 20 | 69 66 6f 70 65 6e 28 28 |..if (! |ifopen((|
|00004ff0| 63 68 61 72 20 2a 29 30 | 29 20 7c 7c 20 21 20 6f |char *)0|) || ! o|
|00005000| 66 6f 70 65 6e 28 28 63 | 68 61 72 20 2a 29 30 29 |fopen((c|har *)0)|
|00005010| 29 0a 58 09 09 09 65 78 | 69 74 28 31 29 3b 0a 58 |).X...ex|it(1);.X|
|00005020| 0a 58 09 09 69 66 6e 61 | 6d 65 20 3d 20 22 73 74 |.X..ifna|me = "st|
|00005030| 64 69 6e 22 3b 0a 58 0a | 58 09 09 69 66 20 28 64 |din";.X.|X..if (d|
|00005040| 6f 5f 64 65 63 6f 6d 70 | 29 20 7b 0a 58 09 09 09 |o_decomp|) {.X...|
|00005050| 69 66 20 28 21 63 68 65 | 63 6b 5f 6d 61 67 69 63 |if (!che|ck_magic|
|00005060| 28 29 29 0a 58 09 09 09 | 09 65 78 69 74 28 31 29 |()).X...|.exit(1)|
|00005070| 3b 0a 58 09 09 09 64 65 | 63 6f 6d 70 72 65 73 73 |;.X...de|compress|
|00005080| 28 29 3b 0a 58 09 09 7d | 0a 58 09 09 65 6c 73 65 |();.X..}|.X..else|
|00005090| 20 7b 0a 58 09 09 09 63 | 6f 6d 70 72 65 73 73 28 | {.X...c|ompress(|
|000050a0| 29 3b 0a 58 09 09 09 69 | 66 20 28 76 65 72 62 6f |);.X...i|f (verbo|
|000050b0| 73 65 29 0a 58 09 09 09 | 09 70 75 74 63 28 27 5c |se).X...|.putc('\|
|000050c0| 6e 27 2c 20 73 74 64 65 | 72 72 29 3b 0a 58 09 09 |n', stde|rr);.X..|
|000050d0| 7d 0a 58 09 09 65 78 69 | 74 28 65 78 69 74 5f 73 |}.X..exi|t(exit_s|
|000050e0| 74 61 74 29 3b 0a 58 09 | 7d 0a 58 0a 58 09 77 68 |tat);.X.|}.X.X.wh|
|000050f0| 69 6c 65 20 28 2d 2d 61 | 72 67 63 20 3e 3d 20 30 |ile (--a|rgc >= 0|
|00005100| 29 20 7b 0a 58 09 09 63 | 68 61 72 20 2a 73 75 66 |) {.X..c|har *suf|
|00005110| 3b 0a 58 0a 58 09 09 69 | 66 6e 61 6d 65 20 3d 20 |;.X.X..i|fname = |
|00005120| 2a 61 72 67 76 2b 2b 3b | 0a 58 09 09 73 75 66 20 |*argv++;|.X..suf |
|00005130| 3d 20 73 74 72 72 63 68 | 72 28 69 66 6e 61 6d 65 |= strrch|r(ifname|
|00005140| 2c 20 27 2e 27 29 3b 0a | 58 0a 58 09 09 65 78 69 |, '.');.|X.X..exi|
|00005150| 74 5f 73 74 61 74 20 3d | 20 30 3b 0a 58 09 09 6f |t_stat =| 0;.X..o|
|00005160| 6b 75 6e 6c 69 6e 6b 20 | 3d 20 30 3b 0a 58 0a 58 |kunlink |= 0;.X.X|
|00005170| 09 09 69 66 20 28 64 6f | 5f 64 65 63 6f 6d 70 29 |..if (do|_decomp)|
|00005180| 20 7b 09 09 2f 2a 20 44 | 45 43 4f 4d 50 52 45 53 | {../* D|ECOMPRES|
|00005190| 53 49 4f 4e 20 2a 2f 0a | 58 09 09 09 69 66 20 28 |SION */.|X...if (|
|000051a0| 21 73 75 66 20 7c 7c 20 | 28 73 74 72 63 6d 70 28 |!suf || |(strcmp(|
|000051b0| 73 75 66 2c 20 22 2e 5a | 22 29 20 26 26 20 73 74 |suf, ".Z|") && st|
|000051c0| 72 63 6d 70 28 73 75 66 | 2c 20 22 2e 7a 22 29 29 |rcmp(suf|, ".z"))|
|000051d0| 29 20 7b 0a 58 09 09 09 | 09 73 74 72 63 70 79 28 |) {.X...|.strcpy(|
|000051e0| 74 65 6d 70 6e 61 6d 65 | 2c 20 69 66 6e 61 6d 65 |tempname|, ifname|
|000051f0| 29 3b 0a 58 09 09 09 09 | 73 74 72 63 61 74 28 74 |);.X....|strcat(t|
|00005200| 65 6d 70 6e 61 6d 65 2c | 20 22 2e 5a 22 29 3b 0a |empname,| ".Z");.|
|00005210| 58 09 09 09 09 69 66 6e | 61 6d 65 20 3d 20 74 65 |X....ifn|ame = te|
|00005220| 6d 70 6e 61 6d 65 3b 0a | 58 09 09 09 7d 0a 58 09 |mpname;.|X...}.X.|
|00005230| 09 09 69 66 20 28 21 20 | 69 66 6f 70 65 6e 28 69 |..if (! |ifopen(i|
|00005240| 66 6e 61 6d 65 29 20 7c | 7c 20 21 63 68 65 63 6b |fname) ||| !check|
|00005250| 5f 6d 61 67 69 63 28 29 | 29 0a 58 09 09 09 09 63 |_magic()|).X....c|
|00005260| 6f 6e 74 69 6e 75 65 3b | 0a 58 09 09 09 69 66 20 |ontinue;|.X...if |
|00005270| 28 7a 63 61 74 5f 66 6c | 67 29 0a 58 09 09 09 09 |(zcat_fl|g).X....|
|00005280| 6f 66 6e 61 6d 65 5b 30 | 5d 20 3d 20 27 5c 30 27 |ofname[0|] = '\0'|
|00005290| 3b 0a 58 09 09 09 65 6c | 73 65 20 7b 0a 58 09 09 |;.X...el|se {.X..|
|000052a0| 09 09 73 74 72 63 70 79 | 28 6f 66 6e 61 6d 65 2c |..strcpy|(ofname,|
|000052b0| 20 69 66 6e 61 6d 65 29 | 3b 0a 58 09 09 09 09 6f | ifname)|;.X....o|
|000052c0| 66 6e 61 6d 65 5b 73 74 | 72 6c 65 6e 28 69 66 6e |fname[st|rlen(ifn|
|000052d0| 61 6d 65 29 20 2d 20 32 | 5d 20 3d 20 27 5c 30 27 |ame) - 2|] = '\0'|
|000052e0| 3b 0a 58 09 09 09 7d 0a | 58 09 09 09 69 66 20 28 |;.X...}.|X...if (|
|000052f0| 21 6f 66 6f 70 65 6e 28 | 6f 66 6e 61 6d 65 29 29 |!ofopen(|ofname))|
|00005300| 0a 58 09 09 09 09 63 6f | 6e 74 69 6e 75 65 3b 0a |.X....co|ntinue;.|
|00005310| 58 09 09 09 69 66 20 28 | 21 7a 63 61 74 5f 66 6c |X...if (|!zcat_fl|
|00005320| 67 20 26 26 20 76 65 72 | 62 6f 73 65 29 0a 58 09 |g && ver|bose).X.|
|00005330| 09 09 09 66 70 72 69 6e | 74 66 28 73 74 64 65 72 |...fprin|tf(stder|
|00005340| 72 2c 20 22 25 73 3a 20 | 22 2c 20 69 66 6e 61 6d |r, "%s: |", ifnam|
|00005350| 65 29 3b 0a 58 09 09 09 | 64 65 63 6f 6d 70 72 65 |e);.X...|decompre|
|00005360| 73 73 28 29 3b 0a 58 09 | 09 7d 0a 58 09 09 65 6c |ss();.X.|.}.X..el|
|00005370| 73 65 20 7b 09 09 09 09 | 2f 2a 20 43 4f 4d 50 52 |se {....|/* COMPR|
|00005380| 45 53 53 49 4f 4e 20 2a | 2f 0a 58 09 09 09 69 66 |ESSION *|/.X...if|
|00005390| 20 28 73 75 66 20 26 26 | 20 28 21 73 74 72 63 6d | (suf &&| (!strcm|
|000053a0| 70 28 73 75 66 2c 20 22 | 2e 5a 22 29 20 7c 7c 20 |p(suf, "|.Z") || |
|000053b0| 21 73 74 72 63 6d 70 28 | 73 75 66 2c 20 22 2e 7a |!strcmp(|suf, ".z|
|000053c0| 22 29 29 29 20 7b 0a 58 | 09 09 09 09 66 70 72 69 |"))) {.X|....fpri|
|000053d0| 6e 74 66 28 73 74 64 65 | 72 72 2c 20 22 25 73 3a |ntf(stde|rr, "%s:|
|000053e0| 20 61 6c 72 65 61 64 79 | 20 68 61 73 20 2e 5a 20 | already| has .Z |
|000053f0| 73 75 66 66 69 78 20 2d | 2d 20 6e 6f 20 63 68 61 |suffix -|- no cha|
|00005400| 6e 67 65 5c 6e 22 2c 0a | 58 09 09 09 09 20 20 20 |nge\n",.|X.... |
|00005410| 20 69 66 6e 61 6d 65 29 | 3b 0a 58 09 09 09 09 63 | ifname)|;.X....c|
|00005420| 6f 6e 74 69 6e 75 65 3b | 0a 58 09 09 09 7d 0a 58 |ontinue;|.X...}.X|
|00005430| 09 09 09 69 66 20 28 21 | 20 69 66 6f 70 65 6e 28 |...if (!| ifopen(|
|00005440| 69 66 6e 61 6d 65 29 29 | 0a 58 09 09 09 09 63 6f |ifname))|.X....co|
|00005450| 6e 74 69 6e 75 65 3b 0a | 58 09 09 09 69 66 20 28 |ntinue;.|X...if (|
|00005460| 7a 63 61 74 5f 66 6c 67 | 29 0a 58 09 09 09 09 6f |zcat_flg|).X....o|
|00005470| 66 6e 61 6d 65 5b 30 5d | 20 3d 20 30 3b 0a 58 09 |fname[0]| = 0;.X.|
|00005480| 09 09 65 6c 73 65 20 7b | 0a 58 09 09 09 09 73 74 |..else {|.X....st|
|00005490| 72 63 70 79 28 6f 66 6e | 61 6d 65 2c 20 69 66 6e |rcpy(ofn|ame, ifn|
|000054a0| 61 6d 65 29 3b 0a 58 23 | 69 66 6e 64 65 66 20 4d |ame);.X#|ifndef M|
|000054b0| 53 44 4f 53 09 2f 2a 20 | 57 65 27 6c 6c 20 6c 65 |SDOS./* |We'll le|
|000054c0| 74 20 6f 66 6f 70 65 6e | 20 64 6f 20 74 68 65 20 |t ofopen| do the |
|000054d0| 63 6f 6d 70 6c 61 69 6e | 69 6e 67 20 2a 2f 0a 58 |complain|ing */.X|
|000054e0| 23 69 66 6e 64 65 66 20 | 42 53 44 34 5f 32 0a 58 |#ifndef |BSD4_2.X|
|000054f0| 09 09 09 09 69 66 20 28 | 28 63 70 20 3d 20 73 74 |....if (|(cp = st|
|00005500| 72 72 63 68 72 28 6f 66 | 6e 61 6d 65 2c 20 27 2f |rrchr(of|name, '/|
|00005510| 27 29 29 20 21 3d 20 4e | 55 4c 4c 29 0a 58 09 09 |')) != N|ULL).X..|
|00005520| 09 09 09 63 70 2b 2b 3b | 0a 58 09 09 09 09 65 6c |...cp++;|.X....el|
|00005530| 73 65 0a 58 09 09 09 09 | 09 63 70 20 3d 20 6f 66 |se.X....|.cp = of|
|00005540| 6e 61 6d 65 3b 0a 58 09 | 09 09 09 69 66 20 28 73 |name;.X.|...if (s|
|00005550| 74 72 6c 65 6e 28 63 70 | 29 20 3e 20 31 32 29 20 |trlen(cp|) > 12) |
|00005560| 7b 0a 58 09 09 09 09 09 | 66 70 72 69 6e 74 66 28 |{.X.....|fprintf(|
|00005570| 73 74 64 65 72 72 2c 22 | 25 73 3a 20 66 69 6c 65 |stderr,"|%s: file|
|00005580| 6e 61 6d 65 20 74 6f 6f | 20 6c 6f 6e 67 20 74 6f |name too| long to|
|00005590| 20 74 61 63 6b 20 6f 6e | 20 2e 5a 5c 6e 22 2c 63 | tack on| .Z\n",c|
|000055a0| 70 29 3b 0a 58 09 09 09 | 09 09 63 6f 6e 74 69 6e |p);.X...|..contin|
|000055b0| 75 65 3b 0a 58 09 09 09 | 09 7d 0a 58 23 65 6e 64 |ue;.X...|.}.X#end|
|000055c0| 69 66 0a 58 23 65 6e 64 | 69 66 0a 58 09 09 09 09 |if.X#end|if.X....|
|000055d0| 73 74 72 63 61 74 28 6f | 66 6e 61 6d 65 2c 20 22 |strcat(o|fname, "|
|000055e0| 2e 5a 22 29 3b 0a 58 09 | 09 09 7d 0a 58 09 09 09 |.Z");.X.|..}.X...|
|000055f0| 69 66 20 28 21 20 6f 66 | 6f 70 65 6e 28 6f 66 6e |if (! of|open(ofn|
|00005600| 61 6d 65 29 29 0a 58 09 | 09 09 09 63 6f 6e 74 69 |ame)).X.|...conti|
|00005610| 6e 75 65 3b 0a 58 09 09 | 09 69 66 20 28 21 20 7a |nue;.X..|.if (! z|
|00005620| 63 61 74 5f 66 6c 67 20 | 26 26 20 76 65 72 62 6f |cat_flg |&& verbo|
|00005630| 73 65 29 0a 58 09 09 09 | 09 66 70 72 69 6e 74 66 |se).X...|.fprintf|
|00005640| 28 73 74 64 65 72 72 2c | 20 22 25 73 3a 20 22 2c |(stderr,| "%s: ",|
|00005650| 20 69 66 6e 61 6d 65 29 | 3b 0a 58 09 09 09 63 6f | ifname)|;.X...co|
|00005660| 6d 70 72 65 73 73 28 29 | 3b 0a 58 09 09 7d 0a 58 |mpress()|;.X..}.X|
|00005670| 0a 58 09 09 69 66 20 28 | 21 20 7a 63 61 74 5f 66 |.X..if (|! zcat_f|
|00005680| 6c 67 29 20 7b 0a 58 09 | 09 09 63 6f 70 79 73 74 |lg) {.X.|..copyst|
|00005690| 61 74 28 29 3b 0a 58 09 | 09 09 69 66 20 28 28 65 |at();.X.|..if ((e|
|000056a0| 78 69 74 5f 73 74 61 74 | 20 3d 3d 20 31 29 20 7c |xit_stat| == 1) ||
|000056b0| 7c 20 76 65 72 62 6f 73 | 65 29 0a 58 09 09 09 09 || verbos|e).X....|
|000056c0| 70 75 74 63 28 27 5c 6e | 27 2c 20 73 74 64 65 72 |putc('\n|', stder|
|000056d0| 72 29 3b 0a 58 09 09 7d | 0a 58 09 7d 0a 58 09 65 |r);.X..}|.X.}.X.e|
|000056e0| 78 69 74 28 65 78 69 74 | 5f 73 74 61 74 29 3b 0a |xit(exit|_stat);.|
|000056f0| 58 7d 0a 58 0a 58 2f 2a | 0a 58 20 2a 20 63 6f 6d |X}.X.X/*|.X * com|
|00005700| 70 72 65 73 73 20 73 74 | 64 69 6e 20 74 6f 20 73 |press st|din to s|
|00005710| 74 64 6f 75 74 0a 58 20 | 2a 0a 58 20 2a 20 41 6c |tdout.X |*.X * Al|
|00005720| 67 6f 72 69 74 68 6d 3a | 20 20 75 73 65 20 6f 70 |gorithm:| use op|
|00005730| 65 6e 20 61 64 64 72 65 | 73 73 69 6e 67 20 64 6f |en addre|ssing do|
|00005740| 75 62 6c 65 20 68 61 73 | 68 69 6e 67 20 28 6e 6f |uble has|hing (no|
|00005750| 20 63 68 61 69 6e 69 6e | 67 29 20 6f 6e 20 74 68 | chainin|g) on th|
|00005760| 65 20 0a 58 20 2a 20 70 | 72 65 66 69 78 20 63 6f |e .X * p|refix co|
|00005770| 64 65 20 2f 20 6e 65 78 | 74 20 63 68 61 72 61 63 |de / nex|t charac|
|00005780| 74 65 72 20 63 6f 6d 62 | 69 6e 61 74 69 6f 6e 2e |ter comb|ination.|
|00005790| 20 20 57 65 20 64 6f 20 | 61 20 76 61 72 69 61 6e | We do |a varian|
|000057a0| 74 20 6f 66 20 4b 6e 75 | 74 68 27 73 0a 58 20 2a |t of Knu|th's.X *|
|000057b0| 20 61 6c 67 6f 72 69 74 | 68 6d 20 44 20 28 76 6f | algorit|hm D (vo|
|000057c0| 6c 2e 20 33 2c 20 73 65 | 63 2e 20 36 2e 34 29 20 |l. 3, se|c. 6.4) |
|000057d0| 61 6c 6f 6e 67 20 77 69 | 74 68 20 47 2e 20 4b 6e |along wi|th G. Kn|
|000057e0| 6f 74 74 27 73 20 72 65 | 6c 61 74 69 76 65 6c 79 |ott's re|latively|
|000057f0| 2d 70 72 69 6d 65 0a 58 | 20 2a 20 73 65 63 6f 6e |-prime.X| * secon|
|00005800| 64 61 72 79 20 70 72 6f | 62 65 2e 20 20 48 65 72 |dary pro|be. Her|
|00005810| 65 2c 20 74 68 65 20 6d | 6f 64 75 6c 61 72 20 64 |e, the m|odular d|
|00005820| 69 76 69 73 69 6f 6e 20 | 66 69 72 73 74 20 70 72 |ivision |first pr|
|00005830| 6f 62 65 20 69 73 20 67 | 69 76 65 73 20 77 61 79 |obe is g|ives way|
|00005840| 0a 58 20 2a 20 74 6f 20 | 61 20 66 61 73 74 65 72 |.X * to |a faster|
|00005850| 20 65 78 63 6c 75 73 69 | 76 65 2d 6f 72 20 6d 61 | exclusi|ve-or ma|
|00005860| 6e 69 70 75 6c 61 74 69 | 6f 6e 2e 20 20 41 6c 73 |nipulati|on. Als|
|00005870| 6f 20 64 6f 20 62 6c 6f | 63 6b 20 63 6f 6d 70 72 |o do blo|ck compr|
|00005880| 65 73 73 69 6f 6e 20 77 | 69 74 68 0a 58 20 2a 20 |ession w|ith.X * |
|00005890| 61 6e 20 61 64 61 70 74 | 69 76 65 20 72 65 73 65 |an adapt|ive rese|
|000058a0| 74 2c 20 77 68 65 72 65 | 62 79 20 74 68 65 20 63 |t, where|by the c|
|000058b0| 6f 64 65 20 74 61 62 6c | 65 20 69 73 20 63 6c 65 |ode tabl|e is cle|
|000058c0| 61 72 65 64 20 77 68 65 | 6e 20 74 68 65 20 63 6f |ared whe|n the co|
|000058d0| 6d 70 72 65 73 73 69 6f | 6e 0a 58 20 2a 20 72 61 |mpressio|n.X * ra|
|000058e0| 74 69 6f 20 64 65 63 72 | 65 61 73 65 73 2c 20 62 |tio decr|eases, b|
|000058f0| 75 74 20 61 66 74 65 72 | 20 74 68 65 20 74 61 62 |ut after| the tab|
|00005900| 6c 65 20 66 69 6c 6c 73 | 2e 20 20 54 68 65 20 76 |le fills|. The v|
|00005910| 61 72 69 61 62 6c 65 2d | 6c 65 6e 67 74 68 20 6f |ariable-|length o|
|00005920| 75 74 70 75 74 0a 58 20 | 2a 20 63 6f 64 65 73 20 |utput.X |* codes |
|00005930| 61 72 65 20 72 65 2d 73 | 69 7a 65 64 20 61 74 20 |are re-s|ized at |
|00005940| 74 68 69 73 20 70 6f 69 | 6e 74 2c 20 61 6e 64 20 |this poi|nt, and |
|00005950| 61 20 73 70 65 63 69 61 | 6c 20 43 4c 45 41 52 20 |a specia|l CLEAR |
|00005960| 63 6f 64 65 20 69 73 20 | 67 65 6e 65 72 61 74 65 |code is |generate|
|00005970| 64 0a 58 20 2a 20 66 6f | 72 20 74 68 65 20 64 65 |d.X * fo|r the de|
|00005980| 63 6f 6d 70 72 65 73 73 | 6f 72 2e 20 20 4c 61 74 |compress|or. Lat|
|00005990| 65 20 61 64 64 69 74 69 | 6f 6e 3a 20 20 63 6f 6e |e additi|on: con|
|000059a0| 73 74 72 75 63 74 20 74 | 68 65 20 74 61 62 6c 65 |struct t|he table|
|000059b0| 20 61 63 63 6f 72 64 69 | 6e 67 20 74 6f 0a 58 20 | accordi|ng to.X |
|000059c0| 2a 20 66 69 6c 65 20 73 | 69 7a 65 20 66 6f 72 20 |* file s|ize for |
|000059d0| 6e 6f 74 69 63 65 61 62 | 6c 65 20 73 70 65 65 64 |noticeab|le speed|
|000059e0| 20 69 6d 70 72 6f 76 65 | 6d 65 6e 74 20 6f 6e 20 | improve|ment on |
|000059f0| 73 6d 61 6c 6c 20 66 69 | 6c 65 73 2e 20 20 50 6c |small fi|les. Pl|
|00005a00| 65 61 73 65 20 64 69 72 | 65 63 74 0a 58 20 2a 20 |ease dir|ect.X * |
|00005a10| 71 75 65 73 74 69 6f 6e | 73 20 61 62 6f 75 74 20 |question|s about |
|00005a20| 74 68 69 73 20 69 6d 70 | 6c 65 6d 65 6e 74 61 74 |this imp|lementat|
|00005a30| 69 6f 6e 20 74 6f 20 61 | 6d 65 73 21 6a 61 77 2e |ion to a|mes!jaw.|
|00005a40| 0a 58 20 2a 0a 58 20 2a | 20 53 65 63 6f 6e 64 61 |.X *.X *| Seconda|
|00005a50| 72 79 20 68 61 73 68 20 | 66 75 6e 63 74 69 6f 6e |ry hash |function|
|00005a60| 20 63 68 61 6e 67 65 64 | 20 73 6c 69 67 68 74 6c | changed| slightl|
|00005a70| 79 20 66 6f 72 20 44 4f | 53 2e 20 48 61 73 68 20 |y for DO|S. Hash |
|00005a80| 74 61 62 6c 65 20 75 73 | 65 64 20 74 6f 20 62 65 |table us|ed to be|
|00005a90| 0a 58 20 2a 20 3e 20 36 | 34 4b 2e 20 54 68 69 73 |.X * > 6|4K. This|
|00005aa0| 20 69 73 20 73 6c 6f 77 | 20 6f 6e 20 61 20 31 36 | is slow| on a 16|
|00005ab0| 20 62 69 74 20 6d 61 63 | 68 69 6e 65 20 62 65 63 | bit mac|hine bec|
|00005ac0| 61 75 73 65 20 69 74 20 | 6d 65 61 6e 73 20 6c 6f |ause it |means lo|
|00005ad0| 6e 67 20 61 72 69 74 68 | 6d 65 74 69 63 2c 0a 58 |ng arith|metic,.X|
|00005ae0| 20 2a 20 61 6e 64 20 6d | 6f 72 65 20 63 6f 6d 70 | * and m|ore comp|
|00005af0| 6c 69 63 61 74 65 64 20 | 61 64 64 72 65 73 73 69 |licated |addressi|
|00005b00| 6e 67 20 6f 66 20 74 61 | 62 6c 65 73 20 69 6e 20 |ng of ta|bles in |
|00005b10| 74 68 65 20 66 61 72 20 | 61 64 64 72 65 73 73 20 |the far |address |
|00005b20| 73 70 61 63 65 2e 0a 58 | 20 2a 20 57 65 20 6e 6f |space..X| * We no|
|00005b30| 77 20 72 65 73 74 72 69 | 63 74 20 74 68 65 20 74 |w restri|ct the t|
|00005b40| 61 62 6c 65 20 73 69 7a | 65 20 74 6f 20 36 34 4b |able siz|e to 64K|
|00005b50| 2c 20 61 6e 64 2c 20 73 | 6f 20 74 68 61 74 20 74 |, and, s|o that t|
|00005b60| 68 65 20 74 61 62 6c 65 | 20 64 6f 65 73 0a 58 20 |he table| does.X |
|00005b70| 2a 20 6e 6f 74 20 6f 76 | 65 72 66 69 6c 6c 2c 20 |* not ov|erfill, |
|00005b80| 72 65 73 74 72 69 63 74 | 20 74 68 65 20 63 6f 64 |restrict| the cod|
|00005b90| 65 73 20 74 68 61 74 20 | 77 65 20 77 69 6c 6c 20 |es that |we will |
|00005ba0| 67 65 6e 65 72 61 74 65 | 20 74 6f 20 4d 41 58 4d |generate| to MAXM|
|00005bb0| 41 58 43 4f 44 45 2e 0a | 58 20 2a 20 54 68 69 73 |AXCODE..|X * This|
|00005bc0| 20 63 61 75 73 65 73 20 | 73 6c 69 67 68 74 6c 79 | causes |slightly|
|00005bd0| 20 70 6f 6f 72 65 72 20 | 63 6f 6d 70 72 65 73 73 | poorer |compress|
|00005be0| 69 6f 6e 20 69 6e 20 73 | 6f 6d 65 20 63 61 73 65 |ion in s|ome case|
|00005bf0| 73 2c 20 62 75 74 2c 20 | 69 6e 74 65 72 65 73 74 |s, but, |interest|
|00005c00| 69 6e 67 6c 79 0a 58 20 | 2a 20 65 6e 6f 75 67 68 |ingly.X |* enough|
|00005c10| 2c 20 61 6c 73 6f 20 63 | 61 75 73 65 73 20 62 65 |, also c|auses be|
|00005c20| 74 74 65 72 20 63 6f 6d | 70 72 65 73 73 69 6f 6e |tter com|pression|
|00005c30| 20 72 61 74 69 6f 73 20 | 69 6e 20 63 65 72 74 61 | ratios |in certa|
|00005c40| 69 6e 20 6f 74 68 65 72 | 20 63 61 73 65 73 2e 0a |in other| cases..|
|00005c50| 58 20 2a 20 59 65 73 2c | 20 74 68 69 73 20 69 73 |X * Yes,| this is|
|00005c60| 20 61 6c 6c 20 63 6f 6d | 70 61 74 69 62 6c 65 20 | all com|patible |
|00005c70| 77 69 74 68 20 6f 74 68 | 65 72 20 63 6f 6d 70 72 |with oth|er compr|
|00005c80| 65 73 73 65 73 2e 0a 58 | 20 2a 2f 0a 58 73 74 61 |esses..X| */.Xsta|
|00005c90| 74 69 63 20 6c 6f 6e 67 | 09 69 6e 5f 63 6f 75 6e |tic long|.in_coun|
|00005ca0| 74 3b 09 09 2f 2a 20 6c | 65 6e 67 74 68 20 6f 66 |t;../* l|ength of|
|00005cb0| 20 69 6e 70 75 74 20 2a | 2f 0a 58 73 74 61 74 69 | input *|/.Xstati|
|00005cc0| 63 20 6c 6f 6e 67 09 6f | 75 74 5f 63 6f 75 6e 74 |c long.o|ut_count|
|00005cd0| 3b 09 09 2f 2a 20 6c 65 | 6e 67 74 68 20 6f 66 20 |;../* le|ngth of |
|00005ce0| 63 6f 6d 70 72 65 73 73 | 65 64 20 6f 75 74 70 75 |compress|ed outpu|
|00005cf0| 74 20 2a 2f 0a 58 73 74 | 61 74 69 63 20 6c 6f 6e |t */.Xst|atic lon|
|00005d00| 67 09 72 61 74 69 6f 3b | 09 09 09 2f 2a 20 69 6e |g.ratio;|.../* in|
|00005d10| 5f 63 6f 75 6e 74 2f 6f | 75 74 5f 63 6f 75 6e 74 |_count/o|ut_count|
|00005d20| 20 2a 20 32 35 36 20 2a | 2f 0a 58 73 74 61 74 69 | * 256 *|/.Xstati|
|00005d30| 63 20 69 6e 74 09 6e 5f | 62 69 74 73 3b 09 09 09 |c int.n_|bits;...|
|00005d40| 2f 2a 20 6e 75 6d 62 65 | 72 20 6f 66 20 62 69 74 |/* numbe|r of bit|
|00005d50| 73 2f 63 6f 64 65 20 2a | 2f 0a 58 73 74 61 74 69 |s/code *|/.Xstati|
|00005d60| 63 20 69 6e 74 09 6e 5f | 62 69 74 73 38 3b 09 09 |c int.n_|bits8;..|
|00005d70| 2f 2a 20 62 69 74 73 2f | 63 6f 64 65 20 74 69 6d |/* bits/|code tim|
|00005d80| 65 73 20 38 20 2a 2f 0a | 58 73 74 61 74 69 63 20 |es 8 */.|Xstatic |
|00005d90| 69 6e 74 09 62 69 74 6f | 66 66 73 65 74 3b 09 09 |int.bito|ffset;..|
|00005da0| 2f 2a 20 4f 66 66 73 65 | 74 20 69 6e 74 6f 20 62 |/* Offse|t into b|
|00005db0| 69 74 62 75 66 20 2a 2f | 0a 58 0a 58 23 64 65 66 |itbuf */|.X.X#def|
|00005dc0| 69 6e 65 20 4e 4f 45 4e | 54 09 09 28 28 63 6f 64 |ine NOEN|T..((cod|
|00005dd0| 65 5f 74 29 30 78 66 66 | 66 66 29 0a 58 23 64 65 |e_t)0xff|ff).X#de|
|00005de0| 66 69 6e 65 20 4d 41 58 | 4d 41 58 43 4f 44 45 09 |fine MAX|MAXCODE.|
|00005df0| 28 28 63 6f 64 65 5f 74 | 29 30 78 66 30 30 30 29 |((code_t|)0xf000)|
|00005e00| 0a 58 0a 58 2f 2a 0a 58 | 20 2a 20 43 6c 65 61 72 |.X.X/*.X| * Clear|
|00005e10| 20 6f 75 74 20 74 68 65 | 20 68 61 73 68 20 74 61 | out the| hash ta|
|00005e20| 62 6c 65 2e 20 57 65 20 | 74 72 79 20 74 6f 20 64 |ble. We |try to d|
|00005e30| 6f 20 74 68 69 73 20 61 | 73 20 71 75 69 63 6b 6c |o this a|s quickl|
|00005e40| 79 20 61 73 20 70 6f 73 | 73 69 62 6c 65 2c 20 62 |y as pos|sible, b|
|00005e50| 65 63 61 75 73 65 0a 58 | 20 2a 20 69 74 27 73 20 |ecause.X| * it's |
|00005e60| 72 75 6e 6e 69 6e 67 20 | 74 69 6d 65 20 64 6f 6d |running |time dom|
|00005e70| 69 6e 61 74 65 73 20 66 | 6f 72 20 73 6d 61 6c 6c |inates f|or small|
|00005e80| 20 66 69 6c 65 73 2e 20 | 46 6f 72 20 62 69 67 20 | files. |For big |
|00005e90| 66 69 6c 65 73 2c 20 69 | 74 20 64 6f 65 73 6e 27 |files, i|t doesn'|
|00005ea0| 74 20 6d 61 74 74 65 72 | 0a 58 20 2a 20 6d 75 63 |t matter|.X * muc|
|00005eb0| 68 20 62 65 63 61 75 73 | 65 20 69 74 20 64 6f 65 |h becaus|e it doe|
|00005ec0| 73 6e 27 74 20 67 65 74 | 20 63 61 6c 6c 65 64 20 |sn't get| called |
|00005ed0| 6f 66 74 65 6e 2e 20 4e | 6f 77 20 49 20 75 6e 64 |often. N|ow I und|
|00005ee0| 65 72 73 74 61 6e 64 20 | 77 68 79 20 74 68 65 20 |erstand |why the |
|00005ef0| 6f 72 69 67 69 6e 61 6c | 0a 58 20 2a 20 68 61 64 |original|.X * had|
|00005f00| 20 61 20 76 61 72 69 61 | 62 6c 65 20 73 69 7a 65 | a varia|ble size|
|00005f10| 20 68 61 73 68 20 74 61 | 62 6c 65 2e 0a 58 20 2a | hash ta|ble..X *|
|00005f20| 2f 0a 58 76 6f 69 64 20 | 63 6c 65 61 72 68 61 73 |/.Xvoid |clearhas|
|00005f30| 68 28 29 0a 58 7b 0a 58 | 23 69 66 64 65 66 20 69 |h().X{.X|#ifdef i|
|00005f40| 38 30 38 38 0a 58 09 72 | 65 67 69 73 74 65 72 20 |8088.X.r|egister |
|00005f50| 75 6e 73 69 67 6e 65 64 | 20 69 3b 0a 58 09 63 6f |unsigned| i;.X.co|
|00005f60| 64 65 5f 74 20 66 61 72 | 20 2a 68 70 3b 0a 58 0a |de_t far| *hp;.X.|
|00005f70| 58 09 68 70 20 3d 20 28 | 63 6f 64 65 5f 74 20 66 |X.hp = (|code_t f|
|00005f80| 61 72 20 2a 29 63 6f 64 | 65 70 74 72 73 31 5b 30 |ar *)cod|eptrs1[0|
|00005f90| 5d 3b 0a 58 09 69 20 3d | 20 28 75 6e 73 69 67 6e |];.X.i =| (unsign|
|00005fa0| 65 64 29 28 48 53 49 5a | 45 2f 32 29 3b 0a 58 09 |ed)(HSIZ|E/2);.X.|
|00005fb0| 64 6f 0a 58 09 09 2a 68 | 70 2b 2b 20 3d 20 4e 4f |do.X..*h|p++ = NO|
|00005fc0| 45 4e 54 3b 0a 58 09 77 | 68 69 6c 65 20 28 2d 2d |ENT;.X.w|hile (--|
|00005fd0| 69 20 3e 20 30 29 3b 0a | 58 0a 58 09 68 70 20 3d |i > 0);.|X.X.hp =|
|00005fe0| 20 28 63 6f 64 65 5f 74 | 20 66 61 72 20 2a 29 63 | (code_t| far *)c|
|00005ff0| 6f 64 65 70 74 72 73 31 | 5b 31 5d 3b 0a 58 09 69 |odeptrs1|[1];.X.i|
|00006000| 20 3d 20 28 75 6e 73 69 | 67 6e 65 64 29 28 48 53 | = (unsi|gned)(HS|
|00006010| 49 5a 45 2f 32 29 3b 0a | 58 09 64 6f 0a 58 09 09 |IZE/2);.|X.do.X..|
|00006020| 2a 68 70 2b 2b 20 3d 20 | 4e 4f 45 4e 54 3b 0a 58 |*hp++ = |NOENT;.X|
|00006030| 09 77 68 69 6c 65 20 28 | 2d 2d 69 20 3e 20 30 29 |.while (|--i > 0)|
|00006040| 3b 0a 58 23 65 6c 73 65 | 0a 58 09 2f 2a 0a 58 09 |;.X#else|.X./*.X.|
|00006050| 20 2a 20 57 41 52 4e 49 | 4e 47 3a 20 61 73 73 75 | * WARNI|NG: assu|
|00006060| 6d 65 73 20 74 68 61 74 | 20 4e 4f 45 4e 54 20 3d |mes that| NOENT =|
|00006070| 3d 20 30 78 66 66 66 66 | 0a 58 09 20 2a 2f 0a 58 |= 0xffff|.X. */.X|
|00006080| 09 6d 65 6d 73 65 74 28 | 28 63 68 61 72 20 2a 29 |.memset(|(char *)|
|00006090| 63 6f 64 65 74 61 62 31 | 2c 20 30 78 66 66 2c 20 |codetab1|, 0xff, |
|000060a0| 48 53 49 5a 45 2a 73 69 | 7a 65 6f 66 28 63 6f 64 |HSIZE*si|zeof(cod|
|000060b0| 65 5f 74 29 29 3b 0a 58 | 23 65 6e 64 69 66 0a 58 |e_t));.X|#endif.X|
|000060c0| 7d 0a 58 0a 58 2f 2a 0a | 58 20 2a 20 43 6f 6d 70 |}.X.X/*.|X * Comp|
|000060d0| 72 65 73 73 20 73 74 64 | 69 6e 20 74 6f 20 73 74 |ress std|in to st|
|000060e0| 64 6f 75 74 2e 0a 58 20 | 2a 2f 0a 58 76 6f 69 64 |dout..X |*/.Xvoid|
|000060f0| 20 63 6f 6d 70 72 65 73 | 73 28 29 0a 58 7b 0a 58 | compres|s().X{.X|
|00006100| 09 72 65 67 69 73 74 65 | 72 20 68 61 73 68 5f 74 |.registe|r hash_t|
|00006110| 09 69 3b 0a 58 09 72 65 | 67 69 73 74 65 72 20 63 |.i;.X.re|gister c|
|00006120| 6f 64 65 5f 74 09 65 6e | 74 3b 0a 58 09 68 61 73 |ode_t.en|t;.X.has|
|00006130| 68 5f 74 09 09 64 69 73 | 70 3b 0a 58 09 69 6e 74 |h_t..dis|p;.X.int|
|00006140| 09 09 63 3b 0a 58 09 63 | 6f 64 65 5f 74 09 09 66 |..c;.X.c|ode_t..f|
|00006150| 72 65 65 63 6f 64 65 3b | 09 2f 2a 20 66 69 72 73 |reecode;|./* firs|
|00006160| 74 20 75 6e 75 73 65 64 | 20 65 6e 74 72 79 20 2a |t unused| entry *|
|00006170| 2f 0a 58 09 63 6f 64 65 | 5f 74 09 09 6d 61 78 63 |/.X.code|_t..maxc|
|00006180| 6f 64 65 3b 09 2f 2a 20 | 6d 61 78 69 6d 75 6d 20 |ode;./* |maximum |
|00006190| 63 6f 64 65 2c 20 67 69 | 76 65 6e 20 6e 5f 62 69 |code, gi|ven n_bi|
|000061a0| 74 73 20 2a 2f 0a 58 09 | 63 6f 64 65 5f 74 09 09 |ts */.X.|code_t..|
|000061b0| 6d 61 78 6d 61 78 63 6f | 64 65 3b 0a 58 09 63 6f |maxmaxco|de;.X.co|
|000061c0| 64 65 5f 74 09 09 6b 3b | 0a 58 23 69 66 64 65 66 |de_t..k;|.X#ifdef|
|000061d0| 20 43 48 45 43 4b 5f 47 | 41 50 0a 58 09 6c 6f 6e | CHECK_G|AP.X.lon|
|000061e0| 67 09 09 63 68 65 63 6b | 70 6f 69 6e 74 20 3d 20 |g..check|point = |
|000061f0| 30 3b 0a 58 23 65 6e 64 | 69 66 0a 58 0a 58 09 69 |0;.X#end|if.X.X.i|
|00006200| 66 20 28 6d 61 78 62 69 | 74 73 20 3c 20 49 4e 49 |f (maxbi|ts < INI|
|00006210| 54 5f 42 49 54 53 29 0a | 58 09 09 6d 61 78 62 69 |T_BITS).|X..maxbi|
|00006220| 74 73 20 3d 20 49 4e 49 | 54 5f 42 49 54 53 3b 0a |ts = INI|T_BITS;.|
|00006230| 58 09 69 66 20 28 6d 61 | 78 62 69 74 73 20 3e 20 |X.if (ma|xbits > |
|00006240| 42 49 54 53 29 0a 58 09 | 09 6d 61 78 62 69 74 73 |BITS).X.|.maxbits|
|00006250| 20 3d 20 42 49 54 53 3b | 0a 58 0a 58 09 69 66 20 | = BITS;|.X.X.if |
|00006260| 28 6d 61 67 69 63 29 20 | 7b 0a 58 09 09 70 75 74 |(magic) |{.X..put|
|00006270| 63 68 61 72 28 4d 41 47 | 49 43 30 29 3b 20 70 75 |char(MAG|IC0); pu|
|00006280| 74 63 68 61 72 28 4d 41 | 47 49 43 31 29 3b 0a 58 |tchar(MA|GIC1);.X|
|00006290| 09 09 70 75 74 63 68 61 | 72 28 6d 61 78 62 69 74 |..putcha|r(maxbit|
|000062a0| 73 20 7c 20 62 6c 6f 63 | 6b 5f 63 6f 6d 70 72 65 |s | bloc|k_compre|
|000062b0| 73 73 29 3b 0a 58 09 09 | 69 66 20 28 66 65 72 72 |ss);.X..|if (ferr|
|000062c0| 6f 72 28 73 74 64 6f 75 | 74 29 29 0a 58 09 09 09 |or(stdou|t)).X...|
|000062d0| 77 72 69 74 65 65 72 72 | 28 29 3b 0a 58 09 7d 0a |writeerr|();.X.}.|
|000062e0| 58 0a 58 09 62 69 74 62 | 75 66 5b 62 69 74 6f 66 |X.X.bitb|uf[bitof|
|000062f0| 66 73 65 74 20 3d 20 30 | 5d 20 3d 20 30 3b 0a 58 |fset = 0|] = 0;.X|
|00006300| 09 6f 75 74 5f 63 6f 75 | 6e 74 20 3d 20 33 3b 09 |.out_cou|nt = 3;.|
|00006310| 09 09 2f 2a 20 69 6e 63 | 6c 75 64 65 73 20 33 2d |../* inc|ludes 3-|
|00006320| 62 79 74 65 20 68 65 61 | 64 65 72 20 6d 6f 6a 6f |byte hea|der mojo|
|00006330| 20 2a 2f 0a 58 09 72 61 | 74 69 6f 20 3d 20 30 3b | */.X.ra|tio = 0;|
|00006340| 0a 58 09 69 6e 5f 63 6f | 75 6e 74 20 3d 20 31 3b |.X.in_co|unt = 1;|
|00006350| 0a 58 0a 58 09 6e 5f 62 | 69 74 73 20 3d 20 49 4e |.X.X.n_b|its = IN|
|00006360| 49 54 5f 42 49 54 53 3b | 0a 58 09 6e 5f 62 69 74 |IT_BITS;|.X.n_bit|
|00006370| 73 38 20 3d 20 49 4e 49 | 54 5f 42 49 54 53 20 3c |s8 = INI|T_BITS <|
|00006380| 3c 20 33 3b 0a 58 09 6d | 61 78 63 6f 64 65 20 3d |< 3;.X.m|axcode =|
|00006390| 20 4d 41 58 43 4f 44 45 | 28 49 4e 49 54 5f 42 49 | MAXCODE|(INIT_BI|
|000063a0| 54 53 29 3b 0a 58 09 6d | 61 78 6d 61 78 63 6f 64 |TS);.X.m|axmaxcod|
|000063b0| 65 20 3d 20 4d 41 58 43 | 4f 44 45 28 6d 61 78 62 |e = MAXC|ODE(maxb|
|000063c0| 69 74 73 29 3b 0a 58 09 | 69 66 20 28 6d 61 78 6d |its);.X.|if (maxm|
|000063d0| 61 78 63 6f 64 65 20 3e | 20 4d 41 58 4d 41 58 43 |axcode >| MAXMAXC|
|000063e0| 4f 44 45 29 0a 58 09 09 | 6d 61 78 6d 61 78 63 6f |ODE).X..|maxmaxco|
|000063f0| 64 65 20 3d 20 4d 41 58 | 4d 41 58 43 4f 44 45 3b |de = MAX|MAXCODE;|
+--------+-------------------------+-------------------------+--------+--------+
Only 25.0 KB of data is shown above.