Slack64 Опубликовано 12 января, 2018 Опубликовано 12 января, 2018 Simbolfix и Nodefix для Fallout & Fallout 2 Скрипты для проверки файлов *.msg, находящихся в каталогах Dialog и Game Замечание: только для Русского языка в кодировке CP1251 (ANSI) OS Linux - скрипты написаны на языке программирования PerlOS Windows - скрипты написаны на языке программирования Perl, Masm32 Примечание:если установить на ОС Windows интерпретатор ActivePerl c сайта https://www.activestate.com/, то можно выполнять Перловый скрипт без компиляции в командной строке SimbolFixNodeFix Symbolfix Perl #!/usr/bin/perl#------------# 2018-03-07#------------use strict; my (@buffer_in, @buffer_out, $file_msg, $original, $string, $message);my ($number, $index, $buffer_save) = (0,0,0);my $NEW_DIR = "msg_error_files"; opendir FILE_DIR, ".";my @file_name_list = sort(grep !/^\.+$/, readdir FILE_DIR);closedir FILE_DIR; foreach (@file_name_list) { $file_msg = $_; if ($file_msg =~ /\.msg$/) { ++$number; print "$number $file_msg\n"; if (-s $file_msg) { open (FILE_IN, "$file_msg"); @buffer_in = <FILE_IN>; close(FILE_IN); ++$index; &CHECK_STRING; if (-e $NEW_DIR) { } else { mkdir ($NEW_DIR, 0777); } if ($buffer_save eq 1) { open (FILE_OUT, ">$NEW_DIR/$file_msg"); print FILE_OUT @buffer_out; close(FILE_OUT); } $buffer_save = 0; $index = 0; undef @buffer_in; undef @buffer_out;}}} if ($number ne 0) { print "Data process completed.\n";} else { print "Files *.msg not found.\n";}print "Press ENTER to exit..."; my $stdin = <STDIN>;while ($stdin) { last if $stdin ne '\n';}exit(); sub CHECK_STRING { foreach (@buffer_in) { $original = $_; $string = $original; $string =~ tr/\r//d; if ($string !~ /\n/) { $string = "$string\n"; } if (($string =~ /^\s+$/) || ($string =~ /^$/)) { ++$index; next; } if (($string =~ /\{/) || ($string =~ /\}/)) { my $bracket_open = () = $string =~ /\{/g; my $bracket_close = () = $string =~ /\}/g; if (($bracket_open == 3) && ($bracket_close == 3)) { &CHECK_TRIAD; } else { $message = "$index строка содержит неверное количество скобок, или неправильный формат."; &SAVE_STRING; } } ++$index; }} sub CHECK_TRIAD { if ($string =~ /^\#/) { } elsif ($string =~ /^\{\d+\}\{\}\{\}/) { } else { my ($triad_one, $triad_two, $triad_three) = split("\}", $string); $triad_one .= "}"; $triad_two .= "}"; $triad_three .= "}"; if ($triad_one !~ /^\{\d+\}/) { $message = "$index строка содержит неправильный формат в первой группе скобок."; &SAVE_STRING; } elsif (($triad_two !~ /^\{\}/) && ($triad_two !~ /^\{[A-Za-zА-Яа-я0-9]+\}/)) { $message = "$index строка содержит неправильный формат во второй группе скобок."; &SAVE_STRING; } elsif ($triad_three !~ /^\{[А-Яа-я0-9\s\~\!\@\#\$\%\^\&\*\(\)\-\=\_\+\|\\\[\]\;\:\'\"\,\.\<\>\/\?…«»№’—°]+\}/) { $message = "$index строка содержит английские, или служебные символы, или неверную кодировку, в третьей группе скобок."; &SAVE_STRING; } else { if (($triad_three =~ /\{я/) || ($triad_three =~ /\[я/) || ($triad_three =~ /\(я/)|| ($triad_three =~ /\'я/) || ($triad_three =~ /\"я/) || ($triad_three =~ /\.я/)|| ($triad_three =~ /\.Я/)) { $message = "$index строка возможно содержит неверный регистр для буквы Я, в третьей группе скобок."; &SAVE_STRING;}}}} sub SAVE_STRING { $buffer_save = 1; @buffer_out[$index] = "$string$message\n\n"; $original = ''; $string = ''; $message = '';} Symbolfix Masm32 ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;2018-03-07;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.386.model flat, stdcalloption casemap :noneinclude \masm32\include\windows.incinclude \masm32\include\kernel32.incinclude \masm32\include\user32.incinclude \masm32\include\masm32.incinclude \masm32\macros\macros.asmincludelib \masm32\lib\kernel32.libincludelib \masm32\lib\masm32.libincludelib \masm32\lib\user32.lib;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~MAXMEM equ 1F4000h;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.dataappName db 'symbolfix',0msgDone db 'Обработка данных завершена.',0errFileFound db 'Файлы *.msg не найдены.',0errOpenDir db 'Ошибка открытия директории.',0errCreateDir db 'Ошибка создания директории.',0errAllocMemory db 'Ошибка распределения памяти',0errReadFile db 'Ошибка чтения файла',0errWriteFile db 'Ошибка записи файла',0errBracket db 'строка содержит неверное количество скобок, или неправильный формат.',0errTriadOne db 'строка содержит неправильный формат в первой группе скобок.',0errTriadTwo db 'строка содержит неправильный формат во второй группе скобок.',0errTriadThree db 'строка содержит английские, или служебные символы, или неверную кодировку, в третьей группе скобок.',0msgCaseSymbol db 'строка возможно содержит неверный регистр для буквы Я, в третьей группе скобок.',0dataString db 10240 dup (0),0msgString db 0,0errString db 0,0endString db 0,0validTriad db 0,0lowSymbol db 0,0highSymbol db 0,0bracketCount dd 0stringNumber dd 0stringFormat dd 0stringCount dd 0groupCount dd 0fileExt db '*.msg',0newDir db 'msg_error_files',0currentDir db 256 dup (0),0sizeDir = $-currentDirfileFind WIN32_FIND_DATA <>fileOpen OFSTRUCT <>hFileCreate dd 0hFileFind dd 0hFileRead dd 0sizeByte dd 0byteRead dd 0byteWrite dd 0heapFile dd 0heapBuffer dd 0sizeBuffer dd MAXMEM.data?pageFile dd ?pageBuffer dd ?;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.codestart:invoke FindWindow, 0, offset appNamecmp eax, 0jne _Exitinvoke GetCurrentDirectory, sizeDir, offset currentDircmp eax, 0jne @Flea esi, errOpenDircall _MsgPrintjmp _Exit@@:invoke FindFirstFile, offset fileExt, offset fileFindcmp eax, -1jne @Flea esi, errFileFoundcall _MsgPrintjmp _Exit@@:mov hFileFind, eaxinvoke SetCurrentDirectory, offset newDircmp eax, 0jne @Finvoke CreateDirectory, offset newDir, 0cmp eax, 0jne @Finvoke FindClose, hFileFindlea esi, errCreateDircall _MsgPrintjmp _Exit@@:;~~~~~~~~~~~~~~call _MainProc;~~~~~~~~~~~~~~lea esi, msgDonecall _MsgPrint_Exit:invoke ExitProcess, 0;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~_MsgPrint procinvoke MessageBox, 0, esi, offset appName, 40hret_MsgPrint endp;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~_MainProc procinvoke SetCurrentDirectory, offset currentDir_FindFile:cmp fileFind.cFileName, '.'je _NextFileinvoke OpenFile, offset fileFind.cFileName, offset fileOpen, OF_READmov hFileRead, eaxcmp eax, -1jne @Flea esi, errReadFilecall _MsgPrintjmp _NextFile@@:invoke GetFileSize, hFileRead, 0cmp eax, 0jne @Flea esi, errReadFilecall _MsgPrintjmp _NextFile@@:mov sizeByte, eaxinvoke GetProcessHeapmov heapFile, eaxmov eax, sizeByteadd eax, 4invoke HeapAlloc, heapFile, HEAP_ZERO_MEMORY, eaxcmp eax, 0jne @Flea esi, errAllocMemorycall _MsgPrintjmp _NextFile@@:mov pageFile, eaxinvoke ReadFile, hFileRead, pageFile, sizeByte, offset byteRead, 0cmp eax, 0jne @Finvoke HeapFree, heapFile, 0, pageFilelea esi, errReadFilecall _MsgPrintjmp _NextFile@@:invoke CloseHandle, hFileReadmov edi, pageFilemov eax, sizeByteadd edi, eaxinvoke lstrcat, pageFile, chr$(0Dh,0Ah)invoke GetProcessHeapmov heapBuffer, eaxinvoke HeapAlloc, heapBuffer, HEAP_ZERO_MEMORY, sizeBuffercmp eax, 0jne @Finvoke HeapFree, heapFile, 0, pageFilelea esi, errAllocMemorycall _MsgPrintjmp _NextFile@@:mov pageBuffer, eax;~~~~~~~~~~~~~~~~~call _CheckString;~~~~~~~~~~~~~~~~~cmp byte ptr [errString], 0jne @Fjmp _ClearMemory@@:invoke SetCurrentDirectory, offset newDirinvoke CreateFile, offset fileFind.cFileName, GENERIC_WRITE, \FILE_SHARE_WRITE, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0cmp eax, -1jne @Fjmp _ClearMemory@@:mov hFileCreate, eaxinvoke lstrlen, pageBuffermov sizeByte, eaxinvoke WriteFile, hFileCreate, pageBuffer, sizeByte, offset byteWrite, 0jne @Flea esi, errWriteFilecall _MsgPrint@@:invoke CloseHandle, hFileCreate_ClearMemory:invoke HeapFree, heapBuffer, 0, pageBufferinvoke HeapFree, heapFile, 0, pageFile;~~~~~~~~~~~~~~~call _ClearData;~~~~~~~~~~~~~~~_NextFile:invoke SetCurrentDirectory, offset currentDirinvoke FindNextFile, hFileFind, offset fileFindor eax, eaxjne _FindFileinvoke FindClose, hFileFindret_MainProc endp;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~_CheckString procxor eax, eaxmov edi, pageFilelea esi, dataString_FindEndString:mov al, [edi]cmp al, 0jne @Fjmp _CheckStringDone@@:mov [esi], alcmp al, 0Dhjne @Fmov byte ptr [endString], 1jmp _EndFindString@@:cmp al, 0Ahjne @Fcmp byte ptr [endString], 1je _NextSymbolmov byte ptr [endString], 0jmp _EndFindString@@:cmp al, '{'je _BracketCountcmp al, '}'je _BracketCountinc esi_NextSymbol:inc edijmp _FindEndString_BracketCount:mov ecx, bracketCountinc ecxmov bracketCount, ecxinc esijmp _NextSymbol_EndFindString:mov ecx, stringNumberinc ecxmov stringNumber, ecxmov ecx, bracketCountcmp ecx, 0je _ClearStringcmp ecx, 6je @Fmov byte ptr [errString], 1mov byte ptr [msgString], 0;~~~~~~~~~~~~~~~~call _SaveString;~~~~~~~~~~~~~~~~jmp _ClearString@@:mov byte ptr [validTriad], 0;~~~~~~~~~~~~~~~~call _CheckTriad;~~~~~~~~~~~~~~~~cmp byte ptr [validTriad], 1je _ClearStringmov byte ptr [errString], 1;~~~~~~~~~~~~~~~~call _SaveString;~~~~~~~~~~~~~~~~_ClearString:xor eax, eaxmov bracketCount, eaxlea esi, dataStringmov ecx, 2800h@@:mov [esi], aldec clcmp cl, 0je @Finc esijmp @B@@:lea esi, dataStringjmp _NextSymbol_CheckStringDone:ret_CheckString endp;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~_CheckTriad proclea esi, dataString_FindTriadOne:mov al, [esi]cmp al, '{'jne @Fmov byte ptr [validTriad], 1inc esijmp _FindTriadOne@@:cmp al, '}'jne @Fjmp _EndTriadOne@@:cmp al, 30hjb @Fcmp al, 39hja @Fmov byte ptr [validTriad], 1inc esijmp _FindTriadOne@@:mov byte ptr [validTriad], 0mov byte ptr [msgString], 1_EndTriadOne:cmp byte ptr [validTriad], 1jne _CheckTriadDoneinc esi_FindTriadTwo:mov al, [esi]cmp al, '{'jne @Fmov byte ptr [validTriad], 1inc esijmp _FindTriadTwo@@:cmp al, '}'jne @Fjmp _EndTriadTwo@@:cmp al, 30hjb @Fcmp al, 39hja @Fmov byte ptr [validTriad], 1inc esijmp _FindTriadTwo@@:cmp al, 41hjb @Fcmp al, 5Ahja @Fmov byte ptr [validTriad], 1inc esijmp _FindTriadTwo@@:cmp al, 61hjb @Fcmp al, 7Ahja @Fmov byte ptr [validTriad], 1inc esijmp _FindTriadTwo@@:cmp al, 0C0hjb @Fcmp al, 0FFhja @Fmov byte ptr [validTriad], 1inc esijmp _FindTriadTwo@@:mov byte ptr [validTriad], 0mov byte ptr [msgString], 2_EndTriadTwo:cmp byte ptr [validTriad], 1jne _CheckTriadDoneinc esimov groupCount, esi_FindTriadThree:mov al, [esi]cmp al, '{'jne @Fmov byte ptr [validTriad], 1inc esijmp _FindTriadThree@@:cmp al, '}'jne @Fjmp _EndTriadThree@@:cmp al, 09hjne @Fmov byte ptr [validTriad], 1inc esijmp _FindTriadThree@@:cmp al, 20hjb @Fcmp al, 40hja @Fmov byte ptr [validTriad], 1inc esijmp _FindTriadThree@@:cmp al, 5Bhjb @Fcmp al, 60hja @Fmov byte ptr [validTriad], 1inc esijmp _FindTriadThree@@:cmp al, 7Chjne @Fmov byte ptr [validTriad], 1inc esijmp _FindTriadThree@@:cmp al, 7Ehjne @Fmov byte ptr [validTriad], 1inc esijmp _FindTriadThree@@:cmp al, 85hjne @Fmov byte ptr [validTriad], 1inc esijmp _FindTriadThree@@:cmp al, 92hjne @Fmov byte ptr [validTriad], 1inc esijmp _FindTriadThree@@:cmp al, 97hjne @Fmov byte ptr [validTriad], 1inc esijmp _FindTriadThree@@:cmp al, 0ABhjne @Fmov byte ptr [validTriad], 1inc esijmp _FindTriadThree@@:cmp al, 0B0hjne @Fmov byte ptr [validTriad], 1inc esijmp _FindTriadThree@@:cmp al, 0B9hjne @Fmov byte ptr [validTriad], 1inc esijmp _FindTriadThree@@:cmp al, 0BBhjne @Fmov byte ptr [validTriad], 1inc esijmp _FindTriadThree@@:cmp al, 0C0hjb @Fcmp al, 0FFhja @Fmov byte ptr [validTriad], 1inc esijmp _FindTriadThree@@:mov byte ptr [validTriad], 0mov byte ptr [msgString], 3_EndTriadThree:cmp byte ptr [validTriad], 1jne _CheckTriadDonemov esi, groupCount_FindCaseSymbol:mov al, [esi]cmp al, '{'jne @Fmov byte ptr [highSymbol], 0mov byte ptr [lowSymbol], 1inc esijmp _FindCaseSymbol@@:cmp al, '}'jne @Fjmp _CheckTriadDone@@:cmp al, 22hjne @Fmov byte ptr [highSymbol], 0mov byte ptr [lowSymbol], 1inc esijmp _FindCaseSymbol@@:cmp al, 27hjne @Fmov byte ptr [highSymbol], 0mov byte ptr [lowSymbol], 1inc esijmp _FindCaseSymbol@@:cmp al, 28hjne @Fmov byte ptr [highSymbol], 0mov byte ptr [lowSymbol], 1inc esijmp _FindCaseSymbol@@:cmp al, 2Ehjne @Fmov byte ptr [highSymbol], 1mov byte ptr [lowSymbol], 1inc esijmp _FindCaseSymbol@@:cmp al, 5Bhjne @Fmov byte ptr [highSymbol], 0mov byte ptr [lowSymbol], 1inc esijmp _FindCaseSymbol@@:cmp al, 0FFhjne @Fcmp byte ptr [lowSymbol], 1jne @Fmov byte ptr [validTriad], 0mov byte ptr [msgString], 4jmp _CheckTriadDone@@:cmp al, 0DFhjne @Fcmp byte ptr [highSymbol], 1jne @Fmov byte ptr [validTriad], 0mov byte ptr [msgString], 4jmp _CheckTriadDone@@:mov byte ptr [highSymbol], 0mov byte ptr [lowSymbol], 0mov byte ptr [validTriad], 1inc esijmp _FindCaseSymbol_CheckTriadDone:ret_CheckTriad endp;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~_SaveString procpush edimov eax, stringCountmov edi, pageBufferadd edi, eaxlea esi, dataStringinvoke lstrlen, esimov ecx, eaxcldrep movsbpop edicmp byte ptr [msgString], 1jne @Flea esi, errTriadOnejmp _MsgString@@:cmp byte ptr [msgString], 2jne @Flea esi, errTriadTwojmp _MsgString@@:cmp byte ptr [msgString], 3jne @Flea esi, errTriadThreejmp _MsgString@@:cmp byte ptr [msgString], 4jne @Flea esi, msgCaseSymboljmp _MsgString@@:lea esi, offset errBracket_MsgString:invoke wsprintf, offset stringFormat, chr$(0Dh,0Ah,"%u",20h), stringNumberinvoke lstrcat, pageBuffer, offset stringFormatinvoke lstrcat, pageBuffer, esiinvoke lstrcat, pageBuffer, chr$(0Dh,0Ah,0Dh,0Ah)invoke lstrlen, pageBuffermov stringCount, eaxret_SaveString endp;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~_ClearData procxor eax, eaxmov bracketCount, eaxmov stringNumber, eaxmov stringNumber, eaxmov stringCount, eaxmov groupCount, eaxmov byte ptr [validTriad], 0mov byte ptr [highSymbol], 0mov byte ptr [lowSymbol], 0mov byte ptr [msgString], 0mov byte ptr [errString], 0mov byte ptr [endString], 0lea esi, dataStringmov ecx, 2800h@@:mov [esi], aldec clcmp cl, 0je @Finc esijmp @B@@:ret_ClearData endp;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~end start Nodefix Perl #!/usr/bin/perl#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# 2018-03-07#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~use strict;#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~my (@buffer_in, @buffer_out, $file_msg, $string);my ($number, $index) = (0,0);my $file_sum = "nodesum.txt";#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~opendir FILE_DIR, ".";my @file_name_list = sort(grep !/^\.+$/, readdir FILE_DIR);closedir FILE_DIR;#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~foreach (@file_name_list) { $file_msg = $_; if ($file_msg =~ /\.msg$/) { ++$number; print "$number $file_msg\n"; if (-s $file_msg) { open (FILE_IN, "$file_msg"); @buffer_in = <FILE_IN>; close(FILE_IN); &NODE_SUM; open (FILE_OUT, ">$file_sum"); print FILE_OUT @buffer_out; close(FILE_OUT); $index = 0; undef @buffer_in;}}}#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~if ($number ne '') { print "Data process completed.\n";} else { print "Files *.msg not found.\n";}print "Press ENTER to exit..."; my $stdin = <STDIN>;while ($stdin) { last if $stdin ne '\n';}exit();#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sub NODE_SUM { foreach (@buffer_in) { $string = $_; if ($string =~ /^\{\d+\}/) { my $bracket_open = () = $string =~ /\{/g; my $bracket_close = () = $string =~ /\}/g; if (($bracket_open == 3) && ($bracket_close == 3)){ ++$index; $buffer_out[$number] = "$file_msg = $index\n";}}}}#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Nodefix Masm32 ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;2018-03-07;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.386.model flat, stdcalloption casemap :none include \masm32\include\windows.incinclude \masm32\include\kernel32.incinclude \masm32\include\user32.incinclude \masm32\include\masm32.incinclude \masm32\macros\macros.asm includelib \masm32\lib\kernel32.libincludelib \masm32\lib\masm32.libincludelib \masm32\lib\user32.lib;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.data appName db 'nodefix',0msgDone db 'Обработка данных завершена.',0errSearchFile db 'Файлы *.msg не найдены.',0errCreateFile db 'Ошибка создания файла.',0errAllocMemory db 'Ошибка распределения памяти',0errReadFile db 'Ошибка чтения файла',0errWriteFile db 'Ошибка записи файла',0 fileName db 'nodesum.txt',0fileExt db '*.msg',0 stringBuffer db 10240 dup (0),0dataBuffer db 64 dup (0),0validTriad db 0,0endString db 0,0bracketCount dd 0stringCount dd 0stringFormat dd 0 fileFind WIN32_FIND_DATA <>fileOpen OFSTRUCT <> handleFind dd 0handleCreate dd 0handleRead dd 0sizeByte dd 0byteRead dd 0byteWrite dd 0handleHeap dd 0 .data?pageMemory dd ?;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.code start:invoke FindWindow, 0, offset appNamecmp eax, 0jne _Exit invoke FindFirstFile, offset fileExt, offset fileFindcmp eax, -1jne @Flea esi, errSearchFilecall _MsgPrintjmp _Exit@@:mov handleFind, eaxinvoke CreateFile, offset fileName, GENERIC_WRITE, \FILE_SHARE_WRITE, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0cmp eax, -1jne @Finvoke FindClose, handleFindlea esi, errCreateFilecall _MsgPrintjmp _Exit@@:mov handleCreate, eax;~~~~~~~~~~~~~~call _MainProc;~~~~~~~~~~~~~~lea esi, msgDonecall _MsgPrint_Exit:invoke ExitProcess, 0;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~_MsgPrint proc invoke MessageBox, 0, esi, offset appName, 40hret _MsgPrint endp;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~_MainProc proc _FindFile:cmp fileFind.cFileName, '.'je _NextFile invoke OpenFile, offset fileFind.cFileName, offset fileOpen, OF_READmov handleRead, eaxcmp eax, -1jne @Flea esi, errReadFilecall _MsgPrintjmp _NextFile@@:invoke GetFileSize, handleRead, 0cmp eax, 0jne @Flea esi, errReadFilecall _MsgPrintjmp _NextFile@@:mov sizeByte, eaxinvoke GetProcessHeapmov handleHeap, eaxmov eax, sizeByteadd eax, 4invoke HeapAlloc, handleHeap, HEAP_ZERO_MEMORY, eaxcmp eax, 0jne @Flea esi, errAllocMemorycall _MsgPrintjmp _NextFile@@:mov pageMemory, eaxinvoke ReadFile, handleRead, pageMemory, sizeByte, offset byteRead, 0cmp eax, 0jne @Finvoke HeapFree, handleHeap, 0, pageMemorylea esi, errReadFilecall _MsgPrintjmp _NextFile@@:invoke CloseHandle, handleReadmov edi, pageMemorymov eax, byteReadadd edi, eaxinvoke lstrcat, pageMemory, chr$(0Dh,0Ah);~~~~~~~~~~~~~~~~~call _CheckString;~~~~~~~~~~~~~~~~~invoke HeapFree, handleHeap, 0, pageMemorycmp stringCount, 0je @Finvoke lstrlen, offset dataBuffermov sizeByte, eaxinvoke WriteFile, handleCreate, offset dataBuffer, sizeByte, offset byteWrite, 0cmp eax, 0jne @Flea esi, errWriteFilecall _MsgPrint@@:;~~~~~~~~~~~~~~~call _ClearData;~~~~~~~~~~~~~~~ _NextFile:invoke FindNextFile, handleFind, offset fileFindor eax, eaxjne _FindFileinvoke FindClose, handleFindinvoke CloseHandle, handleCreateret _MainProc endp;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~_CheckString proc xor eax, eaxmov edi, pageMemorylea esi, stringBuffer _FindEndString:mov al, [edi]cmp al, 0jne @Fjmp _CheckStringDone@@:mov [esi], almov byte ptr [endString], 0cmp al, 0Dhjne @Fmov byte ptr [endString], 1jmp _EndFindString@@:cmp al, 0Ahjne @Fcmp byte ptr [endString], 1je _NextSymbolmov byte ptr [endString], 0jmp _EndFindString@@:cmp al, '{'je _BracketCountcmp al, '}'je _BracketCountinc esi _NextSymbol:inc edijmp _FindEndString _BracketCount:mov ecx, bracketCountinc ecxmov bracketCount, ecxinc esijmp _NextSymbol _EndFindString:mov ecx, bracketCountcmp ecx, 0je _ClearStringcmp ecx, 6je @Fjmp _ClearString@@:mov byte ptr [validTriad], 0;~~~~~~~~~~~~~~~~call _CheckTriad;~~~~~~~~~~~~~~~~cmp byte ptr [validTriad], 1je @Fjmp _ClearString@@:mov ecx, stringCountinc ecxmov stringCount, ecx _ClearString:xor eax, eaxmov bracketCount, eaxlea esi, stringBuffermov ecx, 2800h@@:mov [esi], aldec clcmp cl, 0je @Finc esijmp @B@@:lea esi, stringBufferjmp _NextSymbol _CheckStringDone:invoke lstrcpy, offset dataBuffer, offset fileFind.cFileNameinvoke lstrcat, offset dataBuffer, chr$(20h,3Dh,20h)invoke wsprintf, offset stringFormat, chr$("%u"), stringCountinvoke lstrcat, offset dataBuffer, offset stringFormatinvoke lstrcat, offset dataBuffer, chr$(0Dh,0Ah)ret _CheckString endp;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~_CheckTriad proc lea esi, stringBuffer _FindDigit:mov al, [esi]cmp al, '{'jne @Fmov byte ptr [validTriad], 1inc esijmp _FindDigit@@:cmp al, '}'jne @Fjmp _CheckTriadDone@@:cmp al, 30hjb @Fcmp al, 39hja @Fmov byte ptr [validTriad], 1inc esijmp _FindDigit@@:mov byte ptr [validTriad], 0 _CheckTriadDone:ret _CheckTriad endp;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~_ClearData proc xor eax, eaxmov bracketCount, eaxmov stringFormat, eaxmov stringCount, eaxmov byte ptr [validTriad], 0mov byte ptr [endString], 0lea esi, stringBuffermov ecx, 2800h@@:mov [esi], aldec clcmp cl, 0je @Finc esijmp @B@@:lea esi, dataBuffermov ecx, 40h@@:mov [esi], aldec ecxcmp ecx, 0je @Finc esijmp @B@@:ret _ClearData endp;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~end start 2
Slack64 Опубликовано 13 января, 2018 Автор Опубликовано 13 января, 2018 SymbolFix 13/01/2018маленькое исправление и дополнение в описании,архив обновлён, ссылка прежняя 5
Slack64 Опубликовано 15 января, 2018 Автор Опубликовано 15 января, 2018 NodeFix 15/01/2018сделал на всякий случай ещё одну утилиту, описание и исходниквнутри архива, ссылка добавлена в подпись. Внимание, эта утилита для опытных пользователей. 2
Slack64 Опубликовано 16 января, 2018 Автор Опубликовано 16 января, 2018 вопрос к Foxx, Mr.Сталин, Pyranнашел одну строку в .msg файле, там строка начинается не с {номер},а пробел {номер}, это не будет для движка критом, ошибка не выскочит?конкретно :cmbatai2.msg{32444}{}{Эй, да у нас тут кровь идет, а?} {32445}{}{::::отрыжка!:::::}
Pyran Опубликовано 16 января, 2018 Опубликовано 16 января, 2018 вопрос к Foxx, Mr.Сталин, Pyran нашел одну строку в .msg файле, там строка начинается не с {номер}, а пробел {номер}, это не будет для движка критом, ошибка не выскочит?,просто поправить и все. Fallout 2: Путеводитель по модам | FAQ | Перевод модов | Путеводитель по RP Nevada Band: Путеводитель по играм серии | FAQ Fallout Tactics: Путеводитель по модам | FAQ База Данных: YD\YD\MF Цитата: "Помогая другим, не забывай о себе..."
Foxx Опубликовано 16 января, 2018 Опубликовано 16 января, 2018 V.K. {32444}{}{Эй, да у нас тут кровь идет, а?} {32445}{}{::::отрыжка!:::::} Критом не будет, но для наглядности файла лучше удали пробел.
Mr.Sталин Опубликовано 16 января, 2018 Опубликовано 16 января, 2018 а пробел {номер}, это не будет для движка критом, ошибка не выскочит?нет это не крит, в переписке писал, что за скобками можно писать все что вздумается, двиг это игнорит, главное структура скоб. Нетипичный пример использования скриптов:Это не нетипичный скрипт, а дурная голова скриптера)
Slack64 Опубликовано 19 января, 2018 Автор Опубликовано 19 января, 2018 нет это не крит, в переписке писал, что за скобками можно писать все что вздумается, двиг это игнорит, главное структура скоб.спасибо, 3
Slack64 Опубликовано 20 января, 2018 Автор Опубликовано 20 января, 2018 SymbolFix 0.1.20, NodeFix 0.1.20исправления и оптимизация, архив обновлён 20/01/2018 ИСПРАВЛЕНИЯ теперь на правильную строку с номером озвучки к примеру {100}{10}{....не будет выводится сообщение, что она не корректна,будут выводится сообщения, только в случае ошибки, для примера: 15 {150}{qw}{ Вы видите Эли.} -> This line contains incorrect characters.18 {200}{2a}{Вы видите привлекательную дикарку. В ее глазах стоят слезы.} -> This line contains incorrect characters. так же теперь не будет выводится ложное сообщение на строки такого характера {304}{}{}# +jmйno ОПТИМИЗАЦИЯ выкинул не нужные библиотеки из компилятора )теперь размер исполняемого файла 480Кб, ранее был 2 Мб освобождаем ресурсы памяти и дисковое пространство ) 1
Mr.Sталин Опубликовано 20 января, 2018 Опубликовано 20 января, 2018 ИСПРАВЛЕНИЯ теперь на правильную строку с номером озвучки к примеру {100}{10}{....не будет выводится сообщение, что она не корректна,будут выводится сообщения, только в случае ошибки, для примера: 15 {150}{qw}{ Вы видите Эли.} -> This line contains incorrect characters.{304}{}{}# +jmйno 15 {150}{qw}{ Вы видите Эли.} - не знаю что такое 15 в начале строки, но эта строка для движка полностью валидна.Не вижу смысла проверять что находится во вторых скобках - пусть утилита выводит предупреждение что во вторых скобках что-то написано. {304}{}{}# +jmйno - валидна{304}{}{}# }+jmйno - а так уже крит с вылетом 1
Slack64 Опубликовано 21 января, 2018 Автор Опубликовано 21 января, 2018 15 15 - это просто указатель номера строки в текстовом редакторе, для удобства поиска,в архиве текстовый файл, в котором я об этом написалк примеру в msg файле будет строка в которой нет скобок и номера {1234}а просто что-то и от чего-то осталось.абвгдто утилита выведет номер этой строки, такой же как если открыть в блокноте,по номеру ведь быстрее и проще найти, чем просматривать весь файл [qw] - то есть во втором поле со скобками не принципиально цифры, или буквы,если так, то поправлю # }+jmйno - а так уже крит с вылетомможет быть я не правильно понял, но кажется ранее говорили о том,что после # движку всё равно что там, главное чтобы были закрытыосновные три поля со скобками, если я ошибаюсь, то верну обратно,как было ранее, чтобы такие строки отображались
Slack64 Опубликовано 21 января, 2018 Автор Опубликовано 21 января, 2018 такой вариант устраивает? {100}{45}{Вы видите красивую дикарку.} -> This line contains only information character. второе замечание в процессе Согласен с Пиран, лучше ещё раз всё проверит,ь а потом на раздачу,дату выхода ведь не публиковали )
Mr.Sталин Опубликовано 21 января, 2018 Опубликовано 21 января, 2018 [qw] - то есть во втором поле со скобками не принципиально цифры, или буквы,если так, то поправлю может быть я не правильно понял, но кажется ранее говорили о том,что после # движку всё равно что там, главное чтобы были закрытыосновные три поля со скобками, если я ошибаюсь Во вторых скобках может быть любая буквенно-цифровая запись.Движок не опознает символ #-комментария, это для человека обозначили так, символ # можно и не использовать вовсе. А движок обходит любой текст на наличие скобки, в данном случае закрывающая скобка без открывающей является критом, также если поставить в комментарии(тексте) лишнею пару {} то произойдет сдвиг структуры скоб, что приведет к криту. зы модераторы создайте отдельную тему для V.K. сабжа
Slack64 Опубликовано 21 января, 2018 Автор Опубликовано 21 января, 2018 Во вторых скобках может быть любая буквенно-цифровая запись.Движок не опознает символ #-комментария, это для человека обозначили так, символ # можно и не использовать вовсе. А движок обходит любой текст на наличие скобки, в данном случае закрывающая скобка без открывающей является критом, также если поставить в комментарии(тексте) лишнею пару {} то произойдет сдвиг структуры скоб, что приведет к криту. зы модераторы создайте отдельную тему для V.K. сабжаспасибо,я разобрался, темы не надо.Вы ведь профи, может быть проще Вам сделать провер. программу, вместомоего безобразия? сделал проверки на скобки трёх вариантов строк{100}{}{....{100}{здесь не важно цифра,буква}{....{100}{}{}...... итого получилось уже 35 правил проверок скобок, сделаю обновление но если будет строка{100}{..{..}{..}..{..{....}...}..}....# .{...{..{....}..}..то прошу извинить, писать провер. правила на такое не буду,потому что я не хочу провести остаток дней в психушке
Slack64 Опубликовано 22 января, 2018 Автор Опубликовано 22 января, 2018 Обновление архива 22/01/18NodeFix - без измененийSymbolFix - исправления по замечаниям и доработка на данный момент сделано 37 правил проверки скобок, но можетчто-то упустил, все правила приводить не буду,только несколько примеров для наглядности {100}{10}{Вы видите {красивую дикарку.} -> {100}{10}{Вы видите красивую дикарку.}{150}{}{Вы {видите Эли.} -> {150}{}{Вы видите Эли.}{200}{}{Вы видите привлекательную дикарку. В ее глазах стоят слезы.{} -> {200}{}{Вы видите привлекательную дикарку. В ее глазах стоят слезы.}{201}{}{ Она без сознания.} #{K textu dalekohledu, pokud ho omrбиil obuљkem -> {201}{}{ Она без сознания.} #K textu dalekohledu, pokud ho omrбиil obuљkem{300}{}{Эли благодарит чужака. Теперь она уйдет.}# MUЋ { -> {300}{}{Эли благодарит чужака. Теперь она уйдет.}# MUЋ{302}{}{Эли хочет побыть одна.}#} na kliknutн -> {302}{}{Эли хочет побыть одна.}# na kliknutн{304}{}{}# {+jmйno -> {304}{}{}# +jmйno{309}{}{Эли некогда говорить. Надо работать.}# na kliknutн} -> {309}{}{Эли некогда говорить. Надо работать.}# na kliknutн{313}{pc}{Чужая должна уйти!}# ЋENA znepшбtelila si{ kmen, na kliknutн -> {313}{pc}{Чужая должна уйти!}# ЋENA znepшбtelila si kmen, na kliknutн прошу модераторов удалить прошлые посты по обновлениями по моим вопросам относительно скобок, они уже не актуальны 1
Mr.Sталин Опубликовано 22 января, 2018 Опубликовано 22 января, 2018 потому что я не хочу провести остаток дней в психушкехы-хы... Просто подход в проверке выбран не правильный - регулярки это зло)
Slack64 Опубликовано 22 января, 2018 Автор Опубликовано 22 января, 2018 хы-хы... Просто подход в проверке выбран не правильный - регулярки это зло)дело не в регексах, а в Перловке, она как бы изначально была направлена на замену шеллаи на пингвине всё замечательно, а вот с Виндой не дружит, хорошо что в последнихверсиях наконец-то решили проблему с крышками, но вот только новые на XP не поставишь,мне пришлось несколько версий от 5.8 до 5.14 перепробовать, чтобы, на XP скриптнормально стал работать, да и то не факт, что всё правильно отработает,по возможности буду проверять, почему то что работает на пингвине,не так отрабатывает, или не отрабатывает вообще на XP
Magus Опубликовано 22 января, 2018 Опубликовано 22 января, 2018 На всякий случай: описание формата, мои регулярки. FO2tweaks: неограниченные напарники, запрет напарникам стрельбы очередями, улучшенные гранаты итп.Переводы: Fallout Fixt , Restoration Project , Dangerous Quest! Инструменты: расширение VScode с поддержкой скриптов Fallout.Информация: документация к sfall, вики по Fallout: Nevada, вики PlayItHardcore.Если есть вопросы, в личку не пишите, лучше пишите на форум.
Slack64 Опубликовано 22 января, 2018 Автор Опубликовано 22 января, 2018 На всякий случай: описание формата, мои регулярки.спасибо, но я не программист, я технарь, да и верблюда то не очень хорошо знаю,а Вы мне удава подогнали )может Вы сделаете прогу для проверки, судя по скрипту, думаю у Васгораздо лучше получится я с железками работаю и в основном таким занимаюсь, там всё проще, чем в msg файлах sub _snmp_ { my $session = SNMPv2c_Session->open($host,$comm,$port); $session->map_table ([[1,3,6,1,2,1,15,3,1,1], [1,3,6,1,2,1,15,3,1,2], [1,3,6,1,2,1,15,3,1,16]], sub ($@) { my ($i0,$i1,$i2,$i3) = @_; grep (defined $_ && ($_ = pretty_print $_),($i1,$i2,$i3)); $bgp[$index] = "$tbl[$index] $i0 $i1 $i2 $i3"; ++$index; } ); $session->close();} 1
Mr.Sталин Опубликовано 22 января, 2018 Опубликовано 22 января, 2018 перловка, пингвины, верблюды, удавы - Кто все это ??? спасибо, но я не программист,Да здесь никто не программист, так кастрюли починяем 1
Pyran Опубликовано 22 января, 2018 Опубликовано 22 января, 2018 Linux, Perl, Python и перекур с Camel))Да все все знают, но молчат) Fallout 2: Путеводитель по модам | FAQ | Перевод модов | Путеводитель по RP Nevada Band: Путеводитель по играм серии | FAQ Fallout Tactics: Путеводитель по модам | FAQ База Данных: YD\YD\MF Цитата: "Помогая другим, не забывай о себе..."
Slack64 Опубликовано 22 января, 2018 Автор Опубликовано 22 января, 2018 Linux, Perl, Python и перекур с Camel))Да все все знают, но молчат)Camel это не перекур, это Тим О’Райли его на книжку про Перл прилепил если все и всё знают, тогда не понятно почему ты и другие корректоры, переводчикивручную msg проверяют я уже нашёл несколько багов в своей обновлённой версии, похоже перестарался,буду исправлять
Pyran Опубликовано 22 января, 2018 Опубликовано 22 января, 2018 если все и всё знают, тогда не понятно почему ты и другие корректоры, переводчикивручную msg проверяютну, я про названия, а не глубокие познания... я например с детства перловку не люблю)) Fallout 2: Путеводитель по модам | FAQ | Перевод модов | Путеводитель по RP Nevada Band: Путеводитель по играм серии | FAQ Fallout Tactics: Путеводитель по модам | FAQ База Данных: YD\YD\MF Цитата: "Помогая другим, не забывай о себе..."
Slack64 Опубликовано 22 января, 2018 Автор Опубликовано 22 января, 2018 ну, я про названия, а не глубокие познания... я например с детства перловку не люблю))я это понял, я имел ввиду что те кто как выразился Mr.Сталин кастрюли чинят,могли бы и тостеры начать чинить ) 1
Slack64 Опубликовано 23 января, 2018 Автор Опубликовано 23 января, 2018 перловка, пингвины, верблюды, удавы - Кто все это ??? это желтоклювые, а они весёлый народ, вот и такие у них названия,
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти