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 43 61 62 54 6f 6f 6c 2e 68 22 0d 0a 23 69 6e "CabTool.h"..#in
0030: 63 6c 75 64 65 20 22 6b 69 75 74 69 6c 2e 68 22 clude "kiutil.h"
0040: 0d 0a 23 69 6e 63 6c 75 64 65 20 22 66 64 69 2f ..#include "fdi/
0050: 66 64 69 2e 68 22 0d 0a 23 69 6e 63 6c 75 64 65 fdi.h"..#include
0060: 20 22 6b 69 6c 69 62 2f 6b 69 6c 69 62 2e 68 22 "kilib/kilib.h"
0070: 0d 0a 0d 0a 2f 2f 20 96 b3 97 9d 96 ee 97 9d 53 ....// ........S
0080: 46 58 82 e0 89 f0 93 80 0d 0a 73 74 61 74 69 63 FX........static
0090: 20 69 6e 74 20 73 65 65 6b 65 72 3d 30 3b 0d 0a int seeker=0;..
00a0: 73 74 61 74 69 63 20 69 6e 74 20 6f 66 66 68 61 static int offha
00b0: 6e 3d 2d 31 3b 0d 0a 73 74 61 74 69 63 20 69 6e n=-1;..static in
00c0: 74 20 6f 66 66 68 61 6e 32 3d 2d 31 3b 0d 0a 73 t offhan2=-1;..s
00d0: 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 tatic const char
00e0: 2a 20 73 64 6c 6c 3b 0d 0a 73 74 61 74 69 63 20 * sdll;..static
00f0: 6b 69 50 61 74 68 2a 20 73 64 6c 6c 72 3b 0d 0a kiPath* sdllr;..
0100: 0d 0a 2f 2f 20 43 61 6c 6c 42 61 63 6b 20 92 e8 ..// CallBack ..
0110: 8b 60 0d 0a 73 74 61 74 69 63 20 46 4e 41 4c 4c .`..static FNALL
0120: 4f 43 28 6d 79 6d 61 6c 6c 6f 63 29 0d 0a 7b 0d OC(mymalloc)..{.
0130: 0a 09 72 65 74 75 72 6e 20 28 76 6f 69 64 2a 29 ..return (void*)
0140: 6e 65 77 20 42 59 54 45 5b 63 62 5d 3b 0d 0a 7d new BYTE[cb];..}
0150: 0d 0a 73 74 61 74 69 63 20 46 4e 46 52 45 45 28 ..static FNFREE(
0160: 6d 79 6d 66 72 65 65 29 0d 0a 7b 0d 0a 09 64 65 mymfree)..{...de
0170: 6c 65 74 65 20 5b 5d 20 28 42 59 54 45 2a 29 70 lete [] (BYTE*)p
0180: 76 3b 0d 0a 7d 0d 0a 73 74 61 74 69 63 20 46 4e v;..}..static FN
0190: 4f 50 45 4e 28 6d 79 66 6f 70 65 6e 29 0d 0a 7b OPEN(myfopen)..{
01a0: 0d 0a 09 69 6e 74 20 68 61 6e 3d 5f 6f 70 65 6e ...int han=_open
01b0: 28 20 70 73 7a 46 69 6c 65 2c 20 6f 66 6c 61 67 ( pszFile, oflag
01c0: 2c 20 70 6d 6f 64 65 20 29 3b 0d 0a 09 69 66 28 , pmode );...if(
01d0: 20 68 61 6e 21 3d 2d 31 20 26 26 20 73 65 65 6b han!=-1 && seek
01e0: 65 72 21 3d 30 20 26 26 20 21 28 6f 66 6c 61 67 er!=0 && !(oflag
01f0: 26 5f 4f 5f 57 52 4f 4e 4c 59 29 20 29 0d 0a 09 &_O_WRONLY) )...
0200: 7b 0d 0a 09 09 5f 6c 73 65 65 6b 28 20 68 61 6e {...._lseek( han
0210: 2c 73 65 65 6b 65 72 2c 53 45 45 4b 5f 53 45 54 ,seeker,SEEK_SET
0220: 20 29 3b 0d 0a 09 09 69 66 28 20 6f 66 66 68 61 );....if( offha
0230: 6e 3d 3d 2d 31 20 29 6f 66 66 68 61 6e 3d 68 61 n==-1 )offhan=ha
0240: 6e 3b 0d 0a 09 09 65 6c 73 65 20 69 66 28 20 6f n;....else if( o
0250: 66 66 68 61 6e 32 3d 3d 2d 31 20 29 6f 66 66 68 ffhan2==-1 )offh
0260: 61 6e 32 3d 68 61 6e 3b 0d 0a 09 7d 0d 0a 09 72 an2=han;...}...r
0270: 65 74 75 72 6e 20 68 61 6e 3b 0d 0a 7d 0d 0a 73 eturn han;..}..s
0280: 74 61 74 69 63 20 46 4e 52 45 41 44 28 6d 79 66 tatic FNREAD(myf
0290: 72 65 61 64 29 0d 0a 7b 0d 0a 09 72 65 74 75 72 read)..{...retur
02a0: 6e 20 5f 72 65 61 64 28 20 68 66 2c 20 70 76 2c n _read( hf, pv,
02b0: 20 63 62 20 29 3b 0d 0a 7d 0d 0a 73 74 61 74 69 cb );..}..stati
02c0: 63 20 46 4e 57 52 49 54 45 28 6d 79 66 77 72 69 c FNWRITE(myfwri
02d0: 74 65 29 0d 0a 7b 0d 0a 09 72 65 74 75 72 6e 20 te)..{...return
02e0: 5f 77 72 69 74 65 28 20 68 66 2c 20 70 76 2c 20 _write( hf, pv,
02f0: 63 62 20 29 3b 0d 0a 7d 0d 0a 73 74 61 74 69 63 cb );..}..static
0300: 20 46 4e 43 4c 4f 53 45 28 6d 79 66 63 6c 6f 73 FNCLOSE(myfclos
0310: 65 29 0d 0a 7b 0d 0a 09 69 66 28 20 68 66 3d 3d e)..{...if( hf==
0320: 6f 66 66 68 61 6e 20 29 6f 66 66 68 61 6e 3d 2d offhan )offhan=-
0330: 31 3b 0d 0a 09 65 6c 73 65 20 69 66 28 20 68 66 1;...else if( hf
0340: 3d 3d 6f 66 66 68 61 6e 32 20 29 6f 66 66 68 61 ==offhan2 )offha
0350: 6e 32 3d 2d 31 3b 0d 0a 09 72 65 74 75 72 6e 20 n2=-1;...return
0360: 5f 63 6c 6f 73 65 28 68 66 29 3b 0d 0a 7d 0d 0a _close(hf);..}..
0370: 73 74 61 74 69 63 20 46 4e 53 45 45 4b 28 6d 79 static FNSEEK(my
0380: 66 73 65 65 6b 29 0d 0a 7b 0d 0a 09 69 66 28 20 fseek)..{...if(
0390: 68 66 3d 3d 6f 66 66 68 61 6e 20 7c 7c 20 68 66 hf==offhan || hf
03a0: 3d 3d 6f 66 66 68 61 6e 32 20 29 0d 0a 09 7b 0d ==offhan2 )...{.
03b0: 0a 09 09 69 66 28 20 73 65 65 6b 74 79 70 65 3d ...if( seektype=
03c0: 3d 53 45 45 4b 5f 53 45 54 20 29 0d 0a 09 09 09 =SEEK_SET ).....
03d0: 72 65 74 75 72 6e 20 5f 6c 73 65 65 6b 28 20 68 return _lseek( h
03e0: 66 2c 20 64 69 73 74 2b 73 65 65 6b 65 72 2c 20 f, dist+seeker,
03f0: 53 45 45 4b 5f 53 45 54 20 29 20 2d 20 73 65 65 SEEK_SET ) - see
0400: 6b 65 72 3b 0d 0a 09 09 72 65 74 75 72 6e 20 5f ker;....return _
0410: 6c 73 65 65 6b 28 20 68 66 2c 20 64 69 73 74 2c lseek( hf, dist,
0420: 20 73 65 65 6b 74 79 70 65 20 29 20 2d 20 73 65 seektype ) - se
0430: 65 6b 65 72 3b 0d 0a 09 7d 0d 0a 09 72 65 74 75 eker;...}...retu
0440: 72 6e 20 5f 6c 73 65 65 6b 28 20 68 66 2c 20 64 rn _lseek( hf, d
0450: 69 73 74 2c 20 73 65 65 6b 74 79 70 65 20 29 3b ist, seektype );
0460: 0d 0a 7d 0d 0a 73 74 61 74 69 63 20 46 4e 46 44 ..}..static FNFD
0470: 49 4e 4f 54 49 46 59 28 6d 79 6e 6f 74 69 66 29 INOTIFY(mynotif)
0480: 0d 0a 7b 0d 0a 09 73 77 69 74 63 68 28 20 66 64 ..{...switch( fd
0490: 69 6e 74 20 29 0d 0a 09 7b 0d 0a 09 63 61 73 65 int )...{...case
04a0: 20 66 64 69 6e 74 43 4f 50 59 5f 46 49 4c 45 3a fdintCOPY_FILE:
04b0: 0d 0a 09 09 7b 0d 0a 09 09 09 63 68 61 72 2a 20 ....{.....char*
04c0: 6e 61 6d 65 20 3d 20 6b 69 75 74 69 6c 3a 3a 70 name = kiutil::p
04d0: 61 74 68 4d 61 6b 65 28 70 66 64 69 6e 2d 3e 70 athMake(pfdin->p
04e0: 73 7a 31 29 3b 0d 0a 09 09 09 69 66 28 20 30 3d sz1);.....if( 0=
04f0: 3d 73 74 72 63 6d 70 69 28 20 6b 69 50 61 74 68 =strcmpi( kiPath
0500: 3a 3a 6e 61 6d 65 28 6e 61 6d 65 29 2c 20 73 64 ::name(name), sd
0510: 6c 6c 20 29 20 29 20 2f 2f 20 44 4c 4c 82 cc 88 ll ) ) // DLL...
0520: ca 92 75 82 f0 8b 4c 89 af 0d 0a 09 09 09 09 2a ..u...L........*
0530: 73 64 6c 6c 72 20 3d 20 6e 61 6d 65 3b 0d 0a 0d sdllr = name;...
0540: 0a 09 09 09 72 65 74 75 72 6e 20 6d 79 66 6f 70 ....return myfop
0550: 65 6e 28 20 6e 61 6d 65 2c 0d 0a 09 09 09 09 5f en( name,......_
0560: 4f 5f 42 49 4e 41 52 59 7c 5f 4f 5f 43 52 45 41 O_BINARY|_O_CREA
0570: 54 7c 5f 4f 5f 54 52 55 4e 43 7c 5f 4f 5f 57 52 T|_O_TRUNC|_O_WR
0580: 4f 4e 4c 59 7c 5f 4f 5f 53 45 51 55 45 4e 54 49 ONLY|_O_SEQUENTI
0590: 41 4c 2c 0d 0a 09 09 09 09 5f 53 5f 49 52 45 41 AL,......_S_IREA
05a0: 44 7c 5f 53 5f 49 57 52 49 54 45 20 29 3b 0d 0a D|_S_IWRITE );..
05b0: 09 09 7d 0d 0a 0d 0a 09 63 61 73 65 20 66 64 69 ..}.....case fdi
05c0: 6e 74 43 4c 4f 53 45 5f 46 49 4c 45 5f 49 4e 46 ntCLOSE_FILE_INF
05d0: 4f 3a 0d 0a 09 09 6d 79 66 63 6c 6f 73 65 28 20 O:....myfclose(
05e0: 70 66 64 69 6e 2d 3e 68 66 20 29 3b 0d 0a 09 09 pfdin->hf );....
05f0: 6b 69 75 74 69 6c 3a 3a 74 69 6d 65 53 65 74 28 kiutil::timeSet(
0600: 20 70 66 64 69 6e 2d 3e 70 73 7a 31 2c 20 70 66 pfdin->psz1, pf
0610: 64 69 6e 2d 3e 64 61 74 65 2c 20 70 66 64 69 6e din->date, pfdin
0620: 2d 3e 74 69 6d 65 20 29 3b 0d 0a 09 09 53 65 74 ->time );....Set
0630: 46 69 6c 65 41 74 74 72 69 62 75 74 65 73 28 20 FileAttributes(
0640: 70 66 64 69 6e 2d 3e 70 73 7a 31 2c 0d 0a 09 09 pfdin->psz1,....
0650: 09 70 66 64 69 6e 2d 3e 61 74 74 72 69 62 73 26 .pfdin->attribs&
0660: 28 5f 41 5f 52 44 4f 4e 4c 59 7c 20 5f 41 5f 48 (_A_RDONLY| _A_H
0670: 49 44 44 45 4e 7c 5f 41 5f 53 59 53 54 45 4d 7c IDDEN|_A_SYSTEM|
0680: 5f 41 5f 41 52 43 48 29 20 29 3b 0d 0a 09 09 72 _A_ARCH) );....r
0690: 65 74 75 72 6e 20 54 52 55 45 3b 0d 0a 09 7d 0d eturn TRUE;...}.
06a0: 0a 09 72 65 74 75 72 6e 20 30 3b 0d 0a 7d 0d 0a ..return 0;..}..
06b0: 0d 0a 69 6e 74 20 43 43 61 62 54 6f 6f 6c 3a 3a ..int CCabTool::
06c0: 46 69 6e 64 48 65 61 64 65 72 28 20 63 6f 6e 73 FindHeader( cons
06d0: 74 20 63 68 61 72 2a 20 66 6e 61 6d 65 2c 20 63 t char* fname, c
06e0: 6f 6e 73 74 20 42 59 54 45 2a 20 68 64 72 2c 20 onst BYTE* hdr,
06f0: 44 57 4f 52 44 20 73 69 7a 20 29 0d 0a 7b 0d 0a DWORD siz )..{..
0700: 09 2f 2f 20 46 44 49 8f 89 8a fa 89 bb 0d 0a 09 .// FDI.........
0710: 46 44 49 43 41 42 49 4e 45 54 49 4e 46 4f 20 69 FDICABINETINFO i
0720: 6e 66 6f 3b 0d 0a 09 45 52 46 20 65 72 66 3b 0d nfo;...ERF erf;.
0730: 0a 09 48 46 44 49 20 66 64 69 3d 46 44 49 43 72 ..HFDI fdi=FDICr
0740: 65 61 74 65 28 20 6d 79 6d 61 6c 6c 6f 63 2c 6d eate( mymalloc,m
0750: 79 6d 66 72 65 65 2c 6d 79 66 6f 70 65 6e 2c 6d ymfree,myfopen,m
0760: 79 66 72 65 61 64 2c 0d 0a 09 09 09 09 09 6d 79 yfread,.......my
0770: 66 77 72 69 74 65 2c 6d 79 66 63 6c 6f 73 65 2c fwrite,myfclose,
0780: 6d 79 66 73 65 65 6b 2c 63 70 75 55 4e 4b 4e 4f myfseek,cpuUNKNO
0790: 57 4e 2c 26 65 72 66 20 29 3b 0d 0a 09 69 66 28 WN,&erf );...if(
07a0: 20 66 64 69 3d 3d 4e 55 4c 4c 20 29 0d 0a 09 09 fdi==NULL )....
07b0: 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d return false;...
07c0: 0a 09 2f 2f 20 8a 4a 82 ad 0d 0a 09 69 6e 74 20 ..// .J.....int
07d0: 61 6e 73 3d 2d 31 2c 20 68 61 6e 3d 6d 79 66 6f ans=-1, han=myfo
07e0: 70 65 6e 28 20 63 6f 6e 73 74 5f 63 61 73 74 3c pen( const_cast<
07f0: 63 68 61 72 2a 3e 28 66 6e 61 6d 65 29 2c 0d 0a char*>(fname),..
0800: 09 09 09 09 09 5f 4f 5f 42 49 4e 41 52 59 7c 5f ....._O_BINARY|_
0810: 4f 5f 52 44 4f 4e 4c 59 7c 5f 4f 5f 53 45 51 55 O_RDONLY|_O_SEQU
0820: 45 4e 54 49 41 4c 2c 30 20 29 3b 0d 0a 0d 0a 09 ENTIAL,0 );.....
0830: 2f 2f 20 83 77 83 62 83 5f 8c 9f 8d f5 0d 0a 09 // .w.b._.......
0840: 69 66 28 20 2d 31 21 3d 68 61 6e 20 29 0d 0a 09 if( -1!=han )...
0850: 7b 0d 0a 09 09 69 66 28 20 73 69 7a 3e 31 30 20 {....if( siz>10
0860: 26 26 20 68 64 72 5b 30 5d 3d 3d 27 4d 27 20 26 && hdr[0]=='M' &
0870: 26 20 68 64 72 5b 31 5d 3d 3d 27 5a 27 20 29 0d & hdr[1]=='Z' ).
0880: 0a 09 09 7b 0d 0a 09 09 09 66 6f 72 28 20 44 57 ...{.....for( DW
0890: 4f 52 44 20 69 3d 32 3b 20 69 3c 73 69 7a 3b 20 ORD i=2; i<siz;
08a0: 69 2b 2b 20 29 0d 0a 09 09 09 09 69 66 28 20 68 i++ )......if( h
08b0: 64 72 5b 69 2b 30 5d 3d 3d 27 4d 27 20 26 26 20 dr[i+0]=='M' &&
08c0: 68 64 72 5b 69 2b 31 5d 3d 3d 27 53 27 20 26 26 hdr[i+1]=='S' &&
08d0: 20 68 64 72 5b 69 2b 32 5d 3d 3d 27 43 27 20 26 hdr[i+2]=='C' &
08e0: 26 0d 0a 09 09 09 09 09 68 64 72 5b 69 2b 33 5d &.......hdr[i+3]
08f0: 3d 3d 27 46 27 20 26 26 20 68 64 72 5b 69 2b 34 =='F' && hdr[i+4
0900: 5d 3d 3d 20 30 20 20 26 26 20 68 64 72 5b 69 2b ]== 0 && hdr[i+
0910: 35 5d 3d 3d 20 30 20 20 26 26 0d 0a 09 09 09 09 5]== 0 &&......
0920: 09 68 64 72 5b 69 2b 36 5d 3d 3d 20 30 20 20 26 .hdr[i+6]== 0 &
0930: 26 20 68 64 72 5b 69 2b 37 5d 3d 3d 30 20 29 0d & hdr[i+7]==0 ).
0940: 0a 09 09 09 09 7b 0d 0a 09 09 09 09 09 6d 79 66 .....{.......myf
0950: 73 65 65 6b 28 20 68 61 6e 2c 69 2c 53 45 45 4b seek( han,i,SEEK
0960: 5f 53 45 54 20 29 3b 0d 0a 09 09 09 09 09 69 66 _SET );.......if
0970: 28 20 46 44 49 49 73 43 61 62 69 6e 65 74 28 66 ( FDIIsCabinet(f
0980: 64 69 2c 68 61 6e 2c 26 69 6e 66 6f 29 20 29 0d di,han,&info) ).
0990: 0a 09 09 09 09 09 7b 0d 0a 09 09 09 09 09 09 61 ......{........a
09a0: 6e 73 3d 69 3b 0d 0a 09 09 09 09 09 09 62 72 65 ns=i;........bre
09b0: 61 6b 3b 0d 0a 09 09 09 09 09 7d 0d 0a 09 09 09 ak;.......}.....
09c0: 09 7d 0d 0a 09 09 7d 0d 0a 09 09 65 6c 73 65 0d .}....}....else.
09d0: 0a 09 09 7b 0d 0a 09 09 09 69 66 28 20 46 44 49 ...{.....if( FDI
09e0: 49 73 43 61 62 69 6e 65 74 28 20 66 64 69 2c 68 IsCabinet( fdi,h
09f0: 61 6e 2c 26 69 6e 66 6f 20 29 20 29 0d 0a 09 09 an,&info ) )....
0a00: 09 09 61 6e 73 20 3d 20 30 3b 0d 0a 09 09 7d 0d ..ans = 0;....}.
0a10: 0a 09 09 6d 79 66 63 6c 6f 73 65 28 68 61 6e 29 ...myfclose(han)
0a20: 3b 0d 0a 09 7d 0d 0a 0d 0a 09 46 44 49 44 65 73 ;...}.....FDIDes
0a30: 74 72 6f 79 28 20 66 64 69 20 29 3b 0d 0a 09 72 troy( fdi );...r
0a40: 65 74 75 72 6e 20 61 6e 73 3b 0d 0a 7d 0d 0a 0d eturn ans;..}...
0a50: 0a 62 6f 6f 6c 20 43 43 61 62 54 6f 6f 6c 3a 3a .bool CCabTool::
0a60: 45 78 74 72 61 63 74 28 20 63 6f 6e 73 74 20 63 Extract( const c
0a70: 68 61 72 2a 20 61 6e 61 6d 65 2c 20 63 6f 6e 73 har* aname, cons
0a80: 74 20 63 68 61 72 2a 20 64 6c 6c 2c 20 6b 69 50 t char* dll, kiP
0a90: 61 74 68 26 20 64 6c 6c 5f 72 65 6c 5f 70 61 74 ath& dll_rel_pat
0aa0: 68 20 29 0d 0a 7b 0d 0a 09 73 64 6c 6c 20 3d 20 h )..{...sdll =
0ab0: 64 6c 6c 2c 20 73 64 6c 6c 72 20 3d 20 26 64 6c dll, sdllr = &dl
0ac0: 6c 5f 72 65 6c 5f 70 61 74 68 3b 0d 0a 0d 0a 09 l_rel_path;.....
0ad0: 2f 2f 20 83 77 83 62 83 5f 82 f0 92 54 82 b7 0d // .w.b._...T...
0ae0: 0a 09 46 49 4c 45 2a 20 66 70 20 3d 20 66 6f 70 ..FILE* fp = fop
0af0: 65 6e 28 20 61 6e 61 6d 65 2c 22 72 62 22 20 29 en( aname,"rb" )
0b00: 3b 0d 0a 09 69 66 28 20 21 66 70 20 29 0d 0a 09 ;...if( !fp )...
0b10: 09 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a .return false;..
0b20: 09 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 20 .unsigned char*
0b30: 62 75 66 66 20 3d 20 6e 65 77 20 75 6e 73 69 67 buff = new unsig
0b40: 6e 65 64 20 63 68 61 72 5b 31 32 38 3c 3c 31 30 ned char[128<<10
0b50: 5d 3b 0d 0a 09 44 57 4f 52 44 20 73 69 7a 20 3d ];...DWORD siz =
0b60: 20 66 72 65 61 64 28 20 62 75 66 66 2c 20 31 2c fread( buff, 1,
0b70: 20 31 32 38 3c 3c 31 30 2c 20 66 70 20 29 3b 0d 128<<10, fp );.
0b80: 0a 09 66 63 6c 6f 73 65 28 20 66 70 20 29 3b 0d ..fclose( fp );.
0b90: 0a 0d 0a 09 73 65 65 6b 65 72 20 3d 20 30 3b 0d ....seeker = 0;.
0ba0: 0a 09 73 65 65 6b 65 72 20 3d 20 46 69 6e 64 48 ..seeker = FindH
0bb0: 65 61 64 65 72 28 20 61 6e 61 6d 65 2c 62 75 66 eader( aname,buf
0bc0: 66 2c 73 69 7a 20 29 3b 0d 0a 09 64 65 6c 65 74 f,siz );...delet
0bd0: 65 20 5b 5d 20 62 75 66 66 3b 0d 0a 09 69 66 28 e [] buff;...if(
0be0: 20 73 65 65 6b 65 72 3d 3d 2d 31 20 29 0d 0a 09 seeker==-1 )...
0bf0: 09 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a .return false;..
0c00: 0d 0a 09 2f 2f 20 46 44 49 8f 89 8a fa 89 bb 0d ...// FDI.......
0c10: 0a 09 45 52 46 20 65 72 66 3b 0d 0a 09 48 46 44 ..ERF erf;...HFD
0c20: 49 20 66 64 69 3d 46 44 49 43 72 65 61 74 65 28 I fdi=FDICreate(
0c30: 20 6d 79 6d 61 6c 6c 6f 63 2c 6d 79 6d 66 72 65 mymalloc,mymfre
0c40: 65 2c 6d 79 66 6f 70 65 6e 2c 6d 79 66 72 65 61 e,myfopen,myfrea
0c50: 64 2c 0d 0a 09 09 09 09 09 6d 79 66 77 72 69 74 d,.......myfwrit
0c60: 65 2c 6d 79 66 63 6c 6f 73 65 2c 6d 79 66 73 65 e,myfclose,myfse
0c70: 65 6b 2c 63 70 75 55 4e 4b 4e 4f 57 4e 2c 26 65 ek,cpuUNKNOWN,&e
0c80: 72 66 20 29 3b 0d 0a 09 69 66 28 20 66 64 69 3d rf );...if( fdi=
0c90: 3d 4e 55 4c 4c 20 29 0d 0a 09 09 72 65 74 75 72 =NULL )....retur
0ca0: 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 09 2f 2f 20 n false;.....//
0cb0: 46 44 49 82 c9 93 6e 82 b7 82 bd 82 df 82 c9 83 FDI...n.........
0cc0: 74 83 40 83 43 83 8b 96 bc 95 aa 8a 84 0d 0a 09 t.@.C...........
0cd0: 69 6e 74 20 79 2c 64 3b 0d 0a 09 6b 69 75 74 69 int y,d;...kiuti
0ce0: 6c 3a 3a 70 61 74 68 53 70 6c 69 74 28 20 61 6e l::pathSplit( an
0cf0: 61 6d 65 2c 26 79 2c 26 64 20 29 3b 0d 0a 0d 0a ame,&y,&d );....
0d00: 09 63 68 61 72 20 66 62 6f 64 79 5b 4d 41 58 5f .char fbody[MAX_
0d10: 50 41 54 48 5d 2c 20 66 64 69 72 5b 4d 41 58 5f PATH], fdir[MAX_
0d20: 50 41 54 48 5d 3d 7b 30 7d 3b 0d 0a 09 73 74 72 PATH]={0};...str
0d30: 63 70 79 28 20 66 62 6f 64 79 2c 26 61 6e 61 6d cpy( fbody,&anam
0d40: 65 5b 79 2b 31 5d 20 29 3b 0d 0a 09 69 66 28 20 e[y+1] );...if(
0d50: 79 21 3d 2d 31 20 29 0d 0a 09 09 73 74 72 6e 63 y!=-1 )....strnc
0d60: 70 79 28 20 66 64 69 72 2c 61 6e 61 6d 65 2c 79 py( fdir,aname,y
0d70: 2b 31 20 29 3b 0d 0a 0d 0a 09 2f 2f 20 93 57 8a +1 );.....// .W.
0d80: 4a 0d 0a 09 42 4f 4f 4c 20 61 6e 73 3d 46 44 49 J...BOOL ans=FDI
0d90: 43 6f 70 79 28 20 66 64 69 2c 66 62 6f 64 79 2c Copy( fdi,fbody,
0da0: 66 64 69 72 2c 30 2c 6d 79 6e 6f 74 69 66 2c 4e fdir,0,mynotif,N
0db0: 55 4c 4c 2c 4e 55 4c 4c 20 29 3b 0d 0a 0d 0a 09 ULL,NULL );.....
0dc0: 2f 2f 20 8f 49 97 b9 0d 0a 09 46 44 49 44 65 73 // .I.....FDIDes
0dd0: 74 72 6f 79 28 66 64 69 29 3b 0d 0a 09 72 65 74 troy(fdi);...ret
0de0: 75 72 6e 20 61 6e 73 21 3d 46 41 4c 53 45 3b 0d urn ans!=FALSE;.
0df0: 0a 7d 0d 0a .}..