Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Программа для восстановление отчетов Pincha v 2.99 |

29.05.2008, 10:37
|
|
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
Программа для восстановление отчетов Pincha v 2.99
Давно написал. И вот решил выложить на общий обзор.
Программа предназначена для лечения кривых и не докаченных отчетов от Пинча,
которые парсер не может прочитать.
Использование программы:
Первый вариант:
pld.exe -d [-o] in_dir_name [out_dir_name]
где in_dir_name - путь к папке с кривыми отчетами
out_dir_name - путь к папке в которую будут кидаться излеченные отчеты,
если не указать этот параметр, то излеченные файлы будут находиться в
папке с кривыми отчетами.
-o - не обязательный параметр. При его использовании удаляется модуль содержащий
отчеты из Оперы(очень часто они бывают ошибочными)
Если путь содержит пробелы то необходимо взять его в ковычки.
При таком варианте использования будут обработаны все файлы с расширением *.err в папке dir_name.
Исправленные файлы будут иметь имя - file_name.err.pld
Пример:
pld.exe -d c:\pinch\log\Malformed\
pld.exe -d "c:\my pinchlog\Malformed\"
pld.exe -d -o c:\pinch\log\Malformed\ c:\norm\
Второй вариант:
pld.exe [-o] file_name
где file_in - имя файла требующего лечения.
Если путь или имя содержат пробелы то необходимо взять его в ковычки.
При таком варианте использования будет обработан только один входной файл.
Исправленный файл будут иметь имя - file_name.pld
Пример:
pld.exe c:\pinch\log\Malformed\12E0AB4578.err
pld.exe -o "c:\my pinchlog\log\Malformed\12E0AB4578.err"
P.S. Кривые отчеты парсер хранит в папке Malformed
Лечение недокаченных отчетов происходит следующим образом: Отрезаются целые модули и к ним прибавляется код говоряший парсеру о конце файла
Исходник можно замодить и под выделение отдельных модулей из отчета, увы таблицы модулей ненашел, а то можно былобы и реализовать.
Код:
program pld_v2;
{$APPTYPE CONSOLE}
uses windows;
type
Tlogs=packed record
magic:array[0..3] of char;
id:LongWord;
size:LongWord;
end;
var
opera_del:boolean=false;
function fileexists(s:string):boolean;
var
FindData:TWin32FindData;
Handle:integer;
begin
Handle:=FindFirstFile(PChar(s),FindData);
if Handle<0 then result:=false else result:=true;
end;
function Str2DW(s:string):dword;
begin
result:=ord(s[5])+ord(s[6]) shl 8+ord(s[7])shl 16+ord(s[8]) shl 24 ;
end;
function doctor(file_in,file_out:string):integer;
var
f_in,f_out:thandle;
logs:Tlogs;
rb:cardinal;
file_size:dword;
block:string;
rec:string;
rec_size:dword;
const
P3ML='P3ML';
begin
result:=1;
f_in:=CreateFile(PChar(file_in), GENERIC_READ, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if f_in=INVALID_HANDLE_VALUE then exit;
file_size:=GetFileSize(f_in,nil);
setlength(block,file_size);
ReadFile(f_in, block[1], file_size, rb, nil);
CloseHandle(f_in);
if rb<>file_size then
begin
setlength(block,0);
inc(result);
exit;
end;
if copy(block,1,4)<>'P3ML' then
begin
setlength(block,0);
inc(result);
exit;
end;
inc(result);
f_out:=CreateFile(PChar(file_out), GENERIC_READ or GENERIC_WRITE, 0, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
if f_out=INVALID_HANDLE_VALUE then exit;
delete(block,1,4);
while pos('P3ML',block)<>0 do
begin
rec:=copy(block,1,pos('P3ML',block)+3);
if length(rec)<12 then
begin
Delete(block,1,length(rec));
continue;
end;
rec_size:=Str2DW(rec);
if (rec_size=length(rec)-8) then
begin
if (opera_del=true) and (rec[1]=#$0F) then
begin
Delete(block,1,length(rec));
continue;
end;
WriteFile(f_out, P3ML, 4,rb, nil);
WriteFile(f_out, rec[1], length(rec)-4,rb, nil);
end;
Delete(block,1,length(rec));
end;
logs.magic:=P3ML;
logs.id:=$FFFFFFFF;
logs.size:=0;
WriteFile(f_out, logs, 12,rb, nil);
CloseHandle(f_out);
result:=0;
end;
function GetSmallName(s:string):string;
begin
while pos('\',s)<>0 do delete(s,1,pos('\',s));
result:=s;
end;
var
fd:_WIN32_FIND_DATAA;
fh:dword;
out_dir:string;
param:integer;
begin
writeln('Pinch Log Doctor (C) SLESH 2008');
writeln('E-MAIL: SLESH-2000@mail.ru');
writeln('ICQ: 266-334-734');
writeln('WMZ: Z671833489051');
writeln('WMR: R156568501269');
param:=1;
if (paramstr(param)='') then
begin
writeln(#13#10'Usage: pld.exe -d -o in_dir_name [out_dir_name] - All *.err file');
writeln(' pld.exe -o file_in - One file');
writeln('-o Delete Opera Module');
exit;
end;
if paramstr(param)='-d' then
begin
inc(param);
if paramstr(param)='-o' then
begin
opera_del:=true;
inc(param);
end;
if (paramstr(param)='') then
begin
writeln(#13#10'Usage: pld.exe -d in_dir_name [out_dir_name]- All *.err file');
writeln(' pld.exe file_in - One file');
exit;
end;
out_dir:=paramstr(param+1);
if out_dir='' then out_dir:=paramstr(param);
writeln;
fh:=FindFirstFile(pchar(paramstr(param)+'\*.err'),fd);
if fh=INVALID_HANDLE_VALUE then exit;
repeat
write(GetSmallName(fd.cFileName)+' ');
case doctor(paramstr(param)+'\'+fd.cFileName,out_dir+'\'+fd.cFileName+'.pld') of
1:writeln('[-] Can not open input file');
2:writeln('[-] Can not read input file');
3:writeln('[-] Can not correct');
4:writeln('[-] Can not create output file');
0:writeln('[+] Report is corrected successfully');
end;
until FindNextFile(fh,fd)=false;
exit;
end;
if paramstr(param)='-o' then
begin
opera_del:=true;
inc(param);
end;
if not fileexists(paramstr(param)) then
begin
writeln(#13#10'[-] Error: input file not found');
exit;
end;
deletefile(pchar(paramstr(1)+'.pld'));
case doctor(paramstr(param),paramstr(param)+'.pld') of
1:writeln(#13#10'[-] Can not open input file');
2:writeln(#13#10'[-] Can not read input file');
3:writeln(#13#10'[-] Can not correct');
4:writeln(#13#10'[-] Can not create output file');
0:writeln(#13#10'[+] Report is corrected successfully');
end;
end.
|
|
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|