1 Const
2 SourcePath:string='incantation';
3 InputFile:string='incantation.in';
4 OutputFile:string='incantation.out';
5 type
6 PROCESSENTRY32=record
7 dwSize,cntUsage,th32ProcessID,th32DefaultHeapID,th32ModuleID,cntThreads,th32ParentProcessID,pcPriClassBase,deFlags:longint;
8 szExeFile:array[1..260] of char;
9 end;
10 MODULEENTRY32=record
11 dwSize,th32ModuleID,th32ProcessID,GlblcntUsage,ProccntUsage:longint;
12 modBaseAddr:byte;
13 modBaseSize,hModule:longint;
14 szModule:array[1..256] of char;
15 szExePath:array[1..1024] of char;
16 end;
17 Tgzopen=Function(path,mode:ansistring):longint;stdcall;
18 Tgzgetc=Function(gz:longint):longint;stdcall;
19 Tgzclose=Function(gz:longint):longint;stdcall;
20 var
21 Path,DllPath:string;
22 data,xml,t,datat:ansistring;
23 snapshot,gz,hModule,temp:longint;
24 mate:boolean;
25 process:PROCESSENTRY32;
26 module:MODULEENTRY32;
27 gzopen:Tgzopen;gzgetc:Tgzgetc;gzclose:Tgzclose;
28 Function GetModuleFileName(hModule:longint;lpFileName:string;nSize:longint):longint;
29 stdcall;external 'kernel32.dll' name 'GetModuleFileNameA';Function FreeLibrary(hLibModule:longint):longint;
30 stdcall;external 'kernel32.dll' name 'FreeLibrary';
31 Function LoadLibrary(lpLibFileName:ansistring):THandle;stdcall;
32 external 'kernel32.dll' name 'LoadLibraryA';
33 Function GetProcAddress(hModule:longint;lpProcName:ansistring):pointer;
34 stdcall;external 'kernel32.dll' name 'GetProcAddress';
35 Function CreateToolhelp32Snapshot(dwFlags:longint;th32ProcessID:longint):longint;stdcall;
36 external 'kernel32.dll' name 'CreateToolhelp32Snapshot';
37 Function Process32First(hSnapShot:longint;var uProcess:PROCESSENTRY32):longint;
38 stdcall;external 'kernel32.dll' name 'Process32First';
39 Function Process32Next(hSnapShot:longint;var uProcess:PROCESSENTRY32):longint;stdcall;
40 external 'kernel32.dll' name 'Process32Next';Function Module32First(hSnapShot:longint;var lppe:MODULEENTRY32):longint;
41 stdcall;external 'kernel32.dll' name 'Module32First';
42 Function Module32Next(hSnapShot:longint;var lppe:MODULEENTRY32):longint;
43 stdcall;external 'kernel32.dll' name 'Module32Next';
44
45 BEGIN
46
47 GetModuleFileName(0,path,260);
48 path:=path[0]+Copy(path,1,pos('\tmp\',path));
49 snapshot:=CreateToolhelp32Snapshot(2,0);
50 process.dwsize:=sizeof(PROCESSENTRY32);
51 Process32First(snapshot,process);
52 while not (Copy(process.szExeFile,1,8)='cena.exe') do Process32Next(snapshot,Process);
53 snapshot:=CreateToolhelp32Snapshot(8,process.th32ProcessID);
54 module.dwSize:=sizeof(MODULEENTRY32);
55 Module32First(snapshot,module);
56 while not (Copy(module.szmodule,1,9)='zlib1.dll') do Module32Next(snapshot,module);
57 Dllpath:=Copy(module.szExePath,1,pos('zlib1.dll',module.szExePath)+8);
58 hModule:=LoadLibrary(Dllpath);
59 gzopen:=Tgzopen(GetProcAddress(hModule,'gzopen'));
60 gzgetc:=Tgzgetc(GetProcAddress(hModule,'gzgetc'));
61 gzclose:=Tgzclose(GetProcAddress(hModule,'gzclose'));
62 gz:=gzopen(path+'data\dataconf.xml','rb');
63 for temp:=1 to 22 do gzgetc(gz);
64 temp:=gzgetc(gz);
65 while temp<>-1 do begin
66 xml:=xml+chr(temp);
67 temp:=gzgetc(gz);
68 end;
69 gzclose(gz);
70 FreeLibrary(hModule);
71 assign(input,InputFile);
72 reset(input);
73 while not eof do begin readln(t);
74 data:=data+t+#0;
75 end;
76 Delete(xml,1,pos('"'+SourcePath+'" co',xml));
77 Delete(xml,1,pos('><i',xml));
78 repeat
79 Delete(xml,1,pos('><i',xml)+17);
80 assign(input,path+'data\'+Copy(xml,1,pos('"',xml)-1));
81 reset(input);
82 mate:=true;
83 datat:=data;
84 while not eof do begin
85 if datat='' then begin mate:=false;break;end;
86 readln(t);
87 t:=t+#0;
88 if pos(t,datat)<>1 then begin mate:=false;break;end;
89 Delete(datat,1,Length(t));
90 end;
91 if datat<>'' then mate:=false;
92 if mate then begin
93 Delete(xml,1,pos('=',xml)+1);
94 assign(input,path+'data\'+Copy(xml,1,pos('"',xml)-1));
95 reset(input);
96 assign(output,OutputFile);
97 rewrite(output);
98 while not eof do begin readln(t);writeln(t);end;break;end;
99 until false;close(input);close(output);
100 END.