Hex Artifact Content

Not logged in

Artifact de96d041f43cbd6fed6047e0da21dd4c86bbaf7b:


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                                      .}..