Hex Artifact Content

Not logged in

Artifact b142f0fccb14651d0680fd99e093ab2757ee6475:


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 4d 73 63 2e 68 22 0d 0a 23 69 6e 63  "ArcMsc.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 62 6f 6f 6c 20 43 41 72 63 4d 73 63  ....bool CArcMsc
0050: 3a 3a 68 65 61 64 65 72 28 20 6b 69 46 69 6c 65  ::header( kiFile
0060: 26 20 66 70 2c 20 75 6e 73 69 67 6e 65 64 20 6c  & fp, unsigned l
0070: 6f 6e 67 2a 20 73 69 7a 2c 20 63 68 61 72 2a 20  ong* siz, char* 
0080: 65 78 74 20 29 0d 0a 7b 0d 0a 09 2f 2f 20 93 c7  ext )..{...// ..
0090: 82 dd 8f 6f 82 b7 0d 0a 09 75 6e 73 69 67 6e 65  ...o.....unsigne
00a0: 64 20 63 68 61 72 20 70 5b 31 34 5d 3b 0d 0a 09  d char p[14];...
00b0: 69 66 28 20 31 34 21 3d 66 70 2e 72 65 61 64 28  if( 14!=fp.read(
00c0: 70 2c 31 34 29 20 29 0d 0a 09 09 72 65 74 75 72  p,14) )....retur
00d0: 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 09 2f 2f 20  n false;.....// 
00e0: 83 77 83 62 83 5f 8d 5c 91 a2 81 46 53 5a 44 44  .w.b._.\...FSZDD
00f0: 88 f0 27 33 41 20 5b 65 78 74 33 72 64 5d 20 5b  ..'3A [ext3rd] [
0100: 6f 72 69 73 69 7a 28 64 77 6f 72 64 29 5d 0d 0a  orisiz(dword)]..
0110: 09 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e  .static const un
0120: 73 69 67 6e 65 64 20 63 68 61 72 20 68 65 61 64  signed char head
0130: 5b 39 5d 3d 7b 20 30 78 35 33 2c 30 78 35 41 2c  [9]={ 0x53,0x5A,
0140: 30 78 34 34 2c 30 78 34 34 2c 30 78 38 38 2c 30  0x44,0x44,0x88,0
0150: 78 46 30 2c 30 78 32 37 2c 30 78 33 33 2c 30 78  xF0,0x27,0x33,0x
0160: 34 31 20 7d 3b 2f 2f 3d 22 53 5a 44 44 88 f0 27  41 };//="SZDD..'
0170: 33 41 22 3b 0d 0a 0d 0a 09 66 6f 72 28 20 69 6e  3A";.....for( in
0180: 74 20 69 3d 30 3b 20 69 21 3d 39 3b 20 69 2b 2b  t i=0; i!=9; i++
0190: 20 29 0d 0a 09 09 69 66 28 20 70 5b 69 5d 21 3d   )....if( p[i]!=
01a0: 68 65 61 64 5b 69 5d 20 29 0d 0a 09 09 09 72 65  head[i] ).....re
01b0: 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 09  turn false;.....
01c0: 69 66 28 20 65 78 74 20 29 0d 0a 09 09 2a 65 78  if( ext )....*ex
01d0: 74 20 3d 20 28 63 68 61 72 29 70 5b 39 5d 3b 0d  t = (char)p[9];.
01e0: 0a 0d 0a 09 44 57 4f 52 44 20 78 20 3d 20 70 5b  ....DWORD x = p[
01f0: 31 30 5d 2b 28 70 5b 31 31 5d 3c 3c 38 29 2b 28  10]+(p[11]<<8)+(
0200: 70 5b 31 32 5d 3c 3c 31 36 29 2b 28 70 5b 31 33  p[12]<<16)+(p[13
0210: 5d 3c 3c 32 34 29 3b 0d 0a 09 69 66 28 20 73 69  ]<<24);...if( si
0220: 7a 20 29 0d 0a 09 09 2a 73 69 7a 3d 78 3b 0d 0a  z )....*siz=x;..
0230: 0d 0a 09 2f 2f 20 8c b4 97 9d 93 49 82 c9 81 41  ...// .....I...A
0240: 31 36 94 7b 82 c6 82 a2 82 a4 88 b3 8f 6b 97 a6  16.{.........k..
0250: 82 cd 8f 6f 82 c8 82 a2 0d 0a 09 72 65 74 75 72  ...o.......retur
0260: 6e 20 28 78 20 3c 3d 20 66 70 2e 67 65 74 53 69  n (x <= fp.getSi
0270: 7a 65 28 29 2a 31 36 29 3b 0d 0a 7d 0d 0a 0d 0a  ze()*16);..}....
0280: 76 6f 69 64 20 43 41 72 63 4d 73 63 3a 3a 66 69  void CArcMsc::fi
0290: 6c 65 6e 61 6d 65 28 20 63 68 61 72 2a 20 6f 6e  lename( char* on
02a0: 61 6d 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ame, const char*
02b0: 20 6f 6c 2c 20 63 68 61 72 20 65 78 74 20 29 0d   ol, char ext ).
02c0: 0a 7b 0d 0a 09 2f 2f 20 83 52 83 73 81 5b 0d 0a  .{...// .R.s.[..
02d0: 09 6b 69 5f 73 74 72 63 70 79 28 20 6f 6e 61 6d  .ki_strcpy( onam
02e0: 65 2c 20 6f 6c 20 29 3b 0d 0a 0d 0a 09 2f 2f 20  e, ol );.....// 
02f0: 8d c5 8c e3 82 aa 20 27 5f 27 20 82 c8 82 e7 8f  ...... '_' .....
0300: c1 82 b5 82 c4 82 a8 82 ad 81 42 0d 0a 09 62 6f  ..........B...bo
0310: 6f 6c 20 62 49 73 5f 3d 66 61 6c 73 65 3b 0d 0a  ol bIs_=false;..
0320: 09 66 6f 72 28 20 63 68 61 72 2a 20 70 3d 6f 6e  .for( char* p=on
0330: 61 6d 65 3b 20 2a 70 3b 20 70 3d 6b 69 53 74 72  ame; *p; p=kiStr
0340: 3a 3a 6e 65 78 74 28 70 29 20 29 20 0d 0a 09 09  ::next(p) ) ....
0350: 62 49 73 5f 20 3d 20 28 2a 70 3d 3d 27 5f 27 29  bIs_ = (*p=='_')
0360: 3b 0d 0a 09 69 66 28 20 62 49 73 5f 20 29 0d 0a  ;...if( bIs_ )..
0370: 09 09 2a 28 2d 2d 70 29 3d 27 5c 30 27 3b 0d 0a  ..*(--p)='\0';..
0380: 0d 0a 0d 0a 09 69 66 28 20 65 78 74 20 29 0d 0a  .....if( ext )..
0390: 09 7b 0d 0a 09 09 2f 2f 20 8a 67 92 a3 8e 71 95  .{....// .g...q.
03a0: 9c 8c b3 0d 0a 09 09 2a 70 2b 2b 20 3d 20 65 78  .......*p++ = ex
03b0: 74 3b 0d 0a 09 09 2a 70 20 20 20 3d 20 27 5c 30  t;....*p   = '\0
03c0: 27 3b 0d 0a 09 7d 0d 0a 09 65 6c 73 65 0d 0a 09  ';...}...else...
03d0: 7b 0d 0a 09 09 2f 2f 20 8a 67 92 a3 8e 71 8e a9  {....// .g...q..
03e0: 93 ae 95 e2 8a ae 0d 0a 09 09 63 6f 6e 73 74 20  ..........const 
03f0: 63 68 61 72 2a 20 78 20 3d 20 6b 69 50 61 74 68  char* x = kiPath
0400: 3a 3a 65 78 74 28 6f 6e 61 6d 65 29 3b 0d 0a 09  ::ext(oname);...
0410: 09 69 66 28 20 6b 69 5f 73 74 72 6c 65 6e 28 78  .if( ki_strlen(x
0420: 29 3d 3d 32 20 29 0d 0a 09 09 7b 0d 0a 09 09 09  )==2 )....{.....
0430: 3a 3a 43 68 61 72 4c 6f 77 65 72 28 6f 6e 61 6d  ::CharLower(onam
0440: 65 29 3b 0d 0a 0d 0a 09 09 09 09 20 69 66 28 20  e);........ if( 
0450: 30 3d 3d 6b 69 5f 73 74 72 63 6d 70 28 78 2c 22  0==ki_strcmp(x,"
0460: 65 78 22 29 20 29 28 2a 70 2b 2b 29 3d 27 65 27  ex") )(*p++)='e'
0470: 3b 0d 0a 09 09 09 65 6c 73 65 20 69 66 28 20 30  ;.....else if( 0
0480: 3d 3d 6b 69 5f 73 74 72 63 6d 70 28 78 2c 22 63  ==ki_strcmp(x,"c
0490: 6f 22 29 20 29 28 2a 70 2b 2b 29 3d 27 6d 27 3b  o") )(*p++)='m';
04a0: 0d 0a 09 09 09 65 6c 73 65 20 69 66 28 20 30 3d  .....else if( 0=
04b0: 3d 6b 69 5f 73 74 72 63 6d 70 28 78 2c 22 73 63  =ki_strcmp(x,"sc
04c0: 22 29 20 29 28 2a 70 2b 2b 29 3d 27 72 27 3b 0d  ") )(*p++)='r';.
04d0: 0a 0d 0a 09 09 09 65 6c 73 65 20 69 66 28 20 30  ......else if( 0
04e0: 3d 3d 6b 69 5f 73 74 72 63 6d 70 28 78 2c 22 64  ==ki_strcmp(x,"d
04f0: 6c 22 29 20 29 28 2a 70 2b 2b 29 3d 27 6c 27 3b  l") )(*p++)='l';
0500: 0d 0a 09 09 09 65 6c 73 65 20 69 66 28 20 30 3d  .....else if( 0=
0510: 3d 6b 69 5f 73 74 72 63 6d 70 28 78 2c 22 6f 63  =ki_strcmp(x,"oc
0520: 22 29 20 29 28 2a 70 2b 2b 29 3d 27 78 27 3b 0d  ") )(*p++)='x';.
0530: 0a 09 09 09 65 6c 73 65 20 69 66 28 20 30 3d 3d  ....else if( 0==
0540: 6b 69 5f 73 74 72 63 6d 70 28 78 2c 22 64 72 22  ki_strcmp(x,"dr"
0550: 29 20 29 28 2a 70 2b 2b 29 3d 27 76 27 3b 0d 0a  ) )(*p++)='v';..
0560: 09 09 09 65 6c 73 65 20 69 66 28 20 30 3d 3d 6b  ...else if( 0==k
0570: 69 5f 73 74 72 63 6d 70 28 78 2c 22 76 78 22 29  i_strcmp(x,"vx")
0580: 20 29 28 2a 70 2b 2b 29 3d 27 64 27 3b 0d 0a 09   )(*p++)='d';...
0590: 09 09 65 6c 73 65 20 69 66 28 20 30 3d 3d 6b 69  ..else if( 0==ki
05a0: 5f 73 74 72 63 6d 70 28 78 2c 22 33 38 22 29 20  _strcmp(x,"38") 
05b0: 29 28 2a 70 2b 2b 29 3d 27 36 27 3b 0d 0a 09 09  )(*p++)='6';....
05c0: 09 65 6c 73 65 20 69 66 28 20 30 3d 3d 6b 69 5f  .else if( 0==ki_
05d0: 73 74 72 63 6d 70 28 78 2c 22 73 79 22 29 20 29  strcmp(x,"sy") )
05e0: 28 2a 70 2b 2b 29 3d 27 73 27 3b 0d 0a 09 09 09  (*p++)='s';.....
05f0: 65 6c 73 65 20 69 66 28 20 30 3d 3d 6b 69 5f 73  else if( 0==ki_s
0600: 74 72 63 6d 70 28 78 2c 22 63 70 22 29 20 29 28  trcmp(x,"cp") )(
0610: 2a 70 2b 2b 29 3d 27 6c 27 3b 0d 0a 09 09 09 65  *p++)='l';.....e
0620: 6c 73 65 20 69 66 28 20 30 3d 3d 6b 69 5f 73 74  lse if( 0==ki_st
0630: 72 63 6d 70 28 78 2c 22 6c 69 22 29 20 29 28 2a  rcmp(x,"li") )(*
0640: 70 2b 2b 29 3d 27 62 27 3b 0d 0a 09 09 09 65 6c  p++)='b';.....el
0650: 73 65 20 69 66 28 20 30 3d 3d 6b 69 5f 73 74 72  se if( 0==ki_str
0660: 63 6d 70 28 78 2c 22 74 74 22 29 20 29 28 2a 70  cmp(x,"tt") )(*p
0670: 2b 2b 29 3d 27 66 27 3b 0d 0a 0d 0a 09 09 09 65  ++)='f';.......e
0680: 6c 73 65 20 69 66 28 20 30 3d 3d 6b 69 5f 73 74  lse if( 0==ki_st
0690: 72 63 6d 70 28 78 2c 22 63 68 22 29 20 29 28 2a  rcmp(x,"ch") )(*
06a0: 70 2b 2b 29 3d 27 6d 27 3b 0d 0a 09 09 09 65 6c  p++)='m';.....el
06b0: 73 65 20 69 66 28 20 30 3d 3d 6b 69 5f 73 74 72  se if( 0==ki_str
06c0: 63 6d 70 28 78 2c 22 68 6c 22 29 20 29 28 2a 70  cmp(x,"hl") )(*p
06d0: 2b 2b 29 3d 27 70 27 3b 0d 0a 09 09 09 65 6c 73  ++)='p';.....els
06e0: 65 20 69 66 28 20 30 3d 3d 6b 69 5f 73 74 72 63  e if( 0==ki_strc
06f0: 6d 70 28 78 2c 22 63 6e 22 29 20 29 28 2a 70 2b  mp(x,"cn") )(*p+
0700: 2b 29 3d 27 74 27 3b 0d 0a 09 09 09 65 6c 73 65  +)='t';.....else
0710: 20 69 66 28 20 30 3d 3d 6b 69 5f 73 74 72 63 6d   if( 0==ki_strcm
0720: 70 28 78 2c 22 64 61 22 29 20 29 28 2a 70 2b 2b  p(x,"da") )(*p++
0730: 29 3d 27 74 27 3b 0d 0a 0d 0a 09 09 09 65 6c 73  )='t';.......els
0740: 65 20 69 66 28 20 30 3d 3d 6b 69 5f 73 74 72 63  e if( 0==ki_strc
0750: 6d 70 28 78 2c 22 74 78 22 29 20 29 28 2a 70 2b  mp(x,"tx") )(*p+
0760: 2b 29 3d 27 74 27 3b 0d 0a 09 09 09 65 6c 73 65  +)='t';.....else
0770: 20 69 66 28 20 30 3d 3d 6b 69 5f 73 74 72 63 6d   if( 0==ki_strcm
0780: 70 28 78 2c 22 77 72 22 29 20 29 28 2a 70 2b 2b  p(x,"wr") )(*p++
0790: 29 3d 27 69 27 3b 0d 0a 09 09 09 65 6c 73 65 20  )='i';.....else 
07a0: 69 66 28 20 30 3d 3d 6b 69 5f 73 74 72 63 6d 70  if( 0==ki_strcmp
07b0: 28 78 2c 22 77 61 22 29 20 29 28 2a 70 2b 2b 29  (x,"wa") )(*p++)
07c0: 3d 27 76 27 3b 0d 0a 09 09 09 65 6c 73 65 20 69  ='v';.....else i
07d0: 66 28 20 30 3d 3d 6b 69 5f 73 74 72 63 6d 70 28  f( 0==ki_strcmp(
07e0: 78 2c 22 6d 69 22 29 20 29 28 2a 70 2b 2b 29 3d  x,"mi") )(*p++)=
07f0: 27 64 27 3b 0d 0a 09 09 09 65 6c 73 65 20 69 66  'd';.....else if
0800: 28 20 30 3d 3d 6b 69 5f 73 74 72 63 6d 70 28 78  ( 0==ki_strcmp(x
0810: 2c 22 72 6d 22 29 20 29 28 2a 70 2b 2b 29 3d 27  ,"rm") )(*p++)='
0820: 69 27 3b 0d 0a 09 09 09 65 6c 73 65 20 69 66 28  i';.....else if(
0830: 20 30 3d 3d 6b 69 5f 73 74 72 63 6d 70 28 78 2c   0==ki_strcmp(x,
0840: 22 62 6d 22 29 20 29 28 2a 70 2b 2b 29 3d 27 70  "bm") )(*p++)='p
0850: 27 3b 0d 0a 09 09 09 65 6c 73 65 20 69 66 28 20  ';.....else if( 
0860: 30 3d 3d 6b 69 5f 73 74 72 63 6d 70 28 78 2c 22  0==ki_strcmp(x,"
0870: 72 6c 22 29 20 29 28 2a 70 2b 2b 29 3d 27 65 27  rl") )(*p++)='e'
0880: 3b 0d 0a 09 09 09 65 6c 73 65 20 69 66 28 20 30  ;.....else if( 0
0890: 3d 3d 6b 69 5f 73 74 72 63 6d 70 28 78 2c 22 63  ==ki_strcmp(x,"c
08a0: 75 22 29 20 29 28 2a 70 2b 2b 29 3d 27 72 27 3b  u") )(*p++)='r';
08b0: 0d 0a 09 09 09 65 6c 73 65 20 69 66 28 20 30 3d  .....else if( 0=
08c0: 3d 6b 69 5f 73 74 72 63 6d 70 28 78 2c 22 64 6f  =ki_strcmp(x,"do
08d0: 22 29 20 29 28 2a 70 2b 2b 29 3d 27 63 27 3b 0d  ") )(*p++)='c';.
08e0: 0a 09 09 09 65 6c 73 65 20 69 66 28 20 30 3d 3d  ....else if( 0==
08f0: 6b 69 5f 73 74 72 63 6d 70 28 78 2c 22 69 63 22  ki_strcmp(x,"ic"
0900: 29 20 29 28 2a 70 2b 2b 29 3d 27 6f 27 3b 0d 0a  ) )(*p++)='o';..
0910: 09 09 09 65 6c 73 65 20 69 66 28 20 30 3d 3d 6b  ...else if( 0==k
0920: 69 5f 73 74 72 63 6d 70 28 78 2c 22 72 65 22 29  i_strcmp(x,"re")
0930: 20 29 28 2a 70 2b 2b 29 3d 27 67 27 3b 0d 0a 09   )(*p++)='g';...
0940: 09 09 65 6c 73 65 20 69 66 28 20 30 3d 3d 6b 69  ..else if( 0==ki
0950: 5f 73 74 72 63 6d 70 28 78 2c 22 72 74 22 29 20  _strcmp(x,"rt") 
0960: 29 28 2a 70 2b 2b 29 3d 27 66 27 3b 0d 0a 09 09  )(*p++)='f';....
0970: 09 65 6c 73 65 20 69 66 28 20 30 3d 3d 6b 69 5f  .else if( 0==ki_
0980: 73 74 72 63 6d 70 28 78 2c 22 68 74 22 29 20 29  strcmp(x,"ht") )
0990: 28 2a 70 2b 2b 29 3d 27 6d 27 3b 0d 0a 09 09 09  (*p++)='m';.....
09a0: 65 6c 73 65 09 09 09 09 09 09 20 20 20 28 2a 70  else......   (*p
09b0: 2b 2b 29 3d 27 23 27 3b 0d 0a 0d 0a 09 09 09 2a  ++)='#';.......*
09c0: 70 20 3d 20 27 5c 30 27 3b 0d 0a 09 09 7d 0d 0a  p = '\0';....}..
09d0: 09 7d 0d 0a 7d 0d 0a 0d 0a 62 6f 6f 6c 20 43 41  .}..}....bool CA
09e0: 72 63 4d 73 63 3a 3a 76 5f 63 68 65 63 6b 28 20  rcMsc::v_check( 
09f0: 63 6f 6e 73 74 20 6b 69 50 61 74 68 26 20 61 6e  const kiPath& an
0a00: 61 6d 65 20 29 0d 0a 7b 0d 0a 09 6b 69 46 69 6c  ame )..{...kiFil
0a10: 65 20 66 70 3b 0d 0a 09 69 66 28 20 66 70 2e 6f  e fp;...if( fp.o
0a20: 70 65 6e 28 20 61 6e 61 6d 65 20 29 20 29 0d 0a  pen( aname ) )..
0a30: 09 09 72 65 74 75 72 6e 20 68 65 61 64 65 72 28  ..return header(
0a40: 20 66 70 2c 4e 55 4c 4c 2c 4e 55 4c 4c 20 29 3b   fp,NULL,NULL );
0a50: 0d 0a 09 72 65 74 75 72 6e 20 66 61 6c 73 65 3b  ...return false;
0a60: 0d 0a 7d 0d 0a 0d 0a 62 6f 6f 6c 20 43 41 72 63  ..}....bool CArc
0a70: 4d 73 63 3a 3a 76 5f 6c 69 73 74 28 20 63 6f 6e  Msc::v_list( con
0a80: 73 74 20 61 72 63 6e 61 6d 65 26 20 61 6e 61 6d  st arcname& anam
0a90: 65 2c 20 61 66 6c 41 72 72 61 79 26 20 66 69 6c  e, aflArray& fil
0aa0: 65 73 20 29 0d 0a 7b 0d 0a 09 6b 69 50 61 74 68  es )..{...kiPath
0ab0: 20 66 6e 61 6d 65 28 61 6e 61 6d 65 2e 62 61 73   fname(aname.bas
0ac0: 65 64 69 72 29 3b 20 66 6e 61 6d 65 2b 3d 61 6e  edir); fname+=an
0ad0: 61 6d 65 2e 6c 6e 61 6d 65 3b 0d 0a 0d 0a 09 61  ame.lname;.....a
0ae0: 72 63 66 69 6c 65 20 78 3b 0d 0a 09 6b 69 46 69  rcfile x;...kiFi
0af0: 6c 65 20 66 70 3b 0d 0a 09 63 68 61 72 20 65 78  le fp;...char ex
0b00: 74 3b 0d 0a 09 69 66 28 20 21 66 70 2e 6f 70 65  t;...if( !fp.ope
0b10: 6e 28 20 66 6e 61 6d 65 20 29 20 7c 7c 20 21 68  n( fname ) || !h
0b20: 65 61 64 65 72 28 20 66 70 2c 20 26 78 2e 69 6e  eader( fp, &x.in
0b30: 66 2e 64 77 4f 72 69 67 69 6e 61 6c 53 69 7a 65  f.dwOriginalSize
0b40: 2c 20 26 65 78 74 20 29 20 29 0d 0a 09 09 72 65  , &ext ) )....re
0b50: 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 09 6b 69  turn false;...ki
0b60: 5f 73 74 72 63 70 79 28 20 78 2e 69 6e 66 2e 73  _strcpy( x.inf.s
0b70: 7a 4d 6f 64 65 2c 20 22 2d 6d 73 63 2d 22 20 29  zMode, "-msc-" )
0b80: 3b 0d 0a 09 66 69 6c 65 6e 61 6d 65 28 20 78 2e  ;...filename( x.
0b90: 69 6e 66 2e 73 7a 46 69 6c 65 4e 61 6d 65 2c 20  inf.szFileName, 
0ba0: 61 6e 61 6d 65 2e 6c 6e 61 6d 65 2c 20 65 78 74  aname.lname, ext
0bb0: 20 29 3b 0d 0a 09 78 2e 69 6e 66 2e 64 77 43 6f   );...x.inf.dwCo
0bc0: 6d 70 72 65 73 73 65 64 53 69 7a 65 20 3d 20 66  mpressedSize = f
0bd0: 70 2e 67 65 74 53 69 7a 65 28 29 3b 0d 0a 09 78  p.getSize();...x
0be0: 2e 69 73 66 69 6c 65 20 3d 20 74 72 75 65 3b 0d  .isfile = true;.
0bf0: 0a 0d 0a 09 2f 2f 20 54 4f 44 4f 3a 20 93 fa 8e  ....// TODO: ...
0c00: 9e 82 f0 82 c7 82 a4 82 b7 82 e9 81 48 0d 0a 0d  ............H...
0c10: 0a 09 66 69 6c 65 73 2e 61 64 64 28 20 78 20 29  ..files.add( x )
0c20: 3b 0d 0a 09 72 65 74 75 72 6e 20 74 72 75 65 3b  ;...return true;
0c30: 0d 0a 7d 0d 0a 0d 0a 69 6e 74 20 43 41 72 63 4d  ..}....int CArcM
0c40: 73 63 3a 3a 76 5f 6d 65 6c 74 28 20 63 6f 6e 73  sc::v_melt( cons
0c50: 74 20 61 72 63 6e 61 6d 65 26 20 61 6e 61 6d 65  t arcname& aname
0c60: 2c 20 63 6f 6e 73 74 20 6b 69 50 61 74 68 26 20  , const kiPath& 
0c70: 64 64 69 72 2c 20 63 6f 6e 73 74 20 61 66 6c 41  ddir, const aflA
0c80: 72 72 61 79 2a 20 66 69 6c 65 73 20 29 0d 0a 7b  rray* files )..{
0c90: 0d 0a 09 6b 69 46 69 6c 65 20 66 70 3b 0d 0a 09  ...kiFile fp;...
0ca0: 6b 69 50 61 74 68 20 66 6e 61 6d 65 28 61 6e 61  kiPath fname(ana
0cb0: 6d 65 2e 62 61 73 65 64 69 72 29 3b 20 66 6e 61  me.basedir); fna
0cc0: 6d 65 2b 3d 61 6e 61 6d 65 2e 6c 6e 61 6d 65 3b  me+=aname.lname;
0cd0: 0d 0a 09 6b 69 50 61 74 68 20 6f 6e 61 6d 65 28  ...kiPath oname(
0ce0: 64 64 69 72 29 3b 0d 0a 09 63 68 61 72 20 74 6d  ddir);...char tm
0cf0: 70 5b 4d 41 58 5f 50 41 54 48 5d 3b 0d 0a 0d 0a  p[MAX_PATH];....
0d00: 09 2f 2f 20 83 77 83 62 83 5f 93 c7 82 dd 8d 9e  .// .w.b._......
0d10: 82 dd 0d 0a 09 63 68 61 72 20 65 78 74 3b 0d 0a  .....char ext;..
0d20: 09 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 61  .unsigned long a
0d30: 6c 6c 6c 65 6e 3b 0d 0a 09 69 66 28 20 21 66 70  lllen;...if( !fp
0d40: 2e 6f 70 65 6e 28 20 66 6e 61 6d 65 20 29 20 7c  .open( fname ) |
0d50: 7c 20 21 68 65 61 64 65 72 28 66 70 2c 26 61 6c  | !header(fp,&al
0d60: 6c 6c 65 6e 2c 26 65 78 74 29 20 29 0d 0a 09 09  llen,&ext) )....
0d70: 72 65 74 75 72 6e 20 30 78 66 66 66 66 3b 0d 0a  return 0xffff;..
0d80: 09 66 70 2e 63 6c 6f 73 65 28 29 3b 0d 0a 09 66  .fp.close();...f
0d90: 69 6c 65 6e 61 6d 65 28 20 74 6d 70 2c 20 61 6e  ilename( tmp, an
0da0: 61 6d 65 2e 6c 6e 61 6d 65 2c 20 65 78 74 20 29  ame.lname, ext )
0db0: 3b 0d 0a 09 6f 6e 61 6d 65 20 2b 3d 20 74 6d 70  ;...oname += tmp
0dc0: 3b 0d 0a 0d 0a 09 2f 2f 20 8f 91 8c c9 81 45 8f  ;.....// .....E.
0dd0: 6f 97 cd 90 e6 82 f0 8a 4a 82 ad 0d 0a 09 4f 46  o.......J.....OF
0de0: 53 54 52 55 43 54 20 6f 66 3b 0d 0a 09 6f 66 2e  STRUCT of;...of.
0df0: 63 42 79 74 65 73 20 3d 20 73 69 7a 65 6f 66 28  cBytes = sizeof(
0e00: 6f 66 29 3b 0d 0a 09 69 6e 74 20 46 52 4f 4d 20  of);...int FROM 
0e10: 3d 20 3a 3a 4c 5a 4f 70 65 6e 46 69 6c 65 28 20  = ::LZOpenFile( 
0e20: 63 6f 6e 73 74 5f 63 61 73 74 3c 63 68 61 72 2a  const_cast<char*
0e30: 3e 28 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 66  >((const char*)f
0e40: 6e 61 6d 65 29 2c 26 6f 66 2c 4f 46 5f 52 45 41  name),&of,OF_REA
0e50: 44 20 29 3b 0d 0a 09 69 6e 74 20 54 4f 20 20 20  D );...int TO   
0e60: 3d 20 3a 3a 4c 5a 4f 70 65 6e 46 69 6c 65 28 20  = ::LZOpenFile( 
0e70: 63 6f 6e 73 74 5f 63 61 73 74 3c 63 68 61 72 2a  const_cast<char*
0e80: 3e 28 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 6f  >((const char*)o
0e90: 6e 61 6d 65 29 2c 26 6f 66 2c 4f 46 5f 57 52 49  name),&of,OF_WRI
0ea0: 54 45 7c 4f 46 5f 43 52 45 41 54 45 20 29 3b 0d  TE|OF_CREATE );.
0eb0: 0a 09 69 66 28 20 46 52 4f 4d 3c 30 20 7c 7c 20  ..if( FROM<0 || 
0ec0: 54 4f 3c 30 20 29 0d 0a 09 09 72 65 74 75 72 6e  TO<0 )....return
0ed0: 20 30 78 66 66 66 66 3b 0d 0a 09 2f 2f 20 89 f0   0xffff;...// ..
0ee0: 93 80 0d 0a 09 62 6f 6f 6c 20 61 6e 73 20 3d 20  .....bool ans = 
0ef0: 28 30 3c 3d 3a 3a 4c 5a 43 6f 70 79 28 20 46 52  (0<=::LZCopy( FR
0f00: 4f 4d 2c 54 4f 20 29 29 3b 0d 0a 09 2f 2f 20 8f  OM,TO ));...// .
0f10: 49 97 b9 0d 0a 09 3a 3a 4c 5a 43 6c 6f 73 65 28  I.....::LZClose(
0f20: 20 54 4f 20 29 3b 0d 0a 09 3a 3a 4c 5a 43 6c 6f   TO );...::LZClo
0f30: 73 65 28 20 46 52 4f 4d 20 29 3b 0d 0a 09 72 65  se( FROM );...re
0f40: 74 75 72 6e 20 61 6e 73 3f 30 3a 30 78 66 66 66  turn ans?0:0xfff
0f50: 66 3b 0d 0a 7d 0d 0a 0d 0a 69 6e 74 20 43 41 72  f;..}....int CAr
0f60: 63 4d 73 63 3a 3a 76 5f 63 6f 6d 70 72 65 73 73  cMsc::v_compress
0f70: 28 20 63 6f 6e 73 74 20 6b 69 50 61 74 68 26 20  ( const kiPath& 
0f80: 62 61 73 65 2c 20 63 6f 6e 73 74 20 77 66 64 41  base, const wfdA
0f90: 72 72 61 79 26 20 66 69 6c 65 73 2c 20 63 6f 6e  rray& files, con
0fa0: 73 74 20 6b 69 50 61 74 68 26 20 64 64 69 72 2c  st kiPath& ddir,
0fb0: 20 69 6e 74 20 6d 65 74 68 6f 64 2c 20 62 6f 6f   int method, boo
0fc0: 6c 20 73 66 78 20 29 0d 0a 7b 0d 0a 09 3a 3a 53  l sfx )..{...::S
0fd0: 65 74 43 75 72 72 65 6e 74 44 69 72 65 63 74 6f  etCurrentDirecto
0fe0: 72 79 28 20 62 61 73 65 20 29 3b 0d 0a 0d 0a 09  ry( base );.....
0ff0: 2f 2f 20 8c b3 83 74 83 40 83 43 83 8b 82 f0 8a  // ...t.@.C.....
1000: 4a 82 ad 0d 0a 09 6b 69 46 69 6c 65 20 69 6e 3b  J.....kiFile in;
1010: 0d 0a 09 69 66 28 20 21 69 6e 2e 6f 70 65 6e 28  ...if( !in.open(
1020: 20 66 69 6c 65 73 5b 30 5d 2e 63 46 69 6c 65 4e   files[0].cFileN
1030: 61 6d 65 20 29 20 29 0d 0a 09 09 72 65 74 75 72  ame ) )....retur
1040: 6e 20 30 78 66 66 66 66 3b 0d 0a 0d 0a 09 2f 2f  n 0xffff;.....//
1050: 20 83 77 83 62 83 5f 8f ee 95 f1 81 45 88 b3 8f   .w.b._.....E...
1060: 6b 90 e6 83 74 83 40 83 43 83 8b 96 bc 0d 0a 09  k...t.@.C.......
1070: 63 68 61 72 20 68 5f 45 78 74 33 20 3d 20 27 5c  char h_Ext3 = '\
1080: 30 27 3b 0d 0a 09 75 6e 73 69 67 6e 65 64 20 6c  0';...unsigned l
1090: 6f 6e 67 20 68 5f 4c 65 6e 20 3d 20 69 6e 2e 67  ong h_Len = in.g
10a0: 65 74 53 69 7a 65 28 29 3b 0d 0a 0d 0a 09 63 68  etSize();.....ch
10b0: 61 72 20 61 6e 61 6d 65 5b 4d 41 58 5f 50 41 54  ar aname[MAX_PAT
10c0: 48 5d 3b 0d 0a 09 6b 69 5f 73 74 72 63 70 79 28  H];...ki_strcpy(
10d0: 20 61 6e 61 6d 65 2c 20 66 69 6c 65 73 5b 30 5d   aname, files[0]
10e0: 2e 63 46 69 6c 65 4e 61 6d 65 20 29 3b 0d 0a 09  .cFileName );...
10f0: 66 6f 72 28 20 63 68 61 72 20 2a 78 3d 61 6e 61  for( char *x=ana
1100: 6d 65 2c 20 2a 6c 61 73 74 3d 61 6e 61 6d 65 3b  me, *last=aname;
1110: 20 2a 78 3b 20 78 3d 6b 69 53 74 72 3a 3a 6e 65   *x; x=kiStr::ne
1120: 78 74 28 78 29 20 29 0d 0a 09 09 6c 61 73 74 20  xt(x) )....last 
1130: 3d 20 78 3b 0d 0a 09 69 66 28 20 21 49 73 44 42  = x;...if( !IsDB
1140: 43 53 4c 65 61 64 42 79 74 65 28 2a 6c 61 73 74  CSLeadByte(*last
1150: 29 20 29 0d 0a 09 09 68 5f 45 78 74 33 3d 2a 6c  ) )....h_Ext3=*l
1160: 61 73 74 3b 0d 0a 09 2a 6c 61 73 74 20 3d 20 27  ast;...*last = '
1170: 5f 27 2c 20 2a 28 6c 61 73 74 2b 31 29 20 3d 20  _', *(last+1) = 
1180: 27 5c 30 27 3b 0d 0a 0d 0a 09 2f 2f 20 88 b3 8f  '\0';.....// ...
1190: 6b 90 e6 8a 4a 82 ad 0d 0a 09 3a 3a 53 65 74 43  k...J.....::SetC
11a0: 75 72 72 65 6e 74 44 69 72 65 63 74 6f 72 79 28  urrentDirectory(
11b0: 20 64 64 69 72 20 29 3b 0d 0a 0d 0a 09 2f 2f 20   ddir );.....// 
11c0: 88 b3 8f 6b 90 e6 82 f0 8a 4a 82 ad 0d 0a 09 6b  ...k.....J.....k
11d0: 69 46 69 6c 65 20 6f 75 74 3b 0d 0a 09 69 66 28  iFile out;...if(
11e0: 20 21 6f 75 74 2e 6f 70 65 6e 28 20 61 6e 61 6d   !out.open( anam
11f0: 65 2c 20 66 61 6c 73 65 20 29 20 29 0d 0a 09 09  e, false ) )....
1200: 72 65 74 75 72 6e 20 30 78 66 66 66 66 3b 0d 0a  return 0xffff;..
1210: 0d 0a 09 2f 2f 20 83 5e 83 43 83 80 83 58 83 5e  ...// .^.C...X.^
1220: 83 93 83 76 83 52 83 73 81 5b 0d 0a 09 46 49 4c  ...v.R.s.[...FIL
1230: 45 54 49 4d 45 20 63 74 2c 20 61 74 2c 20 6d 74  ETIME ct, at, mt
1240: 3b 0d 0a 09 3a 3a 47 65 74 46 69 6c 65 54 69 6d  ;...::GetFileTim
1250: 65 28 69 6e 2e 67 65 74 48 61 6e 64 6c 65 28 29  e(in.getHandle()
1260: 2c 20 26 63 74 2c 20 26 61 74 2c 20 26 6d 74 29  , &ct, &at, &mt)
1270: 3b 0d 0a 09 3a 3a 53 65 74 46 69 6c 65 54 69 6d  ;...::SetFileTim
1280: 65 28 6f 75 74 2e 67 65 74 48 61 6e 64 6c 65 28  e(out.getHandle(
1290: 29 2c 20 26 63 74 2c 20 26 61 74 2c 20 26 6d 74  ), &ct, &at, &mt
12a0: 29 3b 0d 0a 0d 0a 09 2f 2f 20 83 77 83 62 83 5f  );.....// .w.b._
12b0: 8f 91 82 ab 8d 9e 82 dd 0d 0a 09 75 6e 73 69 67  ...........unsig
12c0: 6e 65 64 20 63 68 61 72 20 68 65 61 64 5b 31 34  ned char head[14
12d0: 5d 3d 7b 20 30 78 35 33 2c 30 78 35 41 2c 30 78  ]={ 0x53,0x5A,0x
12e0: 34 34 2c 30 78 34 34 2c 30 78 38 38 2c 30 78 46  44,0x44,0x88,0xF
12f0: 30 2c 30 78 32 37 2c 30 78 33 33 2c 30 78 34 31  0,0x27,0x33,0x41
1300: 2c 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ,(unsigned char)
1310: 68 5f 45 78 74 33 2c 0d 0a 09 09 09 09 09 09 09  h_Ext3,.........
1320: 20 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29   (unsigned char)
1330: 28 68 5f 4c 65 6e 26 30 78 66 66 29 2c 28 75 6e  (h_Len&0xff),(un
1340: 73 69 67 6e 65 64 20 63 68 61 72 29 28 28 68 5f  signed char)((h_
1350: 4c 65 6e 3e 3e 38 29 26 30 78 66 66 29 2c 0d 0a  Len>>8)&0xff),..
1360: 09 09 09 09 09 09 09 20 28 75 6e 73 69 67 6e 65  ....... (unsigne
1370: 64 20 63 68 61 72 29 28 28 68 5f 4c 65 6e 3e 3e  d char)((h_Len>>
1380: 31 36 29 26 30 78 66 66 29 2c 28 75 6e 73 69 67  16)&0xff),(unsig
1390: 6e 65 64 20 63 68 61 72 29 28 28 68 5f 4c 65 6e  ned char)((h_Len
13a0: 3e 3e 32 34 29 26 30 78 66 66 29 20 7d 3b 0d 0a  >>24)&0xff) };..
13b0: 09 6f 75 74 2e 77 72 69 74 65 28 20 68 65 61 64  .out.write( head
13c0: 2c 20 31 34 20 29 3b 0d 0a 0d 0a 09 2f 2f 20 88  , 14 );.....// .
13d0: b3 8f 6b 8d ec 8b c6 0d 0a 09 43 41 72 63 50 72  ..k.......CArcPr
13e0: 6f 67 72 65 73 73 44 6c 67 20 64 6c 67 28 20 68  ogressDlg dlg( h
13f0: 5f 4c 65 6e 2c 20 74 72 75 65 20 29 3b 0d 0a 09  _Len, true );...
1400: 64 6c 67 2e 63 68 61 6e 67 65 28 20 66 69 6c 65  dlg.change( file
1410: 73 5b 30 5d 2e 63 46 69 6c 65 4e 61 6d 65 20 29  s[0].cFileName )
1420: 3b 0d 0a 09 69 66 28 20 21 64 6f 5f 6c 7a 73 73  ;...if( !do_lzss
1430: 28 20 69 6e 2c 20 6f 75 74 2c 20 64 6c 67 20 29  ( in, out, dlg )
1440: 20 29 0d 0a 09 7b 0d 0a 09 09 6f 75 74 2e 63 6c   )...{....out.cl
1450: 6f 73 65 28 29 3b 0d 0a 09 09 3a 3a 44 65 6c 65  ose();....::Dele
1460: 74 65 46 69 6c 65 28 61 6e 61 6d 65 29 3b 0d 0a  teFile(aname);..
1470: 09 09 72 65 74 75 72 6e 20 30 78 38 30 32 30 3b  ..return 0x8020;
1480: 0d 0a 09 7d 0d 0a 09 72 65 74 75 72 6e 20 30 3b  ...}...return 0;
1490: 0d 0a 7d 0d 0a 0d 0a 0d 0a 2f 2f 2d 2d 20 31 32  ..}......//-- 12
14a0: 62 69 74 20 4c 5a 53 53 20 2d 2d 2d 2d 2d 2d 2d  bit LZSS -------
14b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14d0: 2d 2d 2d 2d 2d 2d 2d 2d 2f 2f 0d 0a 0d 0a 0d 0a  --------//......
14e0: 23 64 65 66 69 6e 65 20 4e 20 34 30 39 36 20 2f  #define N 4096 /
14f0: 2f 20 73 6c 69 64 65 91 8b 82 cc 83 54 83 43 83  / slide.....T.C.
1500: 59 20 32 5e 31 32 20 62 79 74 65 73 0d 0a 23 64  Y 2^12 bytes..#d
1510: 65 66 69 6e 65 20 46 20 31 38 20 20 20 2f 2f 20  efine F 18   // 
1520: 8d c5 92 b7 88 ea 92 76 92 b7 20 32 5e 28 31 36  .......v.. 2^(16
1530: 2d 31 32 29 2b 32 20 62 79 74 65 73 0d 0a 0d 0a  -12)+2 bytes....
1540: 73 74 61 74 69 63 20 75 6e 73 69 67 6e 65 64 20  static unsigned 
1550: 63 68 61 72 20 77 69 6e 64 6f 77 5b 4e 2b 46 2d  char window[N+F-
1560: 31 5d 3b 0d 0a 73 74 61 74 69 63 20 69 6e 74 20  1];..static int 
1570: 64 61 64 5b 4e 2b 31 5d 2c 20 6c 73 6f 6e 5b 4e  dad[N+1], lson[N
1580: 2b 31 5d 2c 20 72 73 6f 6e 5b 4e 2b 32 35 37 5d  +1], rson[N+257]
1590: 3b 0d 0a 73 74 61 74 69 63 20 69 6e 74 20 6d 61  ;..static int ma
15a0: 74 63 68 70 6f 73 2c 20 6d 61 74 63 68 6c 65 6e  tchpos, matchlen
15b0: 3b 0d 0a 0d 0a 73 74 61 74 69 63 20 76 6f 69 64  ;....static void
15c0: 20 69 6e 69 74 5f 74 72 65 65 28 29 0d 0a 7b 0d   init_tree()..{.
15d0: 0a 09 2f 2f 2d 2d 20 96 d8 82 f0 8f 89 8a fa 89  ..//-- .........
15e0: bb 0d 0a 0d 0a 09 69 6e 74 20 69 3b 0d 0a 09 66  ......int i;...f
15f0: 6f 72 28 20 69 3d 4e 2b 31 3b 20 69 3c 3d 4e 2b  or( i=N+1; i<=N+
1600: 32 35 36 3b 20 69 2b 2b 20 29 20 2f 2f 20 72 6f  256; i++ ) // ro
1610: 6f 74 3a 20 30 78 30 30 20 2d 2d 20 30 78 66 66  ot: 0x00 -- 0xff
1620: 0d 0a 09 09 72 73 6f 6e 5b 69 5d 20 3d 20 4e 3b  ....rson[i] = N;
1630: 0d 0a 09 66 6f 72 28 20 69 3d 30 3b 20 69 3c 4e  ...for( i=0; i<N
1640: 20 3b 20 69 2b 2b 20 29 0d 0a 09 09 20 64 61 64   ; i++ ).... dad
1650: 5b 69 5d 20 3d 20 4e 3b 0d 0a 7d 0d 0a 0d 0a 73  [i] = N;..}....s
1660: 74 61 74 69 63 20 76 6f 69 64 20 69 6e 73 65 72  tatic void inser
1670: 74 5f 6e 6f 64 65 28 20 69 6e 74 20 72 20 29 0d  t_node( int r ).
1680: 0a 7b 0d 0a 09 2f 2f 2d 2d 20 5b 88 ca 92 75 72  .{...//-- [...ur
1690: 5d 82 a9 82 e7 8e 6e 82 dc 82 e9 5b 97 f1 73 74  ].....n....[..st
16a0: 72 5d 82 f0 96 d8 82 c9 93 6f 98 5e 0d 0a 09 75  r].......o.^...u
16b0: 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 20 73 74  nsigned char* st
16c0: 72 20 3d 20 77 69 6e 64 6f 77 20 2b 20 72 3b 0d  r = window + r;.
16d0: 0a 09 72 73 6f 6e 5b 72 5d 20 3d 20 6c 73 6f 6e  ..rson[r] = lson
16e0: 5b 72 5d 20 3d 20 4e 3b 0d 0a 0d 0a 09 2f 2f 2d  [r] = N;.....//-
16f0: 2d 20 82 c2 82 a2 82 c5 82 c9 88 ea 92 76 92 b7  - ...........v..
1700: 81 45 88 ca 92 75 82 e0 8b 4c 98 5e 82 b7 82 e9  .E...u...L.^....
1710: 0d 0a 09 6d 61 74 63 68 6c 65 6e 20 3d 20 32 3b  ...matchlen = 2;
1720: 0d 0a 0d 0a 09 2f 2f 20 88 ea 95 b6 8e 9a 96 da  .....// ........
1730: 82 c5 72 6f 6f 74 82 f0 91 49 82 d4 0d 0a 09 69  ..root...I.....i
1740: 6e 74 20 69 2c 20 70 20 3d 20 4e 2b 31 2b 73 74  nt i, p = N+1+st
1750: 72 5b 30 5d 2c 20 63 6d 70 3d 31 3b 0d 0a 09 66  r[0], cmp=1;...f
1760: 6f 72 28 3b 20 3b 29 0d 0a 09 7b 0d 0a 09 09 69  or(; ;)...{....i
1770: 66 28 20 63 6d 70 20 3e 3d 20 30 20 29 0d 0a 09  f( cmp >= 0 )...
1780: 09 7b 0d 0a 09 09 09 2f 2f 20 89 45 82 c9 90 69  .{.....// .E...i
1790: 82 de 0d 0a 09 09 09 69 66 28 20 72 73 6f 6e 5b  .......if( rson[
17a0: 70 5d 20 21 3d 20 4e 20 29 0d 0a 09 09 09 09 70  p] != N )......p
17b0: 20 3d 20 72 73 6f 6e 5b 70 5d 3b 0d 0a 09 09 09   = rson[p];.....
17c0: 2f 2f 20 89 45 82 c9 82 cd 82 e0 82 a4 6e 6f 64  // .E........nod
17d0: 65 82 aa 82 c8 82 a2 82 cc 82 c5 82 bb 82 b1 82  e...............
17e0: c9 93 6f 98 5e 82 b5 82 c4 8f 49 97 b9 0d 0a 09  ..o.^.....I.....
17f0: 09 09 65 6c 73 65 0d 0a 09 09 09 7b 0d 0a 09 09  ..else.....{....
1800: 09 09 72 73 6f 6e 5b 70 5d 20 3d 20 72 3b 0d 0a  ..rson[p] = r;..
1810: 09 09 09 09 20 64 61 64 5b 72 5d 20 3d 20 70 3b  .... dad[r] = p;
1820: 0d 0a 09 09 09 09 72 65 74 75 72 6e 3b 0d 0a 09  ......return;...
1830: 09 09 7d 0d 0a 09 09 7d 0d 0a 09 09 65 6c 73 65  ..}....}....else
1840: 0d 0a 09 09 7b 0d 0a 09 09 09 2f 2f 20 8d b6 82  ....{.....// ...
1850: c9 90 69 82 de 0d 0a 09 09 09 69 66 28 20 6c 73  ..i.......if( ls
1860: 6f 6e 5b 70 5d 20 21 3d 20 4e 20 29 0d 0a 09 09  on[p] != N )....
1870: 09 09 70 20 3d 20 6c 73 6f 6e 5b 70 5d 3b 0d 0a  ..p = lson[p];..
1880: 09 09 09 2f 2f 20 8d b6 82 c9 82 cd 82 e0 82 a4  ...// ..........
1890: 6e 6f 64 65 82 aa 82 c8 82 a2 82 cc 82 c5 82 bb  node............
18a0: 82 b1 82 c9 93 6f 98 5e 82 b5 82 c4 8f 49 97 b9  .....o.^.....I..
18b0: 0d 0a 09 09 09 65 6c 73 65 0d 0a 09 09 09 7b 0d  .....else.....{.
18c0: 0a 09 09 09 09 6c 73 6f 6e 5b 70 5d 20 3d 20 72  .....lson[p] = r
18d0: 3b 0d 0a 09 09 09 09 20 64 61 64 5b 72 5d 20 3d  ;...... dad[r] =
18e0: 20 70 3b 0d 0a 09 09 09 09 72 65 74 75 72 6e 3b   p;......return;
18f0: 0d 0a 09 09 09 7d 0d 0a 09 09 7d 0d 0a 0d 0a 09  .....}....}.....
1900: 09 2f 2f 20 8c bb 8d dd 82 cc 6e 6f 64 65 82 c6  .// ......node..
1910: 73 74 72 82 f0 94 e4 8a 72 28 20 69 3d 3d 88 ea  str.....r( i==..
1920: 92 76 92 b7 20 29 0d 0a 09 09 66 6f 72 28 20 69  .v.. )....for( i
1930: 3d 31 3b 20 69 3c 46 3b 20 69 2b 2b 20 29 0d 0a  =1; i<F; i++ )..
1940: 09 09 09 69 66 28 20 63 6d 70 20 3d 20 73 74 72  ...if( cmp = str
1950: 5b 69 5d 20 2d 20 77 69 6e 64 6f 77 5b 70 2b 69  [i] - window[p+i
1960: 5d 20 29 0d 0a 09 09 09 09 62 72 65 61 6b 3b 0d  ] )......break;.
1970: 0a 0d 0a 09 09 2f 2f 20 8d a1 82 dc 82 c5 8c a9  .....// ........
1980: 82 c2 82 af 82 bd 82 e0 82 cc 82 cc 92 86 82 c5  ................
1990: 8d c5 92 b7 82 be 82 c1 82 bd 82 e7 8b 4c 89 af  .............L..
19a0: 0d 0a 09 09 69 66 28 20 69 20 3e 20 6d 61 74 63  ....if( i > matc
19b0: 68 6c 65 6e 20 29 0d 0a 09 09 7b 0d 0a 09 09 09  hlen )....{.....
19c0: 6d 61 74 63 68 70 6f 73 20 3d 20 70 3b 0d 0a 09  matchpos = p;...
19d0: 09 09 69 66 28 20 28 6d 61 74 63 68 6c 65 6e 3d  ..if( (matchlen=
19e0: 69 29 20 3d 3d 20 46 20 29 0d 0a 09 09 09 09 62  i) == F )......b
19f0: 72 65 61 6b 3b 0d 0a 09 09 7d 0d 0a 09 7d 0d 0a  reak;....}...}..
1a00: 0d 0a 09 2f 2f 20 5b 88 ca 92 75 70 5d 82 cc 97  ...// [...up]...
1a10: f1 82 c6 92 b7 82 b3 46 82 c5 88 ea 92 76 82 b5  .......F.....v..
1a20: 82 bd 8f ea 8d 87 81 41 82 b1 82 b1 82 c9 97 88  .......A........
1a30: 82 e9 0d 0a 09 2f 2f 20 70 20 82 cc 8d dd 82 c1  .....// p ......
1a40: 82 bd 82 c6 82 b1 82 eb 82 f0 20 72 20 82 c5 92  .......... r ...
1a50: 75 82 ab 8a b7 82 a6 82 e9 0d 0a 0d 0a 09 20 64  u............. d
1a60: 61 64 5b 72 5d 20 3d 20 20 64 61 64 5b 70 5d 3b  ad[r] =  dad[p];
1a70: 0d 0a 09 6c 73 6f 6e 5b 72 5d 20 3d 20 6c 73 6f  ...lson[r] = lso
1a80: 6e 5b 70 5d 3b 0d 0a 09 72 73 6f 6e 5b 72 5d 20  n[p];...rson[r] 
1a90: 3d 20 72 73 6f 6e 5b 70 5d 3b 0d 0a 09 20 64 61  = rson[p];... da
1aa0: 64 5b 6c 73 6f 6e 5b 70 5d 5d 20 3d 20 72 3b 0d  d[lson[p]] = r;.
1ab0: 0a 09 20 64 61 64 5b 72 73 6f 6e 5b 70 5d 5d 20  .. dad[rson[p]] 
1ac0: 3d 20 72 3b 0d 0a 0d 0a 09 69 66 28 20 72 73 6f  = r;.....if( rso
1ad0: 6e 5b 64 61 64 5b 70 5d 5d 3d 3d 70 20 29 0d 0a  n[dad[p]]==p )..
1ae0: 09 09 72 73 6f 6e 5b 64 61 64 5b 70 5d 5d 20 3d  ..rson[dad[p]] =
1af0: 20 72 3b 0d 0a 09 65 6c 73 65 0d 0a 09 09 6c 73   r;...else....ls
1b00: 6f 6e 5b 64 61 64 5b 70 5d 5d 20 3d 20 72 3b 0d  on[dad[p]] = r;.
1b10: 0a 0d 0a 09 64 61 64 5b 70 5d 20 3d 20 4e 3b 0d  ....dad[p] = N;.
1b20: 0a 7d 0d 0a 0d 0a 73 74 61 74 69 63 20 76 6f 69  .}....static voi
1b30: 64 20 64 65 6c 65 74 65 5f 6e 6f 64 65 28 20 69  d delete_node( i
1b40: 6e 74 20 70 20 29 0d 0a 7b 0d 0a 09 2f 2f 2d 2d  nt p )..{...//--
1b50: 20 5b 88 ca 92 75 70 5d 82 cc 97 76 91 66 82 f0   [...up]...v.f..
1b60: 96 d8 82 a9 82 e7 8d ed 8f 9c 0d 0a 0d 0a 09 69  ...............i
1b70: 66 28 20 64 61 64 5b 70 5d 20 3d 3d 20 4e 20 29  f( dad[p] == N )
1b80: 20 2f 2f 20 8a f9 82 c9 96 d8 82 c9 93 fc 82 c1   // ............
1b90: 82 c4 82 c8 82 a2 82 cc 82 c5 82 a8 82 b5 82 dc  ................
1ba0: 82 a2 0d 0a 09 09 72 65 74 75 72 6e 3b 0d 0a 0d  ......return;...
1bb0: 0a 09 69 6e 74 20 71 3b 0d 0a 0d 0a 09 69 66 28  ..int q;.....if(
1bc0: 20 72 73 6f 6e 5b 70 5d 20 3d 3d 20 4e 20 29 0d   rson[p] == N ).
1bd0: 0a 09 09 71 20 3d 20 6c 73 6f 6e 5b 70 5d 3b 20  ...q = lson[p]; 
1be0: 2f 2f 20 97 42 88 ea 82 cc 8e 71 82 f0 8f e3 82  // .B.....q.....
1bf0: c9 8e 9d 82 bf 8f e3 82 b0 82 e9 0d 0a 09 65 6c  ..............el
1c00: 73 65 20 69 66 28 20 6c 73 6f 6e 5b 70 5d 20 3d  se if( lson[p] =
1c10: 3d 20 4e 20 29 0d 0a 09 09 71 20 3d 20 72 73 6f  = N )....q = rso
1c20: 6e 5b 70 5d 3b 20 2f 2f 20 97 42 88 ea 82 cc 8e  n[p]; // .B.....
1c30: 71 82 f0 8f e3 82 c9 8e 9d 82 bf 8f e3 82 b0 82  q...............
1c40: e9 0d 0a 09 65 6c 73 65 0d 0a 09 7b 0d 0a 09 09  ....else...{....
1c50: 71 20 3d 20 6c 73 6f 6e 5b 70 5d 3b 0d 0a 0d 0a  q = lson[p];....
1c60: 09 09 69 66 28 20 72 73 6f 6e 5b 71 5d 20 21 3d  ..if( rson[q] !=
1c70: 20 4e 20 29 0d 0a 09 09 7b 0d 0a 09 09 09 2f 2f   N )....{.....//
1c80: 20 8d b6 82 cc 8e 7d 82 cc 8d c5 89 45 81 41 82   .....}.....E.A.
1c90: c2 82 dc 82 e8 8e a9 95 aa 82 e6 82 e8 88 ea 82  ................
1ca0: c2 8f ac 82 b3 82 a2 6e 6f 64 65 82 f0 8e 9d 82  .......node.....
1cb0: bf 8f e3 82 b0 82 e9 0d 0a 09 09 09 64 6f 0d 0a  ............do..
1cc0: 09 09 09 09 71 20 3d 20 72 73 6f 6e 5b 71 5d 3b  ....q = rson[q];
1cd0: 0d 0a 09 09 09 77 68 69 6c 65 28 20 72 73 6f 6e  .....while( rson
1ce0: 5b 71 5d 20 21 3d 20 4e 20 29 3b 0d 0a 0d 0a 09  [q] != N );.....
1cf0: 09 09 72 73 6f 6e 5b 64 61 64 5b 71 5d 5d 20 3d  ..rson[dad[q]] =
1d00: 20 6c 73 6f 6e 5b 71 5d 3b 0d 0a 09 09 09 64 61   lson[q];.....da
1d10: 64 5b 6c 73 6f 6e 5b 71 5d 5d 20 3d 20 64 61 64  d[lson[q]] = dad
1d20: 5b 71 5d 3b 0d 0a 09 09 09 6c 73 6f 6e 5b 71 5d  [q];.....lson[q]
1d30: 20 3d 20 6c 73 6f 6e 5b 70 5d 3b 0d 0a 09 09 09   = lson[p];.....
1d40: 64 61 64 5b 6c 73 6f 6e 5b 70 5d 5d 20 3d 20 71  dad[lson[p]] = q
1d50: 3b 0d 0a 09 09 7d 0d 0a 09 09 72 73 6f 6e 5b 71  ;....}....rson[q
1d60: 5d 20 3d 20 72 73 6f 6e 5b 70 5d 3b 0d 0a 09 09  ] = rson[p];....
1d70: 64 61 64 5b 72 73 6f 6e 5b 70 5d 5d 20 3d 20 71  dad[rson[p]] = q
1d80: 3b 0d 0a 09 7d 0d 0a 0d 0a 09 64 61 64 5b 71 5d  ;...}.....dad[q]
1d90: 20 3d 20 64 61 64 5b 70 5d 3b 0d 0a 09 69 66 28   = dad[p];...if(
1da0: 20 72 73 6f 6e 5b 64 61 64 5b 70 5d 5d 20 3d 3d   rson[dad[p]] ==
1db0: 20 70 20 29 0d 0a 09 09 72 73 6f 6e 5b 64 61 64   p )....rson[dad
1dc0: 5b 70 5d 5d 20 3d 20 71 3b 0d 0a 09 65 6c 73 65  [p]] = q;...else
1dd0: 0d 0a 09 09 6c 73 6f 6e 5b 64 61 64 5b 70 5d 5d  ....lson[dad[p]]
1de0: 20 3d 20 71 3b 0d 0a 09 64 61 64 5b 70 5d 20 3d   = q;...dad[p] =
1df0: 20 4e 3b 0d 0a 7d 0d 0a 0d 0a 62 6f 6f 6c 20 43   N;..}....bool C
1e00: 41 72 63 4d 73 63 3a 3a 64 6f 5f 6c 7a 73 73 28  ArcMsc::do_lzss(
1e10: 20 6b 69 46 69 6c 65 26 20 69 6e 2c 20 6b 69 46   kiFile& in, kiF
1e20: 69 6c 65 26 20 6f 75 74 2c 20 43 41 72 63 50 72  ile& out, CArcPr
1e30: 6f 67 72 65 73 73 44 6c 67 26 20 64 6c 67 20 29  ogressDlg& dlg )
1e40: 0d 0a 7b 0d 0a 09 69 6e 74 20 69 2c 20 63 2c 20  ..{...int i, c, 
1e50: 6c 65 6e 2c 20 72 2c 20 73 3b 0d 0a 09 75 6e 73  len, r, s;...uns
1e60: 69 67 6e 65 64 20 63 68 61 72 20 63 6f 64 65 5b  igned char code[
1e70: 31 37 5d 3d 7b 30 7d 2c 20 6d 61 73 6b 3d 31 2c  17]={0}, mask=1,
1e80: 20 63 6f 64 65 70 74 72 3d 31 3b 0d 0a 0d 0a 09   codeptr=1;.....
1e90: 73 20 3d 20 32 3b 09 09 2f 2f 20 73 20 3d 20 83  s = 2;..// s = .
1ea0: 66 81 5b 83 5e 93 c7 8d 9e 88 ca 92 75 0d 0a 09  f.[.^.......u...
1eb0: 72 20 3d 20 4e 20 2d 20 31 36 3b 09 2f 2f 20 72  r = N - 16;.// r
1ec0: 20 3d 20 96 d8 82 d6 82 cc 91 7d 93 fc 88 ca 92   = .......}.....
1ed0: 75 0d 0a 0d 0a 09 2f 2f 20 83 4e 83 8a 83 41 0d  u.....// .N...A.
1ee0: 0a 09 69 6e 69 74 5f 74 72 65 65 28 29 3b 0d 0a  ..init_tree();..
1ef0: 09 6b 69 5f 6d 65 6d 73 65 74 28 20 77 69 6e 64  .ki_memset( wind
1f00: 6f 77 2b 32 2c 20 27 20 27 2c 20 4e 2d 46 20 29  ow+2, ' ', N-F )
1f10: 3b 0d 0a 0d 0a 09 2f 2f 20 90 e6 93 aa 31 38 62  ;.....// ....18b
1f20: 79 74 65 73 93 fc 97 cd 0d 0a 09 66 6f 72 28 20  ytes.......for( 
1f30: 6c 65 6e 3d 30 20 3b 20 6c 65 6e 3c 46 20 3b 20  len=0 ; len<F ; 
1f40: 6c 65 6e 2b 2b 20 29 0d 0a 09 7b 0d 0a 09 09 69  len++ )...{....i
1f50: 66 28 20 2d 31 20 3d 3d 20 28 63 20 3d 20 69 6e  f( -1 == (c = in
1f60: 2e 67 65 74 63 28 29 29 20 29 0d 0a 09 09 09 62  .getc()) ).....b
1f70: 72 65 61 6b 3b 0d 0a 09 09 77 69 6e 64 6f 77 5b  reak;....window[
1f80: 72 2b 6c 65 6e 5d 20 3d 20 63 3b 0d 0a 09 7d 0d  r+len] = c;...}.
1f90: 0a 09 77 69 6e 64 6f 77 5b 30 5d 20 3d 20 77 69  ..window[0] = wi
1fa0: 6e 64 6f 77 5b 72 2b 31 36 5d 3b 0d 0a 09 77 69  ndow[r+16];...wi
1fb0: 6e 64 6f 77 5b 31 5d 20 3d 20 77 69 6e 64 6f 77  ndow[1] = window
1fc0: 5b 72 2b 31 37 5d 3b 0d 0a 09 69 66 28 20 6c 65  [r+17];...if( le
1fd0: 6e 3d 3d 30 20 29 0d 0a 09 09 72 65 74 75 72 6e  n==0 )....return
1fe0: 20 74 72 75 65 3b 0d 0a 0d 0a 09 2f 2f 20 96 d8   true;.....// ..
1ff0: 82 d6 91 7d 93 fc 0d 0a 09 66 6f 72 28 20 69 3d  ...}.....for( i=
2000: 46 20 3b 20 69 3e 3d 30 20 3b 20 69 2d 2d 20 29  F ; i>=0 ; i-- )
2010: 0d 0a 09 09 69 6e 73 65 72 74 5f 6e 6f 64 65 28  ....insert_node(
2020: 20 72 2d 69 20 29 3b 0d 0a 0d 0a 09 2f 2f 20 83   r-i );.....// .
2030: 8b 81 5b 83 76 0d 0a 09 75 6e 73 69 67 6e 65 64  ..[.v...unsigned
2040: 20 69 6e 74 20 74 6f 74 61 6c 5f 72 65 61 64 3d   int total_read=
2050: 31 38 2c 70 72 67 72 5f 72 65 61 64 3d 30 3b 0d  18,prgr_read=0;.
2060: 0a 0d 0a 09 64 6f 0d 0a 09 7b 0d 0a 09 09 69 66  ....do...{....if
2070: 28 20 70 72 67 72 5f 72 65 61 64 20 3e 20 35 30  ( prgr_read > 50
2080: 30 30 20 29 0d 0a 09 09 7b 0d 0a 09 09 09 64 6c  00 )....{.....dl
2090: 67 2e 63 68 61 6e 67 65 28 20 4e 55 4c 4c 2c 20  g.change( NULL, 
20a0: 74 6f 74 61 6c 5f 72 65 61 64 2b 3d 70 72 67 72  total_read+=prgr
20b0: 5f 72 65 61 64 20 29 3b 0d 0a 09 09 09 70 72 67  _read );.....prg
20c0: 72 5f 72 65 61 64 2d 3d 35 30 30 30 3b 0d 0a 09  r_read-=5000;...
20d0: 09 09 69 66 28 20 21 64 6c 67 2e 6d 73 67 6c 6f  ..if( !dlg.msglo
20e0: 6f 70 28 29 20 29 0d 0a 09 09 09 7b 0d 0a 09 09  op() ).....{....
20f0: 09 09 70 72 67 72 5f 72 65 61 64 3d 30 78 66 66  ..prgr_read=0xff
2100: 66 66 66 66 66 66 3b 0d 0a 09 09 09 09 62 72 65  ffffff;......bre
2110: 61 6b 3b 0d 0a 09 09 09 7d 0d 0a 09 09 7d 0d 0a  ak;.....}....}..
2120: 0d 0a 09 09 69 66 28 20 6d 61 74 63 68 6c 65 6e  ....if( matchlen
2130: 20 3e 20 6c 65 6e 20 29 0d 0a 09 09 09 6d 61 74   > len ).....mat
2140: 63 68 6c 65 6e 3d 6c 65 6e 3b 0d 0a 0d 0a 09 09  chlen=len;......
2150: 69 66 28 20 6d 61 74 63 68 6c 65 6e 20 3c 20 33  if( matchlen < 3
2160: 20 29 09 2f 2f 20 88 ea 92 76 82 c8 82 b5 0d 0a   ).// ...v......
2170: 09 09 7b 0d 0a 09 09 09 6d 61 74 63 68 6c 65 6e  ..{.....matchlen
2180: 20 3d 20 31 3b 0d 0a 09 09 09 63 6f 64 65 5b 30   = 1;.....code[0
2190: 5d 20 7c 3d 20 6d 61 73 6b 3b 0d 0a 09 09 09 63  ] |= mask;.....c
21a0: 6f 64 65 5b 63 6f 64 65 70 74 72 2b 2b 5d 20 3d  ode[codeptr++] =
21b0: 20 77 69 6e 64 6f 77 5b 72 5d 3b 0d 0a 09 09 7d   window[r];....}
21c0: 0d 0a 09 09 65 6c 73 65 09 09 09 09 2f 2f 20 88  ....else....// .
21d0: ea 92 76 82 a0 82 e8 0d 0a 09 09 7b 0d 0a 09 09  ..v........{....
21e0: 09 2f 2f 20 5b 70 6f 73 26 30 78 66 66 5d 20 5b  .// [pos&0xff] [
21f0: 70 6f 73 26 30 78 66 30 30 20 7c 20 6c 65 6e 2d  pos&0xf00 | len-
2200: 33 5d 0d 0a 09 09 09 63 6f 64 65 5b 63 6f 64 65  3].....code[code
2210: 70 74 72 2b 2b 5d 20 3d 20 28 75 6e 73 69 67 6e  ptr++] = (unsign
2220: 65 64 20 63 68 61 72 29 6d 61 74 63 68 70 6f 73  ed char)matchpos
2230: 3b 0d 0a 09 09 09 63 6f 64 65 5b 63 6f 64 65 70  ;.....code[codep
2240: 74 72 2b 2b 5d 20 3d 20 28 75 6e 73 69 67 6e 65  tr++] = (unsigne
2250: 64 20 63 68 61 72 29 28 28 28 6d 61 74 63 68 70  d char)(((matchp
2260: 6f 73 3e 3e 34 29 26 30 78 66 30 29 20 7c 20 28  os>>4)&0xf0) | (
2270: 6d 61 74 63 68 6c 65 6e 2d 33 29 29 3b 0d 0a 09  matchlen-3));...
2280: 09 7d 0d 0a 0d 0a 09 09 69 66 28 20 28 6d 61 73  .}......if( (mas
2290: 6b 3c 3c 3d 31 29 3d 3d 30 20 29 20 2f 2f 20 63  k<<=1)==0 ) // c
22a0: 6f 64 65 20 82 aa 20 38 42 6c 6f 63 6b 20 82 c9  ode .. 8Block ..
22b0: 82 c8 82 c1 82 c4 82 a2 82 bd 82 e7 8f 6f 97 cd  .............o..
22c0: 0d 0a 09 09 7b 0d 0a 09 09 09 6f 75 74 2e 77 72  ....{.....out.wr
22d0: 69 74 65 28 20 63 6f 64 65 2c 20 63 6f 64 65 70  ite( code, codep
22e0: 74 72 20 29 3b 0d 0a 09 09 09 2f 2f 20 83 52 81  tr );.....// .R.
22f0: 5b 83 68 83 6f 83 62 83 74 83 40 8f 89 8a fa 89  [.h.o.b.t.@.....
2300: bb 0d 0a 09 09 09 63 6f 64 65 5b 30 5d 20 3d 20  ......code[0] = 
2310: 30 3b 0d 0a 09 09 09 63 6f 64 65 70 74 72 20 3d  0;.....codeptr =
2320: 20 6d 61 73 6b 20 3d 20 31 3b 0d 0a 09 09 7d 0d   mask = 1;....}.
2330: 0a 0d 0a 09 09 2f 2f 20 8f 6f 97 cd 82 b5 82 bd  .....// .o......
2340: 95 aa 93 c7 82 dd 8d 9e 82 de 0d 0a 09 09 69 6e  ..............in
2350: 74 20 6c 61 73 74 6d 61 74 63 68 6c 65 6e 20 3d  t lastmatchlen =
2360: 20 6d 61 74 63 68 6c 65 6e 3b 0d 0a 09 09 66 6f   matchlen;....fo
2370: 72 28 20 69 3d 30 20 3b 20 69 3c 6c 61 73 74 6d  r( i=0 ; i<lastm
2380: 61 74 63 68 6c 65 6e 3b 20 69 2b 2b 20 29 0d 0a  atchlen; i++ )..
2390: 09 09 7b 0d 0a 09 09 09 69 66 28 20 2d 31 20 3d  ..{.....if( -1 =
23a0: 3d 20 28 63 3d 69 6e 2e 67 65 74 63 28 29 29 20  = (c=in.getc()) 
23b0: 29 0d 0a 09 09 09 09 62 72 65 61 6b 3b 0d 0a 09  )......break;...
23c0: 09 09 70 72 67 72 5f 72 65 61 64 2b 2b 3b 0d 0a  ..prgr_read++;..
23d0: 0d 0a 09 09 09 2f 2f 20 5b 88 ca 92 75 73 5d 82  .....// [...us].
23e0: c9 88 ea 95 b6 8e 9a 8f 91 82 ab 8d 9e 82 dd 0d  ................
23f0: 0a 09 09 09 64 65 6c 65 74 65 5f 6e 6f 64 65 28  ....delete_node(
2400: 20 73 20 29 3b 0d 0a 09 09 09 77 69 6e 64 6f 77   s );.....window
2410: 5b 73 5d 20 3d 20 63 3b 0d 0a 09 09 09 69 66 28  [s] = c;.....if(
2420: 20 73 20 3c 20 46 2d 31 20 29 20 77 69 6e 64 6f   s < F-1 ) windo
2430: 77 5b 20 4e 2b 73 20 5d 20 3d 20 63 3b 0d 0a 0d  w[ N+s ] = c;...
2440: 0a 09 09 09 73 20 3d 20 28 73 2b 31 29 20 26 20  ....s = (s+1) & 
2450: 28 4e 2d 31 29 3b 20 2f 2f 20 73 2b 2b 0d 0a 09  (N-1); // s++...
2460: 09 09 72 20 3d 20 28 72 2b 31 29 20 26 20 28 4e  ..r = (r+1) & (N
2470: 2d 31 29 3b 20 2f 2f 20 72 2b 2b 0d 0a 0d 0a 09  -1); // r++.....
2480: 09 09 2f 2f 20 96 d8 82 c9 5b 88 ca 92 75 72 5d  ..// ....[...ur]
2490: 82 cc 83 66 81 5b 83 5e 82 f0 91 7d 93 fc 0d 0a  ...f.[.^...}....
24a0: 09 09 09 69 6e 73 65 72 74 5f 6e 6f 64 65 28 20  ...insert_node( 
24b0: 72 20 29 3b 0d 0a 09 09 7d 0d 0a 0d 0a 09 09 2f  r );....}....../
24c0: 2f 20 45 4f 46 8c e3 8f 88 97 9d 0d 0a 09 09 77  / EOF..........w
24d0: 68 69 6c 65 28 20 69 2b 2b 20 3c 20 6c 61 73 74  hile( i++ < last
24e0: 6d 61 74 63 68 6c 65 6e 20 29 0d 0a 09 09 7b 0d  matchlen )....{.
24f0: 0a 09 09 09 64 65 6c 65 74 65 5f 6e 6f 64 65 28  ....delete_node(
2500: 20 73 20 29 3b 0d 0a 09 09 09 73 20 3d 20 28 73   s );.....s = (s
2510: 2b 31 29 20 26 20 28 4e 2d 31 29 3b 20 2f 2f 20  +1) & (N-1); // 
2520: 73 2b 2b 0d 0a 09 09 09 72 20 3d 20 28 72 2b 31  s++.....r = (r+1
2530: 29 20 26 20 28 4e 2d 31 29 3b 20 2f 2f 20 72 2b  ) & (N-1); // r+
2540: 2b 0d 0a 09 09 09 69 66 28 20 2d 2d 6c 65 6e 20  +.....if( --len 
2550: 29 0d 0a 09 09 09 09 69 6e 73 65 72 74 5f 6e 6f  )......insert_no
2560: 64 65 28 20 72 20 29 3b 0d 0a 09 09 7d 0d 0a 0d  de( r );....}...
2570: 0a 09 7d 20 77 68 69 6c 65 28 20 6c 65 6e 20 3e  ..} while( len >
2580: 20 30 20 29 3b 0d 0a 0d 0a 09 69 66 28 20 70 72   0 );.....if( pr
2590: 67 72 5f 72 65 61 64 3d 3d 30 78 66 66 66 66 66  gr_read==0xfffff
25a0: 66 66 66 20 29 0d 0a 09 09 72 65 74 75 72 6e 20  fff )....return 
25b0: 66 61 6c 73 65 3b 0d 0a 0d 0a 09 2f 2f 20 38 62  false;.....// 8b
25c0: 6c 6f 63 6b 8b ab 8a 45 82 c9 91 b5 82 a6 82 e9  lock...E........
25d0: 0d 0a 09 69 66 28 20 6d 61 73 6b 20 21 3d 20 31  ...if( mask != 1
25e0: 20 29 0d 0a 09 7b 0d 0a 09 09 77 68 69 6c 65 28   )...{....while(
25f0: 20 6d 61 73 6b 3c 3c 3d 31 20 29 0d 0a 09 09 09   mask<<=1 ).....
2600: 63 6f 64 65 5b 63 6f 64 65 70 74 72 2b 2b 5d 20  code[codeptr++] 
2610: 3d 20 30 3b 0d 0a 09 09 6f 75 74 2e 77 72 69 74  = 0;....out.writ
2620: 65 28 20 63 6f 64 65 2c 20 63 6f 64 65 70 74 72  e( code, codeptr
2630: 20 29 3b 0d 0a 09 7d 0d 0a 0d 0a 09 72 65 74 75   );...}.....retu
2640: 72 6e 20 74 72 75 65 3b 0d 0a 7d 0d 0a 0d 0a     rn true;..}....