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