Path: utzoo!utgpu!watmath!iuvax!bsu-cs!ibmbin From: c31293%tansei.cc.u-tokyo.ac.jp@RELAY.CS.NET (Kenji Rikitake) Newsgroups: comp.binaries.ibm.pc Subject: v02i042: C source for lharc's LZHuff compression algorithm Summary: lzhsrc10.arc, C source for lharc's LZHuff compression algorithm Message-ID: <6558@bsu-cs.UUCP> Date: 6 Apr 89 01:00:33 GMT Sender: ibmbin@bsu-cs.UUCP Followup-To: comp.binaries.ibm.pc.d Lines: 209 Approved: dhesi@bsu-cs.bsu.edu X-Submissions-to: ibmpc-binaries@bsu-cs.bsu.edu X-Questions-to: ibmpc-binaries-request@bsu-cs.bsu.edu Checksum: 4042323451 (Verify with "brik -cv") Posting-number: Volume 02, Issue 042 Originally-from: Haruhiko Okumura, Haruyasu Yoshizaki, & Kenji Rikitake Submitted-by: Kenji Rikitake Archive-name: lharc/lzhsrc10.uue [ US users should note that the cost of international email is usually borne by the non-US recipient or sender. -- R.D. ] Following is a source code of single-file compression/uncompresssion program. It has the same compression algorithm with LHarc. I have got a permission to post this to the USENET community from Haruyasu Yoshizaki. -- Kenji [ From the source: * LZHUF.C English version 1.0 * Based on Japanese version 29-NOV-1988 * LZSS coded by Haruhiko OKUMURA * Adaptive Huffman Coding coded by Haruyasu YOSHIZAKI * Edited and translated to English by Kenji RIKITAKE The source is fairly generic but has a few ANSI-specific features such as memmove() and function prototypes. It compiles with Turbo C 1.0. The resulting program is quite fast, considering it is written purely in C. It seems to compress exactly as well as lharc itself. I did not try to compile it on any other system. This would have been the perfect text posting except that there are some control characters in the source, so I archived it. Checksums obtained with the 4.3BSD "sum" or System V "sum -r" command. checksum size (bytes) file (between BEGIN--cut and END--cut lines) 31099 9715 lzhsrc10.uue checksum size (bytes) file 32520 7028 lzhsrc10.arc -- R.D. ] lharc part01/01 BEGIN--cut here--cut here begin 644 lzhsrc10.arc M&@A,6DA51BY#`"4E)24E!1H``($2FK545B8Y```,+U0T4`!"!0@F6I!4,>)B M"(@B;LZP23,'#0@[9>3,2?/@8+F`,+`A"2)@Y9',>8^CD@5-FNH*!`4%003.SN9TPLF>"F-J<2ATY8MZT<,B4NQNF;NCL&`GB M(98D5'PQ115##%'$42SX!^`71@21!!-?J490?W*`%D8;=T'U66BCJ<#:=\@Q M9<9#"&@HD+RL@$C9D.U`>.X1F%%!1375A&8QH5 M]*%K(I((@A,))$`###G8D$!X4Z3!Y4IF@/!<=$ZM949&LM+:HJU&Y&H##+\: M%.RP;Q0;Y1MKM!`&>6&H)(:RS'KHK(OM(2'%@4@\P001"HDXQCGG"`DX09C5%18!@I+DY%"?^$YS5@:Z`F+K+_-F:O`H0HD M4&5_:;Q9MAEX@H#":%[V_-$.5-86-\X_VT!W&BNL4&C9">SLQA9I=`%"W`_N MD&NU(-SYAI5B)\"V'&[#K>+>M=VZ=]]_YTHTX88CSH3BN89',&UBGPIBU4TS MF1$=3MCU=GZ-7PU"UJ[+<19=IS='1U8P^RYULV,C>C:5"<(!9AMP:+IDDT\F MQ2?E!:U11A[.)[RP2F.HG<`8S!\^-Z+60^6E"1%/O-86/OBTVPS_Z+3E,A:!IHSP$Q\;D+4Y-P&`KK1[6IDRU4:BJ6G\/F@ M31!\F-DH*+@MP,%P(1!=YQ8'/R]U\(.:RE49:-:<""[NA*%K7`H]%R[VQ;!Y M&@S+"#;K-?X/[(`A">*L'C3!7)00!$CV(/Q6R$`1% M3,`4E6C"&2;@^O!A/Y1@#\:B+7>XB0@8!9T1&@F"`:/B" MRPR(ADDN+@&8+-G)ML82+Z$`!91K@9FN9@*W74R5,4C!U6#IQ46B()2;/*"7 MTG"U"VJ,D(4\9"(UF,9*PLU+N"P@S#RY.%N.07RG3.4J0=!*%+SR([+D6"PS M%TJ3H8PC;F#FXKHYRI1YQ$O=RV$QT_C#'X(QAI]#(:*F&,8MXJ^#882AICYG MSQC*89\UA*$_-;7(#L:S"Z'S$AQ&:-`:?G"@B!IB&6:FORT<%*)E.VC\$H'+RW2(WV0(0/(Z,9%Q>>)57H#!2!55,B5]"*I#$-S! M*D!RVU[GVD0FE(J2#2V:7&,X1;YJD)\57:SX/N=82C:6L6ZU:PW[*;ZAHC&I MD?5G9FE8-(%V5E/NK*%<)^M0_,%ULFS9?,JX*9H6Q#@]HNM MW>CH3(4J@R!!66[Q2)B0!1/)8`A6`A/;O%[DA"\,`0E!D$)_$H""O'&,"H\4 M3"1Q9@1"AJ=ADLD.L\+4'!2TR04NJ.YUL_N3JXEM!+5Z$15`D"MK6A>[VC6( M#+29`L9=JSG\HD,8Q!#8^^:W.=KM[WYA6>#2>?0-CS-3.<%)//P^ZT5-"`(6 M&+2N*"0`!GC``0Q6G$/&U0$.96F,7\FCW#JTH0Z5.4M:3%W*&<#IS!&8-D2"V7FA*S%9`><4X&*R:J4D=6`QR!C9@KE%,S@ ML'VH#EB&@R9!LP4;T""&$40Q#&:0($G3H-)X@,&E593I34NZ!IB&`:@Y+>I0 M@QI1GS:UJDD]:DG;(-2O)G6L72VSLM%:UK#.-:YW?6M:HSK3-PAUL$D];$D7 M&]C"3C:Q:WUB9"_[V<96=K2AC>Q?P^#8UY:VLZ?-[6U7V]:9QD&HQ4UJM[K+S>QSK]O=[(XWO.<=;E.I#='3,],7V-OH1XLOTIF&`:9E('!.SZ#@ M*-X5IFN`<#S4`-W3PK0-Q/WK&S3\!NA6,::%@ND<-#P'GL9#4#H^A';C(0@- M#T+(@X#N()21#F#4>AH#N(03!YR]' ML8%,3H2&$Z'GG"9"R(D@="*@FPA'CWK2\4"$(IB\"`TO`M117(20%T'H14!W M$;).]JT7P>N_-D+#C1`#3!MA['@P`J4Y;820&Z'5>1>Z$8(==W0;(0=V9WO> MA6#WK1N!"';W.M^-8._B@N#,=AGTEPT]$'SWB0S[MLL6\@9I:S=\Q:$^O>I3 MSWI2"]STK9?TZET?^X"S'O:TS[WL:X]ZW=L>][OW?>^#3WS;T][:=2=U\B6] M_$PW'P;/CWZHZX[\Z5M?^==G?O:=;W(8X-W[H?Z^^,-/?E+WW-KC-W_Y)9U^ M]I/?VGN7=/PS/?])A[K^^+]_]_-/:O[+7__]IW_6%G*:%FH$>(`&F("D=FG6 M!GBEQFJKEFH0.(&I9FU"!P,7F(&ZUFN9IH'6AFT@J&W91FTC&&W6AFXP@((J M^&[I)F_I9FV(1VHQ*&DSF&DUR"NA=H,ZV'V*!P,]^(.A!H2D!H36QGBD9H22 MAH29IH0PP(1.&&J,9VU;!P-36(6A!GFDAH62IH69!GG6)GF2!H:9)H8P0(9& M$&IG2&II*&EG^&LQT'!OB&EQR&ESB&(QT'QW*(=X2'W@%@-XYX=R^(=_.'\Q M0(B&:'(Q$'*)*(>*J(B`%P./&(F(*'0Q0(F6*(?'%@.9N(F(B&XQX(DU"!1R MJ'@Q0(I*&`-1V(=;%P.KR(4QX(IB&`.QN(9X$`-M"&X$-W`-)P/-QXL#AWJ9$=>9(?*9(EZ7\DB9(FF9(9R9(O.9,RF7\#J("6 MAI.=II,%N(#=AX`^&90Y*90[Z9,W290].91*691+68!'V91`"94\R8`9&95, M>95)B94(^)1:.95>:909Z8!B&8&9-I846);=9Y82N)9H>98/6(%A299OV99L M.9=V>6IQZ99J29=\>9=I*9=[Z9=Z^9>#69AU.98-")B*:9AHF9B,*9B'J6H6 MN($=2)D8:)D>F)$:R&N5R9F7Z9FO-IF@B9FDB6NBR8&?B9J;J9K=MYJ=R9JC M:9J:69JP69N5^8$B&((DJ)LFF)&\Z6TE")R_F6VXN9NY>9S+5IS=%IS,.9PA MJ)S"B9S+^9R^*9W1:9S)F9$KZ((IR(+=R9T4IYW>N9WT]IWE&9X0B2-5MCTX M52%QL`7[=30>PSAC8&,X9AEHT1P\IE6$UF`'PV4$81![EA_,Q1ZTTSMSX`)B MP1YA``+P"5\H$)^W\E_916"&PQX:QF>QLD!`$@88,0=^I@!G1SE&ZC))BB-G4C4%%AY&NA(O(@:,03Q!13MI@R,)\%

#5#=MDD)&BJ1\L$NU`4OXJ0KX"4X@%K&(SYYNA::TJC%P@,\X"5NA"B"V@(MH"E*)0<>P49T>EBJ M,Q!1.J5YT!A48U)7:A!9VJ!/(6-`A2CK&3UA"B)C"EAF6JAH.JEJRJ84Q$9> M\J9Q6J9SJB)78SD)!#B0"@)[6C>2ZC:`JDJ">EBY(J@8@ZB*6C9N^BH4\ZC: MNA9]:JV6BJL>T0+@6C:;ZA&CX0.-E*C$!2*QVA1P4"1(>J>=EVA%XJ3TNCHF M!0)04"3LY5)2E"#ORCT5%AY$0@?Q:B7/Q*5:XJ6(DK!ZBDX@H*YF*E+$6.ZX?.[$M6T0ABP(C:P8)*K'-B@)LP#$_.ZAH)$17!+-$&ZFZRJZ4 ME+/"4@9]DT+MU*Z6-Q=;TS7#LI\^]2]/I@"L,P4*ICO'Q18H\#=?:B5ID"!J MX#T+Y*N7PZP3.E]2($?,M)^@TT8I5%%ZQ*<90P4I1*)T0#@X$Z3B,ZL)\$/& M2C=J$#\4NK>(0J:!A0*3JZM2T+?NN05J$$-^JT<9,[HX@S2!:S.AV[B'RZF) M.[AFXKJ**Y_B,[=OM;,]"P)JD+6(\D-^R[AM@@=LP1::@KA;(`4Q=*RA"B)% M5@9*P221@6A6(K9@4[:L4R'/>QMM:RC&`Z9RFR##5#8#BU,)P@;>$QY\P@88 M46,WEF/YV9X]AE-MTZ'%4J.1,[GYJD:48[=N@K>&2R6<4U<21$&":SB^1`7B MY+>K:TJCNZ/8=#L\.T,5M<`Y.CB%,T.[NP):V[N($AYN83WK,;;-H0,XE08: M00=@TA$RD1W2`Z,RBJ;V^R'Z6SD()+>4J[>2FSG_.QJ'RK-R&\`NM`:->[HI M5"Q>HL"B^[FD"[_ON0955+="["632TLXE3E^Z\1TTRTM(*T)L`:\NUO0-,4@ ML`;V%<$/\S`>'%(8T@9M2R4"XQ[P(1_T40;V@1]T\##]T3AE<`?000>-X1%) MML8@A1%M[!F@(1K$DRMH;!"#O,8H8`)7C*.0_+E"+)_EFRF)S%U6*L@A-363 MW&-;4,DY0TV1?,E%3,FBFT)I;`>.;`(5Y<0)XLHV(\I(8\J9?*ISD@*<3,BR M/#BT+,FOC*,=F[J^'$..^T/GI<+.^U(&:B4QK$!K%+G^R[<"7$DH$,45##H> M*Q[B9+Q.S+I-FU8P*[O?K%#D?+K&O,%EHSK+NZ(O%F/ZZ9XB;+W[^LZ6,35G M,P9NV[UP^[UC7+Y$14%^B[RR%6(C9@0EQDS8VQ':*ZT_]$SF7*+/5+CX"-E4R7$E"W$A^F[02 M*Y_BA+GM%=-,O`5]PP9=P,5:A*DSI-%)#,H^/=2?Z]/B$[YT)#X5M=$^*[NP M:[YT1$&C`4<('+LERL,=TS_>DROXF\U'K4$5I=2[]-6)(KL4G$Z4M$B;R\U: MG;B32[OH),$VL]&UB]80+47J_+@S5J9VM-?&N]&!A$&*$QX6W:5K`J-Z'`8O M2A?!TS@8!CD?LKSCRU[E>[$EQ300P5Y#,#TH<-G[++[:(ZL$13MJ`+Y$]:1E M$];'VL7B,]B+R]'A@1)3L2=UX08K;$YAIE-25`9A4+\%DV21[3B4C2@6[4+I MZDN52JO5\E;"S10!LQYD\,*`XL8K4=TU6R0)^Q$/DU8'V]TKDBM#MDA"W$K; MQ,/!JV(K]M49C%I_G;G7'-OD_--+Y"6=JRG].C*RD]I4(JWL!, M81&!ABQ4)3[/1+%Z@RC[_:^*1I&%DR`23J16HVC\ID?-NJ;GJ^'%1<@?, M$N)O=GDFO,QL(&0R_.*R$VMZ0DT&9P97TZQOJ.#ZRMD-SA3ZLKW%@ZT4M+0@ MZZ\R&[43NZ[;;20W^S!6RR5?_+A<*Z*T@U*>#=H5?MG>L]<5A;P]CB@D<1M3 M826V+0>//275FU-OL%/%/=G]DA4=^J$*6C8DL2<81A,W-0(H<*/%6BQST=T, M*UOC31)I)>DGTQR6?J,KL$VSP^E=>E38Q.>1@]-N\TQ8S4P3[2522@=42@=M MFT)X?M?X\]`VXB6&"ZL';JKZK*D[Q*E)D23+>S9R[N`0[@9<'D$7[L]LG>&7 MY[P%HV9#[F8-:^@[!57KVR^;E\B6<^M"4*I3`^#0-+`I`'HY;CC-VN*M/5F+ M9L&T;1";#N1O(.1LYNT"LQC82P=)GLA3["4]>[FVZC9J@*EL"DU7#4?;E#'H M[BD.C2CGFA3*6C>MA&(S8`;,;GEQP3P5`B@<)EUFNZ^=+3M6&E,KOQAE-O)G M,A,;01>OBJVT@SQ)D=ENH#,),@?E>Q(2DTPO@P9TBQ)EL`;!"B25Q@0)(@/2 M&C$Z>\2-P09LL/2$@K%N8P9\S!B>+/57^_-7FV"9$TL/4R=W MDBP] MA/%[/!=D@/517_93?SE,Y5&/?Q_KH?DE/P9O$3EH^^=KRRC2JC5T$#7_LNN( M(C#Y2SEWHTI&H"EU:SES\$8R!,!S!#A\M#ZP>P(@<`*ROT8$WK]."D<;8P+5 MM-?`ZB/"6M@/\02Q_]MNP#D/L_L50SD9XS(QQ-800_E7VS^:O3;1#+C,ZB71 MSS>YGRM.@Q*ZPU)3(TV\I"GK_SKNCTK2FMS0[39$STD3*_U/M/^Z)/TIJ_\L MDTFY9!&Z"E[K(E[O(D[[KTOC0TDO7P:?/14H8/TVQ,5!),X:]/)E\-E3T5TU M4`/?%5[M\BXXL__+-$,O7P8/_DT13D[?U!%5<1M?L/\'A/PY].2_^BIPROQ`DDU,5`303\U%-%,J5?]S`-36OP5S ML/TSM$@"8_P$ED/6OP4"DS%.L/T2#$T"PZ-0;DT$-D.N+UBGRTJN1&`S-/_M M+SMRP,5I9$N'WQP]S$O]KRAI0B3YT4,OA9,B9`K2AI M0B2TT\-O>(Q]7:N`_39]DSF5<1M?L/_+5,T),%,J5?]S`-2L;Z.GRTJN1&`S MY/J"=;JLY$H$-D.+A*DNPP?P8O(/=*0?(TC^(?\K9HX\]KX//+#JL3#B520B4YKR;Y M$=!;?TB1CS[>SR5BSR5DGR5CDB#)Q_Q`,N6M#CANCR>-(O=TGQ6'1`9X3S>W M@_GA8BS?[_?0`55SG[014_AN<_A=@D&+7T:8!008HD:7*MZY]?8+P`0*.G#0^D].!K-0Y=#IF4(@H$4,&&S)]*1FS(&#!DT_!)/,!\]=NW<66W;Y99ACEGEF MFFL6U.9Q*-`!$1RDRH&"A)KF>2%**9U0Q`F4&E2$&U25\55011VEDU0!#XR1 M&6.P@97`GU)D'L,.'Y7K:A('%:Z78(I)YA-+L$0<&@A-15-304=%`"4E)24` M,P$``($2![60[&D!```,1N2\::,#Q)(R;M2D`2$ES9HT=,*L*0."QY@9,63D MF%$BHILY9=*X&#/&19T6=-ZLR?/&19B2:N``D5*$29`L+H9,<>&D"!4?#11, MJ2-&39DQ=`JRT8.FCIF1(%`P01)&SA@08=B<>2,'(IHV(.:\J6.5XI@W9,JD M"!J42)FJ#,,T9<."K0(C;]BP>7,GC9LS(-+,P1IV;%D09].">&,FK-\S;,JT M,),F,N*!<.24F3,GS1LW+^JX.=LF\V;.GMT$S?SFC)PP;5R`2$('!)HP@^F@ MH3@'MEG,FE%_QJJ5JU>P?76#F%JU9-`DML/8H;BU=A@0<,K(:2.X\_"4V-_, MJ:U;,`CPNBE6F5*D)Y7+;=J(AI@GJ!F!8*G*J9,'=QT068B'1AIZ2"124"VT (8!!""@4%&@!6 ` end END--cut here--cut here