0000: 0d 0a 23 69 6e 63 6c 75 64 65 20 22 73 74 64 61 ..#include "stda
0010: 66 78 2e 68 22 0d 0a 23 69 6e 63 6c 75 64 65 20 fx.h"..#include
0020: 22 41 72 63 43 70 74 2e 68 22 0d 0a 23 69 6e 63 "ArcCpt.h"..#inc
0030: 6c 75 64 65 20 22 4e 6f 61 68 41 70 70 2e 68 22 lude "NoahApp.h"
0040: 0d 0a 0d 0a 2f 2f 2d 2d 2d 20 43 41 72 63 68 69 ....//--- CArchi
0050: 76 65 72 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ver ------------
0060: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0070: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0080: 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a 62 6f 6f 6c 20 43 ------....bool C
0090: 41 72 63 43 70 74 3a 3a 76 5f 63 68 65 63 6b 28 ArcCpt::v_check(
00a0: 20 63 6f 6e 73 74 20 6b 69 50 61 74 68 26 20 61 const kiPath& a
00b0: 6e 61 6d 65 20 29 0d 0a 7b 0d 0a 09 62 6f 6f 6c name )..{...bool
00c0: 20 61 6e 73 20 3d 20 28 20 63 70 74 2e 6f 70 65 ans = ( cpt.ope
00d0: 6e 28 20 61 6e 61 6d 65 20 29 20 26 26 20 72 65 n( aname ) && re
00e0: 61 64 5f 6d 61 69 6e 5f 68 64 72 28 29 20 26 26 ad_main_hdr() &&
00f0: 20 63 68 65 63 6b 5f 69 6e 64 65 78 5f 63 72 63 check_index_crc
0100: 28 29 20 29 3b 0d 0a 09 63 70 74 2e 63 6c 6f 73 () );...cpt.clos
0110: 65 28 29 3b 0d 0a 09 72 65 74 75 72 6e 20 61 6e e();...return an
0120: 73 3b 0d 0a 7d 0d 0a 0d 0a 62 6f 6f 6c 20 43 41 s;..}....bool CA
0130: 72 63 43 70 74 3a 3a 76 5f 6c 69 73 74 28 20 63 rcCpt::v_list( c
0140: 6f 6e 73 74 20 61 72 63 6e 61 6d 65 26 20 61 6e onst arcname& an
0150: 61 6d 65 2c 20 61 66 6c 41 72 72 61 79 26 20 66 ame, aflArray& f
0160: 69 6c 65 73 20 29 0d 0a 7b 0d 0a 09 3a 3a 53 65 iles )..{...::Se
0170: 74 43 75 72 72 65 6e 74 44 69 72 65 63 74 6f 72 tCurrentDirector
0180: 79 28 20 61 6e 61 6d 65 2e 62 61 73 65 64 69 72 y( aname.basedir
0190: 20 29 3b 0d 0a 0d 0a 09 62 6f 6f 6c 20 61 6e 73 );.....bool ans
01a0: 20 3d 20 28 20 63 70 74 2e 6f 70 65 6e 28 20 61 = ( cpt.open( a
01b0: 6e 61 6d 65 2e 6c 6e 61 6d 65 20 29 20 26 26 20 name.lname ) &&
01c0: 72 65 61 64 5f 6d 61 69 6e 5f 68 64 72 28 29 20 read_main_hdr()
01d0: 26 26 20 6f 70 65 72 61 74 69 6f 6e 5f 66 6f 72 && operation_for
01e0: 5f 65 61 63 68 28 20 74 72 75 65 2c 20 26 66 69 _each( true, &fi
01f0: 6c 65 73 20 29 20 29 3b 0d 0a 09 63 70 74 2e 63 les ) );...cpt.c
0200: 6c 6f 73 65 28 29 3b 0d 0a 09 72 65 74 75 72 6e lose();...return
0210: 20 61 6e 73 3b 0d 0a 7d 0d 0a 0d 0a 69 6e 74 20 ans;..}....int
0220: 43 41 72 63 43 70 74 3a 3a 76 5f 6d 65 6c 74 28 CArcCpt::v_melt(
0230: 20 63 6f 6e 73 74 20 61 72 63 6e 61 6d 65 26 20 const arcname&
0240: 61 6e 61 6d 65 2c 20 63 6f 6e 73 74 20 6b 69 50 aname, const kiP
0250: 61 74 68 26 20 64 64 69 72 2c 20 63 6f 6e 73 74 ath& ddir, const
0260: 20 61 66 6c 41 72 72 61 79 2a 20 66 69 6c 65 73 aflArray* files
0270: 20 29 0d 0a 7b 0d 0a 09 3a 3a 53 65 74 43 75 72 )..{...::SetCur
0280: 72 65 6e 74 44 69 72 65 63 74 6f 72 79 28 20 61 rentDirectory( a
0290: 6e 61 6d 65 2e 62 61 73 65 64 69 72 20 29 3b 0d name.basedir );.
02a0: 0a 09 69 66 28 20 21 63 70 74 2e 6f 70 65 6e 28 ..if( !cpt.open(
02b0: 20 61 6e 61 6d 65 2e 6c 6e 61 6d 65 20 29 20 29 aname.lname ) )
02c0: 0d 0a 09 09 72 65 74 75 72 6e 20 30 78 66 66 66 ....return 0xfff
02d0: 66 3b 0d 0a 0d 0a 09 3a 3a 53 65 74 43 75 72 72 f;.....::SetCurr
02e0: 65 6e 74 44 69 72 65 63 74 6f 72 79 28 20 64 64 entDirectory( dd
02f0: 69 72 20 29 3b 0d 0a 09 62 6f 6f 6c 20 61 6e 73 ir );...bool ans
0300: 20 3d 20 28 20 72 65 61 64 5f 6d 61 69 6e 5f 68 = ( read_main_h
0310: 64 72 28 29 20 26 26 20 6f 70 65 72 61 74 69 6f dr() && operatio
0320: 6e 5f 66 6f 72 5f 65 61 63 68 28 20 66 61 6c 73 n_for_each( fals
0330: 65 2c 20 63 6f 6e 73 74 5f 63 61 73 74 3c 61 66 e, const_cast<af
0340: 6c 41 72 72 61 79 2a 3e 28 66 69 6c 65 73 29 20 lArray*>(files)
0350: 29 20 29 3b 0d 0a 09 63 70 74 2e 63 6c 6f 73 65 ) );...cpt.close
0360: 28 29 3b 0d 0a 09 72 65 74 75 72 6e 20 61 6e 73 ();...return ans
0370: 20 3f 20 30 20 3a 20 30 78 38 30 32 30 3b 0d 0a ? 0 : 0x8020;..
0380: 7d 0d 0a 0d 0a 69 6e 74 20 43 41 72 63 43 70 74 }....int CArcCpt
0390: 3a 3a 76 5f 63 6f 6e 74 65 6e 74 73 28 20 63 6f ::v_contents( co
03a0: 6e 73 74 20 6b 69 50 61 74 68 26 20 61 6e 61 6d nst kiPath& anam
03b0: 65 2c 20 6b 69 50 61 74 68 26 20 64 6e 61 6d 65 e, kiPath& dname
03c0: 20 29 0d 0a 7b 0d 0a 09 69 6e 74 20 61 6e 73 3d )..{...int ans=
03d0: 61 55 6e 6b 6e 6f 77 6e 3b 0d 0a 09 69 66 28 20 aUnknown;...if(
03e0: 63 70 74 2e 6f 70 65 6e 28 20 61 6e 61 6d 65 20 cpt.open( aname
03f0: 29 20 26 26 20 72 65 61 64 5f 6d 61 69 6e 5f 68 ) && read_main_h
0400: 64 72 28 29 20 29 0d 0a 09 7b 0d 0a 09 09 69 66 dr() )...{....if
0410: 28 20 63 70 74 2e 72 65 61 64 28 20 74 6d 70 2c ( cpt.read( tmp,
0420: 20 37 20 29 20 29 0d 0a 09 09 7b 0d 0a 09 09 09 7 ) )....{.....
0430: 57 4f 52 44 20 45 6e 74 72 79 4e 75 6d 20 3d 20 WORD EntryNum =
0440: 28 74 6d 70 5b 34 5d 3c 3c 38 29 20 20 2b 20 74 (tmp[4]<<8) + t
0450: 6d 70 5b 35 5d 3b 0d 0a 09 09 09 69 66 28 20 45 mp[5];.....if( E
0460: 6e 74 72 79 4e 75 6d 20 3d 3d 20 31 20 29 0d 0a ntryNum == 1 )..
0470: 09 09 09 09 61 6e 73 20 3d 20 61 53 69 6e 67 6c ....ans = aSingl
0480: 65 46 69 6c 65 3b 0d 0a 09 09 09 65 6c 73 65 0d eFile;.....else.
0490: 0a 09 09 09 7b 0d 0a 09 09 09 09 63 70 74 2e 72 ....{......cpt.r
04a0: 65 61 64 28 20 74 6d 70 2c 20 74 6d 70 5b 36 5d ead( tmp, tmp[6]
04b0: 20 29 3b 0d 0a 09 09 09 09 74 6d 70 5b 30 5d 20 );......tmp[0]
04c0: 3d 20 63 70 74 2e 67 65 74 63 28 29 3b 0d 0a 09 = cpt.getc();...
04d0: 09 09 09 69 66 28 20 74 6d 70 5b 30 5d 20 26 20 ...if( tmp[0] &
04e0: 30 78 38 30 20 29 20 2f 2f 20 46 6f 6c 64 65 72 0x80 ) // Folder
04f0: 0d 0a 09 09 09 09 7b 0d 0a 09 09 09 09 09 75 6e ......{.......un
0500: 73 69 67 6e 65 64 20 6c 6f 6e 67 20 73 69 7a 65 signed long size
0510: 20 3d 20 28 74 6d 70 5b 30 5d 26 30 78 33 66 29 = (tmp[0]&0x3f)
0520: 20 2b 20 32 3b 0d 0a 09 09 09 09 09 69 66 28 20 + 2;.......if(
0530: 73 69 7a 65 20 3d 3d 20 63 70 74 2e 72 65 61 64 size == cpt.read
0540: 28 20 74 6d 70 2b 31 2c 20 73 69 7a 65 20 29 20 ( tmp+1, size )
0550: 29 0d 0a 09 09 09 09 09 09 69 66 28 20 45 6e 74 )........if( Ent
0560: 72 79 4e 75 6d 20 3d 3d 20 31 20 2b 20 28 74 6d ryNum == 1 + (tm
0570: 70 5b 73 69 7a 65 2d 31 5d 3c 3c 38 29 20 2b 20 p[size-1]<<8) +
0580: 74 6d 70 5b 73 69 7a 65 5d 20 29 0d 0a 09 09 09 tmp[size] ).....
0590: 09 09 09 7b 0d 0a 09 09 09 09 09 09 09 64 6e 61 ...{.........dna
05a0: 6d 65 20 3d 20 22 22 3b 0d 0a 09 09 09 09 09 09 me = "";........
05b0: 09 74 6d 70 5b 20 31 2b 74 6d 70 5b 30 5d 20 5d .tmp[ 1+tmp[0] ]
05c0: 20 3d 20 27 5c 30 27 3b 0d 0a 09 09 09 09 09 09 = '\0';........
05d0: 09 66 6f 72 28 20 63 68 61 72 2a 20 70 70 3d 28 .for( char* pp=(
05e0: 63 68 61 72 2a 29 74 6d 70 2b 31 3b 20 2a 70 70 char*)tmp+1; *pp
05f0: 3b 20 70 70 3d 6b 69 53 74 72 3a 3a 6e 65 78 74 ; pp=kiStr::next
0600: 28 70 70 29 20 29 0d 0a 09 09 09 09 09 09 09 7b (pp) ).........{
0610: 0d 0a 09 09 09 09 09 09 09 09 69 66 28 20 6b 69 ..........if( ki
0620: 53 74 72 3a 3a 69 73 4c 65 61 64 42 79 74 65 28 Str::isLeadByte(
0630: 2a 70 70 29 20 29 0d 0a 09 09 09 09 09 09 09 09 *pp) )..........
0640: 09 64 6e 61 6d 65 20 2b 3d 20 2a 70 70 2c 20 64 .dname += *pp, d
0650: 6e 61 6d 65 20 2b 3d 20 2a 28 70 70 2b 31 29 3b name += *(pp+1);
0660: 0d 0a 09 09 09 09 09 09 09 09 65 6c 73 65 20 69 ..........else i
0670: 66 28 20 2a 70 70 3c 27 20 27 20 7c 7c 20 2a 70 f( *pp<' ' || *p
0680: 70 3e 27 7e 27 20 29 0d 0a 09 09 09 09 09 09 09 p>'~' ).........
0690: 09 09 64 6e 61 6d 65 20 2b 3d 20 27 5f 27 3b 0d ..dname += '_';.
06a0: 0a 09 09 09 09 09 09 09 09 65 6c 73 65 20 73 77 .........else sw
06b0: 69 74 63 68 28 20 2a 70 70 20 29 0d 0a 09 09 09 itch( *pp ).....
06c0: 09 09 09 09 09 7b 0d 0a 09 09 09 09 09 09 09 09 .....{..........
06d0: 09 63 61 73 65 20 27 5c 5c 27 3a 20 63 61 73 65 .case '\\': case
06e0: 20 27 2f 27 3a 20 63 61 73 65 20 27 3a 27 3a 20 '/': case ':':
06f0: 63 61 73 65 20 27 2a 27 3a 20 0d 0a 09 09 09 09 case '*': ......
0700: 09 09 09 09 09 63 61 73 65 20 27 3f 27 3a 20 63 .....case '?': c
0710: 61 73 65 20 27 5c 22 27 3a 20 63 61 73 65 20 27 ase '\"': case '
0720: 3c 27 3a 20 63 61 73 65 20 27 3e 27 3a 20 63 61 <': case '>': ca
0730: 73 65 20 27 7c 27 3a 0d 0a 09 09 09 09 09 09 09 se '|':.........
0740: 09 09 09 64 6e 61 6d 65 20 2b 3d 20 27 5f 27 3b ...dname += '_';
0750: 0d 0a 09 09 09 09 09 09 09 09 09 64 65 66 61 75 ...........defau
0760: 6c 74 3a 0d 0a 09 09 09 09 09 09 09 09 09 09 64 lt:............d
0770: 6e 61 6d 65 20 2b 3d 20 2a 70 70 3b 0d 0a 09 09 name += *pp;....
0780: 09 09 09 09 09 09 7d 0d 0a 09 09 09 09 09 09 09 ......}.........
0790: 7d 0d 0a 0d 0a 09 09 09 09 09 09 09 61 6e 73 20 }...........ans
07a0: 3d 20 61 53 69 6e 67 6c 65 44 69 72 3b 0d 0a 09 = aSingleDir;...
07b0: 09 09 09 09 09 7d 0d 0a 09 09 09 09 7d 0d 0a 09 .....}......}...
07c0: 09 09 7d 0d 0a 09 09 7d 0d 0a 09 7d 0d 0a 09 63 ..}....}...}...c
07d0: 70 74 2e 63 6c 6f 73 65 28 29 3b 0d 0a 09 72 65 pt.close();...re
07e0: 74 75 72 6e 20 61 6e 73 3b 0d 0a 7d 0d 0a 0d 0a turn ans;..}....
07f0: 2f 2f 2d 2d 2d 20 43 52 43 20 2d 2d 2d 2d 2d 2d //--- CRC ------
0800: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0810: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0820: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0830: 2d 2d 2d 2d 0d 0a 0d 0a 73 74 61 74 69 63 20 75 ----....static u
0840: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 63 72 63 nsigned long crc
0850: 74 62 6c 5b 32 35 36 5d 20 3d 20 7b 20 31 20 7d tbl[256] = { 1 }
0860: 3b 0d 0a 0d 0a 73 74 61 74 69 63 20 76 6f 69 64 ;....static void
0870: 20 69 6e 69 74 5f 63 72 63 5f 74 61 62 6c 65 28 init_crc_table(
0880: 29 0d 0a 7b 0d 0a 09 69 66 28 20 63 72 63 74 62 )..{...if( crctb
0890: 6c 5b 30 5d 3d 3d 31 20 29 20 2f 2f 20 75 6e 69 l[0]==1 ) // uni
08a0: 6e 69 74 69 61 6c 69 7a 65 64 0d 0a 09 09 66 6f nitialized....fo
08b0: 72 28 20 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 r( unsigned long
08c0: 20 63 2c 6e 3d 30 3b 20 6e 21 3d 32 35 36 3b 20 c,n=0; n!=256;
08d0: 6e 2b 2b 20 29 0d 0a 09 09 7b 0d 0a 09 09 09 63 n++ )....{.....c
08e0: 20 3d 20 6e 3b 0d 0a 09 09 09 66 6f 72 28 20 75 = n;.....for( u
08f0: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 6b 3d 38 nsigned long k=8
0900: 3b 20 6b 3b 20 6b 2d 2d 20 29 0d 0a 09 09 09 09 ; k; k-- )......
0910: 63 20 3d 20 28 63 26 31 29 20 3f 20 28 28 30 78 c = (c&1) ? ((0x
0920: 65 64 62 38 38 33 32 30 4c 29 5e 28 63 3e 3e 31 edb88320L)^(c>>1
0930: 29 29 20 3a 20 28 63 3e 3e 31 29 3b 0d 0a 09 09 )) : (c>>1);....
0940: 09 63 72 63 74 62 6c 5b 6e 5d 20 3d 20 63 3b 0d .crctbl[n] = c;.
0950: 0a 09 09 7d 0d 0a 7d 0d 0a 0d 0a 73 74 61 74 69 ...}..}....stati
0960: 63 20 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 c unsigned long
0970: 63 72 63 28 20 75 6e 73 69 67 6e 65 64 20 6c 6f crc( unsigned lo
0980: 6e 67 20 63 2c 20 75 6e 73 69 67 6e 65 64 20 63 ng c, unsigned c
0990: 68 61 72 2a 20 63 70 2c 69 6e 74 20 63 6e 74 20 har* cp,int cnt
09a0: 29 0d 0a 7b 0d 0a 09 77 68 69 6c 65 28 20 63 6e )..{...while( cn
09b0: 74 2d 2d 20 29 0d 0a 09 09 63 20 3d 20 28 63 3e t-- )....c = (c>
09c0: 3e 38 29 5e 63 72 63 74 62 6c 5b 28 63 26 30 78 >8)^crctbl[(c&0x
09d0: 66 66 29 5e 2a 63 70 2b 2b 5d 3b 0d 0a 09 72 65 ff)^*cp++];...re
09e0: 74 75 72 6e 20 63 3b 0d 0a 7d 0d 0a 0d 0a 2f 2f turn c;..}....//
09f0: 2d 2d 2d 20 63 70 74 20 2d 2d 2d 2d 2d 2d 2d 2d --- cpt --------
0a00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0a10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0a20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0a30: 2d 2d 0d 0a 0d 0a 62 6f 6f 6c 20 43 41 72 63 43 --....bool CArcC
0a40: 70 74 3a 3a 72 65 61 64 5f 6d 61 69 6e 5f 68 64 pt::read_main_hd
0a50: 72 28 29 0d 0a 7b 0d 0a 09 2f 2f 2d 2d 20 90 e6 r()..{...//-- ..
0a60: 93 aa 82 cc 83 6f 83 43 83 67 82 cd 20 4d 61 67 .....o.C.g.. Mag
0a70: 69 63 4e 75 6d 62 65 72 20 3a 20 30 78 30 31 20 icNumber : 0x01
0a80: 82 c8 82 cd 82 b8 81 42 0d 0a 09 6d 5f 6e 4d 61 .......B...m_nMa
0a90: 63 42 69 6e 4f 66 66 73 65 74 20 3d 20 30 3b 0d cBinOffset = 0;.
0aa0: 0a 09 69 66 28 20 38 20 21 3d 20 63 70 74 2e 72 ..if( 8 != cpt.r
0ab0: 65 61 64 28 20 74 6d 70 2c 20 38 20 29 20 29 0d ead( tmp, 8 ) ).
0ac0: 0a 09 09 72 65 74 75 72 6e 20 66 61 6c 73 65 3b ...return false;
0ad0: 0d 0a 09 69 66 28 20 74 6d 70 5b 30 5d 20 21 3d ...if( tmp[0] !=
0ae0: 20 31 20 29 0d 0a 09 7b 0d 0a 09 09 69 66 28 20 1 )...{....if(
0af0: 20 30 20 20 21 3d 20 74 6d 70 5b 30 5d 0d 0a 09 0 != tmp[0]...
0b00: 09 20 7c 7c 20 31 32 30 20 21 3d 20 63 70 74 2e . || 120 != cpt.
0b10: 72 65 61 64 28 20 74 6d 70 2c 20 31 32 30 20 29 read( tmp, 120 )
0b20: 0d 0a 09 09 20 7c 7c 20 20 38 20 20 21 3d 20 63 .... || 8 != c
0b30: 70 74 2e 72 65 61 64 28 20 74 6d 70 2c 20 20 38 pt.read( tmp, 8
0b40: 20 20 29 0d 0a 09 09 20 7c 7c 20 74 6d 70 5b 30 ).... || tmp[0
0b50: 5d 20 21 3d 20 31 20 29 20 2f 2f 20 4d 61 63 42 ] != 1 ) // MacB
0b60: 69 6e 83 58 83 4c 83 62 83 76 0d 0a 09 09 09 72 in.X.L.b.v.....r
0b70: 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 09 09 eturn false;....
0b80: 6d 5f 6e 4d 61 63 42 69 6e 4f 66 66 73 65 74 20 m_nMacBinOffset
0b90: 3d 20 31 32 38 3b 0d 0a 09 7d 0d 0a 0d 0a 09 2f = 128;...}...../
0ba0: 2f 2d 2d 20 69 6e 64 65 78 82 dc 82 c5 92 b5 82 /-- index.......
0bb0: d4 0d 0a 09 63 70 74 2e 73 65 65 6b 28 20 28 74 ....cpt.seek( (t
0bc0: 6d 70 5b 34 5d 3c 3c 32 34 29 20 2b 20 28 74 6d mp[4]<<24) + (tm
0bd0: 70 5b 35 5d 3c 3c 31 36 29 20 2b 20 28 74 6d 70 p[5]<<16) + (tmp
0be0: 5b 36 5d 3c 3c 38 29 20 2b 20 28 74 6d 70 5b 37 [6]<<8) + (tmp[7
0bf0: 5d 29 20 2d 20 38 20 29 3b 0d 0a 09 72 65 74 75 ]) - 8 );...retu
0c00: 72 6e 20 74 72 75 65 3b 0d 0a 7d 0d 0a 0d 0a 62 rn true;..}....b
0c10: 6f 6f 6c 20 43 41 72 63 43 70 74 3a 3a 63 68 65 ool CArcCpt::che
0c20: 63 6b 5f 69 6e 64 65 78 5f 63 72 63 28 29 0d 0a ck_index_crc()..
0c30: 7b 0d 0a 09 62 6f 6f 6c 20 66 6f 6c 64 65 72 3b {...bool folder;
0c40: 0d 0a 09 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 ...unsigned int
0c50: 73 69 7a 65 3b 0d 0a 0d 0a 09 2f 2f 2d 2d 20 43 size;.....//-- C
0c60: 52 43 28 44 57 4f 52 44 29 2c 20 45 6e 74 72 79 RC(DWORD), Entry
0c70: 4e 75 6d 28 57 4f 52 44 29 2c 20 43 6f 6d 6d 65 Num(WORD), Comme
0c80: 6e 74 4c 65 6e 28 42 59 54 45 29 0d 0a 09 69 66 ntLen(BYTE)...if
0c90: 28 20 21 63 70 74 2e 72 65 61 64 28 20 74 6d 70 ( !cpt.read( tmp
0ca0: 2c 20 37 20 29 20 29 0d 0a 09 09 72 65 74 75 72 , 7 ) )....retur
0cb0: 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 09 69 6e 69 n false;.....ini
0cc0: 74 5f 63 72 63 5f 74 61 62 6c 65 28 29 3b 0d 0a t_crc_table();..
0cd0: 0d 0a 09 44 57 4f 52 44 20 20 20 20 20 43 52 43 ...DWORD CRC
0ce0: 20 3d 20 28 74 6d 70 5b 30 5d 3c 3c 32 34 29 20 = (tmp[0]<<24)
0cf0: 2b 20 28 74 6d 70 5b 31 5d 3c 3c 31 36 29 20 2b + (tmp[1]<<16) +
0d00: 20 28 74 6d 70 5b 32 5d 3c 3c 38 29 20 2b 20 74 (tmp[2]<<8) + t
0d10: 6d 70 5b 33 5d 3b 0d 0a 09 57 4f 52 44 20 45 6e mp[3];...WORD En
0d20: 74 72 79 4e 75 6d 20 3d 20 28 74 6d 70 5b 34 5d tryNum = (tmp[4]
0d30: 3c 3c 38 29 20 20 2b 20 74 6d 70 5b 35 5d 3b 0d <<8) + tmp[5];.
0d40: 0a 09 69 66 28 20 74 6d 70 5b 36 5d 20 21 3d 20 ..if( tmp[6] !=
0d50: 63 70 74 2e 72 65 61 64 28 20 74 6d 70 2b 37 2c cpt.read( tmp+7,
0d60: 20 74 6d 70 5b 36 5d 20 29 20 29 0d 0a 09 09 72 tmp[6] ) )....r
0d70: 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 09 44 eturn false;...D
0d80: 57 4f 52 44 20 63 68 6b 5f 63 72 63 20 3d 20 63 WORD chk_crc = c
0d90: 72 63 28 20 30 78 66 66 66 66 66 66 66 66 2c 20 rc( 0xffffffff,
0da0: 74 6d 70 2b 34 2c 20 33 2b 74 6d 70 5b 36 5d 20 tmp+4, 3+tmp[6]
0db0: 29 3b 0d 0a 0d 0a 09 2f 2f 2d 2d 20 91 53 83 77 );.....//-- .S.w
0dc0: 83 62 83 5f 82 f0 91 96 8d b8 82 b5 82 c4 43 52 .b._..........CR
0dd0: 43 8c 76 8e 5a 0d 0a 09 66 6f 72 28 20 57 4f 52 C.v.Z...for( WOR
0de0: 44 20 69 3d 30 3b 20 69 21 3d 45 6e 74 72 79 4e D i=0; i!=EntryN
0df0: 75 6d 3b 20 69 2b 2b 20 29 0d 0a 09 7b 0d 0a 09 um; i++ )...{...
0e00: 09 74 6d 70 5b 30 5d 20 3d 20 63 70 74 2e 67 65 .tmp[0] = cpt.ge
0e10: 74 63 28 29 3b 0d 0a 0d 0a 09 09 69 66 28 20 74 tc();......if( t
0e20: 6d 70 5b 30 5d 20 26 20 30 78 38 30 20 29 09 66 mp[0] & 0x80 ).f
0e30: 6f 6c 64 65 72 20 3d 20 74 72 75 65 2c 20 20 73 older = true, s
0e40: 69 7a 65 20 3d 20 28 74 6d 70 5b 30 5d 26 30 78 ize = (tmp[0]&0x
0e50: 33 66 29 20 2b 20 32 3b 0d 0a 09 09 65 6c 73 65 3f) + 2;....else
0e60: 09 09 09 09 66 6f 6c 64 65 72 20 3d 20 66 61 6c ....folder = fal
0e70: 73 65 2c 20 73 69 7a 65 20 3d 20 28 74 6d 70 5b se, size = (tmp[
0e80: 30 5d 29 20 2b 20 34 35 3b 0d 0a 09 09 69 66 28 0]) + 45;....if(
0e90: 20 73 69 7a 65 20 21 3d 20 63 70 74 2e 72 65 61 size != cpt.rea
0ea0: 64 28 20 74 6d 70 2b 31 2c 20 73 69 7a 65 20 29 d( tmp+1, size )
0eb0: 20 29 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b ) return false;
0ec0: 0d 0a 0d 0a 09 09 63 68 6b 5f 63 72 63 20 3d 20 ......chk_crc =
0ed0: 63 72 63 28 20 63 68 6b 5f 63 72 63 2c 20 74 6d crc( chk_crc, tm
0ee0: 70 2c 20 31 2b 73 69 7a 65 20 29 3b 0d 0a 20 20 p, 1+size );..
0ef0: 20 20 7d 0d 0a 0d 0a 09 72 65 74 75 72 6e 20 43 }.....return C
0f00: 52 43 20 3d 3d 20 63 68 6b 5f 63 72 63 3b 0d 0a RC == chk_crc;..
0f10: 7d 0d 0a 0d 0a 62 6f 6f 6c 20 43 41 72 63 43 70 }....bool CArcCp
0f20: 74 3a 3a 6f 70 65 72 61 74 69 6f 6e 5f 66 6f 72 t::operation_for
0f30: 5f 65 61 63 68 28 20 62 6f 6f 6c 20 6f 5f 6c 69 _each( bool o_li
0f40: 73 74 2c 20 61 66 6c 41 72 72 61 79 2a 20 66 69 st, aflArray* fi
0f50: 6c 65 73 20 29 0d 0a 7b 0d 0a 09 2f 2f 2d 2d 20 les )..{...//--
0f60: 45 6e 74 72 79 90 94 82 f0 93 be 82 e9 0d 0a 09 Entry...........
0f70: 69 66 28 20 21 63 70 74 2e 72 65 61 64 28 20 74 if( !cpt.read( t
0f80: 6d 70 2c 20 37 20 29 20 29 0d 0a 09 09 72 65 74 mp, 7 ) )....ret
0f90: 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 09 57 4f 52 urn false;...WOR
0fa0: 44 20 45 6e 74 72 79 4e 75 6d 20 3d 20 28 74 6d D EntryNum = (tm
0fb0: 70 5b 34 5d 3c 3c 38 29 20 20 2b 20 74 6d 70 5b p[4]<<8) + tmp[
0fc0: 35 5d 3b 0d 0a 09 63 70 74 2e 72 65 61 64 28 20 5];...cpt.read(
0fd0: 74 6d 70 2c 20 74 6d 70 5b 36 5d 20 29 3b 0d 0a tmp, tmp[6] );..
0fe0: 0d 0a 09 2f 2f 2d 2d 20 83 5f 83 43 83 41 83 8d ...//-- ._.C.A..
0ff0: 83 4f 8f 80 94 f5 0d 0a 09 70 64 6c 67 20 3d 20 .O.......pdlg =
1000: 66 69 6c 65 73 20 3f 20 4e 55 4c 4c 20 3a 20 6e files ? NULL : n
1010: 65 77 20 43 41 72 63 50 72 6f 67 72 65 73 73 44 ew CArcProgressD
1020: 6c 67 28 20 45 6e 74 72 79 4e 75 6d 20 29 3b 0d lg( EntryNum );.
1030: 0a 0d 0a 09 2f 2f 2d 2d 20 91 80 8d ec 0d 0a 09 ....//-- .......
1040: 6b 69 50 61 74 68 20 70 61 74 68 3b 0d 0a 09 6d kiPath path;...m
1050: 5f 6e 49 6e 64 65 78 50 6f 73 20 3d 20 63 70 74 _nIndexPos = cpt
1060: 2e 74 65 6c 6c 28 29 3b 0d 0a 09 62 6f 6f 6c 20 .tell();...bool
1070: 61 6e 73 20 3d 20 72 65 63 75 72 73 65 28 20 6f ans = recurse( o
1080: 5f 6c 69 73 74 2c 20 66 69 6c 65 73 2c 20 70 61 _list, files, pa
1090: 74 68 2c 20 30 2c 20 45 6e 74 72 79 4e 75 6d 20 th, 0, EntryNum
10a0: 29 3b 0d 0a 09 64 65 6c 65 74 65 20 70 64 6c 67 );...delete pdlg
10b0: 3b 0d 0a 09 72 65 74 75 72 6e 20 61 6e 73 3b 0d ;...return ans;.
10c0: 0a 7d 0d 0a 0d 0a 62 6f 6f 6c 20 43 41 72 63 43 .}....bool CArcC
10d0: 70 74 3a 3a 72 65 63 75 72 73 65 28 20 62 6f 6f pt::recurse( boo
10e0: 6c 20 6f 5f 6c 69 73 74 2c 20 61 66 6c 41 72 72 l o_list, aflArr
10f0: 61 79 2a 20 66 69 6c 65 73 2c 20 6b 69 50 61 74 ay* files, kiPat
1100: 68 26 20 70 61 74 68 2c 20 69 6e 74 20 62 61 73 h& path, int bas
1110: 65 2c 20 69 6e 74 20 6e 75 6d 20 29 0d 0a 7b 0d e, int num )..{.
1120: 0a 09 62 6f 6f 6c 20 66 6f 6c 64 65 72 3b 0d 0a ..bool folder;..
1130: 09 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 73 69 .unsigned int si
1140: 7a 65 3b 0d 0a 09 6b 69 50 61 74 68 20 70 74 68 ze;...kiPath pth
1150: 74 6d 70 3b 0d 0a 0d 0a 09 66 6f 72 28 20 69 6e tmp;.....for( in
1160: 74 20 69 3d 30 3b 20 69 3c 6e 75 6d 3b 20 69 2b t i=0; i<num; i+
1170: 2b 20 29 0d 0a 09 7b 0d 0a 09 09 63 70 74 2e 73 + )...{....cpt.s
1180: 65 65 6b 54 6f 28 20 6d 5f 6e 49 6e 64 65 78 50 eekTo( m_nIndexP
1190: 6f 73 20 29 3b 0d 0a 0d 0a 09 2f 2f 2d 2d 20 74 os );.....//-- t
11a0: 6d 70 82 d6 69 6e 64 65 78 93 c7 82 dd 8d 9e 82 mp..index.......
11b0: dd 0d 0a 0d 0a 09 09 74 6d 70 5b 30 5d 20 3d 20 .......tmp[0] =
11c0: 63 70 74 2e 67 65 74 63 28 29 3b 0d 0a 09 09 69 cpt.getc();....i
11d0: 66 28 20 74 6d 70 5b 30 5d 20 26 20 30 78 38 30 f( tmp[0] & 0x80
11e0: 20 29 09 66 6f 6c 64 65 72 20 3d 20 74 72 75 65 ).folder = true
11f0: 2c 20 20 73 69 7a 65 20 3d 20 28 74 6d 70 5b 30 , size = (tmp[0
1200: 5d 26 30 78 33 66 29 20 2b 20 32 3b 0d 0a 09 09 ]&0x3f) + 2;....
1210: 65 6c 73 65 09 09 09 09 66 6f 6c 64 65 72 20 3d else....folder =
1220: 20 66 61 6c 73 65 2c 20 73 69 7a 65 20 3d 20 28 false, size = (
1230: 74 6d 70 5b 30 5d 29 20 2b 20 34 35 3b 0d 0a 09 tmp[0]) + 45;...
1240: 09 69 66 28 20 73 69 7a 65 20 21 3d 20 63 70 74 .if( size != cpt
1250: 2e 72 65 61 64 28 20 74 6d 70 2b 31 2c 20 73 69 .read( tmp+1, si
1260: 7a 65 20 29 20 29 20 72 65 74 75 72 6e 20 66 61 ze ) ) return fa
1270: 6c 73 65 3b 0d 0a 09 09 6d 5f 6e 49 6e 64 65 78 lse;....m_nIndex
1280: 50 6f 73 20 3d 20 63 70 74 2e 74 65 6c 6c 28 29 Pos = cpt.tell()
1290: 3b 20 2f 2f 20 8e 9f 82 cc 49 6e 64 65 78 82 cc ; // ....Index..
12a0: 88 ca 92 75 82 f0 8b 4c 89 af 0d 0a 0d 0a 09 2f ...u...L......./
12b0: 2f 2d 2d 20 83 77 83 62 83 5f 89 f0 90 cd 0d 0a /-- .w.b._......
12c0: 0d 0a 09 09 2f 2f 20 20 20 30 3a 20 66 69 6c 65 ....// 0: file
12d0: 6e 61 6d 65 5f 6c 65 6e 20 28 42 59 54 45 29 0d name_len (BYTE).
12e0: 0a 09 09 2f 2f 20 31 2d 6e 3a 20 66 69 6c 65 6e ...// 1-n: filen
12f0: 61 6d 65 20 20 20 20 20 28 77 69 74 68 20 6e 6f ame (with no
1300: 20 27 5c 30 27 29 0d 0a 09 09 63 68 61 72 20 66 '\0')....char f
1310: 69 6c 65 6e 61 6d 65 5b 4d 41 58 5f 50 41 54 48 ilename[MAX_PATH
1320: 5d 3b 0d 0a 09 09 6b 69 5f 6d 65 6d 63 70 79 28 ];....ki_memcpy(
1330: 20 66 69 6c 65 6e 61 6d 65 2c 20 74 6d 70 2b 31 filename, tmp+1
1340: 2c 20 74 6d 70 5b 30 5d 20 29 3b 0d 0a 09 09 66 , tmp[0] );....f
1350: 69 6c 65 6e 61 6d 65 5b 20 2a 74 6d 70 20 5d 20 ilename[ *tmp ]
1360: 3d 20 27 5c 30 27 3b 0d 0a 09 09 66 6f 72 28 20 = '\0';....for(
1370: 63 68 61 72 2a 20 70 70 3d 66 69 6c 65 6e 61 6d char* pp=filenam
1380: 65 3b 20 2a 70 70 3b 20 70 70 3d 6b 69 53 74 72 e; *pp; pp=kiStr
1390: 3a 3a 6e 65 78 74 28 70 70 29 20 29 0d 0a 09 09 ::next(pp) )....
13a0: 7b 0d 0a 09 09 09 69 66 28 20 6b 69 53 74 72 3a {.....if( kiStr:
13b0: 3a 69 73 4c 65 61 64 42 79 74 65 28 2a 70 70 29 :isLeadByte(*pp)
13c0: 20 29 0d 0a 09 09 09 09 63 6f 6e 74 69 6e 75 65 )......continue
13d0: 3b 0d 0a 09 09 09 69 66 28 20 2a 70 70 3c 27 20 ;.....if( *pp<'
13e0: 27 20 7c 7c 20 2a 70 70 3e 27 7e 27 20 29 0d 0a ' || *pp>'~' )..
13f0: 09 09 09 09 2a 70 70 20 3d 20 27 5f 27 3b 0d 0a ....*pp = '_';..
1400: 09 09 09 65 6c 73 65 20 73 77 69 74 63 68 28 20 ...else switch(
1410: 2a 70 70 20 29 0d 0a 09 09 09 7b 0d 0a 09 09 09 *pp ).....{.....
1420: 09 63 61 73 65 20 27 5c 5c 27 3a 20 63 61 73 65 .case '\\': case
1430: 20 27 2f 27 3a 20 63 61 73 65 20 27 3a 27 3a 20 '/': case ':':
1440: 63 61 73 65 20 27 2a 27 3a 20 0d 0a 09 09 09 09 case '*': ......
1450: 63 61 73 65 20 27 3f 27 3a 20 63 61 73 65 20 27 case '?': case '
1460: 5c 22 27 3a 20 63 61 73 65 20 27 3c 27 3a 20 63 \"': case '<': c
1470: 61 73 65 20 27 3e 27 3a 20 63 61 73 65 20 27 7c ase '>': case '|
1480: 27 3a 0d 0a 09 09 09 09 09 2a 70 70 20 3d 20 27 ':.......*pp = '
1490: 5f 27 3b 0d 0a 09 09 09 7d 0d 0a 09 09 7d 0d 0a _';.....}....}..
14a0: 09 09 2f 2f 20 66 69 6c 65 6e 61 6d 65 82 aa 32 ..// filename..2
14b0: 8c c2 88 c8 8f e3 82 cc 2e 82 cc 82 dd 82 a9 82 ................
14c0: e7 82 c8 82 c1 82 c4 82 a2 82 bd 82 e7 5f 82 c9 ............._..
14d0: 8f 91 82 ab 8a b7 82 a6 0d 0a 09 09 7b 0d 0a 09 ............{...
14e0: 09 09 69 6e 74 20 64 6f 74 73 20 3d 20 30 3b 0d ..int dots = 0;.
14f0: 0a 09 09 09 63 68 61 72 2a 20 70 70 3b 0d 0a 09 ....char* pp;...
1500: 09 09 66 6f 72 28 20 70 70 3d 66 69 6c 65 6e 61 ..for( pp=filena
1510: 6d 65 3b 20 2a 70 70 3b 20 70 70 3d 6b 69 53 74 me; *pp; pp=kiSt
1520: 72 3a 3a 6e 65 78 74 28 70 70 29 20 29 0d 0a 09 r::next(pp) )...
1530: 09 09 09 69 66 28 20 2a 70 70 20 3d 3d 20 27 2e ...if( *pp == '.
1540: 27 20 29 20 7b 20 2b 2b 64 6f 74 73 3b 20 7d 0d ' ) { ++dots; }.
1550: 0a 09 09 09 09 65 6c 73 65 20 7b 20 64 6f 74 73 .....else { dots
1560: 3d 2d 31 3b 20 62 72 65 61 6b 3b 20 7d 0d 0a 09 =-1; break; }...
1570: 09 09 69 66 28 20 64 6f 74 73 20 3e 3d 20 32 20 ..if( dots >= 2
1580: 29 0d 0a 09 09 09 09 66 6f 72 28 20 70 70 3d 66 )......for( pp=f
1590: 69 6c 65 6e 61 6d 65 3b 20 2a 70 70 3b 20 2b 2b ilename; *pp; ++
15a0: 70 70 20 29 0d 0a 09 09 09 09 09 2a 70 70 20 3d pp ).......*pp =
15b0: 20 27 5f 27 3b 0d 0a 09 09 7d 0d 0a 0d 0a 09 2f '_';....}...../
15c0: 2f 2d 2d 20 83 5f 83 43 83 41 83 8d 83 4f 8f 88 /-- ._.C.A...O..
15d0: 97 9d 0d 0a 0d 0a 09 09 70 74 68 74 6d 70 20 3d ........pthtmp =
15e0: 20 70 61 74 68 2c 20 70 74 68 74 6d 70 20 2b 3d path, pthtmp +=
15f0: 20 66 69 6c 65 6e 61 6d 65 3b 0d 0a 0d 0a 09 09 filename;......
1600: 69 66 28 20 70 64 6c 67 20 29 0d 0a 09 09 7b 0d if( pdlg )....{.
1610: 0a 09 09 09 70 64 6c 67 2d 3e 63 68 61 6e 67 65 ....pdlg->change
1620: 28 20 70 74 68 74 6d 70 2c 20 62 61 73 65 2b 69 ( pthtmp, base+i
1630: 2b 31 20 29 3b 0d 0a 09 09 09 69 66 28 20 21 70 +1 );.....if( !p
1640: 64 6c 67 2d 3e 6d 73 67 6c 6f 6f 70 28 29 20 29 dlg->msgloop() )
1650: 0d 0a 09 09 09 09 72 65 74 75 72 6e 20 66 61 6c ......return fal
1660: 73 65 3b 0d 0a 09 09 7d 0d 0a 0d 0a 09 2f 2f 2d se;....}.....//-
1670: 2d 20 83 74 83 48 83 8b 83 5f 8f 88 97 9d 0d 0a - .t.H..._......
1680: 0d 0a 09 09 69 66 28 20 66 6f 6c 64 65 72 20 29 ....if( folder )
1690: 0d 0a 09 09 7b 0d 0a 09 09 09 75 6e 73 69 67 6e ....{.....unsign
16a0: 65 64 20 6c 6f 6e 67 20 66 6c 64 6c 65 6e 20 3d ed long fldlen =
16b0: 20 28 74 6d 70 5b 73 69 7a 65 2d 31 5d 3c 3c 38 (tmp[size-1]<<8
16c0: 29 20 2b 20 74 6d 70 5b 73 69 7a 65 5d 3b 0d 0a ) + tmp[size];..
16d0: 09 09 09 70 74 68 74 6d 70 20 2b 3d 20 27 5c 5c ...pthtmp += '\\
16e0: 27 3b 0d 0a 0d 0a 09 09 09 69 66 28 20 6f 5f 6c ';.......if( o_l
16f0: 69 73 74 20 29 0d 0a 09 09 09 7b 0d 0a 09 09 09 ist ).....{.....
1700: 09 66 69 6c 65 73 2d 3e 66 6f 72 63 65 6c 65 6e .files->forcelen
1710: 28 20 62 61 73 65 2b 69 2b 31 20 29 3b 0d 0a 09 ( base+i+1 );...
1720: 09 09 09 6b 69 5f 73 74 72 63 70 79 28 20 28 2a ...ki_strcpy( (*
1730: 66 69 6c 65 73 29 5b 62 61 73 65 2b 69 5d 2e 69 files)[base+i].i
1740: 6e 66 2e 73 7a 46 69 6c 65 4e 61 6d 65 2c 20 70 nf.szFileName, p
1750: 74 68 74 6d 70 20 29 3b 0d 0a 09 09 09 09 28 2a thtmp );......(*
1760: 66 69 6c 65 73 29 5b 62 61 73 65 2b 69 5d 2e 69 files)[base+i].i
1770: 73 66 69 6c 65 20 3d 20 66 61 6c 73 65 3b 0d 0a sfile = false;..
1780: 09 09 09 7d 0d 0a 0d 0a 09 09 09 69 66 28 20 21 ...}.......if( !
1790: 72 65 63 75 72 73 65 28 20 6f 5f 6c 69 73 74 2c recurse( o_list,
17a0: 20 66 69 6c 65 73 2c 20 70 74 68 74 6d 70 2c 20 files, pthtmp,
17b0: 62 61 73 65 2b 69 2b 31 2c 20 66 6c 64 6c 65 6e base+i+1, fldlen
17c0: 20 29 20 29 0d 0a 09 09 09 09 72 65 74 75 72 6e ) )......return
17d0: 20 66 61 6c 73 65 3b 0d 0a 09 09 09 69 20 2b 3d false;.....i +=
17e0: 20 66 6c 64 6c 65 6e 3b 0d 0a 09 09 7d 0d 0a 0d fldlen;....}...
17f0: 0a 09 2f 2f 2d 2d 20 83 74 83 40 83 43 83 8b 8f ..//-- .t.@.C...
1800: 88 97 9d 0d 0a 0d 0a 09 09 65 6c 73 65 0d 0a 09 .........else...
1810: 09 7b 0d 0a 09 09 09 63 6f 6e 73 74 20 75 6e 73 .{.....const uns
1820: 69 67 6e 65 64 20 63 68 61 72 2a 20 68 64 72 20 igned char* hdr
1830: 3d 20 74 6d 70 20 2b 20 28 73 69 7a 65 2b 31 29 = tmp + (size+1)
1840: 20 2d 20 38 30 3b 0d 0a 0d 0a 09 09 09 75 6e 73 - 80;.......uns
1850: 69 67 6e 65 64 20 6c 6f 6e 67 20 72 73 72 63 53 igned long rsrcS
1860: 6b 69 70 3b 20 62 6f 6f 6c 20 6c 7a 68 46 6c 61 kip; bool lzhFla
1870: 67 3b 0d 0a 09 09 09 69 66 28 20 28 68 64 72 5b g;.....if( (hdr[
1880: 36 38 5d 3c 3c 32 34 29 20 2b 20 28 68 64 72 5b 68]<<24) + (hdr[
1890: 36 39 5d 3c 3c 31 36 29 20 2b 20 28 68 64 72 5b 69]<<16) + (hdr[
18a0: 37 30 5d 3c 3c 38 29 20 2b 20 68 64 72 5b 37 31 70]<<8) + hdr[71
18b0: 5d 20 21 3d 20 30 20 29 0d 0a 09 09 09 7b 0d 0a ] != 0 ).....{..
18c0: 09 09 09 09 2f 2f 20 82 e0 82 b5 20 64 61 74 61 ....// .... data
18d0: 46 6f 72 6b 82 aa 91 b6 8d dd 82 b7 82 e9 82 c8 Fork............
18e0: 82 e7 82 ce 0d 0a 09 09 09 09 64 61 74 61 55 4c ..........dataUL
18f0: 65 6e 20 3d 20 28 68 64 72 5b 36 38 5d 3c 3c 32 en = (hdr[68]<<2
1900: 34 29 20 2b 20 28 68 64 72 5b 36 39 5d 3c 3c 31 4) + (hdr[69]<<1
1910: 36 29 20 2b 20 28 68 64 72 5b 37 30 5d 3c 3c 38 6) + (hdr[70]<<8
1920: 29 20 2b 20 68 64 72 5b 37 31 5d 3b 0d 0a 09 09 ) + hdr[71];....
1930: 09 09 64 61 74 61 43 4c 65 6e 20 3d 20 28 68 64 ..dataCLen = (hd
1940: 72 5b 37 36 5d 3c 3c 32 34 29 20 2b 20 28 68 64 r[76]<<24) + (hd
1950: 72 5b 37 37 5d 3c 3c 31 36 29 20 2b 20 28 68 64 r[77]<<16) + (hd
1960: 72 5b 37 38 5d 3c 3c 38 29 20 2b 20 68 64 72 5b r[78]<<8) + hdr[
1970: 37 39 5d 3b 0d 0a 09 09 09 09 72 73 72 63 53 6b 79];......rsrcSk
1980: 69 70 20 3d 20 28 68 64 72 5b 37 32 5d 3c 3c 32 ip = (hdr[72]<<2
1990: 34 29 20 2b 20 28 68 64 72 5b 37 33 5d 3c 3c 31 4) + (hdr[73]<<1
19a0: 36 29 20 2b 20 28 68 64 72 5b 37 34 5d 3c 3c 38 6) + (hdr[74]<<8
19b0: 29 20 2b 20 68 64 72 5b 37 35 5d 3b 0d 0a 09 09 ) + hdr[75];....
19c0: 09 09 6c 7a 68 46 6c 61 67 20 20 3d 20 28 68 64 ..lzhFlag = (hd
19d0: 72 5b 36 33 5d 26 34 29 20 21 3d 30 3b 0d 0a 09 r[63]&4) !=0;...
19e0: 09 09 7d 0d 0a 09 09 09 65 6c 73 65 0d 0a 09 09 ..}.....else....
19f0: 09 7b 0d 0a 09 09 09 09 2f 2f 20 64 61 74 61 46 .{......// dataF
1a00: 6f 72 6b 82 aa 91 b6 8d dd 82 b5 82 c8 82 a2 82 ork.............
1a10: c8 82 e7 82 ce 0d 0a 09 09 09 09 64 61 74 61 55 ...........dataU
1a20: 4c 65 6e 20 3d 20 28 68 64 72 5b 36 34 5d 3c 3c Len = (hdr[64]<<
1a30: 32 34 29 20 2b 20 28 68 64 72 5b 36 35 5d 3c 3c 24) + (hdr[65]<<
1a40: 31 36 29 20 2b 20 28 68 64 72 5b 36 36 5d 3c 3c 16) + (hdr[66]<<
1a50: 38 29 20 2b 20 68 64 72 5b 36 37 5d 3b 0d 0a 09 8) + hdr[67];...
1a60: 09 09 09 64 61 74 61 43 4c 65 6e 20 3d 20 28 68 ...dataCLen = (h
1a70: 64 72 5b 37 32 5d 3c 3c 32 34 29 20 2b 20 28 68 dr[72]<<24) + (h
1a80: 64 72 5b 37 33 5d 3c 3c 31 36 29 20 2b 20 28 68 dr[73]<<16) + (h
1a90: 64 72 5b 37 34 5d 3c 3c 38 29 20 2b 20 68 64 72 dr[74]<<8) + hdr
1aa0: 5b 37 35 5d 3b 0d 0a 09 09 09 09 72 73 72 63 53 [75];......rsrcS
1ab0: 6b 69 70 20 3d 20 30 3b 0d 0a 09 09 09 09 6c 7a kip = 0;......lz
1ac0: 68 46 6c 61 67 20 20 3d 20 28 68 64 72 5b 36 33 hFlag = (hdr[63
1ad0: 5d 26 32 29 20 21 3d 30 3b 0d 0a 09 09 09 7d 0d ]&2) !=0;.....}.
1ae0: 0a 0d 0a 09 09 09 69 66 28 20 6f 5f 6c 69 73 74 ......if( o_list
1af0: 20 29 20 2f 2f 20 83 8a 83 58 83 67 82 d6 89 c1 ) // ...X.g....
1b00: 82 a6 82 e9 0d 0a 09 09 09 7b 0d 0a 09 09 09 09 .........{......
1b10: 66 69 6c 65 73 2d 3e 66 6f 72 63 65 6c 65 6e 28 files->forcelen(
1b20: 20 62 61 73 65 2b 69 2b 31 20 29 3b 0d 0a 09 09 base+i+1 );....
1b30: 09 09 6b 69 5f 73 74 72 63 70 79 28 20 28 2a 66 ..ki_strcpy( (*f
1b40: 69 6c 65 73 29 5b 62 61 73 65 2b 69 5d 2e 69 6e iles)[base+i].in
1b50: 66 2e 73 7a 46 69 6c 65 4e 61 6d 65 2c 20 70 74 f.szFileName, pt
1b60: 68 74 6d 70 20 29 3b 0d 0a 09 09 09 09 6b 69 5f htmp );......ki_
1b70: 73 74 72 63 70 79 28 20 28 2a 66 69 6c 65 73 29 strcpy( (*files)
1b80: 5b 62 61 73 65 2b 69 5d 2e 69 6e 66 2e 73 7a 4d [base+i].inf.szM
1b90: 6f 64 65 2c 20 6c 7a 68 46 6c 61 67 20 3f 20 22 ode, lzhFlag ? "
1ba0: 72 6c 65 2b 6c 7a 68 22 20 3a 20 22 72 6c 65 22 rle+lzh" : "rle"
1bb0: 20 29 3b 0d 0a 09 09 09 09 28 2a 66 69 6c 65 73 );......(*files
1bc0: 29 5b 62 61 73 65 2b 69 5d 2e 69 6e 66 2e 64 77 )[base+i].inf.dw
1bd0: 43 6f 6d 70 72 65 73 73 65 64 53 69 7a 65 20 3d CompressedSize =
1be0: 20 64 61 74 61 43 4c 65 6e 3b 0d 0a 09 09 09 09 dataCLen;......
1bf0: 28 2a 66 69 6c 65 73 29 5b 62 61 73 65 2b 69 5d (*files)[base+i]
1c00: 2e 69 6e 66 2e 64 77 4f 72 69 67 69 6e 61 6c 53 .inf.dwOriginalS
1c10: 69 7a 65 20 3d 20 64 61 74 61 55 4c 65 6e 3b 0d ize = dataULen;.
1c20: 0a 09 09 09 09 28 2a 66 69 6c 65 73 29 5b 62 61 .....(*files)[ba
1c30: 73 65 2b 69 5d 2e 69 73 66 69 6c 65 20 3d 20 74 se+i].isfile = t
1c40: 72 75 65 3b 0d 0a 09 09 09 7d 0d 0a 09 09 09 65 rue;.....}.....e
1c50: 6c 73 65 20 69 66 28 20 21 66 69 6c 65 73 20 7c lse if( !files |
1c60: 7c 20 28 2a 66 69 6c 65 73 29 5b 62 61 73 65 2b | (*files)[base+
1c70: 69 5d 2e 73 65 6c 65 63 74 65 64 20 29 0d 0a 09 i].selected )...
1c80: 09 09 7b 0d 0a 09 09 09 09 69 66 28 20 21 28 68 ..{......if( !(h
1c90: 64 72 5b 36 33 5d 20 26 20 31 29 20 29 0d 0a 09 dr[63] & 1) )...
1ca0: 09 09 09 7b 0d 0a 09 09 09 09 09 70 74 68 74 6d ...{.......pthtm
1cb0: 70 2e 6d 6b 64 69 72 28 29 3b 0d 0a 09 09 09 09 p.mkdir();......
1cc0: 09 63 70 74 2e 73 65 65 6b 54 6f 28 20 28 68 64 .cpt.seekTo( (hd
1cd0: 72 5b 33 36 5d 3c 3c 32 34 29 20 2b 20 28 68 64 r[36]<<24) + (hd
1ce0: 72 5b 33 37 5d 3c 3c 31 36 29 20 2b 20 28 68 64 r[37]<<16) + (hd
1cf0: 72 5b 33 38 5d 3c 3c 38 29 20 2b 20 68 64 72 5b r[38]<<8) + hdr[
1d00: 33 39 5d 20 2b 0d 0a 09 09 09 09 09 09 09 09 72 39] +..........r
1d10: 73 72 63 53 6b 69 70 20 2b 20 6d 5f 6e 4d 61 63 srcSkip + m_nMac
1d20: 42 69 6e 4f 66 66 73 65 74 20 29 3b 20 2f 2f 20 BinOffset ); //
1d30: 66 69 6c 65 70 6f 73 20 2b 20 72 73 72 63 43 4c filepos + rsrcCL
1d40: 65 6e 20 2b 20 28 30 20 7c 20 31 32 38 29 0d 0a en + (0 | 128)..
1d50: 09 09 09 09 09 69 66 28 20 6f 75 74 2e 6f 70 65 .....if( out.ope
1d60: 6e 28 20 70 74 68 74 6d 70 2c 20 66 61 6c 73 65 n( pthtmp, false
1d70: 20 29 20 29 0d 0a 09 09 09 09 09 7b 0d 0a 09 09 ) ).......{....
1d80: 09 09 09 09 63 70 74 6d 65 6c 74 28 20 6c 7a 68 ....cptmelt( lzh
1d90: 46 6c 61 67 20 29 3b 0d 0a 09 09 09 09 09 09 6f Flag );........o
1da0: 75 74 2e 63 6c 6f 73 65 28 29 3b 0d 0a 09 09 09 ut.close();.....
1db0: 09 09 7d 0d 0a 09 09 09 09 7d 0d 0a 09 09 09 7d ..}......}.....}
1dc0: 0d 0a 09 09 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a ....}.. }....
1dd0: 09 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 7d .return true;..}
1de0: 0d 0a 0d 0a 2f 2f 2d 2d 20 89 f0 93 80 8f 88 97 ....//-- .......
1df0: 9d 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d . --------------
1e00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1e10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1e20: 2d 2d 0d 0a 0d 0a 23 64 65 66 69 6e 65 09 45 53 --....#define.ES
1e30: 43 31 09 09 30 78 38 31 0d 0a 23 64 65 66 69 6e C1..0x81..#defin
1e40: 65 09 45 53 43 32 09 09 30 78 38 32 0d 0a 23 64 e.ESC2..0x82..#d
1e50: 65 66 69 6e 65 20 4e 4f 4e 45 53 45 45 4e 09 30 efine NONESEEN.0
1e60: 0d 0a 23 64 65 66 69 6e 65 20 45 53 43 31 53 45 ..#define ESC1SE
1e70: 45 4e 09 31 0d 0a 23 64 65 66 69 6e 65 20 45 53 EN.1..#define ES
1e80: 43 32 53 45 45 4e 09 32 0d 0a 0d 0a 76 6f 69 64 C2SEEN.2....void
1e90: 20 43 41 72 63 43 70 74 3a 3a 63 70 74 6d 65 6c CArcCpt::cptmel
1ea0: 74 28 20 62 6f 6f 6c 20 69 73 52 4c 20 29 0d 0a t( bool isRL )..
1eb0: 7b 0d 0a 09 63 70 74 5f 6f 75 74 73 74 61 74 20 {...cpt_outstat
1ec0: 3d 20 4e 4f 4e 45 53 45 45 4e 3b 0d 0a 09 63 70 = NONESEEN;...cp
1ed0: 74 5f 4c 5a 70 74 72 20 3d 20 30 3b 0d 0a 09 63 t_LZptr = 0;...c
1ee0: 70 74 5f 62 6c 6f 63 6b 73 69 7a 65 20 3d 20 30 pt_blocksize = 0
1ef0: 78 31 66 66 66 30 3b 0d 0a 0d 0a 09 69 66 28 20 x1fff0;.....if(
1f00: 69 73 52 4c 20 29 0d 0a 09 09 63 70 74 5f 72 6c isRL )....cpt_rl
1f10: 65 5f 6c 7a 68 28 29 3b 0d 0a 09 65 6c 73 65 0d e_lzh();...else.
1f20: 0a 09 09 77 68 69 6c 65 28 20 64 61 74 61 43 4c ...while( dataCL
1f30: 65 6e 2d 2d 20 29 0d 0a 09 09 09 63 70 74 5f 6f en-- ).....cpt_o
1f40: 75 74 63 68 28 20 63 70 74 2e 67 65 74 63 28 29 utch( cpt.getc()
1f50: 20 29 3b 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64 20 43 );..}....void C
1f60: 41 72 63 43 70 74 3a 3a 63 70 74 5f 6f 75 74 63 ArcCpt::cpt_outc
1f70: 68 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 h(unsigned char
1f80: 63 68 29 0d 0a 7b 0d 0a 09 63 70 74 5f 4c 5a 62 ch)..{...cpt_LZb
1f90: 75 66 66 5b 20 63 70 74 5f 4c 5a 70 74 72 2b 2b uff[ cpt_LZptr++
1fa0: 20 26 20 28 43 49 52 43 53 49 5a 45 2d 31 29 20 & (CIRCSIZE-1)
1fb0: 5d 20 3d 20 63 68 3b 0d 0a 0d 0a 09 73 77 69 74 ] = ch;.....swit
1fc0: 63 68 28 20 63 70 74 5f 6f 75 74 73 74 61 74 20 ch( cpt_outstat
1fd0: 29 0d 0a 09 7b 0d 0a 09 63 61 73 65 20 4e 4f 4e )...{...case NON
1fe0: 45 53 45 45 4e 3a 0d 0a 09 09 69 66 28 20 63 68 ESEEN:....if( ch
1ff0: 3d 3d 45 53 43 31 20 29 0d 0a 09 09 09 63 70 74 ==ESC1 ).....cpt
2000: 5f 6f 75 74 73 74 61 74 20 3d 20 45 53 43 31 53 _outstat = ESC1S
2010: 45 45 4e 3b 0d 0a 09 09 65 6c 73 65 0d 0a 09 09 EEN;....else....
2020: 09 64 61 74 61 55 4c 65 6e 2d 2d 2c 6f 75 74 2e .dataULen--,out.
2030: 70 75 74 63 28 20 63 70 74 5f 73 61 76 65 63 68 putc( cpt_savech
2040: 61 72 3d 63 68 20 29 3b 0d 0a 09 09 62 72 65 61 ar=ch );....brea
2050: 6b 3b 0d 0a 0d 0a 09 63 61 73 65 20 45 53 43 31 k;.....case ESC1
2060: 53 45 45 4e 3a 0d 0a 09 09 69 66 28 20 63 68 3d SEEN:....if( ch=
2070: 3d 45 53 43 32 20 29 0d 0a 09 09 09 63 70 74 5f =ESC2 ).....cpt_
2080: 6f 75 74 73 74 61 74 20 3d 20 45 53 43 32 53 45 outstat = ESC2SE
2090: 45 4e 3b 0d 0a 09 09 65 6c 73 65 0d 0a 09 09 7b EN;....else....{
20a0: 0d 0a 09 09 09 64 61 74 61 55 4c 65 6e 2d 2d 2c .....dataULen--,
20b0: 6f 75 74 2e 70 75 74 63 28 20 63 70 74 5f 73 61 out.putc( cpt_sa
20c0: 76 65 63 68 61 72 3d 45 53 43 31 20 29 3b 0d 0a vechar=ESC1 );..
20d0: 09 09 09 69 66 28 20 63 68 21 3d 45 53 43 31 20 ...if( ch!=ESC1
20e0: 29 0d 0a 09 09 09 7b 0d 0a 09 09 09 09 63 70 74 ).....{......cpt
20f0: 5f 6f 75 74 73 74 61 74 20 3d 20 4e 4f 4e 45 53 _outstat = NONES
2100: 45 45 4e 3b 0d 0a 09 09 09 09 64 61 74 61 55 4c EEN;......dataUL
2110: 65 6e 2d 2d 2c 6f 75 74 2e 70 75 74 63 28 20 63 en--,out.putc( c
2120: 70 74 5f 73 61 76 65 63 68 61 72 3d 63 68 20 29 pt_savechar=ch )
2130: 3b 0d 0a 09 09 09 7d 0d 0a 09 09 7d 0d 0a 09 09 ;.....}....}....
2140: 62 72 65 61 6b 3b 0d 0a 0d 0a 09 63 61 73 65 20 break;.....case
2150: 45 53 43 32 53 45 45 4e 3a 0d 0a 09 09 63 70 74 ESC2SEEN:....cpt
2160: 5f 6f 75 74 73 74 61 74 20 3d 20 4e 4f 4e 45 53 _outstat = NONES
2170: 45 45 4e 3b 0d 0a 09 09 69 66 28 20 63 68 21 3d EEN;....if( ch!=
2180: 30 20 29 0d 0a 09 09 09 77 68 69 6c 65 28 20 2d 0 ).....while( -
2190: 2d 63 68 20 29 0d 0a 09 09 09 09 64 61 74 61 55 -ch )......dataU
21a0: 4c 65 6e 2d 2d 2c 6f 75 74 2e 70 75 74 63 28 63 Len--,out.putc(c
21b0: 70 74 5f 73 61 76 65 63 68 61 72 29 3b 0d 0a 09 pt_savechar);...
21c0: 09 65 6c 73 65 0d 0a 09 09 7b 0d 0a 09 09 09 64 .else....{.....d
21d0: 61 74 61 55 4c 65 6e 2d 2d 2c 6f 75 74 2e 70 75 ataULen--,out.pu
21e0: 74 63 28 20 45 53 43 31 20 29 3b 0d 0a 09 09 09 tc( ESC1 );.....
21f0: 64 61 74 61 55 4c 65 6e 2d 2d 2c 6f 75 74 2e 70 dataULen--,out.p
2200: 75 74 63 28 20 63 70 74 5f 73 61 76 65 63 68 61 utc( cpt_savecha
2210: 72 3d 45 53 43 32 20 29 3b 0d 0a 09 09 7d 0d 0a r=ESC2 );....}..
2220: 20 20 20 20 7d 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64 }..}....void
2230: 20 43 41 72 63 43 70 74 3a 3a 63 70 74 5f 72 6c CArcCpt::cpt_rl
2240: 65 5f 6c 7a 68 28 29 0d 0a 7b 0d 0a 09 69 6e 74 e_lzh()..{...int
2250: 20 62 6c 6f 63 6b 5f 63 6f 75 6e 74 3b 0d 0a 09 block_count;...
2260: 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 62 70 74 unsigned int bpt
2270: 72 3b 0d 0a 09 69 6e 74 20 48 75 66 66 63 68 61 r;...int Huffcha
2280: 72 2c 20 4c 5a 6c 65 6e 67 74 68 2c 20 4c 5a 6f r, LZlength, LZo
2290: 66 66 73 3b 0d 0a 0d 0a 09 63 70 74 5f 4c 5a 62 ffs;.....cpt_LZb
22a0: 75 66 66 5b 43 49 52 43 53 49 5a 45 20 2d 20 33 uff[CIRCSIZE - 3
22b0: 5d 20 3d 20 30 3b 0d 0a 09 63 70 74 5f 4c 5a 62 ] = 0;...cpt_LZb
22c0: 75 66 66 5b 43 49 52 43 53 49 5a 45 20 2d 20 32 uff[CIRCSIZE - 2
22d0: 5d 20 3d 20 30 3b 0d 0a 09 63 70 74 5f 4c 5a 62 ] = 0;...cpt_LZb
22e0: 75 66 66 5b 43 49 52 43 53 49 5a 45 20 2d 20 31 uff[CIRCSIZE - 1
22f0: 5d 20 3d 20 30 3b 0d 0a 09 63 70 74 5f 4c 5a 70 ] = 0;...cpt_LZp
2300: 74 72 20 3d 20 30 3b 0d 0a 0d 0a 09 77 68 69 6c tr = 0;.....whil
2310: 65 28 20 64 61 74 61 55 4c 65 6e 21 3d 30 20 29 e( dataULen!=0 )
2320: 0d 0a 09 7b 0d 0a 09 09 63 70 74 5f 72 65 61 64 ...{....cpt_read
2330: 48 75 66 66 28 32 35 36 2c 63 70 74 5f 48 75 66 Huff(256,cpt_Huf
2340: 66 74 72 65 65 29 3b 0d 0a 09 09 63 70 74 5f 72 ftree);....cpt_r
2350: 65 61 64 48 75 66 66 28 20 36 34 2c 63 70 74 5f eadHuff( 64,cpt_
2360: 4c 5a 6c 65 6e 67 74 68 29 3b 0d 0a 09 09 63 70 LZlength);....cp
2370: 74 5f 72 65 61 64 48 75 66 66 28 31 32 38 2c 63 t_readHuff(128,c
2380: 70 74 5f 4c 5a 6f 66 66 73 20 20 29 3b 0d 0a 09 pt_LZoffs );...
2390: 09 62 6c 6f 63 6b 5f 63 6f 75 6e 74 20 3d 20 30 .block_count = 0
23a0: 3b 0d 0a 09 09 63 70 74 5f 6e 65 77 62 69 74 73 ;....cpt_newbits
23b0: 20 3d 20 28 63 70 74 2e 67 65 74 63 28 29 3c 3c = (cpt.getc()<<
23c0: 38 29 3b 0d 0a 09 09 63 70 74 5f 6e 65 77 62 69 8);....cpt_newbi
23d0: 74 73 20 3d 20 63 70 74 5f 6e 65 77 62 69 74 73 ts = cpt_newbits
23e0: 20 7c 20 63 70 74 2e 67 65 74 63 28 29 3b 0d 0a | cpt.getc();..
23f0: 09 09 63 70 74 5f 6e 65 77 62 69 74 73 20 3d 20 ..cpt_newbits =
2400: 63 70 74 5f 6e 65 77 62 69 74 73 20 3c 3c 20 31 cpt_newbits << 1
2410: 36 3b 0d 0a 09 09 63 70 74 5f 62 69 74 73 61 76 6;....cpt_bitsav
2420: 61 69 6c 20 3d 20 31 36 3b 0d 0a 09 09 77 68 69 ail = 16;....whi
2430: 6c 65 28 20 62 6c 6f 63 6b 5f 63 6f 75 6e 74 3c le( block_count<
2440: 63 70 74 5f 62 6c 6f 63 6b 73 69 7a 65 20 26 26 cpt_blocksize &&
2450: 20 64 61 74 61 55 4c 65 6e 21 3d 30 20 29 0d 0a dataULen!=0 )..
2460: 09 09 7b 0d 0a 09 09 09 69 66 28 20 63 70 74 5f ..{.....if( cpt_
2470: 67 65 74 62 69 74 28 29 20 29 0d 0a 09 09 09 7b getbit() ).....{
2480: 0d 0a 09 09 09 09 48 75 66 66 63 68 61 72 20 3d ......Huffchar =
2490: 20 67 65 74 68 75 66 66 62 79 74 65 28 63 70 74 gethuffbyte(cpt
24a0: 5f 48 75 66 66 74 72 65 65 29 3b 0d 0a 09 09 09 _Hufftree);.....
24b0: 09 63 70 74 5f 6f 75 74 63 68 28 28 75 6e 73 69 .cpt_outch((unsi
24c0: 67 6e 65 64 20 63 68 61 72 29 48 75 66 66 63 68 gned char)Huffch
24d0: 61 72 29 3b 0d 0a 09 09 09 09 62 6c 6f 63 6b 5f ar);......block_
24e0: 63 6f 75 6e 74 20 2b 3d 20 32 3b 0d 0a 09 09 09 count += 2;.....
24f0: 7d 0d 0a 09 09 09 65 6c 73 65 0d 0a 09 09 09 7b }.....else.....{
2500: 0d 0a 09 09 09 09 4c 5a 6c 65 6e 67 74 68 20 3d ......LZlength =
2510: 20 67 65 74 68 75 66 66 62 79 74 65 28 63 70 74 gethuffbyte(cpt
2520: 5f 4c 5a 6c 65 6e 67 74 68 29 3b 0d 0a 09 09 09 _LZlength);.....
2530: 09 4c 5a 6f 66 66 73 20 3d 20 67 65 74 68 75 66 .LZoffs = gethuf
2540: 66 62 79 74 65 28 63 70 74 5f 4c 5a 6f 66 66 73 fbyte(cpt_LZoffs
2550: 29 3b 0d 0a 09 09 09 09 4c 5a 6f 66 66 73 20 3d );......LZoffs =
2560: 20 28 4c 5a 6f 66 66 73 20 3c 3c 20 36 29 20 7c (LZoffs << 6) |
2570: 20 63 70 74 5f 67 65 74 36 62 69 74 73 28 29 3b cpt_get6bits();
2580: 0d 0a 09 09 09 09 62 70 74 72 20 3d 20 63 70 74 ......bptr = cpt
2590: 5f 4c 5a 70 74 72 20 2d 20 4c 5a 6f 66 66 73 3b _LZptr - LZoffs;
25a0: 0d 0a 09 09 09 09 77 68 69 6c 65 28 20 4c 5a 6c ......while( LZl
25b0: 65 6e 67 74 68 2d 2d 3e 30 20 29 0d 0a 09 09 09 ength-->0 ).....
25c0: 09 09 63 70 74 5f 6f 75 74 63 68 28 63 70 74 5f ..cpt_outch(cpt_
25d0: 4c 5a 62 75 66 66 5b 62 70 74 72 2b 2b 26 28 43 LZbuff[bptr++&(C
25e0: 49 52 43 53 49 5a 45 2d 31 29 5d 29 3b 0d 0a 09 IRCSIZE-1)]);...
25f0: 09 09 09 62 6c 6f 63 6b 5f 63 6f 75 6e 74 20 2b ...block_count +
2600: 3d 20 33 3b 0d 0a 09 09 09 7d 0d 0a 09 09 7d 0d = 3;.....}....}.
2610: 0a 09 7d 0d 0a 7d 0d 0a 0d 0a 69 6e 74 20 43 41 ..}..}....int CA
2620: 72 63 43 70 74 3a 3a 67 65 74 68 75 66 66 62 79 rcCpt::gethuffby
2630: 74 65 28 6e 6f 64 65 2a 20 6c 5f 6e 6f 64 65 6c te(node* l_nodel
2640: 69 73 74 29 0d 0a 7b 0d 0a 09 72 65 67 69 73 74 ist)..{...regist
2650: 65 72 20 6e 6f 64 65 20 2a 6e 70 3b 0d 0a 09 6e er node *np;...n
2660: 70 20 3d 20 6c 5f 6e 6f 64 65 6c 69 73 74 3b 0d p = l_nodelist;.
2670: 0a 09 77 68 69 6c 65 28 6e 70 2d 3e 66 6c 61 67 ..while(np->flag
2680: 20 3d 3d 20 30 29 0d 0a 09 09 6e 70 20 3d 20 63 == 0)....np = c
2690: 70 74 5f 67 65 74 62 69 74 28 29 20 3f 20 6e 70 pt_getbit() ? np
26a0: 2d 3e 6f 6e 65 20 3a 20 6e 70 2d 3e 7a 65 72 6f ->one : np->zero
26b0: 3b 0d 0a 09 72 65 74 75 72 6e 20 6e 70 2d 3e 62 ;...return np->b
26c0: 79 74 65 3b 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64 20 yte;..}....void
26d0: 43 41 72 63 43 70 74 3a 3a 63 70 74 5f 72 65 61 CArcCpt::cpt_rea
26e0: 64 48 75 66 66 28 69 6e 74 20 73 69 7a 65 2c 6e dHuff(int size,n
26f0: 6f 64 65 2a 20 48 75 66 66 74 72 65 65 29 0d 0a ode* Hufftree)..
2700: 7b 0d 0a 09 73 66 5f 65 6e 74 72 79 20 74 72 65 {...sf_entry tre
2710: 65 5f 65 6e 74 72 79 5b 32 35 36 20 2b 20 53 4c e_entry[256 + SL
2720: 41 43 4b 5d 3b 0d 0a 09 69 6e 74 20 74 72 65 65 ACK];...int tree
2730: 5f 65 6e 74 72 69 65 73 3b 0d 0a 09 69 6e 74 20 _entries;...int
2740: 74 72 65 65 5f 4d 61 78 4c 65 6e 67 74 68 3b 0d tree_MaxLength;.
2750: 0a 09 69 6e 74 20 74 72 65 65 42 79 74 65 73 2c ..int treeBytes,
2760: 20 69 2c 20 6c 65 6e 3b 0d 0a 09 73 66 5f 65 6e i, len;...sf_en
2770: 74 72 79 20 2a 65 6a 6d 31 3b 0d 0a 09 69 6e 74 try *ejm1;...int
2780: 20 6a 3b 0d 0a 09 73 66 5f 65 6e 74 72 79 20 2a j;...sf_entry *
2790: 65 6e 74 72 79 3b 0d 0a 20 20 20 20 73 66 5f 65 entry;.. sf_e
27a0: 6e 74 72 79 20 74 6d 70 3b 0d 0a 20 20 20 20 69 ntry tmp;.. i
27b0: 6e 74 20 65 6e 74 72 69 65 73 3b 0d 0a 20 20 20 nt entries;..
27c0: 20 75 6e 73 69 67 6e 65 64 20 61 2c 20 62 3b 0d unsigned a, b;.
27d0: 0a 09 69 6e 74 20 63 6f 64 65 6c 65 6e 2c 20 6c ..int codelen, l
27e0: 76 6c 73 74 61 72 74 2c 20 6e 65 78 74 2c 20 70 vlstart, next, p
27f0: 61 72 65 6e 74 73 3b 0d 0a 09 69 6e 74 20 74 72 arents;...int tr
2800: 65 65 5f 63 6f 75 6e 74 5b 33 32 5d 3b 0d 0a 0d ee_count[32];...
2810: 0a 09 74 72 65 65 42 79 74 65 73 20 3d 20 63 70 ..treeBytes = cp
2820: 74 2e 67 65 74 63 28 29 3b 0d 0a 09 69 66 28 20 t.getc();...if(
2830: 73 69 7a 65 3c 74 72 65 65 42 79 74 65 73 2a 32 size<treeBytes*2
2840: 20 29 0d 0a 09 09 72 65 74 75 72 6e 3b 0d 0a 09 )....return;...
2850: 66 6f 72 28 20 69 3d 30 3b 20 69 21 3d 33 32 3b for( i=0; i!=32;
2860: 20 69 2b 2b 20 29 0d 0a 09 09 74 72 65 65 5f 63 i++ )....tree_c
2870: 6f 75 6e 74 5b 69 5d 20 3d 20 30 3b 0d 0a 09 69 ount[i] = 0;...i
2880: 20 3d 20 30 3b 0d 0a 09 74 72 65 65 5f 4d 61 78 = 0;...tree_Max
2890: 4c 65 6e 67 74 68 20 3d 20 30 3b 0d 0a 09 74 72 Length = 0;...tr
28a0: 65 65 5f 65 6e 74 72 69 65 73 20 3d 20 30 3b 0d ee_entries = 0;.
28b0: 0a 09 77 68 69 6c 65 28 20 74 72 65 65 42 79 74 ..while( treeByt
28c0: 65 73 2d 2d 3e 30 20 29 0d 0a 09 7b 0d 0a 09 09 es-->0 )...{....
28d0: 69 6e 74 20 63 3d 63 70 74 2e 67 65 74 63 28 29 int c=cpt.getc()
28e0: 3b 0d 0a 09 09 6c 65 6e 20 3d 20 63 20 3e 3e 20 ;....len = c >>
28f0: 34 3b 0d 0a 0d 0a 09 09 69 66 28 6c 65 6e 20 21 4;......if(len !
2900: 3d 20 30 29 0d 0a 09 09 7b 0d 0a 09 09 09 69 66 = 0)....{.....if
2910: 28 6c 65 6e 20 3e 20 74 72 65 65 5f 4d 61 78 4c (len > tree_MaxL
2920: 65 6e 67 74 68 29 0d 0a 09 09 09 09 74 72 65 65 ength)......tree
2930: 5f 4d 61 78 4c 65 6e 67 74 68 20 3d 20 6c 65 6e _MaxLength = len
2940: 3b 0d 0a 09 09 09 74 72 65 65 5f 63 6f 75 6e 74 ;.....tree_count
2950: 5b 6c 65 6e 5d 2b 2b 3b 0d 0a 09 09 09 74 72 65 [len]++;.....tre
2960: 65 5f 65 6e 74 72 79 5b 74 72 65 65 5f 65 6e 74 e_entry[tree_ent
2970: 72 69 65 73 5d 2e 56 61 6c 75 65 20 3d 20 69 3b ries].Value = i;
2980: 0d 0a 09 09 09 74 72 65 65 5f 65 6e 74 72 79 5b .....tree_entry[
2990: 74 72 65 65 5f 65 6e 74 72 69 65 73 2b 2b 5d 2e tree_entries++].
29a0: 42 69 74 4c 65 6e 67 74 68 20 3d 20 6c 65 6e 3b BitLength = len;
29b0: 0d 0a 09 09 7d 0d 0a 09 09 69 2b 2b 3b 0d 0a 09 ....}....i++;...
29c0: 09 6c 65 6e 20 3d 20 63 20 26 20 30 78 30 66 3b .len = c & 0x0f;
29d0: 0d 0a 09 09 69 66 28 6c 65 6e 20 21 3d 20 30 29 ....if(len != 0)
29e0: 0d 0a 09 09 7b 0d 0a 09 09 09 69 66 28 6c 65 6e ....{.....if(len
29f0: 20 3e 20 74 72 65 65 5f 4d 61 78 4c 65 6e 67 74 > tree_MaxLengt
2a00: 68 29 0d 0a 09 09 09 09 74 72 65 65 5f 4d 61 78 h)......tree_Max
2a10: 4c 65 6e 67 74 68 20 3d 20 6c 65 6e 3b 0d 0a 09 Length = len;...
2a20: 09 09 74 72 65 65 5f 63 6f 75 6e 74 5b 6c 65 6e ..tree_count[len
2a30: 5d 2b 2b 3b 0d 0a 09 09 09 74 72 65 65 5f 65 6e ]++;.....tree_en
2a40: 74 72 79 5b 74 72 65 65 5f 65 6e 74 72 69 65 73 try[tree_entries
2a50: 5d 2e 56 61 6c 75 65 20 3d 20 69 3b 0d 0a 09 09 ].Value = i;....
2a60: 09 74 72 65 65 5f 65 6e 74 72 79 5b 74 72 65 65 .tree_entry[tree
2a70: 5f 65 6e 74 72 69 65 73 2b 2b 5d 2e 42 69 74 4c _entries++].BitL
2a80: 65 6e 67 74 68 20 3d 20 6c 65 6e 3b 0d 0a 09 09 ength = len;....
2a90: 7d 0d 0a 09 09 69 2b 2b 3b 0d 0a 09 7d 0d 0a 0d }....i++;...}...
2aa0: 0a 09 6a 20 3d 20 30 3b 0d 0a 20 20 20 20 66 6f ..j = 0;.. fo
2ab0: 72 28 20 69 3d 30 3b 20 69 3c 3d 74 72 65 65 5f r( i=0; i<=tree_
2ac0: 4d 61 78 4c 65 6e 67 74 68 3b 20 69 2b 2b 20 29 MaxLength; i++ )
2ad0: 0d 0a 09 09 6a 20 3d 20 28 6a 20 3c 3c 20 31 29 ....j = (j << 1)
2ae0: 20 2b 20 74 72 65 65 5f 63 6f 75 6e 74 5b 69 5d + tree_count[i]
2af0: 3b 0d 0a 09 6a 20 3d 20 28 31 20 3c 3c 74 72 65 ;...j = (1 <<tre
2b00: 65 5f 4d 61 78 4c 65 6e 67 74 68 29 20 2d 20 6a e_MaxLength) - j
2b10: 3b 0d 0a 09 66 6f 72 28 20 69 3d 30 3b 20 69 3c ;...for( i=0; i<
2b20: 6a 3b 20 69 2b 2b 20 29 0d 0a 09 7b 0d 0a 09 09 j; i++ )...{....
2b30: 74 72 65 65 5f 65 6e 74 72 79 5b 74 72 65 65 5f tree_entry[tree_
2b40: 65 6e 74 72 69 65 73 5d 2e 56 61 6c 75 65 20 3d entries].Value =
2b50: 20 73 69 7a 65 3b 0d 0a 09 09 74 72 65 65 5f 65 size;....tree_e
2b60: 6e 74 72 79 5b 74 72 65 65 5f 65 6e 74 72 69 65 ntry[tree_entrie
2b70: 73 2b 2b 5d 2e 42 69 74 4c 65 6e 67 74 68 20 3d s++].BitLength =
2b80: 20 74 72 65 65 5f 4d 61 78 4c 65 6e 67 74 68 3b tree_MaxLength;
2b90: 0d 0a 09 7d 0d 0a 0d 0a 09 65 6e 74 72 79 20 3d ...}.....entry =
2ba0: 20 26 28 74 72 65 65 5f 65 6e 74 72 79 5b 30 5d &(tree_entry[0]
2bb0: 29 3b 0d 0a 09 65 6e 74 72 69 65 73 20 3d 20 74 );...entries = t
2bc0: 72 65 65 5f 65 6e 74 72 69 65 73 3b 0d 0a 20 20 ree_entries;..
2bd0: 20 20 66 6f 72 28 20 69 3d 30 3b 20 2b 2b 69 3c for( i=0; ++i<
2be0: 65 6e 74 72 69 65 73 3b 20 29 0d 0a 09 7b 0d 0a entries; )...{..
2bf0: 09 09 74 6d 70 20 3d 20 65 6e 74 72 79 5b 69 5d ..tmp = entry[i]
2c00: 3b 0d 0a 09 09 62 20 3d 20 74 6d 70 2e 42 69 74 ;....b = tmp.Bit
2c10: 4c 65 6e 67 74 68 3b 0d 0a 09 09 6a 20 3d 20 69 Length;....j = i
2c20: 3b 0d 0a 09 09 77 68 69 6c 65 28 28 6a 20 3e 20 ;....while((j >
2c30: 30 29 20 26 26 20 28 28 61 20 3d 20 28 65 6a 6d 0) && ((a = (ejm
2c40: 31 20 3d 20 26 28 65 6e 74 72 79 5b 6a 20 2d 20 1 = &(entry[j -
2c50: 31 5d 29 29 2d 3e 42 69 74 4c 65 6e 67 74 68 29 1]))->BitLength)
2c60: 20 3e 3d 20 62 29 29 0d 0a 09 09 7b 0d 0a 09 09 >= b))....{....
2c70: 09 69 66 28 28 61 20 3d 3d 20 62 29 20 26 26 20 .if((a == b) &&
2c80: 28 65 6a 6d 31 2d 3e 56 61 6c 75 65 20 3c 3d 20 (ejm1->Value <=
2c90: 74 6d 70 2e 56 61 6c 75 65 29 29 0d 0a 09 09 09 tmp.Value)).....
2ca0: 09 62 72 65 61 6b 3b 0d 0a 09 09 09 2a 28 65 6a .break;.....*(ej
2cb0: 6d 31 20 2b 20 31 29 20 3d 20 2a 65 6a 6d 31 3b m1 + 1) = *ejm1;
2cc0: 0d 0a 09 09 09 2d 2d 6a 3b 0d 0a 09 09 7d 0d 0a .....--j;....}..
2cd0: 09 09 65 6e 74 72 79 5b 6a 5d 20 3d 20 74 6d 70 ..entry[j] = tmp
2ce0: 3b 0d 0a 09 7d 0d 0a 0d 0a 20 20 20 20 69 20 3d ;...}.... i =
2cf0: 20 74 72 65 65 5f 65 6e 74 72 69 65 73 20 2d 20 tree_entries -
2d00: 31 3b 0d 0a 20 20 20 20 6c 76 6c 73 74 61 72 74 1;.. lvlstart
2d10: 20 3d 20 6e 65 78 74 20 3d 20 73 69 7a 65 20 2a = next = size *
2d20: 20 32 20 2b 20 53 4c 41 43 4b 20 2d 20 31 3b 0d 2 + SLACK - 1;.
2d30: 0a 20 20 20 20 66 6f 72 28 63 6f 64 65 6c 65 6e . for(codelen
2d40: 20 3d 20 74 72 65 65 5f 4d 61 78 4c 65 6e 67 74 = tree_MaxLengt
2d50: 68 3b 20 63 6f 64 65 6c 65 6e 20 3e 3d 20 31 3b h; codelen >= 1;
2d60: 20 2d 2d 63 6f 64 65 6c 65 6e 29 0d 0a 09 7b 0d --codelen)...{.
2d70: 0a 09 09 77 68 69 6c 65 28 28 69 20 3e 3d 20 30 ...while((i >= 0
2d80: 29 20 26 26 20 28 74 72 65 65 5f 65 6e 74 72 79 ) && (tree_entry
2d90: 5b 69 5d 2e 42 69 74 4c 65 6e 67 74 68 20 3d 3d [i].BitLength ==
2da0: 20 63 6f 64 65 6c 65 6e 29 29 0d 0a 09 09 7b 0d codelen))....{.
2db0: 0a 09 09 09 48 75 66 66 74 72 65 65 5b 6e 65 78 ....Hufftree[nex
2dc0: 74 5d 2e 62 79 74 65 20 3d 20 74 72 65 65 5f 65 t].byte = tree_e
2dd0: 6e 74 72 79 5b 69 5d 2e 56 61 6c 75 65 3b 0d 0a ntry[i].Value;..
2de0: 09 09 09 48 75 66 66 74 72 65 65 5b 6e 65 78 74 ...Hufftree[next
2df0: 5d 2e 66 6c 61 67 20 3d 20 31 3b 0d 0a 09 09 09 ].flag = 1;.....
2e00: 6e 65 78 74 2d 2d 3b 0d 0a 09 09 09 69 2d 2d 3b next--;.....i--;
2e10: 0d 0a 09 09 7d 0d 0a 09 09 70 61 72 65 6e 74 73 ....}....parents
2e20: 20 3d 20 6e 65 78 74 3b 0d 0a 09 09 69 66 28 63 = next;....if(c
2e30: 6f 64 65 6c 65 6e 20 3e 20 31 29 0d 0a 09 09 7b odelen > 1)....{
2e40: 0d 0a 09 09 09 66 6f 72 28 6a 20 3d 20 6c 76 6c .....for(j = lvl
2e50: 73 74 61 72 74 3b 20 6a 20 3e 20 70 61 72 65 6e start; j > paren
2e60: 74 73 20 2b 20 31 3b 20 6a 2d 3d 20 32 29 0d 0a ts + 1; j-= 2)..
2e70: 09 09 09 7b 0d 0a 09 09 09 09 48 75 66 66 74 72 ...{......Hufftr
2e80: 65 65 5b 6e 65 78 74 5d 2e 6f 6e 65 20 3d 20 26 ee[next].one = &
2e90: 28 48 75 66 66 74 72 65 65 5b 6a 5d 29 3b 0d 0a (Hufftree[j]);..
2ea0: 09 09 09 09 48 75 66 66 74 72 65 65 5b 6e 65 78 ....Hufftree[nex
2eb0: 74 5d 2e 7a 65 72 6f 20 3d 20 26 28 48 75 66 66 t].zero = &(Huff
2ec0: 74 72 65 65 5b 6a 20 2d 20 31 5d 29 3b 0d 0a 09 tree[j - 1]);...
2ed0: 09 09 09 48 75 66 66 74 72 65 65 5b 6e 65 78 74 ...Hufftree[next
2ee0: 5d 2e 66 6c 61 67 20 3d 20 30 3b 0d 0a 09 09 09 ].flag = 0;.....
2ef0: 09 6e 65 78 74 2d 2d 3b 0d 0a 09 09 09 7d 0d 0a .next--;.....}..
2f00: 09 09 7d 0d 0a 09 09 6c 76 6c 73 74 61 72 74 20 ..}....lvlstart
2f10: 3d 20 70 61 72 65 6e 74 73 3b 0d 0a 09 7d 0d 0a = parents;...}..
2f20: 09 48 75 66 66 74 72 65 65 5b 30 5d 2e 6f 6e 65 .Hufftree[0].one
2f30: 20 3d 20 26 28 48 75 66 66 74 72 65 65 5b 6e 65 = &(Hufftree[ne
2f40: 78 74 20 2b 20 32 5d 29 3b 0d 0a 09 48 75 66 66 xt + 2]);...Huff
2f50: 74 72 65 65 5b 30 5d 2e 7a 65 72 6f 20 3d 20 26 tree[0].zero = &
2f60: 28 48 75 66 66 74 72 65 65 5b 6e 65 78 74 20 2b (Hufftree[next +
2f70: 20 31 5d 29 3b 0d 0a 09 48 75 66 66 74 72 65 65 1]);...Hufftree
2f80: 5b 30 5d 2e 66 6c 61 67 20 3d 20 30 3b 0d 0a 7d [0].flag = 0;..}
2f90: 0d 0a 0d 0a 69 6e 74 20 43 41 72 63 43 70 74 3a ....int CArcCpt:
2fa0: 3a 63 70 74 5f 67 65 74 36 62 69 74 73 28 29 0d :cpt_get6bits().
2fb0: 0a 7b 0d 0a 09 69 6e 74 20 63 6e 2c 62 3d 28 63 .{...int cn,b=(c
2fc0: 70 74 5f 6e 65 77 62 69 74 73 20 3e 3e 20 32 36 pt_newbits >> 26
2fd0: 29 20 26 20 30 78 33 66 3b 0d 0a 09 63 70 74 5f ) & 0x3f;...cpt_
2fe0: 62 69 74 73 61 76 61 69 6c 20 2d 3d 20 36 3b 0d bitsavail -= 6;.
2ff0: 0a 09 63 70 74 5f 6e 65 77 62 69 74 73 20 3c 3c ..cpt_newbits <<
3000: 3d 20 36 3b 0d 0a 09 69 66 28 63 70 74 5f 62 69 = 6;...if(cpt_bi
3010: 74 73 61 76 61 69 6c 20 3c 20 31 36 29 0d 0a 09 tsavail < 16)...
3020: 7b 0d 0a 09 09 63 6e 20 3d 20 28 63 70 74 2e 67 {....cn = (cpt.g
3030: 65 74 63 28 29 20 3c 3c 20 38 29 3b 0d 0a 09 09 etc() << 8);....
3040: 63 6e 20 7c 3d 20 63 70 74 2e 67 65 74 63 28 29 cn |= cpt.getc()
3050: 3b 0d 0a 09 09 63 70 74 5f 6e 65 77 62 69 74 73 ;....cpt_newbits
3060: 20 7c 3d 20 28 63 6e 20 3c 3c 20 28 31 36 20 2d |= (cn << (16 -
3070: 20 63 70 74 5f 62 69 74 73 61 76 61 69 6c 29 29 cpt_bitsavail))
3080: 3b 0d 0a 09 09 63 70 74 5f 62 69 74 73 61 76 61 ;....cpt_bitsava
3090: 69 6c 20 2b 3d 20 31 36 3b 0d 0a 09 7d 0d 0a 09 il += 16;...}...
30a0: 72 65 74 75 72 6e 20 62 3b 0d 0a 7d 0d 0a 0d 0a return b;..}....
30b0: 69 6e 74 20 43 41 72 63 43 70 74 3a 3a 63 70 74 int CArcCpt::cpt
30c0: 5f 67 65 74 62 69 74 28 29 0d 0a 7b 0d 0a 09 69 _getbit()..{...i
30d0: 6e 74 20 62 20 3d 20 28 63 70 74 5f 6e 65 77 62 nt b = (cpt_newb
30e0: 69 74 73 20 3e 3e 20 33 31 29 20 26 20 31 3b 0d its >> 31) & 1;.
30f0: 0a 09 63 70 74 5f 62 69 74 73 61 76 61 69 6c 2d ..cpt_bitsavail-
3100: 2d 3b 0d 0a 09 69 66 28 20 63 70 74 5f 62 69 74 -;...if( cpt_bit
3110: 73 61 76 61 69 6c 3c 31 36 20 29 0d 0a 09 7b 0d savail<16 )...{.
3120: 0a 09 09 63 70 74 5f 6e 65 77 62 69 74 73 20 7c ...cpt_newbits |
3130: 3d 20 28 63 70 74 2e 67 65 74 63 28 29 20 3c 3c = (cpt.getc() <<
3140: 20 38 29 3b 0d 0a 09 09 63 70 74 5f 6e 65 77 62 8);....cpt_newb
3150: 69 74 73 20 7c 3d 20 63 70 74 2e 67 65 74 63 28 its |= cpt.getc(
3160: 29 3b 0d 0a 09 09 63 70 74 5f 62 69 74 73 61 76 );....cpt_bitsav
3170: 61 69 6c 20 2b 3d 20 31 36 3b 0d 0a 09 7d 0d 0a ail += 16;...}..
3180: 09 63 70 74 5f 6e 65 77 62 69 74 73 20 3c 3c 3d .cpt_newbits <<=
3190: 20 31 3b 0d 0a 09 72 65 74 75 72 6e 20 62 3b 0d 1;...return b;.
31a0: 0a 7d 0d 0a .}..