SoUI 0.5版本占坑
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

9012 lines
185 KiB

;;-------------------------------------------------------------------------
;;
;; Adic Helper [cJass]
;; v 01 04 01 05
;;
;; © 2009 ADOLF aka ADX
;; http://cjass.xgm.ru
;;
;;-------------------------------------------------------------------------
;;-------------------------------------------------------------------------
.686
.model flat
.xmm
;;-------------------------------------------------------------------------
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\gdi32.lib
includelib \masm32\lib\comctl32.lib
includelib \masm32\lib\shell32.lib
includelib SFmpq.lib
;; include \masm32\include\kernel32.inc
include \masm32\include\gdi32.inc
include \masm32\include\windows.inc
include \masm32\include\comctl32.inc
;;-------------------------------------------------------------------------
extern _imp__ExitProcess@4:dword
extern _imp__GetCommandLineA@0:dword
extern _imp__CreateThread@24:dword
extern _imp__CloseHandle@4:dword
extern _imp__GlobalAlloc@8:dword
extern _imp__GlobalLock@4:dword
extern _imp__GlobalUnlock@4:dword
extern _imp__GlobalFree@4:dword
extern _imp__CreateFileA@28:dword
extern _imp__WriteFile@20:dword
extern _imp__DeleteFileA@4:dword
extern _imp__GetCurrentDirectoryA@8:dword
extern _imp__SetCurrentDirectoryA@4:dword
extern _imp__ReadFile@20:dword
extern _imp__GetFileSize@8:dword
extern _imp__SetThreadPriority@8:dword
extern _imp__MessageBoxA@16:dword
extern _imp__RegisterClassA@4:dword
extern _imp__CreateWindowExA@48:dword
extern _imp__GetSystemMetrics@4:dword
extern _imp__GetMessageA@16:dword
extern _imp__DispatchMessageA@4:dword
extern _imp__DefWindowProcA@16:dword
extern _imp__LoadIconA@8:dword
extern _imp__PostMessageA@16:dword
extern _imp__SendMessageA@16:dword
extern _imp__ShowWindow@8:dword
extern _imp__RedrawWindow@16:dword
extern _imp__LoadCursorA@8:dword
extern _imp__SetCursor@4:dword
;; extern _imp__DrawIcon@16:dword
extern _imp__DestroyWindow@4:dword
extern _imp__SetWindowTextA@8:dword
extern _imp__MoveWindow@24:dword
extern _imp__MessageBeep@4:dword
extern _imp__SetFocus@4:dword
extern _imp__MpqOpenArchiveForUpdate@12:dword
extern _imp__MpqDeleteFile@8:dword
extern _imp__SFileOpenFileEx@16:dword
extern _imp__MpqCompactArchive@4:dword
extern _imp__MpqCloseUpdatedArchive@8:dword
extern _imp__SFileGetFileSize@8:dword
extern _imp__SFileReadFile@20:dword
extern _imp__MpqAddFileToArchiveEx@24:dword
extern _imp__BeginPaint@8:dword
extern _imp__EndPaint@8:dword
extern _imp__SetBkMode@8:dword
extern _imp__GetStockObject@4:dword
extern _imp__SelectObject@8:dword
extern _imp__SetBkMode@8:dword
extern _imp__DrawTextA@20:dword
extern _imp__SetTextColor@8:dword
extern _imp__CreateFontIndirectA@4:dword
extern _imp__ShellExecuteA@24:dword
extern _imp__GetLocalTime@4:dword
;;dbg
;;extern _imp__wsprintfA:dword
;;-------------------------------------------------------------------------
.data
WM_PROCEND equ WM_USER+02h
WM_CJ_ERROR equ WM_USER+03h
_dWndStlEx dd WS_VISIBLE
; align 04h
_sWinName db "AdicHelper 1.4.1.5", 00h
_sTollInfo db "cJass parser and optimizer AdicHelper v 1.4.1.5", 0dh, 0ah, "(c) ADOLF aka ADX, 2009", 00h
_sSiteAdr db "http://cjass.xgm.ru", 00h
_sOpen db "open", 00h
_sAttr db "(attributes)", 00h
_sWJ db "war3map.j", 00h
_sWJP db "parsed_war3map.j", 00h
_sWJO db "optimized_war3map.j", 00h
_sSynErr db "AdicHelper: syntax error", 00h
_dfilename dd offset _sWJP
_dDefTableSD equ $
_dMapProcCode dd 00h ;; used in string preprocessor
;; used in setdef
dd 00h, 00h, 00h
_hWndCls dd CS_NOCLOSE or CS_HREDRAW or CS_VREDRAW or CS_BYTEALIGNWINDOW,
offset _hWndProc, 00h, 00h, 400000h, ?, 10011h, COLOR_WINDOW, 00h, offset _sWJ
_hErrCls dd CS_HREDRAW or CS_VREDRAW,
offset _hErrProc, 00h, 00h, 400000h, ?, 10011h, COLOR_WINDOW, 00h, offset _sSynErr
;; fonts
_xOutFont dd 0bh, 00h, 00h, 00h, 0190h
db 00h, 00h ,00h, ANSI_CHARSET, 00h, 00h, 00h, 01h
db "Lucida console", 00h
_xGuiFont dd 0dh, 00h, 00h, 00h, 0190h
db 00h, 00h ,00h, ANSI_CHARSET, 00h, 00h, 00h, 01h
db "MS Sans Serif", 00h
_xWWWFont dd 0dh, 00h, 00h, 00h, 0190h
db 00h, 01h ,00h, ANSI_CHARSET, 00h, 00h, 00h, 01h
db "MS Sans Serif", 00h
_dFreeScope dd 00h
_dDbgOff dd offset _lCRDebugRem ;; is debug mode
_dSynDesc dd offset _xSynDesc ;; ex syntax (zinc and boa) pointer
_dSortSteps dd 0010h, 0050h, 0130h, 0290h, 06d0h, 0d10h, 1f90h, 3a10h, 8710h, 0f410h, 0ffffffffh
;;
;; 10 bits offset oriented
;;
_dCurrStr dd offset _sProg_00
_xRect_00 dd 0010h, 10h, 0172h, 40h
_xRect_01 dd 0010h, 24h, 0172h, 40h
_xRect_toRedraw dd 0118h, 10h, 0172h, 1ch
_xRect_02 dd 0010h, 08h, 0172h, 20h
_dEnumStrPoint dd offset _xEnumStr+0dh
_dEnumTablePointer dd offset _xEnumTable+0ch
;; _dEnumLabelPointer dd offset _xEnumLabel
_dEnumDefTable dd offset _xEnumDefTable, offset _xEnumDefTable+0ch
_xEnumDefTable dd 80000000h, 0ffffffffh, offset _xEnumDefTable+0ch, 00000000h, 7fffffffh, 00000000h
_sDateL db "DATE", 02h
_sTimeL db "TIME", 02h
_sDebugL db "DEBUG", 02h
_sCountL db "COUNTER", 02h
_sWeatherL db "WEATHER_ON_MARS", 02h
_sWarVer db "WAR3VER", 02h
_sFuncNameL db "FUNCNAME", 02h
_sTrue db "1", 03h
_sVer24 db "WAR3VER_24", 03h
_sVer23 db "WAR3VER_23", 03h
_sVerUndef db "WAR3VER_00", 03h
_sCntSpec db 01h, 36h, 03h
_sWether db 01h, 37h, 03h
_sFuncName db 66h, 66h, 01h, 38h, 03h
_dWarVerSL dd offset _sVerUndef ;; if zero - do not remove unused code
_sProg_00 db "Parsing: preparing...", 00h
_sProg_01 db "Parsing: processing...", 00h
_sProg_02 db "Parsing: build Find'n'Replace table...", 00h
_sProg_03 db "Parsing: find'n'Replace: process...", 00h
_sProg_04 db "Parsing: killing Vexorian...", 00h
_sProg_05 db "Parsing: success!", 00h
_sProg_06 db "Optimization: preparing...", 00h
_sProg_07 db "Optimization: removing unused code...", 00h
_sProg_08 db "Optimization: success!", 00h
_sExit db "Exit", 00h
_sProgBar db "msctls_progress32", 00h
_sEditWnd db "edit", 00h
_sListWnd db "listbox", 00h
_sButton db "button", 00h
_sErr_Arch db "Error: cannot open archive", 00h
_sErr_Code db "Error: cannot find war3map.j", 00h
_sErr_Title db "Compiling is stopped", 00h
_sErr_Base db "[00] Critical syntax error", 00h
_sErr_UnclosedString db "[01] Critical error: string unclosed or too big", 00h
_sErr_CantOpenFile db "[02] Critical error: cannot open included file", 00h
_sErr_BadBlockInFile db "[03] Critical error: unclosed block in included file", 00h
_sErr_BadBlock db "[04] Critical error: excessive block closing bracket", 00h
_sErr_UnclosedBlock db "[05] Critical error: unclosed block", 00h
_sErr_EndLibScope db "[06] Critical error: excessive endlibrary/endscope", 00h
_sErr_BadDef db "[07] Critical error: word cannot be defined: maybe missing enddefine?", 00h
_sErr_BadChar db "[08] Critical error: bad char", 00h
_sErr_UnclosedLib db "[09] Critical error: missing endlibrary or endscope", 00h
_sErr_UnclosedComment db "[10] Critical error: unclosed comment block", 00h
_sErr_BadComment db "[11] Critical error: comment closed without opening", 00h
_sErr_ValueRedefined db "[12] Critical error: macro defined twice with different arguments", 00h
_sErr_ValueRedefinedEX db "[**] Redeclared here", 00h
_sErr_MissDefArg db "[13] Critical error: missing define arguments", 00h
_sErr_DefArg db "[14] Critical error: too many arguments passed to define", 00h
_sErr_UnknowBlock db "[15] Critical error: unknown block", 00h
_sErr_IncorrectLiteral db "[16] Critical error: incorrect literal", 00h
_sErr_PreProc db "[17] Critical error: incorrect preprocessor instruction", 00h
_sErr_Ude db "[18] Critical error: used defined error", 00h
_sErr_FailedDef db "[19] Critical error: defines cannot be declared in #if/#endif block. Please declare them outside of this block and use setdef instruction", 00h
_bFCLL db 40h ;; locals
_bFCLLMAX db 40h ;; locals max
_dFCPL dd offset _bFuncPostEX ;; postix index - pointer
_sCodeConst db "true", 00h
db "false", 00h
db "function", 00h
db "Player", 00h
db "GetRandomInt", 00h
db "GetRandomReal", 00h
db "Deg2Rad", 00h
db "Rad2Deg", 00h
db "Sin", 00h
db "Cos", 00h
db "Tan", 00h
db "Asin", 00h
db "Acos", 00h
db "Atan", 00h
db "Atan2", 00h
db "SquareRoot", 00h
db "Pow", 00h
db "I2R", 00h
db "R2I", 00h
db "I2S", 00h
db "R2S", 00h
db "R2SW", 00h
db "S2I", 00h
db "S2R", 00h
db "SubString", 00h
db "StringLength", 00h
db "StringCase", 00h
db "Condition", 00h
db "Filter", 00h
db 00h
_sCodeNXFunc db "laeRmodnaRteG", 00h
db "tnImodnaRteG", 00h
db "reyalP", 00h
db "reggirTetaerC", 00h
db "noigeRetaerC", 00h
db "noitacoL", 00h
db "tceR", 00h
db "ecroFetaerC", 00h
db "puorGetaerC", 00h
db "remiTetaerC", 00h
db "tnImodnaRteG", 00h
db "laeRmodnaRteG", 00h
db 00h
;;
;; 0...9 ; A...Z ; _ ; a...z
;;
_bAscii_00 \
db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h
db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h
db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h
db 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 00h, 00h, 00h, 00h, 00h, 00h
db 00h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h
db 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 00h, 00h, 00h, 00h, 01h
db 00h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h
db 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 00h, 00h, 00h, 00h, 00h
db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h
db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h
db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h
db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h
db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h
db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h
db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h
db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h
;;
;; 0...9 ; A...Z ; _ ; a...z ; , and .
;;
_bAscii_03 \
db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h
db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h
db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 01h, 00h
db 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 00h, 00h, 00h, 00h, 00h
db 00h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h
db 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 00h, 00h, 00h, 00h, 01h
db 00h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h
db 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 00h, 00h, 00h, 00h, 00h
db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h
db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h
db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h
db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h
db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h
db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h
db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h
db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h
;;
;; remove bs 00
;;
;; 00h, 01h, 02h, 03h, 04h, 05h, 06h, 07h, 08h, 09h, 0ah, 0bh, 0ch, 0dh, 0eh, 0fh
_bAscii_01 \
db _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00 ;; 00h - 0fh
db _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00 ;; 10h - 1fh
db _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_02, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_01, _lCRDD_01, _lCRDD_00, _lCRDD_01, _lCRDD_02, _lCRDD_01 ;; 20h - 2fh
db _lCRDD_02, _lCRDD_02, _lCRDD_02, _lCRDD_02, _lCRDD_02, _lCRDD_02, _lCRDD_02, _lCRDD_02, _lCRDD_02, _lCRDD_02, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00 ;; 30h - 3fh
db _lCRDD_00, _lCRDD_02, _lCRDD_02, _lCRDD_02, _lCRDD_02, _lCRDD_02, _lCRDD_02, _lCRDD_02, _lCRDD_02, _lCRDD_02, _lCRDD_02, _lCRDD_02, _lCRDD_02, _lCRDD_02, _lCRDD_02, _lCRDD_02 ;; 40h - 4fh
db _lCRDD_02, _lCRDD_02, _lCRDD_02, _lCRDD_02, _lCRDD_02, _lCRDD_02, _lCRDD_02, _lCRDD_02, _lCRDD_02, _lCRDD_02, _lCRDD_02, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00 ;; 50h - 5fh
db _lCRDD_00, _lCRDD_02, _lCRDD_02, _lCRDD_02, _lCRDD_02, _lCRDD_02, _lCRDD_02, _lCRDD_02, _lCRDD_02, _lCRDD_02, _lCRDD_02, _lCRDD_02, _lCRDD_02, _lCRDD_02, _lCRDD_02, _lCRDD_02 ;; 60h - 6fh
db _lCRDD_02, _lCRDD_02, _lCRDD_02, _lCRDD_02, _lCRDD_02, _lCRDD_02, _lCRDD_02, _lCRDD_02, _lCRDD_02, _lCRDD_02, _lCRDD_02, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00 ;; 70h - 7fh
_lCRDD_00 equ offset _lCRScanBS - _lBSRemBase
_lCRDD_01 equ offset _lCRIncDec - _lBSRemBase
_lCRDD_02 equ offset _lCRBSNext - _lBSRemBase
_lCRDD_03 equ offset _lCRBSAdd - _lBSRemBase
;;
;; remove bs 01
;;
_bAscii_02 \
db _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00
db _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00
db _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_03, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_03, _lCRDD_00
db _lCRDD_03, _lCRDD_03, _lCRDD_03, _lCRDD_03, _lCRDD_03, _lCRDD_03, _lCRDD_03, _lCRDD_03, _lCRDD_03, _lCRDD_03, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00
db _lCRDD_00, _lCRDD_03, _lCRDD_03, _lCRDD_03, _lCRDD_03, _lCRDD_03, _lCRDD_03, _lCRDD_03, _lCRDD_03, _lCRDD_03, _lCRDD_03, _lCRDD_03, _lCRDD_03, _lCRDD_03, _lCRDD_03, _lCRDD_03
db _lCRDD_03, _lCRDD_03, _lCRDD_03, _lCRDD_03, _lCRDD_03, _lCRDD_03, _lCRDD_03, _lCRDD_03, _lCRDD_03, _lCRDD_03, _lCRDD_03, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_03
db _lCRDD_00, _lCRDD_03, _lCRDD_03, _lCRDD_03, _lCRDD_03, _lCRDD_03, _lCRDD_03, _lCRDD_03, _lCRDD_03, _lCRDD_03, _lCRDD_03, _lCRDD_03, _lCRDD_03, _lCRDD_03, _lCRDD_03, _lCRDD_03
db _lCRDD_03, _lCRDD_03, _lCRDD_03, _lCRDD_03, _lCRDD_03, _lCRDD_03, _lCRDD_03, _lCRDD_03, _lCRDD_03, _lCRDD_03, _lCRDD_03, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00, _lCRDD_00
;;----------------
;; for debug
;;_sDbgSrc db "%d", 00h
;;_sDbgDest db 20h dup(00h)
;;----------------
;;-------------------------------------------------------------------------
.data?
_sTime db 09h dup(?)
_sDate db 0bh dup(?)
_dCounterV dd ?
_bCodeSys db ? ;; 0 = not return and not if construction
_bCodePosOp db ? ;; 0 = no post operation (++ or --)
_bTempBool db ?
_bTempType db ?
_dBuffer dd ? ;; buffer
_hOLMacro dd ? ;; used in macro overloading
_dGuiFont dd ?
_dWWWFont dd ? ;; used in string preprocessor
_fScr dd ?
_dUndefPnt dd ? ;; script position in undefined
_hWnd dd ?
_hPrg dd ?
_hList dd ?
_hBtn dd ? ;; used in #if ...
;; _hIconCJ dd ?
_hTrd dd ?
_dStackPos dd ?
_dPreStackPos dd ?
_dErrorCodeStart dd ? ;; edi position of bad code
_xErrorTable dd 08h dup(?)
_dStdCursor dd ?
_dExCursor dd ?
_sMapPath db 0200h dup(?)
_dMapPathToEX equ 0200h
_sMapPathEX db 0200h dup(?) ;; for include
_dMapPathEnd dd ?
_sCurrDir db 0200h dup(?)
_dCurrDirEnd dd ?
align 10h
_lDefX dd 00010000h dup(?) ;; 80h bits defBlocks
_dScopeIn dd 0100h dup(?)
_dScopeOut dd 0100h dup(?)
_dDefTable dd 0080h dup(?) ;; used in f'n'p ;; used in code romoning (variables)
_dDefTableEX dd 0080h dup(?) ;; used in code romoning (function)
_dDefArgs dd 0080h dup(?)
_xPntStr PAINTSTRUCT <?>
_dFCL dd ? ;; locals
_dFCB dd ? ;; base code of function
_dBCP dd ? ;; base code pointer
align 10h
_bFuncCodeLocals db 00010000h dup(?) ;; locals ;; used also in string preprocessor ;; used in guard ;; used in removing unused code - variables
align 10h
_bFuncCodeBase db 000a0000h dup(?) ;; base code of function ;; used also in string preprocessor ;; used in removing unused code - functions
_bFuncCodeOneLine db 00004000h dup(?) ;; one line of func code
_bFuncPostEX db 00000200h dup(?) ;; postix index
_xEnumStr db 00008000h dup(?) ;; enum string
_xEnumTable dd 00008000h dup(?) ;; enum structs ;; used also in #if
_xEnumLabel dd 00000100h dup(?) ;; enum labels
_xSysTime dw 08h dup(?) ;; system time
_dVarParams dd ? ;; variable group params
_dLastFuncName dd ? ;; used in FUNCNAME macro
_bIsPPCEn db ? ;; in #if/#endif block
_xSynDesc dd 0400h dup(?) ;; ex syntax (zinc and boa) descriptor
_bStrXX db ? ;; uses to add bs at strings
;;-------------------------------------------------------------------------
.code
_next equ @f
_prew equ @b
_lbl equ @@
;;----------------
;; debug print reg
_printReg macro reg
pushad
push reg
push offset _sDbgSrc
push offset _sDbgDest
call _imp__wsprintfA
add esp, 0ch
push 00h
push 00h
push offset _sDbgDest
push 00h
call _imp__MessageBoxA@16
popad
endm
;;----------------
;;-------------------------------------------------------------------------
;; struct defBlock
;;
;; _sDFLabel dd ;; adress of string [define label]
;; _sDFValue dd ;; adress of string [define value]
;; _sDFScope dd ;; scope id
;; _dValueLenght dd ;; arg count
_dDFSize equ 10h
;; struct errorTable
;;
;; _hString dd ;; offset of info string
;; _hStarsS dd ;; selection end
;; _hEndS dd ;; selection start
;; dd ;; not use
;; struct enumLabels
;;
;; _hName dd ;; pointer to string
;; _hNegBase dd ;; negative enumTable
;; _hPosBase dd ;; positive enumTable
;; struct enumTable
;;
;; _hMin dd
;; _hMax dd
;; _hNext dd ;; next enumTable
;; struct globVar/func
;;
;; _hAddrS dd ;; address - start
;; _hAddrE dd ;; end
;; _hName dd ;; var Name
;; _wCnt dw ;; counter
;; _ db
;; _ db
;; struct funcCode
;;
;; _hAddrS dd ;; address - start
;; _hAddrE dd ;; end
;; _hName dd ;; var Name
;; _wCnt dw ;; counter
;; _bIsChecked db ;; is checked
;; _ db
;;-------------------------------------------------------------------------
;;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;; proc optimize
;;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
_lMapOptimizeCode:
;;----------------
mov _dCurrStr, offset _sProg_06
mov eax, 10h
call _lSetProg
;;----------------
;;----------------
;; code preparation
xor ebx, ebx ;; use bl only
jmp _lOptPreStartEX
_lOptPreStart:
movsb
_lOptPreStartEX:
mov eax, dword ptr [esi]
;;----------------
;; nl
cmp ax, 0a0dh ;; nl
jne _next
_lOptAddNLEX:
cmp byte ptr [edi-01h], 0ah ;; nl
jne _lOptAddNL
add esi, 02h
jmp _lOptPreStartEX
_lOptAddNL:
mov byte ptr [edi], 0ah ;; nl
add esi, 02h
inc edi
jmp _lOptPreStartEX
;;----------------
;;----------------
;; comments
_lbl:
cmp ax, 2f2fh ;; //
jne _next
_lOptComm:
inc esi
cmp byte ptr [esi], 00h
je _lOptPreEnd
cmp word ptr [esi], 0a0dh
jne _lOptComm
jmp _lOptAddNLEX
;;----------------
;;----------------
;; strings
_lbl:
cmp eax, 2b202222h ;; "" +
jne _next
add esi, 04h
jmp _lOptPreStartEX
_lbl:
cmp eax, 2222202bh ;; + ""
jne _next
add esi, 04h
jmp _lOptPreStartEX
_lbl:
cmp eax, 202b2022h ;; " +
jne _next
cmp byte ptr [esi+04h], 22h ;; "
jne _next
add esi, 05h
jmp _lOptPreStartEX
_lbl:
cmp al, 22h ;; "
jne _next
_lOptStr:
movsb
_lOptStrSX:
cmp byte ptr [esi], 5ch ;; \
je _lOptStrEX
cmp byte ptr [esi], 22h ;; "
jne _lOptStr
jmp _lOptPreStart
_lOptStrEX:
movsw
jmp _lOptStrSX
;;----------------
;;----------------
;; bs
_lbl:
cmp al, 20h ;; bs
jne _next
jmp _lOptRemoveBS
_lbl:
cmp al, 09h ;; tab
jne _next
_lOptRemoveBS:
;; prew char
mov bl, byte ptr [edi-01h]
cmp byte ptr [_bAscii_00+ebx], bh ;; bh = 00h
jne _lOptBS
inc esi
jmp _lOptPreStartEX
;; next char
_lOptBS:
mov bl, ah
cmp byte ptr [_bAscii_00+ebx], bh ;; bh = 00h
jne _lOptPreStart
inc esi
jmp _lOptPreStartEX
;;----------------
;;----------------
;; null
_lbl:
cmp al, 00h ;; null
jne _lOptPreStart
cmp byte ptr [edi-01h], 0ah ;; nl
jne _lOptPreEnd
dec edi
mov byte ptr [edi], 00h ;; null
;;----------------
_lOptPreEnd:
;;----------------
;;----------------
mov _dCurrStr, offset _sProg_07
mov eax, 20h
call _lSetProg
;;----------------
;;----------------
;; removing unused code
cmp dword ptr [_dWarVerSL], 00h
jne _next
add esi, 04h
jmp _lOptCC_NoRemove
_lbl:
push edi
push esi
;;----------------
;; variables
mov ebx, offset _bFuncCodeLocals
add esi, 0ch ;; globals_
_lOptCC_VarStr:
cmp dword ptr [esi], 67646e65h ;; endg
jne _lOptCC_VarAdd
cmp dword ptr [esi+04h], 61626f6ch ;; loba
jne _lOptCC_VarAdd
cmp word ptr [esi+08h], 736ch ;; ls
jne _lOptCC_VarAdd
cmp byte ptr [esi+0ah], 0ah ;; nl
jne _lOptCC_VarAdd
add esi, 0bh
;;----------------
;; go to sort
push esi ;; store esi before sort
cmp ebx, offset _bFuncCodeLocals+10h
jbe _lOptCC_VarNoSort
mov ebp, offset _bFuncCodeLocals
sub ebx, ebp
call _lOptCC_SortIn
_lOptCC_VarNoSort:
mov eax, offset _bFuncCodeLocals-10h
mov edx, offset _dDefTable
push offset _lOptCC_Func
jmp _lOptCC_BuildIn
;;----------------
_lOptCC_VarAdd:
mov dword ptr [ebx], esi ;; start
cmp dword ptr [esi], 736e6f63h ;; cons
jne _next
cmp dword ptr [esi+04h], 746e6174h ;; tant
jne _next
cmp byte ptr [esi+08h], 20h ;; bs
add esi, 09h ;; remove constant
_lbl:
inc esi
cmp byte ptr [esi], 20h ;; bs
jne _prew
inc esi
cmp dword ptr [esi], 61727261h ;; arra
jne _next
cmp word ptr [esi+04h], 2079h ;; y_
jne _next
add esi, 06h
_lbl:
mov dword ptr [ebx+08h], esi ;; var name
_lbl:
inc esi
cmp byte ptr [esi], 0ah ;; nl
jne _prew
inc esi
mov dword ptr [ebx+04h], esi ;; end
add ebx, 10h
jmp _lOptCC_VarStr
;;----------------
;;----------------
;; functions
_lOptCC_Func:
pop esi
mov ebx, offset _bFuncCodeBase
_lOptCC_FuncStr:
cmp byte ptr [esi], 00h
jne _lOptCC_FuncAdd
;;----------------
;; go to sort
cmp ebx, offset _bFuncCodeBase+10h
jbe _lOptCC_FuncNoSort
mov ebp, offset _bFuncCodeBase
sub ebx, ebp
call _lOptCC_SortIn
_lOptCC_FuncNoSort:
mov eax, offset _bFuncCodeBase-10h
mov edx, offset _dDefTableEX
push offset _lOptCC_ChStr
jmp _lOptCC_BuildIn
;;----------------
_lOptCC_FuncAdd:
mov dword ptr [ebx], esi
cmp dword ptr [esi], 736e6f63h ;; cons
jne _next
add esi, 09h
_lbl:
add esi, 09h
mov dword ptr [ebx+08h], esi
_lbl:
inc esi
cmp dword ptr [esi], 6b617420h ;; _tak
jne _prew
cmp dword ptr [esi+07h], 68746f6eh ;; noth
jne _lOptCC_FuncGetEnd
cmp dword ptr [esi+0bh], 20676e69h ;; ing_
jne _lOptCC_FuncGetEnd
;;----------------
;; is optional
mov word ptr [ebx+0ch], 01h
;;----------------
_lOptCC_FuncGetEnd:
inc esi
cmp dword ptr [esi], 646e650ah ;; _end
jne _lOptCC_FuncGetEnd
cmp dword ptr [esi+04h], 636e7566h ;; func
jne _lOptCC_FuncGetEnd
add esi, 0dh
mov dword ptr [ebx+04h], esi
add ebx, 10h
jmp _lOptCC_FuncStr
;;----------------
;;----------------
;; sort
;;----------------
;; set step
_lOptCC_SortIn:
mov eax, offset _dSortSteps-04h
_lbl:
add eax, 04h
mov ecx, dword ptr [eax+04h]
lea ecx, dword ptr [ecx+ecx*02h]
cmp ebx, ecx
jg _prew
;;----------------
_lOptCC_SortStr:
mov ecx, dword ptr [eax]
lea ebx, dword ptr [ebp+ecx]
_lOptCC_SortGo:
mov esi, dword ptr [ebx+08h]
mov edi, ebx
mov dl, byte ptr [esi]
movaps xmm1, [ebx]
_lbl:
sub edi, ecx
cmp edi, ebp
jb _lOptCC_SortNext
mov esi, dword ptr [edi+08h]
cmp byte ptr [esi], dl
jb _lOptCC_SortNext
movaps xmm0, [edi]
movaps [edi+ecx], xmm0
jmp _prew
_lOptCC_SortNext:
movaps [edi+ecx], xmm1
add ebx, 10h
cmp dword ptr [ebx], 00h
jnz _lOptCC_SortGo
sub eax, 04h
cmp eax, offset _dSortSteps-04h
jne _lOptCC_SortStr
_lOptCC_SortEnd:
retn
;;----------------
;;----------------
;; build table
_lOptCC_BuildIn:
xor ebx, ebx
xor ecx, ecx
_lOptCC_VarDT:
add eax, 10h
cmp dword ptr [eax], 00h
je _lOptCC_VarDTEnd
mov ebp, dword ptr [eax+08h]
mov bl, byte ptr [ebp]
cmp cl, bl
je _lOptCC_VarDT
mov dword ptr[edx+ebx*04h], eax
mov cl, bl
jmp _lOptCC_VarDT
_lOptCC_VarDTEnd:
retn
;;----------------
;;----------------
;; checking
_lOptCC_ChStr:
;;----------------
;; check next function
_lOptCC_ChNext:
xor ebx, ebx
_lOptCC_ChNextEX:
mov eax, offset _bFuncCodeBase
_lOptCC_ChIn:
cmp dword ptr [eax], 00h
je _lOptCC_RemIn
cmp word ptr [eax+0ch], 00h
jne _lOptCC_ChCall
add eax, 10h
jmp _lOptCC_ChIn
_lOptCC_ChCall:
cmp byte ptr [eax+0eh], 00h
je _lOptCC_ChInFunc
add eax, 10h
jmp _lOptCC_ChIn
;;----------------
;; in function
_lOptCC_ChInFunc:
mov esi, dword ptr [eax+08h]
mov byte ptr [eax+0eh], 01h
_lbl:
inc esi
cmp byte ptr [esi-01h], 0ah ;; nl
jne _prew
_lOptCC_ChInFunc_GetWord:
mov bl, byte ptr [esi]
cmp byte ptr [_bAscii_00+ebx], bh
je _lOptCC_ChInFunc_Inc
cmp dword ptr [esi], 66646e65h ;; endf
jne _lOptCC_ChInFunc_CheckWord
cmp byte ptr [esi-01h], 0ah ;; nl
je _lOptCC_ChNextEX
;;----------------
_lOptCC_ChInFunc_CheckWord:
mov bl, byte ptr [esi]
lea edx, [_dDefTable+ebx*04h]
mov edx, dword ptr [edx]
test edx, edx
jz _lOptCC_ChInFunc_ReCheck
_lOptCC_ChInFunc_CheckWordEX:
mov ecx, esi
mov ebp, dword ptr [edx+08h]
mov bl, byte ptr [ecx]
cmp byte ptr [ebp], bl
jne _lOptCC_ChInFunc_ReCheck
inc ecx
inc ebp
_lOptCC_ChInFunc_CheckWordFX:
mov bl, byte ptr [ecx]
cmp byte ptr [_bAscii_00+ebx], bh
je _lOptCC_ChInFunc_CheckWordOX
cmp byte ptr [ebp], bl
jne _lOptCC_ChInFunc_NextFX
inc ebp
inc ecx
jmp _lOptCC_ChInFunc_CheckWordFX
_lOptCC_ChInFunc_CheckWordOX:
mov bl, byte ptr [ebp]
cmp byte ptr [_bAscii_00+ebx], bh
jne _lOptCC_ChInFunc_NextFX
inc word ptr [edx+0ch]
;;----------------
_lOptCC_ChInFunc_NextWord:
inc esi
mov bl, byte ptr [esi]
cmp byte ptr [_bAscii_00+ebx], bh
jne _lOptCC_ChInFunc_NextWord
jmp _lOptCC_ChInFunc_GetWord
_lOptCC_ChInFunc_NextFX:
add edx, 10h
cmp dword ptr [edx], 00h
je _lOptCC_ChInFunc_ReCheck
jmp _lOptCC_ChInFunc_CheckWordEX
_lOptCC_ChInFunc_Inc:
cmp bl, 22h ;; "
je _lOptCC_ChInFunc_IncStr
inc esi
jmp _lOptCC_ChInFunc_GetWord
_lOptCC_ChInFunc_IncStrEX:
inc esi
_lOptCC_ChInFunc_IncStr:
inc esi
cmp byte ptr [esi], 5ch ;; \
je _lOptCC_ChInFunc_IncStrEX
cmp byte ptr [esi], 22h ;; "
jne _lOptCC_ChInFunc_IncStr
inc esi
jmp _lOptCC_ChInFunc_GetWord
_lOptCC_ChInFunc_ReCheck:
cmp edx, offset _bFuncCodeBase
jge _lOptCC_ChInFunc_NextWord
mov bl, byte ptr [esi]
lea edx, [_dDefTableEX+ebx*04h]
mov edx, dword ptr [edx]
test edx, edx
jz _lOptCC_ChInFunc_NextWord
jmp _lOptCC_ChInFunc_CheckWordEX
;;----------------
;;----------------
;;----------------
;; remove unused
_lOptCC_RemIn:
mov al, 02h
;;----------------
;; functions
mov edx, offset _bFuncCodeBase-10h
_lOptCC_RemFunc:
add edx, 10h
cmp dword ptr [edx], 00h
je _lOptCC_RemVarIn
cmp word ptr [edx+0ch], 00h
jne _lOptCC_RemFunc
;;----------------
;; remove
mov edi, dword ptr [edx]
mov ecx, dword ptr [edx+04h]
sub ecx, edi
rep stosb
jmp _lOptCC_RemFunc
;;----------------
;;----------------
;;----------------
;; variables
_lOptCC_RemVarIn:
mov edx, offset _bFuncCodeLocals-10h
_lOptCC_RemVar:
add edx, 10h
cmp dword ptr [edx], 00h
je _lOptCC_RemParse
cmp word ptr [edx+0ch], 00h
jne _lOptCC_RemParse
;;----------------
;; remove
mov ebp, dword ptr [edx+08h]
_lbl:
inc ebp
cmp byte ptr [ebp], 0ah ;; nl
je _lOptCC_RemVarEX
cmp byte ptr [ebp], 3dh ;; =
jne _prew
;;----------------
;; check
_lOptCC_RemVarCheckStart:
inc ebp
cmp byte ptr [ebp], 0ah ;; nl
je _lOptCC_RemVarEX
cmp byte ptr [ebp], 28h ;; (
jne _lOptCC_RemVarCheckStart
mov bl, byte ptr [ebp-01h]
cmp byte ptr [_bAscii_00+ebx], bh
je _lOptCC_RemVarCheckStart
;;----------------
mov esi, offset _sCodeNXFunc
_lOptCC_RemVarCheck:
lea ecx, [ebp-01h]
_lbl:
mov bl, byte ptr [ecx]
cmp bl, byte ptr [esi]
jne _lOptCC_RemVarCheckFX
dec ecx
inc esi
jmp _prew
_lOptCC_RemVarCheckFX:
cmp byte ptr [_bAscii_00+ebx], bh
jne _lOptCC_RemVarCheckNext
cmp byte ptr [esi], 00h
je _lOptCC_RemVarCheckStart
_lOptCC_RemVarCheckNext:
cmp byte ptr [esi], 00h
jne _lOptCC_RemVarCheckNextEX
inc esi
cmp byte ptr [esi], 00h
jne _lOptCC_RemVarCheck
jmp _lOptCC_RemVarCheckStart
_lOptCC_RemVarCheckNextEX:
inc esi
jmp _lOptCC_RemVarCheckNext
;;----------------
;;----------------
;;----------------
_lOptCC_RemVarEX:
mov edi, dword ptr [edx]
mov ecx, dword ptr [edx+04h]
sub ecx, edi
rep stosb
jmp _lOptCC_RemVar
;;----------------
;;----------------
;;----------------
;;----------------
;; parse code
_lOptCC_RemParse:
pop esi
pop edi
add esi, 04h
add edi, 04h
_lOptCC_RemParseEX:
lodsb
cmp al, 02h
je _lOptCC_RemParseEX
test al, al
jz _lOptCC_RemParseEnd
stosb
jmp _lOptCC_RemParseEX
_lOptCC_RemParseEnd:
add esi, 03h
;;----------------
;;----------------
;;----------------
_lOptCC_NoRemove:
;;----------------
;;----------------
mov _dCurrStr, offset _sProg_08
mov eax, 64h
call _lSetProg
;;----------------
sub edi, esi ;; edi = new script size
retn
;;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;; optimize endp
;;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;; proc parse
;;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;; esi=Src
;; edi=Dest
;; stack:
;;
;; edi
;; mem
;; mem
;; archive
;; attributes
_lMapParseCode:
;;----------------
mov _dCurrStr, offset _sProg_01
mov eax, 10h
call _lSetProg
;;----------------
;;----------------
;; comments removing
;;----------------
;; utf 8 bom
cmp word ptr [esi], 0bbefh
jne _lCrStr
cmp byte ptr [esi+02h], 0bfh
jne _lCrStr
add esi, 03h
;;----------------
_lCrStr:
push 00h ;; for safe
mov _dStackPos, esp ;; save stack
mov dword ptr [_dErrorCodeStart], edi ;; for syntax error
jmp _lCRScanLineSx
;;----------------
;; line start
_lCRScanLine:
;;----------------
cmp dword ptr [_hBtn], 00h
je _lCRScanLineFx
mov dword ptr [_hBtn], 00h
lea eax, [edi+02h]
push eax
mov dword ptr [edi], 78016101h ;; #a#x
add edi, 08h
jmp _lCRScanLineDx
;;----------------
_lCRScanLineFx:
cmp word ptr [edi-02h], 0a0dh ;; nl
je _lCRScanLineDx
cmp byte ptr [edi-01h], 00h
je _lCRScanLineDx
mov word ptr [edi], 0a0dh ;; nl
add edi, 02h
_lCRScanLineDx:
cmp byte ptr [esi], 0ah
jne _next
inc esi
jmp _lCRScanLineDx
_lbl:
cmp byte ptr [esi], 0dh
jne _lCRScanLineSx
inc esi
jmp _lCRScanLineDx
_lCRScanLineSx: ;; <---
mov eax, dword ptr [esi]
;;----------------
;;----------------
;; remove bs and tabs in line start
_lbl:
cmp al, 09h
jne _next
inc esi
jmp _lCRScanLineSx
_lbl:
cmp al, 20h
jne _next
inc esi
jmp _lCRScanLineSx
;;----------------
;;----------------
;; define test
_lbl:
cmp byte ptr [_bIsPPCEn], 00h
je _next
cmp eax, 69666564h ;; defi
jne _next
cmp word ptr [esi+04h], 656eh ;; ne
jne _next
cmp byte ptr [esi+06h], 20h
jg _next
_lDefErrFGS:
mov dword ptr [_xErrorTable], offset _sErr_FailedDef
mov dword ptr [_xErrorTable+04h], edi
_lDefErrFGSEX:
movsb
cmp word ptr [esi], 0a0dh ;; nl
jne _lDefErrFGSEX
mov dword ptr [_xErrorTable+08h], edi
jmp _lErrIn
;;----------------
;;----------------
;; pre proc
_lbl:
cmp al, 23h ;; #
jne _next
;;----------------
;; #if
cmp eax, 20666923h ;; #if_
jne _lCRElifDX
mov byte ptr [_bIsPPCEn], al
mov dword ptr [_hBtn], eax
mov word ptr [edi], 6901h ;; #i
add esi, 02h
add edi, 02h
jmp _lCRScan
_lCRElifDX:
cmp word ptr [esi+01h], 6669h ;; if
jne _lCRElifOS
;;----------------
;; error
_lCRErrPrePorc:
mov dword ptr [_xErrorTable], offset _sErr_PreProc
mov dword ptr [_xErrorTable+04h], edi
_lCRErrPrePorcEX:
movsb
cmp word ptr [esi], 0a0dh ;; nl
jne _lCRErrPrePorcEX
mov dword ptr [_xErrorTable+08h], edi
jmp _lErrIn
;;----------------
;;----------------
;;----------------
;; #else #elseif
;;----------------
;; close
_lCRElifOX:
mov dword ptr [_hBtn], eax
_lCRElifFF:
mov word ptr [esi], 6901h ;; #i
pop eax
test eax, eax
jz _lBlockErr
mov dword ptr [eax+02h], edi
mov word ptr [edi], 7901h ;; #y
mov dword ptr [edi+02h], eax
mov dword ptr [edi+06h], 06060606h ;; ex backspace
mov dword ptr [edi+0ah], 06060606h
mov word ptr [edi+0eh], 0a0dh ;; new line
add edi, 10h
movsd
jmp _lCRScan
;;----------------
_lCRElifOS:
cmp eax, 736c6523h ;; #els
jne _lCRElifER
cmp dword ptr [esi+04h], 20666965h ;; eif_
je _lCRElifOX
cmp byte ptr [esi+04h], 65h ;; e
jne _lCRElifER
cmp byte ptr [esi+05h], 20h
jbe _lCRElifOX
;;----------------
;;----------------
;; error
_lCRElifER:
cmp eax, 72726523h ;; #err
jne _lCRElif_AAX
cmp word ptr [esi+04h], 726fh ;; or
jne _lCRElif_AAX
cmp byte ptr [esi+06h], 22h
jg _lCRElif_AAX
mov word ptr [esi], 6701h ;; #g
movsd
movsw
jmp _lCRScan
;;----------------
;;----------------
_lCRElif_AAX:
cmp eax, 66656423h ;; #def
je _lCRElif_SOX
cmp eax, 74657323h ;; #set
je _lCRElif_OOX
cmp eax, 646e7523h ;; #und
je _lCRElif_OOX
cmp eax, 636e6923h ;; #inc
jne _lCRElif_GU
_lCRElif_OOX:
inc esi
jmp _lCRScanLineSx
_lCRElif_SOX:
inc esi
cmp byte ptr [_bIsPPCEn], 00h
je _lCRScanLineSx
jmp _lDefErrFGS
;;----------------
;;----------------
;; guard
_lCRElif_GU:
cmp eax, 61756723h ;; #gua
jne _lCRElifFX
cmp word ptr [esi+04h], 6472h ;; rd
jne _lCRElifFX
add esi, 06h
xor eax, eax
_lCRElif_GU_01:
inc esi
cmp byte ptr [esi], 20h ;; bs
je _lCRElif_GU_01
cmp byte ptr [esi], 09h ;; tab
je _lCRElif_GU_01
mov ebp, offset _bFuncCodeLocals
_lCRElif_GU_02:
mov edx, esi
_lCRElif_GU_03:
mov al, byte ptr [edx]
cmp al, byte ptr [ebp]
jne _lCRElif_GU_04
inc ebp
inc edx
jmp _lCRElif_GU_03
_lCRElif_GU_04:
cmp byte ptr [ebp], 00h
jne _lCRElif_GU_Next
cmp byte ptr [_bAscii_00+eax], ah
je _lRetnGuard
_lCRElif_GU_Next:
inc ebp
cmp byte ptr [ebp], 00h
jne _lCRElif_GU_Next
inc ebp
cmp byte ptr [ebp], 00h
jne _lCRElif_GU_02
_lCRElif_GU_Add:
mov al, byte ptr [esi]
cmp byte ptr [_bAscii_00+eax], ah
je _lCRScan
mov byte ptr [ebp], al
inc esi
inc ebp
jmp _lCRElif_GU_Add
;;----------------
;;----------------
;; #endif
_lCRElifFX:
cmp eax, 646e6523h ;; #end
jne _lCRErrPrePorc
cmp word ptr [esi+04h], 6669h ;; if
jne _lCRErrPrePorc
mov byte ptr [_bIsPPCEn], 00h
jmp _lCRElifFF
;;----------------
;;----------------
;;----------------
;; textmacros
;;----------------
;; start
_lCRTTInOnce:
cmp dword ptr [esi+08h], 636e5f6fh ;; o_nc
jne _next
cmp word ptr [esi+0ch], 2065h ;; e_
jne _next
add esi, 0dh
jmp _lCRTTInOX
_lbl:
cmp eax, 74786574h ;; text
jne _next
cmp dword ptr [esi+04h], 7263616dh ;; macr
jne _next
cmp word ptr [esi+08h], 206fh ;; o_
jne _lCRTTInOnce
add esi, 09h
_lCRTTInOX:
mov dword ptr [edi-04h], 69666564h ;; defi
mov word ptr [edi], 656eh ;; ne
add edi, 02h
mov eax, esi
_lCRTTIn:
inc eax
cmp byte ptr [eax], 0ah ;; nl
je _lCRTTInEnd
cmp dword ptr [eax], 656b6174h ;; take
jne _lCRTTIn
cmp word ptr [eax+04h], 2073h ;; s_
jne _lCRTTIn
mov dword ptr [eax], 20202020h ;; bs
mov word ptr [eax+04h], 1320h ;; _(
_lCRTTInEX:
inc eax
cmp byte ptr [eax], 2ch ;; ,
jne _lCRTTInFF
mov byte ptr [eax], 14h
jmp _lCRTTInEX
_lCRTTInFF:
cmp byte ptr [eax], 0ah ;; nl
jne _lCRTTInEX
cmp byte ptr [eax-01h], 0dh
jne _lCRTTInFX
mov byte ptr [eax-01h], 20h ;; bs
_lCRTTInFX:
mov byte ptr [eax], 11h
jmp _lCRScan
_lCRTTInEnd:
cmp byte ptr [eax-01h], 0dh
jne _lCRTTInDX
mov byte ptr [eax-01h], 20h
_lCRTTInDX:
mov byte ptr [eax], 12h
jmp _lCRScan
;;----------------
;;----------------
;; end
_lbl:
cmp eax, 74646e65h ;; endt
jne _next
cmp dword ptr [esi+04h], 6d747865h ;; extm
jne _next
cmp dword ptr [esi+08h], 6f726361h ;; acro
jne _next
cmp byte ptr [esi+0ch], 20h ;; _
jg _next
sub edi, 04h
add esi, 0ch
pop eax
test eax, eax
jz _lBlockErr
cmp word ptr [edi-02h], 0a0dh ;; new line
je _lCLTMNE
mov word ptr [edi], 0a0dh ;; new line
add edi, 02h
_lCLTMNE:
mov dword ptr [eax+02h], edi
mov word ptr [edi], 7901h ;; #y
mov dword ptr [edi+02h], eax
mov dword ptr [edi+06h], 06060606h ;; ex backspace
mov dword ptr [edi+0ah], 06060606h
mov word ptr [edi+0eh], 0a0dh ;; new line
add edi, 10h
jmp _lCRScanLine
;;----------------
;;----------------
;; run
_lbl:
cmp eax, 746e7572h ;; runt
jne _next
cmp dword ptr [esi+04h], 6d747865h ;; extm
jne _next
cmp dword ptr [esi+08h], 6f726361h ;; acro
jne _next
cmp byte ptr [esi+0ch], 20h ;; _
jne _next
lea eax, [esi+0ah]
sub edi, 04h
add esi, 0dh
mov ebx, eax
_lCRMacroRun:
inc eax
cmp byte ptr [eax], 22h ;; "
jne _lCRMacroRunEX
test ebx, ebx
jz _lCRMacroRunB
_lCRMacroRunA:
mov byte ptr [eax], 0bh
xor ebx, ebx
;;----------------
;; special for Strilanc
cmp word ptr [eax+01h], 2f2fh ;; //
jne _lCRMacroRun
mov word ptr [eax+01h], 3501h ;; #5
jmp _lCRMacroRun
;;----------------
_lCRMacroRunB:
mov byte ptr [eax], 0bh
inc ebx
jmp _lCRMacroRun
_lCRMacroRunEX:
cmp byte ptr [eax], 0ah ;; nl
jne _lCRMacroRun
cmp ebx, 01h
jbe _lCRScan
_lCRMacroRunSF:
dec eax
cmp byte ptr [eax], 0ah
je _lCRScan
cmp byte ptr [eax], 28h ;; (
je _lCRMacroRunDF
cmp byte ptr [eax], 29h ;; )
jne _lCRMacroRunSF
_lCRMacroRunDF:
mov byte ptr [eax], 20h ;; bs
jmp _lCRMacroRunSF
;;----------------
;;----------------
;;----------------
;; zinc and boa
_lbl:
cmp eax, 636e697ah ;; zinc
jne _next
cmp byte ptr [esi+04h], 20h
jg _next
jmp _lCRFXSyn
_lbl:
cmp ax, 6f62h ;; bo
jne _next
cmp byte ptr [esi+02h], 61h ;; a
jne _next
cmp byte ptr [esi+03h], 20h
jg _next
_lCRFXSyn:
mov eax, dword ptr [_dSynDesc]
mov dword ptr [eax], esi
mov dword ptr [edi-04h], 0a0d3901h ;; #9 nl
_lCREndFXSyn:
inc esi
;; cmp byte ptr [esi], 00h
;; je
cmp dword ptr [esi], 7a646e65h ;; endz
jne _lCREndFXSynEX
cmp word ptr [esi+04h], 6e69h ;; in
jne _lCREndFXSynEX
cmp byte ptr [esi+06h], 63h ;; c
jne _lCREndFXSynEX
cmp byte ptr [esi+07h], 20h ;; bs
jb _lCREndFXSynDX
_lCREndFXSynEX:
cmp dword ptr [esi], 62646e65h ;; endb
jne _lCREndFXSyn
cmp word ptr [esi+04h], 616fh ;; oa
jne _lCREndFXSyn
cmp byte ptr [esi+06h], 20h ;; bs
jg _lCREndFXSyn
_lCREndFXSynDX:
inc esi
cmp word ptr [esi-02h], 0a0dh
jne _lCREndFXSynDX
mov dword ptr [eax+04h], esi
add eax, 08h
mov dword ptr [_dSynDesc], eax
jmp _lCRScanLineSx
;;----------------
;;----------------
;; debug?
_lbl:
cmp eax, 75626564h ;; debu
jne _next
cmp byte ptr [esi+04h], 67h ;; g
jne _next
cmp byte ptr [esi+05h], 20h ;; bs or tab
jg _next
jmp dword ptr [_dDbgOff]
_lCRDebugRem:
inc esi
cmp byte ptr [esi], 0ah ;; nl
jne _lCRDebugRem
jmp _lCRScanLine
_lCRDebugAdd:
add esi, 06h
jmp _lCRScanLineSx
;;----------------
;;----------------
;; include?
_lbl:
cmp eax, 6c636e69h ;; incl
jne _lCRScanEx
cmp dword ptr [esi+04h], 20656475h ;; ude_
jne _lCRScanEx
lea ebx, [esi+07h]
_lIncSearch:
inc ebx
cmp byte ptr [ebx], 22h ;; "
je _lIncParveName
cmp byte ptr [ebx], 20h ;; bs
je _lIncSearch
cmp byte ptr [ebx], 09h ;; tab
je _lIncSearch
;;----------------
;; error
mov dword ptr [_xErrorTable], offset _sErr_Base
movsd
movsd
mov dword ptr [_xErrorTable+04h], edi
_lIncludeErrEX:
movsb
cmp word ptr [esi], 0a0dh
jne _lIncludeErrEX
mov dword ptr [_xErrorTable+08h], edi
jmp _lErrIn
;;----------------
_lIncParveName:
mov edx, dword ptr [_dCurrDirEnd]
mov ebp, dword ptr [_dMapPathEnd]
mov ecx, ebx
inc ebx
_lIncLib:
inc ecx
mov al, byte ptr [ecx]
inc edx
inc ebp
cmp al, 22h ;; "
mov byte ptr [edx], al
mov byte ptr [ebp], al
jne _lIncLib
mov byte ptr [ecx], 00h
mov byte ptr [edx], 00h
mov byte ptr [ebp], 00h
lea esi, [ecx+01h] ;; new sorc script position
;;----------------
;; open file
push 00h
push FILE_ATTRIBUTE_NORMAL
push OPEN_EXISTING
push 00h
push FILE_SHARE_READ
push GENERIC_READ
push offset _sCurrDir
call _imp__CreateFileA@28
inc eax
jnz _lIncNoReopen
push 00h
push FILE_ATTRIBUTE_NORMAL
push OPEN_EXISTING
push 00h
push FILE_SHARE_READ
push GENERIC_READ
push offset _sMapPathEX
call _imp__CreateFileA@28
inc eax
jnz _lIncNoReopen
push 00h
push FILE_ATTRIBUTE_NORMAL
push OPEN_EXISTING
push 00h
push FILE_SHARE_READ
push GENERIC_READ
push ebx
call _imp__CreateFileA@28
inc eax
jnz _lIncNoReopen
;;----------------
;; cannot open file
mov ecx, esi
mov dword ptr [_xErrorTable], offset _sErr_CantOpenFile
mov dword ptr [_xErrorTable+04h], edi
_lIncludeErr:
dec esi
cmp byte ptr [esi-01h], 0ah
jne _lIncludeErr
sub ecx, esi
rep movsb
mov byte ptr [edi-01h], 22h ;; "
mov dword ptr [_xErrorTable+08h], edi
jmp _lErrIn
;;----------------
;;----------------
;;----------------
;; read file
_lIncNoReopen:
dec eax ;; restore eax
sub esp, 08h ;; old esi, mem handle, mem address
mov ebx, eax ;; ebx = file handle
push esi ;; old script position
push 00h
push eax
call _imp__GetFileSize@8
mov ebp, eax ;; ebp = file size
push 00h ;; ---> _imp__ReadFile@20
push offset _dBuffer ;; ---> _imp__ReadFile@20
push eax ;; ---> _imp__ReadFile@20
add eax, 04h
push eax
push GMEM_ZEROINIT
call _imp__GlobalAlloc@8
push eax
mov dword ptr [esp+14h], eax
call _imp__GlobalLock@4
mov esi, eax
mov dword ptr [esp+14h], eax
add ebp, eax
push eax
push ebx
call _imp__ReadFile@20
push ebx
call _imp__CloseHandle@4
mov dword ptr [ebp], 00007201h ;; #r__
push 00h ;; for safe
jmp _lCRScanLine
;;----------------
;;----------------
;;----------------
;; remove bs
_lBSRemBase equ $
_lCRScanBS:
inc esi
_lCRScan:
mov eax, dword ptr [esi]
_lCRScanEx: ;; <---
cmp al, 20h
jne _next
;;----------------
;; check prew blocks
cmp word ptr [edi-06h], 7801h ;; #x
je _lCRScanBS
cmp word ptr [edi-06h], 7901h ;; #y
je _lCRScanBS
;;----------------
_lCRBSStart: ;; test previous char
xor ebx, ebx
mov bl, byte ptr [edi-01h]
mov bl, byte ptr [_bAscii_01+ebx]
add ebx, _lBSRemBase
jmp ebx
_lCRBSNext: ;; test next chaqr
xor ebx, ebx
mov bl, ah
mov bl, byte ptr [_bAscii_02+ebx]
add ebx, _lBSRemBase
jmp ebx
_lCRBSAdd:
mov byte ptr [edi], 20h ;; _
inc esi
inc edi
jmp _lCRScan
_lCRIncDec:
cmp ah, 2bh ;; ++
je _lCRBSAdd
cmp ah, 2dh ;; --
je _lCRBSAdd
jmp _lCRScanBS
_lbl:
cmp al, 09h ;; tab
je _lCRBSStart
;;----------------
;;----------------
;; new line
cmp al, 0ah
je _lCRScanLine
cmp al, 0dh
je _lCRScanLine
;;----------------
;;----------------
;; error with 80+ char
cmp al, 80h
jb _next
mov dword ptr [_xErrorTable], offset _sErr_BadChar
mov dword ptr [_xErrorTable+04h], edi
movsb
mov dword ptr [_xErrorTable+08h], edi
jmp _lErrIn
;;----------------
;;----------------
;; ascii int
_lbl:
cmp al, 27h ;; '
jne _next
xor eax, eax
mov al, byte ptr [edi-01h]
inc esi
cmp byte ptr [_bAscii_00+eax], ah
je _lCRASCII_FX
mov byte ptr [edi], 20h ;; bs
inc edi
_lCRASCII_FX:
mov word ptr [edi], 7830h ;; 0x
add edi, 02h
mov ecx, 05h
_lCRASCII:
mov al, byte ptr [esi]
cmp al, 27h ;; '
je _lCRASCII_EX
shr eax, 04h
and al, 0fh
cmp al, 0ah
sbb al, 69h
das
stosb
mov al, byte ptr [esi]
and al, 0fh
cmp al, 0ah
sbb al, 69h
das
stosb
inc esi
dec ecx
jnz _lCRASCII
;;----------------
;; error
mov dword ptr [_xErrorTable], offset _sErr_IncorrectLiteral
dec edi
mov dword ptr [_xErrorTable+04h], edi
inc edi
mov dword ptr [_xErrorTable+08h], edi
jmp _lErrIn
;;----------------
_lCRASCII_EX:
inc esi
jmp _lCRScan
;;----------------
;;----------------
;; textmacro fx
_lbl:
cmp al, 11h
jne _next
inc esi
lea eax, [edi+06h]
mov dword ptr [edi], 74747474h ;; tttt
mov dword ptr [edi+04h], 78013d29h ;; )={
add edi, 0ch
push eax
jmp _lCRScan
_lbl:
cmp al, 12h
jne _next
inc esi
lea eax, [edi+01h]
mov dword ptr [edi], 0078013dh ;; ={
add edi, 07h
push eax
jmp _lCRScan
_lbl:
cmp al, 13h
jne _next
inc esi
mov byte ptr [edi], 28h ;; (
mov dword ptr [edi+01h], 74747474h
add edi, 05h
jmp _lCRScan
_lbl:
cmp al, 14h
jne _next
_lCRGFDD:
inc esi
cmp byte ptr [esi], 09h ;; tab
je _lCRGFDD
cmp byte ptr [esi], 20h ;; bs
je _lCRGFDD
; inc edi
; _lCRGFGG:
; dec edi
; cmp byte ptr [edi], 20h
mov dword ptr [edi], 74747474h ;; tttt
mov byte ptr [edi+04h], 2ch ;; ,
mov dword ptr [edi+05h], 74747474h ;; tttt
add edi, 09h
jmp _lCRScan
;;----------------
;;----------------
;; comments? vJass parser instruction?
_lbl:
cmp ax, 2f2fh ;; //
jne _lCRCommTest_01
cmp byte ptr [esi+02h], 21h ;; !
jne _lComm_00
mov dword ptr [edi], 20212f2fh ;; //!_
add edi, 04h
add esi, 03h
jmp _lCRScanLineSx
_lComm_00:
inc esi
cmp byte ptr [esi], 00h
je _lCREnd
cmp word ptr [esi], 0a0dh
jne _lComm_00
jmp _lCRScanLine
_lCRCommTest_01:
cmp ax, 2a2fh ;; /*
jne _next
mov edx, 01h
_lCRCommNextEx:
inc esi
_lCRCommNext:
inc esi
cmp byte ptr [esi], 00h
je _lCRErrorComm
cmp word ptr [esi], 2f2fh ;; //
jne _lCRCommNextX
inc esi
_lCRCommRemX:
inc esi
cmp byte ptr [esi], 00h
je _lCREnd
cmp word ptr [esi], 0a0dh
jne _lCRCommRemX
jmp _lCRCommNextEx
_lCRCommNextX:
cmp word ptr [esi], 2f2ah ;; */
je _lCRCommSX
cmp word ptr [esi], 2a2fh ;; /*
jne _lCRCommNext
inc edx
jmp _lCRCommNextEx
_lCRCommSX:
dec edx
jnz _lCRCommNextEx
add esi, 02h
jmp _lCRScan
;;----------------
;; error
_lCRErrorComm:
mov dword ptr [_xErrorTable], offset _sErr_UnclosedComment
mov dword ptr [_xErrorTable+04h], edi
mov dword ptr [edi], 2a2fh ;; /*
add edi, 02h
mov dword ptr [_xErrorTable+08h], edi
jmp _lErrIn
;;----------------
;;----------------
;;----------------
;; textmacro arg
_lbl:
cmp al, 24h ;; $
jne _next
xor eax, eax
mov ebx, esi
inc esi
_lCRMArgFX:
inc ebx
mov al, byte ptr [ebx]
cmp byte ptr [_bAscii_00+eax], ah
jne _lCRMArgFX
cmp byte ptr [ebx], 24h ;; $
je _lCRMArgSF
mov word ptr [edi], 7830h ;; 0x
add edi, 02h
jmp _lCRScan
_lCRMArgSF:
mov al, byte ptr [esi-02h]
cmp byte ptr [_bAscii_00+eax], ah
jz _lCRMArg_00
mov word ptr [edi], 2323h ;; ##
mov dword ptr [edi+02h], 74747474h ;; tttt
add edi, 06h
jmp _lCRMArg_01
_lCRMArg_00:
mov dword ptr [edi], 74747474h ;; tttt
add edi, 04h
_lCRMArg_01:
movsb
cmp esi, ebx
jb _lCRMArg_01
inc esi
mov al, byte ptr [esi]
cmp byte ptr [_bAscii_00+eax], ah
je _lCRMArg_02
mov dword ptr [edi], 74747474h ;; tttt
mov word ptr [edi+04h], 2323h ;; ##
add edi, 06h
jmp _lCRScan
_lCRMArg_02:
mov dword ptr [edi], 74747474h ;; tttt
add edi, 04h
cmp byte ptr [esi], 24h ;; $
jne _lCRScan
mov word ptr [edi], 2323h ;; ##
add edi, 02h
jmp _lCRScan
_lbl:
cmp ax, 3501h ;; #5
jne _next
add esi, 02h
mov word ptr [edi], 2f2fh ;; //
add edi, 02h
jmp _lCRScan
;;----------------
;;----------------
;; error with */
_lbl:
cmp ax, 2f2ah ;; */
jne _next
mov dword ptr [_xErrorTable], offset _sErr_BadComment
mov dword ptr [_xErrorTable+04h], edi
mov dword ptr [edi], 2f2ah ;; /*
add edi, 02h
mov dword ptr [_xErrorTable+08h], edi
jmp _lErrIn
;;----------------
;;----------------
;; line ex
_lbl:
cmp al, 5ch ;; \
jne _next
mov edx, esi
_lCRSBS_00:
inc edx
cmp byte ptr [edx], 20h ;; bs
je _lCRSBS_00
cmp byte ptr [edx], 09h ;; tab
je _lCRSBS_00
cmp byte ptr [edx], 5ch ;; \
je _lCRSBS_00
cmp word ptr [edx], 2f2fh ;; //
je _lCRSBS_02
cmp word ptr [edx], 6201h ;; #b
je _lCRScanBS
cmp word ptr [edx], 0a0dh ;; nl
je _lCRSBS_01
_lCRSBS_03:
movsb
jmp _lCRScan
_lCRSBS_01:
inc esi
mov word ptr [edx], 6201h ;; #b
jmp _lCRScan
_lCRSBS_02:
cmp byte ptr [edx+02h], 21h ;; !
je _lCRSBS_03
_lCRSBS_04:
mov byte ptr [edx], 20h ;; bs
inc edx
cmp word ptr [edx], 0a0dh ;; nl
jne _lCRSBS_04
inc esi
mov word ptr [edx], 6201h ;; #b
jmp _lCRScan
;;----------------
;;----------------
;; ex new line
_lbl:
cmp al, 3bh ;; ;
jne _next
inc esi
jmp _lCRScanLine
;;----------------
;;----------------
;; blocks
;;----------------
;; x
_lbl:
cmp al, 7bh ;; {
jne _next
_lCRBlockCheck:
cmp word ptr [edi-02h], 0a0dh
jne _lCRBlockCheckEnd
sub edi, 02h
_lCRBlockCheckEnd:
push edi
mov word ptr [edi], 7801h ;; #x
inc esi
add edi, 06h
jmp _lCRScan ;; ???
;;----------------
;;----------------
;; y
_lbl:
cmp al, 7dh ;; }
jne _next
_lCRCloseBlock:
pop eax
test eax, eax
jz _lBlockErr
cmp word ptr [edi-02h], 0a0dh ;; new line
je _lCLAddNE
mov word ptr [edi], 0a0dh ;; new line
add edi, 02h
_lCLAddNE:
mov dword ptr [eax+02h], edi
mov word ptr [edi], 7901h ;; #y
mov dword ptr [edi+02h], eax
mov dword ptr [edi+06h], 06060606h ;; ex backspace
mov dword ptr [edi+0ah], 06060606h
mov word ptr [edi+0eh], 0a0dh ;; new line
inc esi
add edi, 10h
jmp _lCRScanLine
;;----------------
;; error
_lBlockErr:
mov dword ptr [_xErrorTable], offset _sErr_BadBlock
mov dword ptr [_xErrorTable+04h], edi
mov byte ptr [edi], 7dh ;; }
inc edi
mov dword ptr [_xErrorTable+08h], edi
jmp _lErrIn
;;----------------
;;----------------
;;----------------
;;----------------
;; return from included file
_lbl:
cmp ax, 7201h ;; #r
jne _next
_lRetnGuard:
pop eax ;; for safe
test eax, eax
jnz _lIncRetErr
pop esi
call _imp__GlobalUnlock@4
call _imp__GlobalFree@4
jmp _lCRScanLine
;;----------------
;; error
_lIncRetErr:
mov dword ptr [_xErrorTable], offset _sErr_BadBlockInFile
mov dword ptr [_xErrorTable+04h], eax
inc eax
mov dword ptr [_xErrorTable+08h], eax
jmp _lErrIn
;;----------------
;;----------------
;;----------------
;; #b
_lbl:
cmp ax, 6201h ;; #b
jne _next
add esi, 02h
mov byte ptr [edi], 20h ;; bs
inc edi
jmp _lCRScan
;;----------------
;;----------------
;; strings
_lbl:
cmp al, 22h ;; "
jne _next
mov ebp, edi
mov ecx, 0800h
jmp _lCRStringDX
_lCRStringEX:
movsb
_lCRStringDX:
movsb
_lCRStringSX:
cmp word ptr [esi], 0a0dh ;; nl
jne _lCRStringNext
mov word ptr [edi], 6e5ch ;; \n
add esi, 02h
add edi, 02h
jmp _lCRStringSX
_lCRStringNext:
cmp byte ptr [esi], 00h ;; null
je _lCRStringError
cmp byte ptr [esi], 5ch ;; \
je _lCRStringEX
dec ecx
jz _lCRStringError
cmp byte ptr [esi], 22h ;; "
jne _lCRStringDX
movsb
jmp _lCRScan
;;----------------
;; not closed string
_lCRStringError:
mov dword ptr [_xErrorTable], offset _sErr_UnclosedString
mov dword ptr [_xErrorTable+04h], ebp
mov dword ptr [_xErrorTable+08h], edi
jmp _lErrIn
;;----------------
;;----------------
;;----------------
;; null and other
_lbl:
cmp byte ptr [esi], 00h ;; null
je _lCREnd
movsb
jmp _lCRScan
;;----------------
;;----------------
_lCREnd:
cmp dword ptr [_dStackPos], esp
je _next
;;----------------
;; error
mov dword ptr [_xErrorTable], offset _sErr_UnclosedBlock
pop eax
add eax, 02h
mov dword ptr [_xErrorTable+04h], eax
inc eax
mov dword ptr [_xErrorTable+08h], eax
jmp _lErrIn
;;----------------
_lbl:
pop eax ;; for safe
;;----------------
mov esi, dword ptr [esp+04h]
add edi, 04h
mov dword ptr [_dSynDesc], offset _xSynDesc ;; reset
push edi
;;----------------
mov _dCurrStr, offset _sProg_02
mov eax, 28h
call _lSetProg
;;----------------
;; build define block
dec esi
mov ebx, offset _lDefX
;;----------------
;; sysdefines
;;----------------
;; date time
push offset _xSysTime
call _imp__GetLocalTime@4
mov ecx, 0ah
xor eax, eax
xor edx, edx
mov ax, word ptr [_xSysTime]
div ecx
add dl, 30h
mov byte ptr [_sDate+03h], dl
xor edx, edx
div ecx
add dl, 30h
mov byte ptr [_sDate+02h], dl
xor edx, edx
div ecx
add dl, 30h
mov byte ptr [_sDate+01h], dl
xor edx, edx
div ecx
add dl, 30h
mov byte ptr [_sDate], dl
mov byte ptr [_sDate+04h], 2eh ;; .
mov al, byte ptr [_xSysTime+02h]
xor edx, edx
div ecx
add dl, 30h
mov byte ptr [_sDate+06h], dl
xor edx, edx
div ecx
add dl, 30h
mov byte ptr [_sDate+05h], dl
mov byte ptr [_sDate+07h], 2eh ;; .
mov al, byte ptr [_xSysTime+06h]
xor edx, edx
div ecx
add dl, 30h
mov byte ptr [_sDate+09h], dl
xor edx, edx
div ecx
add dl, 30h
mov byte ptr [_sDate+08h], dl
mov byte ptr [_sDate+0ah], 03h
mov al, byte ptr [_xSysTime+08h]
xor edx, edx
div ecx
add dl, 30h
mov byte ptr [_sTime+01h], dl
xor edx, edx
div ecx
add dl, 30h
mov byte ptr [_sTime], dl
mov byte ptr [_sTime+02h], 3ah ;; :
mov al, byte ptr [_xSysTime+0ah]
xor edx, edx
div ecx
add dl, 30h
mov byte ptr [_sTime+04h], dl
xor edx, edx
div ecx
add dl, 30h
mov byte ptr [_sTime+03h], dl
mov byte ptr [_sTime+05h], 3ah ;; :
mov al, byte ptr [_xSysTime+0ch]
xor edx, edx
div ecx
add dl, 30h
mov byte ptr [_sTime+07h], dl
xor edx, edx
div ecx
add dl, 30h
mov byte ptr [_sTime+06h], dl
mov byte ptr [_sTime+08h], 03h
mov dword ptr [ebx], offset _sDateL
mov dword ptr [ebx+04h], offset _sDate
mov dword ptr [ebx+10h], offset _sTimeL
mov dword ptr [ebx+14h], offset _sTime
;;----------------
;;----------------
;; weather
mov dword ptr [ebx+20h], offset _sWeatherL
mov dword ptr [ebx+24h], offset _sWether
;;----------------
;;----------------
;; version
_lbl:
mov eax, dword ptr [_dWarVerSL]
mov dword ptr [ebx+30h], offset _sWarVer
mov dword ptr [ebx+34h], eax
;;----------------
;;----------------
;; count
mov dword ptr [ebx+40h], offset _sCountL
mov dword ptr [ebx+44h], offset _sCntSpec
;;----------------
;;----------------
;; funcname
mov dword ptr [ebx+50h], offset _sFuncNameL
mov dword ptr [ebx+54h], offset _sFuncName
;;----------------
;;----------------
;; debug
cmp dword ptr [_dDbgOff], offset _lCRDebugAdd
jne _next
mov dword ptr [ebx+60h], offset _sDebugL
mov dword ptr [ebx+64h], offset _sTrue
add ebx, 10h
;;----------------
_lbl:
add ebx, 60h
;;----------------
xor ecx, ecx ;; current scope = 00h
mov _dStackPos, esp ;; save stack
;;----------------
;; line start
_lLineStart:
inc esi
_lLineStartEx:
mov eax, dword ptr [esi]
;;----------------
;;----------------
;; define in
_lbl:
cmp eax, 69666564h ;; defi
jne _next
cmp word ptr [esi+04h], 656eh ;; ne
jne _next
cmp byte ptr [esi+06h], 20h ;; _
jg _lDefInEX
mov eax, esi
jne _lBlockCheckPre
inc esi
_lBlockCheckPre:
add esi, 06h
cmp word ptr [esi], 0a0dh ;; nl
jne _lBlockCheck_01 ;; single constant or block
add esi, 02h
mov edx, offset _lDefEx
mov word ptr [eax], 6401h ;; #d
jmp _lDefEx
_lBlockCheck_01:
cmp word ptr [esi], 7801h ;; #x
jne _lBlockCheck_02 ;; single constant
mov word ptr [eax], 6401h ;; #d
mov eax, dword ptr [esi+02h]
add esi, 06h
mov dword ptr [eax], 6e650a0dh ;; __en
mov dword ptr [eax+04h], 66656464h ;; ddef
mov dword ptr [eax+08h], 20656e69h ;; ine_
mov edx, offset _lDefEx
jmp _lDefEx
_lBlockCheck_02:
mov edx, offset _lLineStartEx
mov word ptr [eax], 6301h ;; #c
jmp _lDefEx
_lDefInEX:
cmp byte ptr [esi+06h], 3ch ;; <
jne _next
mov word ptr [esi], 6301h ;; #c
mov edx, offset _lLineStartEx
add esi, 06h
jmp _lDefEx
;;----------------
;;----------------
;; enum in
_lbl:
cmp eax, 6d756e65h ;; enum
jne _next
cmp byte ptr [esi+04h], 28h ;; (
je _lEnumInEX
cmp byte ptr [esi+04h], 20h ;; bs
jg _next
je _lEnumInBase
mov ebp, offset _dEnumDefTable-04h
jmp _lEnumInBlock
;;----------------
;;----------------
;; undef
_lbl:
cmp eax, 65646e75h ;; unde
jne _next
cmp word ptr [esi+04h], 2066h ;; f_
je _lUndefNorm
cmp word ptr [esi+04h], 3c66h ;; f<
jne _next
;;----------------
;; hard
mov word ptr [esi], 7501h ;; #u
add esi, 06h
_lUndefHard:
inc esi
cmp byte ptr [esi], 3eh ;; >
jne _lUndefHard
mov byte ptr [esi], 02h
jmp _lLineStartEx
;;----------------
;;----------------
;; norm
_lUndefNorm:
mov word ptr [esi], 7501h ;; #u
add esi, 06h
_lUndefNormEX:
inc esi
cmp word ptr [esi], 0a0dh ;; nl
jne _lUndefNormEX
mov byte ptr [esi], 02h
jmp _lLineStartEx
;;----------------
;;----------------
;;----------------
;; setdef
_lbl:
cmp eax, 64746573h ;; setd
jne _next
cmp word ptr [esi+04h], 6665h ;; ef
jne _next
cmp byte ptr [esi+06h], 3ch ;; <
je _lSetdefHard
cmp byte ptr [esi+06h], 20h ;; bs
jne _next
push ebx
mov edx, offset _lSerdefExit
xor eax, eax
xor ebp, ebp
lea edi, [esi+02h]
mov byte ptr [esi], 08h ;; setdef
add esi, 06h
mov ebx, _dDefTableSD+_dDFSize
_lSetdef:
inc esi
mov al, byte ptr [esi]
cmp byte ptr [_bAscii_00+eax], ah ;; ah = 00h
jne _lSetdef
_lSetdefEX:
cmp byte ptr [esi], 3dh ;; =
je _lSetdefClose
cmp word ptr [esi], 2928h ;; ()
je _lSetdefFVEX
;;----------------
;; macro
mov byte ptr [esi], 02h
mov ebp, esi
_lSetdefArg:
inc esi
cmp byte ptr [esi], 3dh ;; =
jne _lSetdefArg
;;----------------
;;----------------
;; close setdef
_lSetdefClose:
mov byte ptr [esi], 02h
inc esi
cmp word ptr [esi], 7801h ;; #x
je _lSetdefMultiline
mov dword ptr [edi], esi
dec edi
mov dword ptr [_dDefTableSD+04h], esi
push edi
jmp _lDFFindValueEndRE ;; !!!
_lSetdefMultiline:
mov eax, dword ptr [esi+02h]
add esi, 06h
mov dword ptr [edi], esi
mov byte ptr [eax], 03h
jmp _lDFFindValueEndEG
;;----------------
_lSetdefFVEX:
add esi, 02h
jmp _lSetdefClose
_lSetdefHard:
push ebx
mov edx, offset _lSerdefExit
xor ebp, ebp
lea edi, [esi+02h]
mov byte ptr [esi], 08h ;; setdef
add esi, 06h
mov ebx, _dDefTableSD+_dDFSize
_lSetdefHardEX:
inc esi
cmp byte ptr [esi], 3eh ;; >
jne _lSetdefHardEX
mov byte ptr [esi], 02h
inc esi
jmp _lSetdefEX
;;----------------
;; restore ebx
_lSerdefExit:
pop edi
mov eax, dword ptr [_dDefTableSD+0ch]
mov byte ptr [edi], al
pop ebx
jmp _lLineStartEx
;;----------------
;;----------------
;;----------------
;; scope
_lbl:
cmp eax, 706f6373h ;; scop
jne _next
cmp byte ptr [esi+04h], 65h ;; e
jne _next
cmp byte ptr [esi+05h], 20h ;; _
jg _next
add esi, 05h
_lScopeIn:
inc esi
cmp word ptr [esi], 0a0dh
je _lLSIn
cmp word ptr [esi], 7801h ;; #x
jne _lScopeIn
mov eax, dword ptr [esi+02h]
mov dword ptr [esi], 05050505h
mov word ptr [esi+04h], 0a0dh
add esi, 04h
cmp word ptr [eax-02h], 0a0dh
je _lScopeInEX
mov word ptr [eax], 0a0dh
add eax, 02h
_lScopeInEX:
mov dword ptr [eax], 73646e65h ;; ends
mov dword ptr [eax+04h], 65706f63h ;; cope
_lLSIn:
push ecx
inc dword ptr [_dFreeScope]
mov ecx, _dFreeScope
lea eax, [offset _dScopeIn+ecx*04h]
mov dword ptr [eax], esi
jmp _lNextLineSx
;;----------------
;;----------------
;; library
_lbl:
cmp eax, 7262696ch ;; libr
jne _next
cmp dword ptr [esi+03h], 79726172h ;; rary
jne _next
cmp dword ptr [esi+07h], 636e6f5fh ;; _onc
jne _lLibExTest
cmp byte ptr [esi+0bh], 65h ;; e
jne _lLibExTest
cmp byte ptr [esi+0ch], 20h ;; _
jg _lLibExTest
add esi, 0eh
jmp _lLibInEX
_lLibExTest:
cmp byte ptr [esi+07h], 20h ;; _
jg _next
add esi, 08h
_lLibIn:
inc esi
_lLibInEX:
cmp word ptr [esi], 0a0dh
je short _lLSIn
cmp word ptr [esi], 7801h ;; #x
jne _lLibIn
mov eax, dword ptr [esi+02h]
mov dword ptr [esi], 05050505h
mov word ptr [esi+04h], 0a0dh
add esi, 04h
cmp word ptr [eax-02h], 0a0dh
je _lLibInSX
mov word ptr [eax], 0a0dh
add eax, 02h
_lLibInSX:
mov word ptr [eax], 6e65h ;; en
mov dword ptr [eax+02h], 62696c64h ;; dlib
mov dword ptr [eax+06h], 79726172h ;; rary
jmp _lLSIn
;;----------------
;;----------------
;; endscope
_lbl:
cmp eax, 73646e65h ;; ends
jne _next
cmp dword ptr [esi+04h], 65706f63h ;; cope
jne _next
cmp byte ptr [esi+08h], 20h ;; _
jg _next
;;----------------
;;----------------
;; scope/library out
_lOut:
test ecx, ecx
jz _lLibScpErr
lea eax, [offset _dScopeOut+ecx*04h]
mov dword ptr [eax], esi
pop ecx
jmp _lNextLineSx
;;----------------
;; error
_lLibScpErr:
mov dword ptr [_xErrorTable], offset _sErr_EndLibScope
mov dword ptr [_xErrorTable+04h], esi
_lLibScpErrEX:
inc esi
cmp word ptr [esi], 0a0dh ;; nl
jne _lLibScpErrEX
mov dword ptr [_xErrorTable+08h], esi
jmp _lErrIn
;;----------------
;;----------------
;;----------------
;; endlibrary
_lbl:
cmp eax, 6c646e65h ;; endl
jne _lNextLineSx
cmp dword ptr [esi+04h], 61726269h ;; ibra
jne _lNextLineSx
cmp word ptr [esi+08h], 7972h ;; ry
jne _lNextLineSx
cmp byte ptr [esi+0ah], 20h ;; _
jbe _lOut
;;----------------
;;----------------
;; search new line
_lNextLineEx:
inc esi
_lNextLineSx:
cmp word ptr [esi], 0a0dh ;; new line
je _next
cmp word ptr [esi], 7801h ;; #x
je _lNextLineDx
cmp word ptr [esi], 7901h ;; #y
je _lNextLineDx
cmp byte ptr [esi], 00h
jne _lNextLineEx
jmp _lScanEnd
_lbl:
inc esi
jmp _lLineStart
_lNextLineDx:
add esi, 06h
jmp _lLineStartEx ; _lNextLineSx
;;----------------
;;----------------
;; build enum
;;----------------
;; named enum
;;----------------
;; error
_lEnumInErr:
mov dword ptr [_xErrorTable], offset _sErr_Base
mov dword ptr [_xErrorTable+04h], esi
inc esi
mov dword ptr [_xErrorTable+08h], esi
jmp _lErrIn
;;----------------
_lEnumInEX:
xor eax, eax
add esi, 05h
mov dword ptr [_dBuffer], esi
mov ebp, offset _xEnumLabel
mov edi, dword ptr [ebp]
test edi, edi
jz _lEnumInEXCreateNew
_lEnumInEXCheck:
lodsb
cmp byte ptr [_bAscii_00+eax], ah ;; ah = 00h
jne _lEnumInEXCheckEX
cmp al, 29h ;; )
jne _lEnumInErr
scasb
jne _lEnumInEXGetNext
mov eax, dword ptr [_dBuffer]
sub eax, 05h
jmp _lEnumInBlockEX
_lEnumInEXCheckEX:
scasb
je _lEnumInEXCheck
_lEnumInEXGetNext:
add ebp, 0ch
mov edi, dword ptr [ebp]
mov esi, dword ptr [_dBuffer]
test edi, edi
jnz _lEnumInEXCheck
_lEnumInEXCreateNew:
mov dword ptr [ebp], esi
mov edi, dword ptr [_dEnumTablePointer]
mov dword ptr [edi], 80000000h
mov dword ptr [edi+04h], 0ffffffffh
lea eax, [edi+0ch]
mov dword ptr [edi+08h], eax
mov dword ptr [ebp+04h], edi
mov dword ptr [edi+0ch], 00000000h
mov dword ptr [edi+10h], 7fffffffh
mov dword ptr [edi+14h], 00000000h
lea eax, [edi+0ch]
mov dword ptr [ebp+08h], eax
add edi, 18h
mov dword ptr [_dEnumTablePointer], edi
mov eax, dword ptr [_dBuffer]
sub eax, 05h
_lbl:
inc esi
cmp byte ptr [esi-01h], 29h ;; )
jne _prew
jmp _lEnumInBlockEX
;;----------------
;;----------------
;; base enum
_lEnumInBase:
mov word ptr [esi], 6301h ;; #c
add esi, 05h
mov ebp, offset _dEnumDefTable-04h
mov dword ptr [_dBuffer], offset _lLineStartEx
jmp _lEnumBStart
;;----------------
;;----------------
;; block enum
_lEnumInBlock:
mov eax, esi
add esi, 04h
_lEnumInBlockEX:
cmp word ptr [esi], 0a0dh ;; nl
je _lEnumInBlockFX
cmp word ptr [esi], 7801h ;; #x
je _lEnumInBlockSX
;;----------------
;;----------------
;; single lined
mov dword ptr [_dBuffer], offset _lLineStartEx
mov word ptr [eax], 6301h ;; #c
jmp _lEnumBStart
;;----------------
;;----------------
_lEnumInBlockSX:
add esi, 04h
_lEnumInBlockFX:
add esi, 02h
mov dword ptr [_dBuffer], offset _lEnumMStart
mov word ptr [eax], 6401h ;; #d
jmp _lEnumBStart
;;----------------
;;----------------
;; start
;;----------------
;; exit from block
_lEnumMStart:
cmp word ptr [esi], 7901h ;; #y
jne _lEnumMStartEX
mov word ptr [esi+0eh], 6401h ;; #d
add esi, 10h
jmp _lLineStartEx
_lEnumMStartEX:
cmp dword ptr [esi], 65646e65h ;; ende
jne _lEnumBStart
cmp word ptr [esi+04h], 756eh ;; nu
jne _lEnumBStart
cmp byte ptr [esi+06h], 6dh ;; m
jne _lEnumBStart
cmp byte ptr [esi+07h], 20h ;;
jg _lEnumBStart
cmp word ptr [esi+07h], 0a0dh ;; nl
jne _lEnumInErr
mov word ptr [esi+07h], 6401h ;; #d
add esi, 09h
jmp _lLineStartEx
;;----------------
_lEnumBStart:
;;----------------
;; private ?
cmp dword ptr [esi], 76697270h ;; priv
jne _next
cmp dword ptr [esi+04h], 20657461h ;; ate_
jne _next
add esi, 08h
mov dword ptr [ebx+08h], ecx
;;----------------
_lbl:
mov dword ptr [ebx], esi ;; label
cmp byte ptr [esi], 3ch ;; <
jne _lEnumNorm
;;----------------
;; hard enum
inc dword ptr [ebx]
_lEnumHard:
inc esi
cmp byte ptr [esi], 3eh ;; >
jne _lEnumHard
mov byte ptr [esi], 02h ;; label end
inc esi
jmp _lEnumCheckRange
;;----------------
;;----------------
;; norm enum
_lEnumNorm:
xor eax, eax
dec esi
_lEnumNormEX:
inc esi
mov al, byte ptr [esi]
cmp byte ptr [_bAscii_00+eax], ah ;; ah = 00h
jnz _lEnumNormEX
;;----------------
;;----------------
;; ranged?
_lEnumCheckRange:
cmp byte ptr [esi], 28h ;; (
je _lEnumRanged
;;----------------
;;----------------
;; simple
cmp byte ptr [esi], 2ch ;; ,
jne _next
mov byte ptr [esi], 02h ;; label end
inc esi
jmp _lEnumNextLabel
_lbl:
cmp word ptr [esi], 0a0dh ;; nl
; jne
mov word ptr [esi], 0702h ;; label end ; enum out
add esi, 02h
_lEnumNextLabel:
mov edi, dword ptr [ebp+08h]
mov eax, dword ptr [edi]
cmp eax, dword ptr [edi+04h]
; je
inc dword ptr [edi]
;;----------------
;;----------------
;; calculate string
push ebp
mov edi, dword ptr [_dEnumStrPoint]
mov ebp, 0ah
mov byte ptr [edi], 03h ;; define value end
dec edi
_lbl:
xor edx, edx
div ebp
add edx, 30h
mov byte ptr [edi], dl
test eax, eax
jnz _prew
mov dword ptr [ebx+04h], edi
add ebx, _dDFSize
add edi, 0dh
mov dword ptr [_dEnumStrPoint], edi
pop ebp
jmp dword ptr [_dBuffer]
;;----------------
;;----------------
;; ranged
_lEnumRanged:
;;----------------
;;----------------
;;----------------
;;----------------
;; build defines
_lDefEx:
mov eax, dword ptr [esi]
cmp ax, 0a0dh
jne _lDefCheck
add esi, 02h
jmp _lDefEx
;;----------------
;; exit
_lDefCheck:
cmp eax, 64646e65h ;; endd
jne _next
cmp dword ptr [esi+04h], 6e696665h ;; efin
jne _next
cmp byte ptr [esi+08h], 65h ;; e
jne _next
cmp byte ptr [esi+09h], 20h ;; _
jg _next
cmp byte ptr [esi+0ah], 06h
jne _lDefExitEX
add esi, 05h
_lDefExitEX:
add esi, 09h
mov word ptr [esi-02h], 6401h ;; #d
jmp _lLineStartEx
;;----------------
;;----------------
;; private ?
_lDefPrivEX:
cmp dword ptr [esi+04h], 3c657461h ;; ate<
jne _next
add esi, 07h
jmp _lDefPrivSX
_lbl:
cmp eax, 76697270h ;; priv
jne _next
cmp dword ptr [esi+04h], 20657461h ;; ate_
jne _lDefPrivEX
add esi, 08h
_lDefPrivSX:
mov dword ptr [ebx+08h], ecx
;;----------------
;;----------------
;; define label
_lbl:
mov dword ptr [ebx], esi ;; find label
mov al, byte ptr [esi]
xor ebp, ebp
;;----------------
cmp al, 3ch ;; <
jne _lDefNorm
inc dword ptr [ebx]
_lDefHard:
inc esi
cmp byte ptr [esi], 3eh ;; >
jne _lDefHard
mov byte ptr [esi], 02h
inc esi
cmp byte ptr [esi], 3dh ;; =
je _lDFFindValue
cmp byte ptr [esi], 28h ;; (
je _lDFFindArgValue
cmp word ptr [esi], 0a0dh ;; nl
je _lDFNull
;;----------------
;; error
_lDefErrorBase:
mov dword ptr [_xErrorTable], offset _sErr_BadDef
mov dword ptr [_xErrorTable+04h], esi
inc esi
mov dword ptr [_xErrorTable+08h], esi
jmp _lErrIn
;;----------------
;;----------------
;; check first char
_lDefNorm:
cmp al, 41h
jb _lDefErrorBase
cmp al, 5ah
jbe _next
cmp al, 61h
jb _lDefErrorBase
cmp al, 7ah
jg _lDefErrorBase
;;----------------
;;----------------
;; check define label
_lbl:
inc esi
mov al, byte ptr [esi]
cmp al, 3dh ;; =
je _lDFFindValue
cmp al, 28h ;; (
je _lDFFindArgValue
cmp word ptr [esi], 0a0dh ;; nl
je _lDFNull
cmp al, 5fh
je _prew
cmp al, 30h
jb _lDefErrorBase
cmp al, 39h
jbe _prew
cmp al, 41h
jb _lDefErrorBase
cmp al, 5ah
jbe _prew
cmp al, 61h
jb _lDefErrorBase
cmp al, 7ah
jg _lDefErrorBase
jmp _prew
;;----------------
;;----------------
;; null define
_lDFNullEX:
mov dword ptr [esi], 02h
add esi, 02h
_lDFNull:
mov word ptr [esi], 0302h ;; label end ; def end
inc esi
mov dword ptr [ebx+04h], esi
add ebx, _dDFSize
inc esi
jmp edx
;;----------------
;;----------------
;; macros
_lDFFindArgValue:
cmp dword ptr [esi], 0a0d2928h ;; () nl
je _lDFNullEX
cmp word ptr [esi], 2928h ;; ()
jne _lDFFindArgValueSX
mov byte ptr [esi], 02h
add esi, 03h
jmp _lDFFindValueTX
_lDFFindArgValueSX:
mov byte ptr [esi], 02h
mov ebp, esi
_lDFFindArgValueRe:
inc esi
cmp word ptr [esi], 0a0dh ;; nl
je _lDFFindValueEndFS
cmp byte ptr [esi], 3dh ;; =
jne _lDFFindArgValueRe
;;----------------
;;----------------
;; close define
_lDFFindValue:
mov byte ptr [esi], 02h
inc esi
;;----------------
;;----------------
;; is it multilined define?
_lDFFindValueTX:
cmp word ptr [esi], 7801h ;; #x
je _lDFFindValueEndEx
;;----------------
;;----------------
mov dword ptr [ebx+04h], esi
add ebx, _dDFSize
;;----------------
;;----------------
_lDFFindValueEndRE:
cmp word ptr [esi], 0a0dh ;; nl
je _lDFFindValueEndRR
_lDFFindValueEnd:
inc esi
cmp word ptr [esi], 0a0dh ;; nl
jne _lDFFindValueEnd
_lDFFindValueEndRR:
mov byte ptr [esi], 03h
add esi, 02h
jmp _lDFArcCheckStart
_lDFFindValueEndFS:
mov word ptr [esi], 0302h ;; label end ; def end
inc esi
mov dword ptr [ebx+04h], esi
add ebx, _dDFSize
inc esi
jmp _lDFArcCheckStart
;;----------------
;;----------------
;; multilined define
_lDFFindValueEndEx:
mov eax, dword ptr [esi+02h]
add esi, 06h
mov dword ptr [ebx+04h], esi
add ebx, _dDFSize
mov byte ptr [eax], 03h
_lDFFindValueEndEG:
lea esi, [eax+05h]
_lDFFindValueEndES:
inc esi
cmp word ptr [esi], 0a0dh
jne _lDFFindValueEndES
add esi, 02h
;; jmp _lDFArcCheckStart
;;----------------
;;----------------
;; parse arguments
_lDFArcCheckStart:
test ebp, ebp
jnz _lDFEAXLoad
jmp edx ;; exit
_lDFEAXLoad:
mov ah, 7fh
_lDFNextArg:
inc ebp
cmp byte ptr [ebp], 29h ;; )
jne _lDFArgReplace
jmp edx ;; exit - all arguments parsed
_lDFArgReplace:
push ebp
inc ah
inc dword ptr [ebx+0ch-_dDFSize]
mov edi, dword ptr [ebx+04h-_dDFSize]
dec edi
_lDFArgSearchWord:
inc edi
_lDFArgSearchWordEx:
cmp byte ptr [edi], 03h
je _lDFArgCheckEnd
;;----------------
;; strings
cmp byte ptr [edi], 22h ;; "
jne _lDFArgSearchWordSx
_lDFArgSearchWordDx:
inc edi
_lDFArgSearchWordRx:
cmp byte ptr [edi], 03h
je _lDFArgCheckEnd
cmp byte ptr [edi], 5ch ;; \
jne _lDFArgSearchWordFx
add edi, 02h
jmp _lDFArgSearchWordRx
_lDFArgSearchWordFx:
cmp byte ptr [edi], 22h ;; "
jne _lDFArgSearchWordDx
jmp _lDFArgSearchWord
;;----------------
_lDFArgSearchWordSx:
cmp byte ptr [edi], 01h
je _lDFArgSearchWordSS
cmp byte ptr [edi], 30h
jb _lDFArgSearchWord
cmp byte ptr [edi], 3ah
jb _lDFArgNextWord
cmp byte ptr [edi], 41h
jb _lDFArgSearchWord
cmp byte ptr [edi], 5bh
jb _lDFArgCheckWord
cmp byte ptr [edi], 5fh
je _lDFArgCheckWord
cmp byte ptr [edi], 61h
jb _lDFArgSearchWord
cmp byte ptr [edi], 7bh
jb _lDFArgCheckWord
cmp byte ptr [edi], 7ch
je _lDFArgSearchWord
_lDFArgNextWord:
inc edi
_lDFArgNextWordSS:
cmp byte ptr [edi], 30h
jb _lDFArgSearchWordEx
cmp byte ptr [edi], 3ah
jb _lDFArgNextWord
cmp byte ptr [edi], 41h
jb _lDFArgSearchWordEx
cmp byte ptr [edi], 5bh
jb _lDFArgNextWord
cmp byte ptr [edi], 5fh
je _lDFArgNextWord
cmp byte ptr [edi], 61h
jb _lDFArgSearchWordEx
cmp byte ptr [edi], 7bh
jb _lDFArgNextWord
jmp _lDFArgSearchWordEx
;;----------------
;; special
_lDFArgSearchWordSS:
cmp word ptr [edi], 7801h ;; #x
je _lDFArgSearchWordSSEX
cmp word ptr [edi], 7901h ;; #y
je _lDFArgSearchWordSSEX
cmp word ptr [edi], 6901h ;; #i
jne _lDFArgSearchWordSSNorm
add edi, 02h
jmp _lDFArgSearchWordSx
_lDFArgSearchWordSSEX:
add edi, 06h
jmp _lDFArgSearchWordSx
_lDFArgSearchWordSSNorm:
add edi, 02h
jmp _lDFArgSearchWordSx
;;----------------
_lDFArgCheckWord:
mov ebp, dword ptr [esp]
mov dword ptr [_dBuffer], edi
jmp _lDFArgCheckWordStartEX
_lDFArgCheckWordStart:
inc ebp
inc edi
_lDFArgCheckWordStartEX:
mov al, byte ptr [ebp]
cmp al, 29h
je _lDFArgCheckWordEnd
cmp al, 2ch
je _lDFArgCheckWordEnd
cmp al, 30h
jb _lDFArgCheckError ;_lDFArgCheckWordEnd
cmp al, 3ah
jb _lDFArgCheckTest
cmp al, 41h
jb _lDFArgCheckError ;_lDFArgCheckWordEnd
cmp al, 5bh
jb _lDFArgCheckTest
cmp al, 5fh
je _lDFArgCheckTest
cmp al, 61h
jb _lDFArgCheckError ;_lDFArgCheckWordEnd
cmp al, 7bh
jb _lDFArgCheckTest
;;----------------
;; error
_lDFArgCheckError:
mov dword ptr [_xErrorTable], offset _sErr_BadChar
mov dword ptr [_xErrorTable+04h], ebp
inc ebp
mov dword ptr [_xErrorTable+08h], ebp
jmp _lErrIn
;;----------------
_lDFArgCheckTest:
cmp al, byte ptr [edi]
jne _lDFArgNextWordSS
jmp _lDFArgCheckWordStart
_lDFArgCheckWordEnd:
mov al, byte ptr [edi]
cmp al, 30h
jb _lDFArgCheckWordEndFx
cmp al, 3ah
jb _lDFArgNextWord
cmp al, 41h
jb _lDFArgCheckWordEndFx
cmp al, 5bh
jb _lDFArgNextWord
cmp al, 5fh
je _lDFArgNextWord
cmp al, 61h
jb _lDFArgCheckWordEndFx
cmp al, 7bh
jb _lDFArgNextWord
_lDFArgCheckWordEndFx:
mov ebp, dword ptr [_dBuffer]
_lDFArgCheckWordEndEx:
mov byte ptr [ebp], 05h ;; ex backspace
inc ebp
cmp ebp, edi
jne _lDFArgCheckWordEndEx
mov byte ptr [edi-01h], ah
jmp _lDFArgSearchWordEx
_lDFArgCheckEnd:
pop ebp
_lDFArgCheckEndEx:
inc ebp
cmp byte ptr [ebp], 29h ;; )
jne _lDFArgCheckEndSx
jmp edx
_lDFArgCheckEndSx:
cmp byte ptr [ebp], 2ch ;; ,
jne _lDFArgCheckEndEx
jmp _lDFNextArg
;;----------------
;;----------------
;; lib check
_lScanEnd:
cmp esp, _dStackPos
je _next
lea eax, dword ptr [offset _dScopeIn+ecx*04h]
mov ebx, dword ptr [eax]
mov dword ptr [_xErrorTable], offset _sErr_UnclosedLib
mov eax, ebx
_lUncLibErr:
dec ebx
cmp word ptr [ebx-02h], 0a0dh
jne _lUncLibErr
mov dword ptr [_xErrorTable+04h], ebx
mov dword ptr [_xErrorTable+08h], eax
jmp _lErrIn
;;----------------
_lbl:
;;----------------
;;----------------
;; sort define block
cmp ebx, offset _lDefX+10h
jbe _lDFSortEnd
;;----------------
;; set step
mov eax, offset _dSortSteps-04h
sub ebx, offset _lDefX
shr edx, 02h ;; ??? why ?!
_lbl:
add eax, 04h
mov ebp, dword ptr [eax+04h]
lea ebp, dword ptr [ebp+ebp*02h]
cmp ebx, ebp
jg _prew
;;----------------
_lDFSordStart:
mov ecx, dword ptr [eax]
lea ebx, dword ptr [_lDefX+ecx]
_lDFSordGo:
mov edi, ebx
mov ebp, dword ptr [ebx+08h]
mov esi, dword ptr [ebx]
mov dl, byte ptr [esi]
movaps xmm1, [ebx]
_lbl:
sub edi, ecx
cmp edi, offset _lDefX-10h
jbe _lDFSortNext
mov esi, dword ptr [edi]
cmp byte ptr [esi], dl
jb _lDFSortNext
je _lDFSortNextEx
_lDFSortRe:
movaps xmm0, [edi]
movaps [edi+ecx], xmm0
jmp _prew
_lDFSortNextEx:
cmp ebp, dword ptr [edi+08h]
jg _lDFSortRe
_lDFSortNext:
movaps [edi+ecx], xmm1
add ebx, 10h
cmp dword ptr [ebx], 00h
jnz _lDFSordGo
_lDFNextStep:
sub eax, 04h
cmp eax, offset _dSortSteps-04h
jne _lDFSordStart
_lDFSortEnd:
;;----------------
;;----------------
;; build find'n'replace table
mov eax, offset _lDefX-10h
mov edx, offset _dDefTable
xor ebx, ebx
xor ecx, ecx
_lDFTableBld:
add eax, 10h
cmp dword ptr [eax], 00h
je _lDFBuildEnd
mov ebp, dword ptr [eax]
mov bl, byte ptr [ebp]
cmp cl, bl
je _lDFTableBld
mov [edx+ebx*04h], eax
mov cl, bl
jmp _lDFTableBld
_lDFBuildEnd:
;;----------------
;;----------------
;; check defines table
mov ebx, offset _lDefX-10h
_lDFTableCheckNext:
add ebx, 10h
cmp dword ptr [ebx], 00h
jz _lDFTableCheckEnd
mov edx, dword ptr [ebx] ;; edx = string addr
mov ah, byte ptr [edx]
mov ebp, ebx ;; ebp = checked struct
;;----------------
;; check next defines
_lDFTableCheckStart:
add ebp, 10h
cmp dword ptr [ebp], 00h
je _lDFTableCheckNext
mov edi, dword ptr [ebp] ;; checked string
cmp byte ptr [edi], ah
jne _lDFTableCheckNext
;;----------------
;; check own lib
mov esi, dword ptr [ebp+08h]
cmp esi, dword ptr [ebx+08h]
jne _lDFTableCheckStart
;;----------------
;;----------------
;; check string
mov esi, edx ;; base string, edi loaded before
_lbl:
lodsb
cmp al, 02h
je _next
scasb
je _prew
jmp _lDFTableCheckStart
_lbl:
scasb
jne _lDFTableCheckStart
;;----------------
;;----------------
;; check arg count
mov esi, dword ptr [ebp+0ch]
cmp esi, dword ptr [ebx+0ch]
je _lDFTableCheckValue ;_lDFTableCheckStart
;;----------------
;; resort
mov esi, ebp
mov edi, ebx
jb _lDFTableCheckSort
add edi, 10h
_lDFTableCheckSort:
cmp edi, esi
je _lDFTableCheckSortEnd
movaps xmm0, [esi]
_lDFTableCheckSortEX:
sub esi, 10h
movaps xmm1, [esi]
movaps [esi+10h], xmm1
cmp edi, esi
jne _lDFTableCheckSortEX
movaps [edi], xmm0
_lDFTableCheckSortEnd:
mov dword ptr [ebx+18h], 0ffffffffh ;; modify to overload define
jmp _lDFTableCheckStart
;;----------------
;;----------------
;;----------------
;; check value
_lDFTableCheckValue:
mov esi, dword ptr [ebp+04h]
mov edi, dword ptr [ebx+04h]
_lbl:
lodsb
cmp al, 03h
je _next
scasb
je _prew
jmp _lDFTableError
_lbl:
scasb
je _lDFTableCheckStart
;;----------------
;;----------------
;; error
_lDFTableError:
mov dword ptr [_xErrorTable], offset _sErr_ValueRedefined
mov edi, dword ptr [ebp]
mov dword ptr [_xErrorTable+04h], edi
_lbl:
inc edi
cmp byte ptr [edi], 02h
jne _prew
mov dword ptr [_xErrorTable+08h], edi
mov dword ptr [_xErrorTable+10h], offset _sErr_ValueRedefinedEX
mov edi, dword ptr [ebx]
mov dword ptr [_xErrorTable+14h], edi
_lbl:
inc edi
cmp byte ptr [edi], 02h
jne _prew
mov dword ptr [_xErrorTable+18h], edi
jmp _lErrIn
;;----------------
;;----------------
_lDFTableCheckEnd:
;;----------------
mov _dCurrStr, offset _sProg_03
mov eax, 48h
call _lSetProg
;;----------------
;; find'n'replacing
mov _dStackPos, esp ;; save stack
mov edi, dword ptr [esp]
mov esi, dword ptr [esp+08h]
xor eax, eax
jmp _lXFPStart
_lXFPNewWord:
movsb
_lXFPStart:
;;----------------
;; string preprocessor in
cmp dword ptr [esi], 73404021h ;; !@@s
je _lXFPStrPrIn
cmp dword ptr [esi], 65404021h ;; !@@e
je _lXFPStrPrOut
;;----------------
_lXFPStartFX:
mov al, byte ptr [esi]
cmp al, 80h
jb _lXFPDFF
;;----------------
;; arguments
inc esi
sub eax, 80h
push esi
lea edx, dword ptr [esp+eax*08h+10h]
cmp dword ptr [edx], 00ffh
jg _lFXPCSX
add edx, 04h
_lFXPCSX:
mov esi, dword ptr [edx]
jmp _lXFPStart
;;----------------
;;----------------
;; check word
_lXFPDFF:
cmp al, 41h
jb _lXFPGetNextEx
lea edx, [_dDefTable+eax*04h]
mov edx, dword ptr [edx] ;; edx = def block address
test edx, edx
jz _lXFPGetNextEx
mov ecx, esi ;; ecx = temt src script position
mov dword ptr [_dUndefPnt], esi ;; for undef
_lXFPCheck:
mov ebx, dword ptr [edx]
mov al, byte ptr [esi]
cmp al, byte ptr [ebx]
jne _lXFPGetNext
_lXFPCheckStart:
inc esi
inc ebx
mov al, byte ptr [esi]
cmp al, byte ptr [ebx]
je _lXFPCheckStart
cmp byte ptr [ebx], 02h
jne _lXFPNext
cmp byte ptr [_bAscii_00+eax], ah ;; ah = 00h
je _lXFPFound
mov al, byte ptr [ebx-01h]
cmp byte ptr [_bAscii_00+eax], ah ;; ah = 00h
jne _lXFPNext
;;----------------
;;----------------
;; is private
_lXFPFound:
mov ebx, dword ptr [edx+08h]
test ebx, ebx
jnz _lXFPLibTest
;;----------------
;;----------------
;; arguments?
_lXFPAct:
mov dword ptr [_hOLMacro], edx
mov ecx, dword ptr [edx+04h]
cmp dword ptr [edx+0ch], 00h
jne _lXFPActArg
;;----------------
;; overloaded macros
cmp dword ptr [edx+18h], 0ffffffffh ;; is macros overload
jne _lXFPNoOverLoad
cmp byte ptr [esi], 28h ;; (
jne _lXFPNoOverLoad
cmp word ptr [esi], 2928h ;; ()
jne _lXPFArgErrEX
add esi, 02h
;;----------------
_lXFPNoOverLoad:
;;----------------
;; undefined?
test ecx, ecx
jz _lXFPUndefined
;;----------------
push esi
push 00h
mov esi, ecx
xor eax, eax
jmp _lXFPStart
_lXFPActArg:
mov edx, dword ptr [edx+0ch]
mov eax, offset _dDefArgs
cmp byte ptr [esi], 28h ;; (
mov ebp, edx
je _lXFPNextArg
;;----------------
;; error
_lXPFArgErr:
mov dword ptr [_xErrorTable], offset _sErr_MissDefArg
mov dword ptr [_xErrorTable+08h], esi
dec esi
mov dword ptr [_xErrorTable+04h], esi
jmp _lErrIn
;;----------------
;;----------------
;; next macro
_lXPFArgErrEX:
cmp byte ptr [esi], 28h ;; (
jne _lXPFArgErr
add edx, 10h
mov dword ptr [_hOLMacro], edx
mov ecx, dword ptr [edx+04h]
jmp _lXFPActArg
;;----------------
;;----------------
;;----------------
;; parse arguments
_lXFPNextArgAdd:
mov byte ptr [esi], 04h
_lXFPNextArg:
dec edx
js _lXFPArgEnd
_lXFPNextArgFX:
inc esi
cmp byte ptr [esi], 05h
je _lXFPNextArgFX
;;----------------
;; arg transfer
cmp byte ptr [esi], 80h
jb _lXFPNextArgEEX
xor ebx, ebx
mov bl, byte ptr [esi]
sub bl, 80h
lea ebx, dword ptr [esp+ebx*08h+0ch]
mov ebx, dword ptr [ebx]
mov dword ptr [eax], ebx
mov dword ptr [eax+04h], 00h
add eax, 08h
inc esi
cmp byte ptr [esi], 29h ;; )
jne _lXFPMArgTrns
test edx, edx
jnz _lXPFArgErr
;; mov byte ptr [esi], 04h
jmp _lXFPArgEndOX
_lXFPMArgTrns:
cmp byte ptr [esi], 2ch ;; ,
jne _lXFPMArgErr
;; jmp _lXFPNextArgAdd
jmp _lXFPNextArg
;;----------------
;;----------------
;; complex arg
_lXFPNextArgEEX:
mov dword ptr [eax], esi
add eax, 04h
xor ebx, ebx
cmp byte ptr [esi], 0bh
je _lXFPHardArg
cmp byte ptr [esi], 3ch ;; <
jne _lXFPArgSX ;; simple arg
inc dword ptr [eax-04h]
inc ebx
_lXFPMArg:
inc esi
cmp byte ptr [esi], 22h ;; "
je _lXFPMArgStr
cmp byte ptr [esi], 80h
jb _lXFPMArgFX
shl ebx, 10h ;; save bx
mov bx, bp ;; defines arg count
add bx, 80h
cmp byte ptr [esi], bl
jg _lXFPMArgOX
mov bh, byte ptr [esi]
sub bh, 7fh
add bh, bl
mov byte ptr [esi], bh
_lXFPMArgOX:
shr ebx, 10h ;; load bx
_lXFPMArgFX:
cmp byte ptr [esi], 3eh ;; >
je _lXFPMArgEX
cmp byte ptr [esi], 3ch ;; <
jne _lXFPMArg
inc ebx
jmp _lXFPMArg
_lXFPMArgEX:
dec ebx
jnz _lXFPMArg
mov byte ptr [esi], 04h
mov dword ptr [eax], 3eh
_lXFPMArgETT:
add eax, 04h
inc esi
cmp byte ptr [esi], 29h ;; )
jne _lXFPMArgDX
test edx, edx
jnz _lXPFArgErr
jmp _lXFPArgEndOX
_lXFPMArgDX:
cmp byte ptr [esi], 2ch ;; ,
;; jne _lXFPMArgErr
;; jmp _lXFPNextArg
je _lXFPNextArg
;;----------------
;; error
_lXFPMArgErr:
mov dword ptr [_xErrorTable], offset _sErr_Base
mov dword ptr [_xErrorTable+04h], esi
dec esi
mov dword ptr [_xErrorTable+08h], esi
jmp _lErrIn
;;----------------
_lXFPMArgStrEX:
inc esi
_lXFPMArgStr:
inc esi
cmp byte ptr [esi], 5ch ;; \
je _lXFPMArgStrEX
cmp byte ptr [esi], 22h ;; "
jne _lXFPMArgStr
jmp _lXFPMArg
;;----------------
;;----------------
;; hard arg
_lXFPHardArg:
inc dword ptr [eax-04h]
inc ebx
_lXFPHardArgEX:
inc esi
cmp byte ptr [esi], 0bh
jne _lXFPHardArgEX
mov byte ptr [esi], 04h
mov dword ptr [eax], 0bh
jmp _lXFPMArgETT
;;----------------
;;----------------
;; simple arg
_lXFPArgDX:
inc ebx
_lXFPArgEX:
inc esi
_lXFPArgSX:
cmp byte ptr [esi], 22h ;; "
je _lXFPArgGX
cmp byte ptr [esi], 28h ;; (
je _lXFPArgDX
cmp byte ptr [esi], 29h ;; )
je _lXFPArgXX
cmp byte ptr [esi], 2ch ;; ,
jne _lXFPArgEX
test ebx, ebx
jnz _lXFPArgEX
mov dword ptr [eax], 2ch
add eax, 04h
jmp _lXFPNextArgAdd
_lXFPArgXX:
dec ebx
jns _lXFPArgEX
test edx, edx
jnz _lXPFArgErr
mov dword ptr [eax], 29h
add eax, 04h
jmp _lXFPNextArgAdd
_lXFPArgGS:
inc esi
_lXFPArgGX:
inc esi
cmp byte ptr [esi], 5ch ;; \
je _lXFPArgGS
cmp byte ptr [esi], 22h ;; "
jne _lXFPArgGX
jmp _lXFPArgEX
;;----------------
;;----------------
_lXFPArgEnd:
cmp dword ptr [eax-04h], 3eh ;; >
jne _lXFPArgEndSX
cmp byte ptr [esi-01h], 29h ;; )
jne _lXFPOverload
_lXFPArgEndSX:
cmp dword ptr [eax-04h], 29h ;; )
jne _lXFPOverload
_lXFPArgEndOX:
;;----------------
;; undefined?
test ecx, ecx
jz _lXFPUndefined
;;----------------
inc esi
_lXFPArgEndEX:
push dword ptr [eax-08h]
push dword ptr [eax-04h]
sub eax, 08h
cmp eax, offset _dDefArgs
jne _lXFPArgEndEX
push esi
push ebp
mov esi, ecx
xor eax, eax
jmp _lXFPStart
;;----------------
;;----------------
;; next overloaded macros
_lXFPOverload:
mov ebx, dword ptr [_hOLMacro]
add ebx, 10h
cmp dword ptr [ebx+08h], 0ffffffffh
je _lXFPOverloadEX
;;----------------
;; error
mov dword ptr [_xErrorTable], offset _sErr_DefArg
mov dword ptr [_xErrorTable+04h], esi
dec esi
mov dword ptr [_xErrorTable+08h], esi
jmp _lErrIn
;;----------------
_lXFPOverloadEX:
mov ecx, dword ptr [ebx+04h]
mov dword ptr [_hOLMacro], ebx
mov edx, dword ptr [ebx+0ch]
mov ebp, edx
sub edx, dword ptr [ebx-04h]
jmp _lXFPNextArg
;;----------------
;;----------------
;;----------------
;; check own lib
_lXFPLibTest:
cmp ecx, dword ptr [_dScopeIn+ebx*04h]
jb _lXFPNext
cmp ecx, dword ptr [_dScopeOut+ebx*04h]
jb _lXFPAct
;;----------------
;;----------------
;; check next define
_lXFPNext:
mov esi, ecx
_lXFPNextEX:
add edx, 10h
cmp dword ptr [edx], 00h
je _lXFPGetNext
;;----------------
;; overloaded?
cmp dword ptr [edx+08h], 0ffffffffh
je _lXFPNextEX
;;----------------
jmp _lXFPCheck
;;----------------
;;----------------
;; undefined
_lXFPUndefined:
mov esi, dword ptr [_dUndefPnt]
;;----------------
;; remove arg
_lXFPUndefinedRE:
cmp eax, offset _dDefArgs ;; ???
jbe _lXFPUndefinedEnd
mov dl, byte ptr [eax-04h]
test dl, dl
jz _lXFPUndefinedREEX
mov ebx, dword ptr [eax-08h]
dec ebx
_lXFPUndefinedRemArg:
inc ebx
_lXFPUndefinedRemArgEX:
cmp word ptr [ebx], 7801h ;; #x
je _lXFPUndefinedRemArgSX
cmp word ptr [ebx], 7901h ;; #y
je _lXFPUndefinedRemArgSX
cmp byte ptr [ebx], 04h
jne _lXFPUndefinedRemArg
mov byte ptr [ebx], dl
_lXFPUndefinedREEX:
sub eax, 08h
jmp _lXFPUndefinedRE
_lXFPUndefinedRemArgSX:
add ebx, 06h
jmp _lXFPUndefinedRemArgEX
;;----------------
_lXFPUndefinedEnd:
xor eax, eax
jmp _lXFPGetNext
;;----------------
;;----------------
;; remove bs
_lXFPBSRem:
xor eax, eax
mov al, byte ptr [edi-01h] ;; bs
cmp byte ptr [_bAscii_00+eax], ah
jne _lXFPNewWord
cmp byte ptr [esi+01h], 2bh ;; +
je _lXFPNewWord
cmp byte ptr [esi+01h], 2dh ;; -
je _lXFPNewWord
inc esi
jmp _lXFPStartFX
;;----------------
;;----------------
;; get next word and parse text
_lXFPGetNext:
movsb
mov al, byte ptr [esi]
_lXFPGetNextEx:
cmp al, 05h ;; ex backspace
jne _next
inc esi
jmp _lXFPStart
_lbl:
cmp al, 20h
jb _lXFPXX
je _lXFPBSRem
cmp al, 22h ;; "
je _lXFPString
cmp word ptr [esi], 2323h ;; ##
je _lXFPConf
cmp al, 30h
jb _lXFPNewWord
cmp al, 3ah
jb _lXFPGetNext
cmp al, 41h
jb _lXFPNewWord
cmp al, 5bh
jb _lXFPGetNext
cmp al, 5fh
jb _lXFPNewWord
cmp al, 60h ;; `
je _lXPFRepStr
cmp al, 7ah
jg _lXFPNewWord
jmp _lXFPGetNext
_lXFPConf:
add esi, 02h
jmp _lXFPStart
;;----------------
;; string
_lXFPStringEX:
movsb
_lXFPString:
movsb
cmp byte ptr [esi], 5ch ;; \
je _lXFPStringEX
cmp byte ptr [esi], 22h ;; "
jne _lXFPString
jmp _lXFPNewWord
_lXPFRepStr:
mov byte ptr [edi], 22h ;; "
inc esi
inc edi
jmp _lXFPStart
;;----------------
;;----------------
;; system
_lXFPXX:
cmp al, 08h
je _lXFPSetdef
cmp al, 04h
je _lXFPArgOut
cmp al, 03h
je _lXFPDefOut
cmp al, 0bh
je _lXFPTMArg
cmp word ptr [esi], 3801h ;; #8
jne _lXFPXX_Next
movsw
jmp _lXFPStart
_lXFPXX_Next:
cmp word ptr [esi], 6401h ;; #d
je _lXFP_00
cmp word ptr [esi], 6701h ;; #g
je _lXFP_0a
cmp word ptr [esi], 6301h ;; #c
je _lXFP_01
cmp word ptr [esi], 7801h ;; #x
je _lXFP_02
cmp word ptr [esi], 7901h ;; #y
je _lXFP_02
cmp word ptr [esi], 7301h ;; #s
je _lXFP_03
cmp word ptr [esi], 6901h ;; #i
je _lXFP_04
cmp word ptr [esi], 6101h ;; #a
je _lXFP_05
cmp word ptr [esi], 6501h ;; #e
je _lXFP_06
cmp word ptr [esi], 7501h ;; #u
je _lXFP_07
cmp word ptr [esi], 3601h ;; #6
je _lXFP_08
cmp word ptr [esi], 3701h ;; #7
je _lXFP_09
cmp al, 00h
je _lXFPEnd
jmp _lXFPNewWord
;;----------------
;;----------------
_lXFPTMArg:
mov byte ptr [edi], 22h ;; "
inc esi
inc edi
jmp _lXFPStart
;;----------------
;;----------------
;; set esi
_lXFP_03:
mov esi, dword ptr [esi+02h]
jmp _lXFPStart
;;----------------
;;----------------
;; arg out
_lXFPArgOut:
pop esi
jmp _lXFPStart
;;----------------
;;----------------
;; error
_lXFP_0a:
mov dword ptr [_xErrorTable], offset _sErr_Ude
mov dword ptr [_xErrorTable+04h], esi
_lXFP_0a_EX:
inc esi
cmp word ptr [esi], 0a0dh ;; nl
jne _lXFP_0a_EX
mov dword ptr [_xErrorTable+08h], esi
jmp _lErrIn
;;----------------
;;----------------
;; setdef
_lXFPSetdef:
mov al, byte ptr [esi+07h]
lea edx, [_dDefTable+eax*04h]
mov edx, dword ptr [edx] ;; edx = def block address
test edx, edx
jnz _lXFPSetdefCheck
;; error
_lXFPSetdefCheckNext:
add edx, 10h
_lXFPSetdefCheck:
lea ecx, [esi+07h]
mov ebx, dword ptr [edx]
mov al, byte ptr [ecx]
cmp al, byte ptr [ebx]
;; jne
_lXFPSetdefCheckEX:
inc ecx
inc ebx
mov al, byte ptr [ecx]
cmp al, 02h ;; def label end
je _lXFPSetdefCheckEnd
cmp al, byte ptr [ebx]
je _lXFPSetdefCheckEX
jmp _lXFPSetdefCheckNext
_lXFPSetdefCheckEnd:
cmp al, byte ptr [ebx]
jne _lXFPSetdefCheckNext
;;----------------
;; check lib
mov ecx, dword ptr [edx+08h]
test ecx, ecx
jz _lXFPSetdefGlob
cmp esi, dword ptr [_dScopeIn+ecx*04h]
jb _lXFPSetdefCheckNext
cmp esi, dword ptr [_dScopeOut+ecx*04h]
jg _lXFPSetdefCheckNext
;;----------------
;;----------------
;; check arg count
_lXFPSetdefGlob:
mov al, byte ptr [esi+01h]
cmp eax, dword ptr [edx+0ch]
jne _lXFPSetdefCheckNext
;;----------------
mov ecx, dword ptr [esi+02h]
mov dword ptr [edx+04h], ecx ;; huh...
add esi, 08h
_lXFPSetdefEnd:
inc esi
cmp byte ptr [esi], 03h
jne _lXFPSetdefEnd
add esi, 02h
;; cmp byte ptr [esi-01h], 79h ;; y
;; jne _lXFPStart
;; add esi, 0eh
jmp _lXFPStart
;;----------------
;;----------------
;; undef
_lXFP_07:
mov al, byte ptr [esi+06h]
lea edx, [_dDefTable+eax*04h]
mov edx, dword ptr [edx] ;; edx = def block address
test edx, edx
jnz _lXFPUndefCheck
;; error
_lXFPUndefCheckNext:
add edx, 10h
_lXFPUndefCheck:
lea ecx, [esi+06h]
mov ebx, dword ptr [edx]
mov al, byte ptr [ecx]
cmp al, byte ptr [ebx]
;; jne
_lXFPUndefCheckEX:
inc ecx
inc ebx
mov al, byte ptr [ecx]
cmp al, 02h ;; def label end
je _lXFPUndefCheckEnd
cmp al, byte ptr [ebx]
je _lXFPUndefCheckEX
jmp _lXFPUndefCheckNext
_lXFPUndefCheckEnd:
cmp al, byte ptr [ebx]
jne _lXFPUndefCheckNext
;;----------------
;; check lib
mov ebx, dword ptr [edx+08h]
test ebx, ebx
jz _lXFPUndefRem
cmp esi, dword ptr [_dScopeIn+ebx*04h]
jb _lXFPUndefCheckNext
cmp esi, dword ptr [_dScopeOut+ebx*04h]
jg _lXFPUndefCheckNext
jmp _lXFPUndefRem
;;----------------
_lXFPUndefRemEX:
add edx, 10h
_lXFPUndefRem:
mov dword ptr [edx+04h], 00000000h ;; huh...
cmp dword ptr [edx+18h], 0ffffffffh ;; is overloaded?
je _lXFPUndefRemEX
lea esi, [ecx+01h]
cmp byte ptr [esi], 0ah
jne _lXFPStartFX
inc esi
jmp _lXFPStartFX
;;----------------
;;----------------
;; counter
_lXFP_08:
add esi, 02h
mov eax, dword ptr [_dCounterV]
inc edi
cmp eax, 0ah
jb _lXFP_08_FX
inc edi
cmp eax, 64h
jb _lXFP_08_FX
inc edi
cmp eax, 03e8h
jb _lXFP_08_FX
inc edi
cmp eax, 2710h
jb _lXFP_08_FX
inc edi
cmp eax, 000186a0h
jb _lXFP_08_FX
inc edi
cmp eax, 000f4240h
jb _lXFP_08_FX
inc edi
cmp eax, 00989680h
jb _lXFP_08_FX
inc edi
cmp eax, 05f5e100h
jb _lXFP_08_FX
inc edi
cmp eax, 3b9aca00h
jb _lXFP_08_FX
inc edi
mov ecx, 0ah
_lXFP_08_FX:
mov ebp, edi
_lXFP_08_EX:
xor edx, edx
dec ebp
div ecx
add dl, 30h
mov byte ptr [ebp], dl
test eax, eax
jnz _lXFP_08_EX
inc dword ptr [_dCounterV]
jmp _lXFPStart
;;----------------
;;----------------
;; weather
_lXFP_09:
add esi, 02h
rdtsc
and eax, 01h
or eax, 30h
stosb
xor eax, eax
jmp _lXFPStart
;;----------------
;;----------------
;; def out
_lXFPDefOut:
pop eax
pop esi
_lXFPDefOutEX:
test eax, eax
jz _lXFPStart
mov ecx, dword ptr [esp]
test ecx, ecx
jz _lXFPDefOutSBX
mov ebp, dword ptr [esp+04h]
dec ebp
_lXFPDefOutDX:
inc ebp
_lXFPDefOutAX:
cmp word ptr [ebp], 7801h ;; #x
je _lXFPDefOutBX
cmp word ptr [ebp], 7901h ;; #y
je _lXFPDefOutBX
cmp byte ptr [ebp], 04h
jne _lXFPDefOutDX
mov byte ptr [ebp], cl
_lXFPDefOutSBX:
add esp, 08h
dec eax
jmp _lXFPDefOutEX
_lXFPDefOutBX:
add ebp, 06h
jmp _lXFPDefOutAX
;;----------------
;;----------------
;; #i
;;----------------
;; #if
_lXFP_04:
cmp word ptr [esi+02h], 2066h ;; f_ ;; #if_
jne _lXFP_04_FX
mov dword ptr [_xEnumTable], edi
add esi, 04h
mov edi, offset _xEnumTable+04h
jmp _lXFPStartFX
;;----------------
;;----------------
;; #elseif
_lXFP_04_FX:
cmp dword ptr [esi+02h], 6965736ch ;; lsei
jne _lXFP_04_DX
cmp word ptr [esi+06h], 2066h ;; f_ ;; #if_
jne _lXFP_04_DX
mov dword ptr [_xEnumTable], edi
add esi, 08h
mov edi, offset _xEnumTable+04h
jmp _lXFPStartFX
;;----------------
;;----------------
;; #else
_lXFP_04_DX:
cmp dword ptr [esi+02h], 0165736ch ;; lse#
jne _lXFP_04_RX
mov ecx, dword ptr [esi+09h]
mov word ptr [ecx], 0606h
mov dword ptr [ecx+02h], 06060606h
add esi, 0dh
jmp _lXFPStartFX
;;----------------
;;----------------
;; #endif
_lXFP_04_RX:
cmp dword ptr [esi+02h], 6669646eh ;; ndif
jne _lCRErrPrePorc ;; omg!
add esi, 06h
jmp _lXFPStartFX
;;----------------
;;----------------
;;----------------
;; #e
_lXFP_06:
mov word ptr [esi], 6901h ;; #i
_lXFP_06_EX:
inc esi
cmp word ptr [esi], 7801h ;; #x
jne _lXFP_06_EX
mov esi, dword ptr [esi+02h]
add esi, 10h
jmp _lXFPStartFX
;;----------------
;;----------------
;; #d
_lXFP_00:
inc esi
_lXFP_00_Re:
cmp word ptr [esi], 7801h ;; #x
je _lXFP_00_FX
cmp word ptr [esi], 7901h ;; #y
je _lXFP_00_FX
cmp word ptr [esi], 6401h ;; #d
jne _lXFP_00
add esi, 02h
jmp _lXFPStart
_lXFP_00_FX:
add esi, 06h
jmp _lXFP_00_Re
;;----------------
;;----------------
;; #a
_lXFP_05:
xor ebx, ebx
mov dword ptr [edi], ebx
mov edi, dword ptr [_xEnumTable]
mov edx, offset _xEnumTable+04h
mov ecx, edx
;;----------------
;; true ?
cmp word ptr [ecx], 0031h ;; 1
je _lXFP_05_SX
cmp dword ptr [ecx], 65757274h ;; true
jne _lXFP_05_lStr
cmp byte ptr [ecx+04h], 00h
jne _lXFP_05_lStr
jmp _lXFP_05_SX
;;----------------
_lXFP_05_AX:
inc ecx
_lXFP_05_lStr:
cmp byte ptr [ecx], 00h
je _lXFP_05_Fail
cmp word ptr [ecx], 3d3dh ;; ==
je _lXFP_05_BX ;; ebx = 00h
cmp word ptr [ecx], 3d21h ;; !=
jne _lXFP_05_AX
mov ebx, eax ;; non zero
_lXFP_05_BX:
add ecx, 02h
_lXFP_05_OX:
mov al, byte ptr [edx]
cmp al, byte ptr [ecx]
jne _lXFP_05_NE
inc edx
inc ecx
jmp _lXFP_05_OX
_lXFP_05_NE:
cmp word ptr [edx], 3d3dh ;; ==
je _lXFP_05_NE_EX
cmp word ptr [edx], 3d21h ;; !=
jne _lXFP_05_NE_FX
_lXFP_05_NE_EX:
cmp byte ptr [ecx], 00h
je _lXFP_05_XX
;;----------------
;; fail
_lXFP_05_NE_FX:
test ebx, ebx
jnz _lXFP_05_SX
_lXFP_05_Fail:
mov esi, dword ptr [esi+04h]
add esi, 10h
jmp _lXFPStartFX
;;----------------
;;----------------
_lXFP_05_XX:
test ebx, ebx
jnz _lXFP_05_Fail
_lXFP_05_SX:
mov ecx, dword ptr [esi+04h]
mov word ptr [ecx], 0606h
mov dword ptr [ecx+02h], 06060606h
add esi, 08h
_lXFP_05_FX:
add ecx, 10h
cmp dword ptr [ecx], 646e6901h ;; #ind ;; #end
je _lXFPStartFX
mov word ptr [ecx], 6501h ;; #e
_lXFP_05_Remove:
inc ecx
cmp word ptr [ecx], 7801h ;; #x
jne _lXFP_05_Remove
mov ecx, dword ptr [ecx+02h]
jmp _lXFP_05_FX
;;----------------
;;----------------
;;----------------
;; #c
_lXFP_01_Ex:
add esi, 05h
_lXFP_01:
inc esi
cmp byte ptr [esi], 07h ;; enum out
jne _lXFP_01_Sx
inc esi
jmp _lXFPStart
_lXFP_01_Sx:
cmp word ptr [esi], 7801h ;; #x
je _lXFP_01_Ex
cmp word ptr [esi], 7901h ;; #y
je _lXFP_01_Ex
cmp word ptr [esi], 0302h ;; null define
je _lXFP_01_Dx
cmp byte ptr [esi], 03h
jne _lXFP_01
add esi, 02h
cmp byte ptr [esi-01h], 79h ;; y
jne _lXFPStart
add esi, 0eh
jmp _lXFPStart
_lXFP_01_Dx: ;; ???
add esi, 02h
cmp byte ptr [esi], 0ah
jne _lXFPStart
inc esi
jmp _lXFPStart
;;----------------
;;----------------
;; blocks
_lXFP_02:
movsw
mov edx, dword ptr [esi]
sub edi, 02h
mov dword ptr [edx+02h], edi
add edi, 06h
add esi, 04h
jmp _lXFPStart
;;----------------
;;----------------
;;----------------
;; string preprocessor
;;----------------
;; in
_lXFPStrPrIn:
add esi, 04h
mov dword ptr [_dMapProcCode], edi
mov edi, offset _bFuncCodeBase
jmp _lXFPStart
;;----------------
;;----------------
;; out
_lXFPStrPrOut:
movsd ;; copy !@@e
mov dword ptr [_dWWWFont], esi
mov esi, offset _bFuncCodeBase ;; esi = old buffer
mov edi, offset _bFuncCodeLocals ;; edi = new buffer
mov ebx, esi
_lXFPStrPrOutAX:
inc ebx
cmp dword ptr [ebx], 61404021h ;; !@@a
jne _lXFPStrPrOutAX ;; ebx = arg types
lea ecx, [ebx+03h]
_lXFPStrPrOutBX:
inc ecx
;; cmp dword ptr [ecx], 65404021h ;; !@@e
;; error - no args
cmp byte ptr [ecx-01h], 40h ;; @
jne _lXFPStrPrOutBX ;; ecx = first arg
jmp _lXFPStrPrOutDX
_lXFPStrPrOutEX:
stosb
_lXFPStrPrOutCX:
cmp esi, ebx
jne _lXFPStrPrOutDX
;;----------------
;; huh...
mov word ptr [edi], 7301h ;; #s
mov ebx, dword ptr [_dWWWFont]
mov dword ptr [edi+02h], ebx
mov esi, offset _bFuncCodeLocals
mov edi, dword ptr [_dMapProcCode]
jmp _lXFPStart
;;----------------
_lXFPStrPrOutSX:
cmp byte ptr [esi], 5eh ;; ^
je _lXFPStrPrOutTX
cmp byte ptr [esi], 25h ;; %
je _lXFPStrPrOutTX
stosb
_lXFPStrPrOutTX:
movsb
_lXFPStrPrOutDX:
lodsb
cmp al, 5ch ;; \
je _lXFPStrPrOutSX
cmp al, 25h ;; %
je lXFPStrPr_GX
cmp al, 5eh ;; ^
jne _lXFPStrPrOutEX
;;----------------
;; find type
lXFPStrPr_GX:
lea ebp, [ebx+06h] ;; ebp = first arg type
_lXFPStrPrOutJX:
mov edx, esi ;; edx = position in string
_lXFPStrPrOutFX:
mov al, byte ptr [ebp]
cmp al, 5eh ;; ^
je _lXFPStrPrOutGX
cmp al, byte ptr [edx]
jne _lXFPStrPrOutHX
inc ebp
inc edx
jmp _lXFPStrPrOutFX
_lXFPStrPrOutHX:
inc ebp
cmp byte ptr [ebp-01h], 5eh ;; ^
jne _lXFPStrPrOutHX
jmp _lXFPStrPrOutJX
_lXFPStrPrOutGX:
mov esi, edx
;;----------------
;; replace
add ebp, 02h ;; remove ^=
_lXFPStrPrOutLX:
mov al, byte ptr [ebp]
cmp al, 3ch ;; <
je _lXFPStrPrOutIX
cmp al, 3eh ;; >
je _lXFPStrPrOutKX
cmp al, 24h ;; $
je _lXFPStrPrOutMX
cmp al, 5eh ;; ^
je _lXFPStrPrOutCX
cmp al, 22h ;; "
je _lXFPStrPrOutCX
mov byte ptr [edi], al
inc edi
inc ebp
jmp _lXFPStrPrOutLX
_lXFPStrPrOutMX:
inc ebp
_lXFPStrPrOutNX:
cmp dword ptr [ecx], 65404021h ;; !@@e
je _lXFPStrPrOutLX
mov al, byte ptr [ecx]
cmp al, 40h ;; @
je _lXFPStrPrOutOX
mov byte ptr [edi], al
inc edi
inc ecx
jmp _lXFPStrPrOutNX
_lXFPStrPrOutOX:
inc ecx
jmp _lXFPStrPrOutLX
_lXFPStrPrOutIX:
inc ebp
;; cmp byte ptr [edx-01h], 22h ;; "
;; je _lXFPStrPrOutUX ;; ???
mov word ptr [edi], 2b22h ;; "+
add edi, 02h
jmp _lXFPStrPrOutLX
;; _lXFPStrPrOutUX:
;; inc edx
;; jmp _lXFPStrPrOutLX
_lXFPStrPrOutKX:
inc ebp
;; cmp byte ptr [esi], 22h ;; " ;; [edx+01h] ???
;; je _lXFPStrPrOutPX
mov word ptr [edi], 222bh ;; +"
add edi, 02h
jmp _lXFPStrPrOutLX
_lXFPStrPrOutPX:
inc esi
jmp _lXFPStrPrOutLX
;;----------------
;;----------------
;;----------------
;;----------------
_lXFPEnd:
mov esp, _dStackPos ;; load stack
add esi, 04h
add edi, 04h
;;----------------
mov _dCurrStr, offset _sProg_04
mov eax, 52h
call _lSetProg
;;----------------
;; capture world...
mov dword ptr [_dErrorCodeStart], edi ;; for syntax error
mov _dStackPos, esp
xor ebx, ebx ;; f l a g s
;; 0 0 0 0 b
;; | | | |
;; | | | is in function (0 - out)
;; | | | dont add set/call/local etc
;; | | |
;; | | is int struct (0 - out)
;; | | dont add globals/endglobals
;; | |
;; | is in interface (0 - out)
;; | not entry to functions/methods
;; |
;; is in globals (0 - out)
;; not add nothing
push ebx ;; 00h on stack top
jmp _lFNPLine
_lFNPLineEx:
movsw
_lFNPLine:
mov eax, dword ptr [esi]
cmp al, 00h
je _lFNPEnd
cmp ax, 0a0dh
jne _lFNPParseStart
add esi, 02h
jmp _lFNPLine
;;----------------
;; global instruction parsing
_lFNPParseStart:
;;----------------
;; nocjass
cmp ax, 3901h ;; #9
jne _next
lea edx, [esi+02h]
mov eax, dword ptr [_dSynDesc]
mov esi, dword ptr [eax]
mov ecx, dword ptr [eax+04h]
add eax, 08h
mov dword ptr [_dSynDesc], eax
mov dword ptr [edi], 20212f2fh ;; //!_
add edi, 04h
sub ecx, esi
rep movsb
mov esi, edx
jmp _lFNPLine
;;----------------
_lbl:
test ebx, 01b
jp _next
mov edi, offset _bFuncCodeOneLine
;;----------------
;; comment
_lbl:
cmp ax, 2f2fh ;; //
jne _next
cmp byte ptr [esi+02h], 21h ;; !
je _lFNPExCode
_lFNPCommExs:
inc esi
cmp word ptr [esi], 0a0dh ;; nl
jne _lFNPCommExs
add esi, 02h
mov eax, dword ptr [esi]
jmp _lFNPParseStart
;;----------------
_lbl:
cmp al, 0ch
je _lFNPVarX
_lbl:
test ebx, 01b
jp _lFNPOutside ;; globals ? ;; out the function
;;----------------
;;----------------
;; in function
cmp eax, 6c6c6163h ;; call
jne _next
cmp byte ptr [esi+04h], 20h ;; _
je _lFNPCopyParse
_lbl:
cmp eax, 20746573h ;; set_
je _lFNPCopyParse
_lbl:
cmp eax, 61636f6ch ;; loca
jne _next
cmp word ptr [esi+04h], 206ch ;; l_
jne _next
jmp _lFNVarParse
_lbl:
cmp eax, 74617473h ;; stat
jne _next
cmp dword ptr [esi+04h], 69206369h ;; ic_i
jne _next
cmp word ptr [esi+08h], 2066h ;; f_
je _lFNPCopyParse
;;----------------
;; if
_lbl:
cmp ax, 6669h ;; if
jne _next
cmp byte ptr [esi+02h], 2eh ;; _ ;; !!!!
jg _next
movsw
mov dword ptr [edi], 20202020h ;; bs
mov dword ptr [edi+04h], 20202020h ;; bs
mov dword ptr [edi+08h], 20202020h ;; bs
add edi, 0ch
mov byte ptr [_bCodeSys], al
mov byte ptr [_bCodePosOp], 00h
jmp _FNPIf
_lbl:
cmp eax, 65736c65h ;; else
jne _next
cmp word ptr [esi+04h], 0a0dh ;; new line
je _lFNPCopyParse
cmp word ptr [esi+04h], 7801h ;; #x
jne _lFNPIfEX
mov ecx, dword ptr [esi+06h]
mov dword ptr [esi+04h], 06060606h
cmp word ptr [esi+0ah], 0a0dh ;; new line
je _lFNPIfElseFX
mov word ptr [esi+08h], 0a0dh ;; new line
jmp _lFNPIfBlockEx
_lFNPIfElseFX:
mov word ptr [esi+08h], 0606h ;; new line
jmp _lFNPIfBlockEx
_lFNPIfEX:
cmp word ptr [esi+04h], 6669h ;; if
jne _next
cmp byte ptr [esi+06h], 2ch ;; _ ;; !!!!
jg _next
_FNPIf:
mov eax, esi
_FNPIfx:
inc eax
cmp dword ptr [eax], 6e656874h ;; then
je _FNPIfs
cmp word ptr [eax], 7801h ;; #x
je _lFNPIfBlock
cmp word ptr [eax], 0a0dh
jne _FNPIfx
mov word ptr [eax], 3001h ;; #0
jmp _lFNPCopyParse
_FNPIfs:
cmp byte ptr [eax+04h], 20h
je _lFNPCopyParse
cmp word ptr [eax+04h], 0a0dh
je _lFNPCopyParse
jmp _FNPIfx
_lFNPIfBlock:
mov ecx, dword ptr [eax+02h]
mov dword ptr [eax], 06060606h
mov word ptr [eax+04h], 3001h ;; #0
cmp dword ptr [ecx+10h], 65736c65h ;; else
jne _lFNPIfBlockEx
cmp word ptr [ecx+14h], 6669h ;; if
jne _lFNPIfBlockSx
cmp byte ptr [ecx+16h], 2dh ;; _ ;; !!!
jbe _lFNPIfBlockNull
_lFNPIfBlockSx:
cmp byte ptr [ecx+14h], 2dh ;; _ ;; !!!
jbe _lFNPIfBlockNull
_lFNPIfBlockEx:
mov dword ptr [ecx], 69646e65h ;; endi
mov word ptr [ecx+04h], 0666h ;; f_
jmp _lFNPCopyParse
_lFNPIfBlockNull:
mov dword ptr [ecx], 06060606h ;; ex bs
mov word ptr [ecx+04h], 0606h
cmp word ptr [ecx-02h], 0a0dh ;; new line
jne _lFNPCopyParse
mov word ptr [ecx-02h], 0606h
jmp _lFNPCopyParse
_lbl:
cmp eax, 69646e65h ;; endi
jne _next
cmp byte ptr [esi+04h], 66h ;; f
jne _next
cmp byte ptr [esi+05h], 20h ;; _
jbe _lFNPCopyParse
;;----------------
;;----------------
;; loop
_lbl:
cmp eax, 706f6f6ch ;; loop
jne _next
cmp byte ptr [esi+04h], 20h ;; _
jg _next
call _lFNPCheckBlock
test eax, eax
jz _lFNPCopyParse
mov dword ptr [eax], 6c646e65h ;; endl
mov dword ptr [eax+04h], 06706f6fh ;; oop_
jmp _lFNPCopyParse
_lbl:
cmp eax, 6c646e65h ;; endl
jne _next
cmp word ptr [esi+04h], 6f6fh ;; oo
jne _next
cmp byte ptr [esi+06h], 70h ;; p
jne _next
cmp byte ptr [esi+07h], 20h ;; _
jbe _lFNPCopyParse
_lbl:
cmp eax, 74697865h ;; exit
jne _next
cmp dword ptr [esi+04h], 6e656877h ;; when
jne _next
cmp byte ptr [esi+08h], 2dh ;; _ ;; !!!!
jg _next
movsd
movsd
mov dword ptr [edi], 20202020h
mov word ptr [edi+04h], 2020h
add edi, 06h
mov byte ptr [_bCodeSys], al
mov byte ptr [_bCodePosOp], 00h
jmp _lFNPCopyParse
;;----------------
;; whilenot
_lbl:
cmp eax, 6c696877h ;; whil
jne _next
cmp dword ptr [esi+04h], 746f6e65h ;; enot
jne _next
cmp byte ptr [esi+08h], 2dh ;; _ ;; !!!!
jg _next
call _lFNPCheckBlock
add esi, 08h
test eax, eax
jz _lFNPWhileEX
mov dword ptr [eax], 6c646e65h ;; endl
mov dword ptr [eax+04h], 06706f6fh ;; oop_
_lFNPWhileEX:
mov eax, dword ptr [_dFCB]
mov dword ptr [eax], 706f6f6ch ;; loop
mov word ptr [eax+04h], 0a0dh ;; new line
add eax, 06h
mov dword ptr [_dFCB], eax
cmp byte ptr [esi], 10h ;; 0a0dh or #
jbe _lFNPCopyParse
mov dword ptr [edi], 74697865h ;; exit
mov dword ptr [edi+04h], 6e656877h ;; when
mov byte ptr [edi+08h], 20h ;; _
add edi, 09h
jmp _lFNPCopyParse
_lbl:
cmp eax, 77646e65h ;; endw
jne _next
cmp dword ptr [esi+04h], 656c6968h ;; hile
jne _next
cmp dword ptr [esi+08h], 0d746f6eh ;; not_
jne _next
add esi, 0bh
mov dword ptr [edi], 6c646e65h ;; endl
mov dword ptr [edi+04h], 00706f6fh ;; oop_
add edi, 07h
jmp _lFNPCopyParse
;;----------------
;;----------------
;; do
_lbl:
cmp ax, 6f64h ;; do
jne _next
cmp byte ptr [esi+02h], 21h
jg _next
mov dword ptr [edi], 706f6f6ch ;; loop
mov word ptr [edi+04h], 0a0dh ;; new line
add edi, 06h
call _lFNPCheckBlock
add esi, 02h
test eax, eax
jz _lFNPCopyParse
cmp dword ptr [eax+10h], 6c696877h ;; whil
jne _lFNPDo
cmp dword ptr [eax+14h], 746f6e65h ;; enot
jne _lFNPDo
cmp byte ptr [eax+18h], 2dh ;; _ ;; !!!!
jg _lFNPDo
mov dword ptr [eax], 06060606h
mov word ptr [eax+04h], 0606h
mov dword ptr [eax+0eh], 78650a0dh ;; __ex
mov dword ptr [eax+12h], 68777469h ;; itwh
mov word ptr [eax+16h], 6e65h ;; en
add eax, 11h
_lFNPDoEX:
inc eax
cmp word ptr [eax], 0a0dh ;; nl
jne _lFNPDoEX
mov word ptr [eax], 6601h ;; #f
jmp _lFNPCopyParse
_lFNPDo:
mov dword ptr [eax], 6c646e65h ;; endl
mov dword ptr [eax+04h], 06706f6fh ;; oop_
jmp _lFNPCopyParse
_lbl:
cmp eax, 64646e65h ;; endd
jne _next
cmp word ptr [esi+04h], 206fh ;; o_
jne _next
cmp dword ptr [esi+06h], 6c696877h ;; whil
jne _next
cmp dword ptr [esi+0ah], 746f6e65h ;; enot
jne _next
cmp byte ptr [esi+0eh], 2dh ;; _ ;; !!!!
jg _next
mov dword ptr [esi], 74697865h ;; exit
mov dword ptr [esi+04h], 6e656877h ;; when
mov dword ptr [esi+08h], 06060606h
mov word ptr [esi+0ch], 06060606h
mov eax, esi
jmp _lFNPDoEX
;;----------------
;;----------------
_lbl:
cmp eax, 75746572h ;; retu
jne _next
cmp word ptr [esi+04h], 6e72h ;; rn
jne _next
cmp byte ptr [esi+06h], 2eh ;; _ ;; !!!!
jg _next
movsd
movsw
mov dword ptr [edi], 20202020h ;; bs
mov dword ptr [edi+04h], 20202020h ;; bs
add edi, 08h
mov byte ptr [_bCodeSys], al
mov byte ptr [_bCodePosOp], 00h
jmp _lFNPCopyParse
;;----------------
;; ++ -- pre
_lbl:
cmp ax, 2b2bh ;; ++
jne _next
;;----------------
_lFNPIDPreX:
mov ecx, edi
mov edx, esi
mov edi, esi
lea esi, [esi+02h]
_lFNPIDPreXfx:
movsb
cmp word ptr [esi], 0a0dh ;; nl
jne _lFNPIDPreXfx
mov word ptr [edi], ax
add edi, 02h
mov edi, ecx
mov esi, edx
jmp _lFNPFuncScanIn
;;----------------
_lbl:
cmp ax, 2d2dh ;; --
je _lFNPIDPreX
;;----------------
_lbl:
cmp eax, 66646e65h ;; endf
jne _next
cmp dword ptr [esi+04h], 74636e75h ;; unct
jne _next
cmp word ptr [esi+08h], 6f69h ;; io
jne _next
cmp byte ptr [esi+0ah], 6eh ;; n
jne _next
cmp byte ptr [esi+0bh], 20h ;; _
jg _next
;;----------------
;; function out
_lFNPFuncOut:
mov edi, dword ptr [_dBCP]
;;----------------
;; sys locals
;;----------------
;; type
cmp byte ptr [_bTempType], 00h
je _lFNPFuncOutAX
mov ecx, edi
_lFNPFuncOutBX:
dec ecx
cmp byte ptr [ecx], 20h
jne _lFNPFuncOutBX
mov dword ptr [edi], 61636f6ch ;; loca
mov word ptr [edi+04h], 206ch ;; l_
add edi, 06h
_lFNPFuncOutCX:
inc ecx
mov al, byte ptr [ecx]
cmp al, 0dh ;; nl
je _lFNPFuncOutDX
stosb
jmp _lFNPFuncOutCX
_lFNPFuncOutDX:
mov dword ptr [edi], 5f6a6320h ;; _cj_
mov dword ptr [edi+04h], 36363676h ;; v666
mov dword ptr [edi+08h], 0a0d725fh ;; _r__
add edi, 0ch
mov byte ptr [_bTempType], 00h
;;----------------
;;----------------
;; bool
_lFNPFuncOutAX:
cmp byte ptr [_bTempBool], 00h
je _lFNPFuncOutTT
mov dword ptr [edi], 61636f6ch ;; loca
mov dword ptr [edi+04h], 6f62206ch ;; l bo
mov dword ptr [edi+08h], 61656c6fh ;; olea
mov dword ptr [edi+0ch], 6a63206eh ;; n cj
mov dword ptr [edi+10h], 3636765fh ;; _v66
mov dword ptr [edi+14h], 0a625f36h ;; 6_b_
mov byte ptr [edi+18h], 0dh ;; _
add edi, 19h
mov byte ptr [_bTempBool], 00h
;;----------------
;;----------------
;; index
_lFNPFuncOutTT:
mov al, byte ptr [_bFCLLMAX]
mov byte ptr [_bFCLLMAX], 40h
_lFNPFuncOutIS:
cmp al, 40h
je _lFNPFuncOutEX
mov dword ptr [edi], 61636f6ch ;; loca
mov dword ptr [edi+04h], 6e69206ch ;; l_in
mov dword ptr [edi+08h], 65676574h ;; tege
mov dword ptr [edi+0ch], 78712072h ;; r_qx
mov byte ptr [edi+10h], al
mov word ptr [edi+11h], 0a0dh ;; nl
add edi, 13h
dec al
jmp _lFNPFuncOutIS
;;----------------
;;----------------
_lFNPFuncOutEX:
mov eax, esi
mov esi, offset _bFuncCodeLocals
mov ecx, dword ptr [_dFCL]
sub ecx, offset _bFuncCodeLocals
rep movsb
mov esi, offset _bFuncCodeBase
mov ecx, dword ptr [_dFCB]
sub ecx, offset _bFuncCodeBase
rep movsb
xor ebx, 01b
mov esi, eax
jmp _lFNPCopy
;;----------------
_lbl:
cmp eax, 6d646e65h ;; endm
jne _next
cmp dword ptr [esi+04h], 6f687465h ;; etho
jne _next
cmp byte ptr [esi+08h], 64h ;; d
jne _next
cmp byte ptr [esi+09h], 20h
jg _next
jmp _lFNPFuncOut
;;----------------
;; in function scan
_lbl:
_lFNPFuncScanIn:
mov ecx, esi ;; temp script posiyion
xor ebp, ebp ;; temp flags
_lFNPInFuncScan:
inc ecx
mov eax, dword ptr [ecx]
cmp al, 22h ;; "
jne _next
_lFNPInFuncScanString:
inc ecx
cmp byte ptr [ecx], 5ch ;; \
jne _lFNPInFuncScanStringEX
add ecx, 02h
_lFNPInFuncScanStringEX:
cmp byte ptr [ecx], 22h ;; "
jne _lFNPInFuncScanString
jmp _lFNPInFuncScan
_lbl:
cmp ax, 0a0dh
jne _next
cmp ebp, 0100b ;; adding call
jb _lFNPCopyParse
mov dword ptr [edi], 6c6c6163h ;; call
mov byte ptr [edi+04h], 20h ;; _
add edi, 05h
jmp _lFNPCopyParse
_lbl:
cmp al, 28h ;; (
jne _next
or ebp, 0100b ;; call pre
jmp _lFNPInFuncScan
_lbl:
cmp al, 3dh ;; =
jne _next
cmp ax, 3d3dh ;; ==
jne _lFNPSetEX
inc ecx
jmp _lFNPInFuncScan
_lFNPSetEX:
cmp ax, 3d3dh ;; set pre
je _lFNPInFuncScan
cmp byte ptr [ecx-01h], 3ch
je _lFNPInFuncScan
cmp byte ptr [ecx-01h], 3eh
je _lFNPInFuncScan
cmp byte ptr [ecx-01h], 21h
je _lFNPInFuncScan
_lFNPSet:
mov dword ptr [edi], 20746573h ;; set_
add edi, 04h
jmp _lFNPCopyParse
_lbl:
cmp eax, 0a0d2b2bh ;; ++
jne _next
mov word ptr [ecx], 7001h ;; #p
jmp _lFNPSet
_lbl:
cmp eax, 06062b2bh ;; ++
jne _next
mov word ptr [ecx], 7001h ;; #p
jmp _lFNPSet
_lbl:
cmp eax, 0a0d2d2dh ;; --
jne _next
mov word ptr [ecx], 6d01h ;; #m
jmp _lFNPSet
_lbl:
cmp eax, 06062d2dh ;; --
jne _next
mov word ptr [ecx], 6d01h ;; #m
jmp _lFNPSet
_lbl:
cmp al, 20h
jne _next
or ebp, 01b ;; local pre
jmp _lFNPInFuncScan
_lbl:
cmp al, 5bh
jne _next
or ebp, 10b ;; local not
jmp _lFNPInFuncScan
_lbl:
cmp ebp, 01h
jne _lFNPInFuncScan
cmp al, 41h
jb _lFNPInFuncScan
cmp al, 5ah
jbe _lFNPLocal
cmp al, 61h
jb _lFNPInFuncScan
cmp al, 7ah
jg _lFNPInFuncScan
_lFNPLocal:
mov dword ptr [edi], 61636f6ch ;; loca
mov dword ptr [edi+04h], 206ch ;; l_
add edi, 06h
jmp _lFNVarParse
;;----------------
;;----------------
;;----------------
;; ex code parsing
_lFNPExCode:
mov dword ptr [edi], 20212f2fh ;; //!_
add esi, 03h
add edi, 04h
mov eax, dword ptr [esi]
cmp ax, 0a0dh
je _lFNPCopy
cmp eax, 656a6e69h ;; inje
jne _next
cmp word ptr [esi+04h], 7463h ;; ct
jne _next
cmp byte ptr [esi+06h], 20h ;; _
jg _next
lea edx, [esi+06h]
_lFNPInjectLoop:
inc edx
mov eax, dword ptr [edx]
cmp ax, 0a0dh
je _lFNPCopy
cmp eax, 6e69616dh ;; main
jne _lFNPInjectLoopEX
cmp byte ptr [edx+04h], 20h ;; _
jg _lFNPInjectLoopEX
jmp _lFNPCopyFuncIn
_lFNPInjectLoopEX:
cmp eax, 666e6f63h ;; conf
jne _lFNPInjectLoop
cmp word ptr [edx+04h], 6769h ;; if
jne _lFNPInjectLoop
cmp byte ptr [edx+06h], 20h ;; _
jg _lFNPInjectLoop
jmp _lFNPCopyFuncIn
;; _lbl:
;; cmp eax, 6f706d69h ;; impo
;; jne _next
;; cmp word ptr [esi+04h], 7472h ;; rt
;; jne _next
;; movsd
;; movsw
;; mov byte ptr [edi], 20h ;; bs
;; inc edi
;; jmp _lFNPCopy
_lbl:
cmp eax, 69646e65h ;; endi
jne _lFNPCopy
cmp dword ptr [esi+04h], 63656a6eh ;; njec
jne _lFNPCopy
cmp byte ptr [esi+08h], 74h ;; t
jne _lFNPCopy
cmp byte ptr [esi+09h], 20h ;; _
jg _lFNPCopy
mov eax, dword ptr [_dFCB]
mov dword ptr [eax], 20212f2fh ;; //!_
add eax, 04h
mov dword ptr [_dFCB], eax
jmp _lFNPFuncOut
;;----------------
;;----------------
;; outside the function
_lFNPOutside:
cmp eax, 65736c65h ;; else
jne _next
cmp byte ptr [esi+04h], 20h ;; bs
jb _lFNPCopy
_lbl:
cmp eax, 69646e65h ;; endi
jne _next
cmp byte ptr [esi+04h], 66h ;; f
jne _next
cmp byte ptr [esi+05h], 20h ;; bs
jb _lFNPCopy
_lbl:
cmp eax, 74617473h ;; stat
jne _lFNPGlob
cmp dword ptr [esi+04h], 69206369h ;; ic_i
jne _lFNPGlob
cmp word ptr [esi+08h], 2066h ;; f_
je _lFNPCopy
;;----------------
;;----------------
;; in globals
_lFNPGlob:
cmp ebx, 1000b
jb _lFNPInCode
cmp eax, 67646e65h ;; endg
jne _lFNVarParse
cmp dword ptr [esi+04h], 61626f6ch ;; loba
jne _lFNVarParse
cmp word ptr [esi+08h], 736ch ;; ls
jne _lFNVarParse
cmp byte ptr [esi+0ah], 20h ;; _
jg _lFNVarParse
xor ebx, 1000b
jmp _lFNPCopy
;;----------------
;;----------------
;; in code
_lFNPInCode:
cmp eax, 626f6c67h ;; glob
jne _next
cmp dword ptr [esi+03h], 736c6162h ;; bals
jne _next
cmp byte ptr [esi+07h], 20h ;; _
jg _next
or ebx, 1000b
jmp _lFNPCopy
_lbl:
cmp eax, 73646e65h ;; ends
jne _next
cmp dword ptr [esi+04h], 63757274h ;; truc
jne _next
cmp byte ptr [esi+08h], 74h ;; t
jne _next
cmp byte ptr [esi+09h], 20h ;; _
jg _next
xor ebx, 10b
jmp _lFNPCopy
_lbl:
cmp eax, 6d646e65h ;; endm
jne _next
cmp dword ptr [esi+04h], 6c75646fh ;; odul
jne _next
cmp byte ptr [esi+08h], 65h ;; e
jne _next
cmp byte ptr [esi+09h], 20h ;; _
jg _next
xor ebx, 10b
jmp _lFNPCopy
_lbl:
cmp eax, 69646e65h ;; endi
jne _next
cmp dword ptr [esi+04h], 7265746eh ;; nter
jne _next
cmp dword ptr [esi+08h], 65636166h ;; face
jne _next
cmp byte ptr [esi+0ch], 20h ;; _
jg _next
xor ebx, 0100b
jmp _lFNPCopy
_lbl:
test ebx, ebx
jz _lFNPOutStruct
;;----------------
;; in the struct
cmp eax, 656c6564h ;; dele
jne _next
cmp dword ptr [esi+04h], 65746167h ;; gate
jne _next
cmp byte ptr [esi+08h], 20h ;; _
jbe _lFNPCopy
_lbl:
cmp eax, 6c706d69h ;; impl
jne _next
cmp dword ptr [esi+04h], 6e656d65h ;; emen
jne _next
cmp word ptr [esi+06h], 2074h ;; t_
je _lFNPCopy
_lbl:
lea ecx, [esi-01h]
_lFNPMSStart:
inc ecx
mov eax, dword ptr [ecx]
cmp al, 3dh ;; =
je _lFNVarParse
cmp al, 28h ;; (
je _lFNPExFuncDef
cmp ax, 0a0dh
je _lFNVarParse
cmp eax, 7265706fh ;; oper
jne _lFNPMSStartEX
cmp dword ptr [ecx+04h], 726f7461h ;; ator
jne _lFNPMSStartEX
cmp byte ptr [ecx+08h], 3ch ;; <
je _lFNPExFuncDefEX
cmp byte ptr [ecx+08h], 3dh ;; =
je _lFNPExFuncDefEX
;; cmp byte ptr [ecx+08h], 3eh ;; >
;; je _lFNPExFuncDef
cmp byte ptr [ecx+08h], 21h ;; !
je _lFNPExFuncDefEX
cmp byte ptr [ecx+08h], 5bh ;; [
je _lFNPExFuncDefEX
cmp byte ptr [ecx+08h], 20h ;; bs
je _lFNPExFuncDefEX
_lFNPMSStartEX:
cmp eax, 6874656dh ;; meth
jne _lFNPMSStart
cmp word ptr [ecx+04h], 646fh ;; od
jne _lFNPMSStart
cmp byte ptr [ecx+06h], 20h ;; _
jg _lFNPMSStart
lea eax, [ecx+09h]
mov dword ptr [_dLastFuncName], eax
jmp _lFNPCopyFuncIn
;;----------------
;;----------------
;; out the struct
_lFNPOutStruct:
cmp eax, 7262696ch ;; libr
jne _next
cmp dword ptr [esi+03h], 79726172h ;; rary
jne _next
cmp dword ptr [esi+07h], 636e6f5fh ;; _onc
jne _lFNPLibTestEX
cmp byte ptr [esi+0bh], 65h ;; e
jne _lFNPLibTestEX
cmp byte ptr [esi+0ch], 20h ;; _
jg _next
_lFNPLibBlockEX:
call _lFNPCheckBlock
test eax, eax
jz _lFNPCopy
mov dword ptr [eax], 6c646e65h ;; endl
mov dword ptr [eax+04h], 61726269h ;; ibra
mov word ptr [eax+08h], 7972h ;; ry
jmp _lFNPCopy
_lFNPLibTestEX:
cmp byte ptr [esi+07h], 20h ;; _
jbe _lFNPLibBlockEX
_lbl:
cmp eax, 706f6373h ;; scop
jne _next
cmp byte ptr [esi+04h], 65h ;; e
jne _next
cmp byte ptr [esi+05h], 20h ;; _
jg _next
call _lFNPCheckBlock
test eax, eax
jz _lFNPCopy
mov dword ptr [eax], 73646e65h ;; ends
mov dword ptr [eax+04h], 65706f63h ;; cope
jmp _lFNPCopy
_lbl:
cmp eax, 6c646e65h ;; endl
jne _next
cmp dword ptr [esi+04h], 61726269h ;; ibra
jne _next
cmp word ptr [esi+08h], 7972h ;; ry
jne _next
cmp byte ptr [esi+0ah], 20h ;; _
jbe _lFNPCopy
_lbl:
cmp eax, 73646e65h ;; ends
jne _next
cmp dword ptr [esi+04h], 65706f63h ;; cope
jne _next
cmp byte ptr [esi+08h], 20h ;; _
jbe _lFNPCopy
;;----------------
;; public/private loop
_lbl:
lea ecx, [esi-01h]
_lFNPInCodeScan:
inc ecx
_lFNPInCodeScanEX:
mov eax, dword ptr [ecx]
cmp eax, 76697270h ;; priv
jne _next
cmp dword ptr [ecx+04h], 20657461h ;; ate_
jne _next
add ecx, 08h
jmp _lFNPInCodeScanEX
_lbl:
cmp eax, 6c627570h ;; publ
jne _next
_lFNPScanIc:
cmp word ptr [ecx+04h], 6369h ;; ic
jne _next
cmp byte ptr [ecx+06h], 20h ;; _
jne _next
add ecx, 07h
jmp _lFNPInCodeScanEX
_lbl:
cmp eax, 736e6f63h ;; cons
jne _next
cmp dword ptr [ecx+04h], 746e6174h ;; tant
jne _next
cmp byte ptr [ecx+08h], 20h ;; _
jne _next
add ecx, 09h
jmp _lFNPInCodeScanEX
_lbl:
cmp eax, 74617473h ;; stat
je _lFNPScanIc
;;----------------
;; function, native function and function interface
_lbl:
cmp eax, 6974616eh ;; nati
jne _next
cmp word ptr [ecx+04h], 6576h ;; ve
jne _next
cmp byte ptr [ecx+06h], 20h ;; bs
jne _next
_lXFPNative:
inc ecx
cmp word ptr [ecx], 0a0dh ;; nl
je _lFNPCopy
cmp byte ptr [ecx], 28h ;; (
jne _lXFPNative
jmp _lFNPExFuncDef
_lbl:
cmp eax, 636e7566h ;; func
jne _next
cmp dword ptr [ecx+04h], 6e6f6974h ;; tion
jne _next
cmp byte ptr [ecx+08h], 20h ;; _
jne _next
cmp ebx, 0100b
jge _lFNPCopy
lea eax, [ecx+09h]
mov dword ptr [_dLastFuncName], eax
cmp dword ptr [ecx+09h], 65746e69h ;; inte
jne _lFNPCopyFuncIn
cmp dword ptr [ecx+0dh], 63616672h ;; rfac
jne _lFNPCopyFuncIn
cmp word ptr [ecx+11h], 2065h ;; e_
je _lFNPCopy
;;----------------
_lbl:
cmp eax, 75727473h ;; stru
jne _next
cmp word ptr [ecx+04h], 7463h ;; ct
jne _next
cmp byte ptr [ecx+06h], 20h ;; _
jg _next
or ebx, 10b
call _lFNPCheckBlock
test eax, eax
jz _lFNPCopy
mov dword ptr [eax], 73646e65h ;; ends
mov dword ptr [eax+04h], 63757274h ;; truc
mov byte ptr [eax+08h], 74h ;; t
jmp _lFNPCopy
_lbl:
cmp eax, 75646f6dh ;; modu
jne _next
cmp word ptr [ecx+04h], 656ch ;; le
jne _next
cmp byte ptr [ecx+06h], 20h ;; _
jg _next
or ebx, 10b
call _lFNPCheckBlock
test eax, eax
jz _lFNPCopy
mov dword ptr [eax], 6d646e65h ;; endm
mov dword ptr [eax+04h], 6c75646fh ;; odul
mov byte ptr [eax+08h], 65h ;; e
jmp _lFNPCopy
_lbl:
cmp eax, 65746e69h ;; inte
jne _next
cmp dword ptr [ecx+04h], 63616672h ;; rfac
jne _next
cmp byte ptr [ecx+08h], 65h ;; e
jne _next
cmp byte ptr [ecx+09h], 20h ;; _
jg _next
or ebx, 0100b
call _lFNPCheckBlock
test eax, eax
jz _lFNPCopy
mov dword ptr [eax], 69646e65h ;; endi
mov dword ptr [eax+04h], 7265746eh ;; nter
mov dword ptr [eax+08h], 65636166h ;; face
jmp _lFNPCopy
_lbl:
cmp eax, 7779656bh ;; keyw
jne _next
cmp dword ptr [ecx+03h], 64726f77h ;; word
jne _next
cmp byte ptr [ecx+07h], 20h ;; _
jbe _lFNPCopy
_lbl:
cmp eax, 6b6f6f68h ;; hook
jne _next
cmp byte ptr [esi+04h], 20h ;; bs
je _lFNPCopy
_lbl:
cmp eax, 65707974h ;; type
jne _lFNPGlobalsScan
cmp byte ptr [ecx+04h], 20h ;; _
jbe _lFNPCopy
_lFNPGlobalsScanEx:
inc ecx
mov eax, dword ptr [ecx]
_lFNPGlobalsScan:
cmp ax, 0a0dh
je _lFNPAddGlobals
cmp al, 3dh ;; =
je _lFNPAddGlobalsEx
cmp al, 28h ;; (
jne _lFNPGlobalsScanEx
cmp word ptr [ecx-02h], 0a0dh ;; nl
jne _lFNPExFuncDef
jmp _lFNPGlobalsScanEx
_lFNPAddGlobalsEx:
inc ecx
cmp word ptr [ecx], 0a0dh
jne _lFNPAddGlobalsEx
_lFNPAddGlobals:
mov word ptr [ecx], 3301h ;; #3
mov dword ptr [edi], 626f6c67h ;; glob
mov dword ptr [edi+04h], 0d736c61h ;; als_
mov byte ptr [edi+08h], 0ah ;; _
add edi, 09h
jmp _lFNVarParse
;;----------------
;;----------------
;;----------------
;;----------------
;; ex function define
_lFNPExFuncDefEX: ;; from overloading operators
inc ecx
cmp byte ptr [ecx], 28h ;; (
jne _lFNPExFuncDefEX
_lFNPExFuncDef:
dec ecx ;; ecx = func name
cmp word ptr [ecx-02h], 0a0dh ;; nl
je _lFNPCopy
cmp byte ptr [ecx-01h], 20h ;; _
jne _lFNPExFuncDef
;; is operator?
cmp dword ptr [ecx-05h], 726f7461h ;; ator
jne _next
cmp dword ptr [ecx-09h], 7265706fh ;; oper
jne _next
sub ecx, 09h
_lbl:
mov edx, ecx
_lbl: ;; edx = type
dec edx
cmp word ptr [edx-02h], 0a0dh ;; new line
je _lFNPExFuncDefDX
cmp byte ptr [edx-01h], 20h ;; _
jne _prew
_lbl: ;; copy func params
movsb
_lFNPExFuncDefDX:
cmp esi, edx
jne _prew
;;----------------
;; add func or method
cmp dword ptr [edi-07h], 6974616eh ;; nati
jne _lFNPExFuncDefTTTF
cmp word ptr [edi-03h], 6576h ;; ve
jne _lFNPExFuncDefTTTF
cmp byte ptr [edi-01h], 20h ;; bs
je _next
_lFNPExFuncDefTTTF:
cmp ebx, 10b
jb _lFNPExFuncDefFF
mov dword ptr [edi], 6874656dh ;; meth
mov dword ptr [edi+04h], 0020646fh ;; od_
add edi, 07h
jmp _next
_lFNPExFuncDefFF:
mov dword ptr [edi], 636e7566h ;; func
mov dword ptr [edi+04h], 6e6f6974h ;; tion
mov byte ptr [edi+08h], 20h ;; _
add edi, 09h
;;----------------
_lbl:
mov esi, ecx ;; copy func name
mov dword ptr [_dLastFuncName], ecx
_lbl:
movsb
cmp byte ptr [esi], 28h ;; (
jne _prew
_lbl: ;; adding takes
mov dword ptr [edi], 6b617420h ;; _tak
mov dword ptr [edi+04h], 00207365h ;; es_
add edi, 07h
cmp word ptr [esi], 2928h ;; ()
jne _next
mov dword ptr [edi], 68746f6eh ;; noth
mov dword ptr [edi+04h], 00676e69h ;; ing
add edi, 07h
inc esi
jmp _lFNPExFuncDefSX
_lbl:
inc esi
_lbl: ;; copy arguments
movsb
cmp byte ptr [esi], 29h ;; )
jne _prew
_lFNPExFuncDefSX: ;; add returns
inc esi
mov dword ptr [edi], 74657220h ;; _ret
mov dword ptr [edi+04h], 736e7275h ;; urns
mov byte ptr [edi+08h], 20h ;; _
add edi, 09h
_lbl: ;; copy func type
mov al, byte ptr [edx]
cmp al, 20h
je _next
mov byte ptr [edi], al
inc edx
inc edi
jmp _prew
_lbl: ;; func in?
cmp ebx, 0100b
jge _lFNPExFuncDefUX
;; add endfunction
cmp word ptr [esi], 7801h ;; #x
je _lFNPExFuncDefEnd ;; ???
_lFNPExFuncDefUX:
mov word ptr [edi], 0a0dh ;; nl
add edi, 02h
jmp _lFNPLine
_lFNPExFuncDefEnd:
mov eax, dword ptr [esi+02h]
add esi, 06h
mov word ptr [edi], 0a0dh ;; new line
add edi, 02h
;;----------------
;; add endfunc or endmethod
cmp word ptr [eax-02h], 0a0dh ;; new line
je _next
mov word ptr [eax], 0a0dh ;; new line
add eax, 02h
_lbl:
cmp ebx, 10b
jb _lFNPExFuncDefEF
mov dword ptr [eax], 6d646e65h ;; endm
mov dword ptr [eax+04h], 6f687465h ;; etho
mov byte ptr [eax+08h], 64h ;; d
jmp _next
_lFNPExFuncDefEF:
mov dword ptr [eax], 66646e65h ;; endf
mov dword ptr [eax+04h], 74636e75h ;; unct
mov dword ptr [eax+08h], 066e6f69h ;; ion
;;----------------
_lbl:
mov dword ptr [_dBCP], edi ;; system in
or ebx, 01h
mov dword ptr [_dFCL], offset _bFuncCodeLocals
mov dword ptr [_dFCB], offset _bFuncCodeBase
jmp _lFNPLine
;;----------------
;;----------------
;; parse comma in variables declaration
_lFNVarParse:
lea ecx, [esi-01h]
xor edx, edx
_lFNVarParseEx:
inc ecx
mov eax, dword ptr [ecx]
cmp al, 22h ;; "
jne _next
_lFNVarParseString:
inc ecx
cmp byte ptr [ecx], 5ch ;; \
jne _lFNVarParseStringEX
add ecx, 02h
_lFNVarParseStringEX:
cmp byte ptr [ecx], 22h ;; "
jne _lFNVarParseString
jmp _lFNVarParseEx
_lbl:
cmp al, 28h ;; (
jne _next
inc edx
jmp _lFNVarParseEx
_lbl:
cmp al, 29h ;; )
jne _next
dec edx
jmp _lFNVarParseEx
_lbl:
cmp al, 2ch ;; ,
jne _next
test edx, edx
jnz _lFNVarParseEx
mov byte ptr [ecx], 0eh ;; ;
jmp _lFNVarParseEx
_lbl:
cmp ax, 3301h ;; #3
je _lFNPCopyParse
cmp ax, 0a0dh
jne _lFNVarParseEx
jmp _lFNPCopyParse
;;----------------
;;----------------
;; check blocks
_lFNPCheckBlock:
mov ecx, esi
_lFNPCheckBlockEx:
inc ecx
cmp word ptr [ecx], 0a0dh
je _lFNPCheckBlockSx
cmp word ptr [ecx], 7801h ;; #x
jne _lFNPCheckBlockEx
mov eax, dword ptr [ecx+02h]
mov dword ptr [ecx], 06060606h
mov word ptr [ecx+04h], 0a0dh
cmp word ptr [eax-02h], 0a0dh
je _lFNPCheckBlockRet
mov word ptr [eax], 0a0dh
add eax, 02h
_lFNPCheckBlockRet:
retn
_lFNPCheckBlockSx:
xor eax, eax
retn
;;----------------
;;----------------
;; copy line (function in)
_lFNPCopyFuncIn:
movsb
_lFNPCopyFuncInEx:
mov eax, dword ptr [esi]
;; cmp al, 00h
;; je _lFNPEnd
cmp ax, 7801h ;; #x
je _lFNPUnBlockErr
cmp al, 3ch ;; < = >
jb _lFNPCopyFuncInSx
cmp al, 3eh ;; >
jg _lFNPCopyFuncInDx
_lFNPCopyFuncInOx:
cmp byte ptr [esi+01h], 3dh ;; = ;; ==
je _lFNPCopyFuncIn
mov ah, 20h ;; _
mov word ptr [edi], ax
add edi, 02h
inc esi
jmp _lFNPCopyFuncInEx
_lFNPCopyFuncInDx:
cmp al, 5dh ;; ]
jne _lFNPCopyFuncInSx
cmp ax, 3d5dh ;; ]=
je _lFNPCopyFuncIn
jmp _lFNPCopyFuncInOx
_lFNPCopyFuncInSx:
cmp ax, 0a0dh
jne _next
movsw
;;----------------
;; interfaces ?
cmp ebx, 0100b
je _lFNPLine
;;----------------
mov dword ptr [_dBCP], edi
or ebx, 01h
mov dword ptr [_dFCL], offset _bFuncCodeLocals
mov dword ptr [_dFCB], offset _bFuncCodeBase
jmp _lFNPLine
_lbl:
cmp al, 06h ;; ex _
jne _lFNPCopyFuncIn
inc esi
jmp _lFNPCopyFuncInEx
;;----------------
;;----------------
;; unknow block
_lFNPUnBlockErr:
mov dword ptr [_xErrorTable], offset _sErr_UnknowBlock
mov dword ptr [_xErrorTable+04h], edi
mov dword ptr [edi], 007b0a0dh ;; nl {
add edi, 03h
mov dword ptr [_xErrorTable+08h], edi
jmp _lErrIn
;;----------------
;;----------------
;; copy line (no parse)
_lFNPCopySTR:
cmp byte ptr [_bStrXX], 00h
je _lFNPCopySTREX
movsb
mov byte ptr [edi], 20h
inc edi
jmp _lFNPCopyEx
_lFNPCopySTREX:
mov byte ptr [_bStrXX], al
mov byte ptr [edi], 20h
inc edi
_lFNPCopy:
movsb
_lFNPCopyEx:
mov eax, dword ptr [esi]
cmp al, 00h
je _lFNPEnd
cmp al, 22h ;; "
je _lFNPCopySTR
cmp ax, 7801h ;; #x
je _lFNPUnBlockErr
cmp ax, 0a0dh
jne _lFNPCopySx
test ebx, 01b
jp _lFNPLineEx
;;----------------
;; add line ex
movsw ;; copy nl
mov eax, esi
mov esi, offset _bFuncCodeOneLine
mov ecx, edi
sub ecx, esi
mov edi, dword ptr [_dFCB]
rep movsb
mov esi, eax
mov dword ptr [_dFCB], edi
jmp _lFNPLine
;;----------------
_lFNPCopySx:
cmp al, 06h ;; ex _
jne _lFNPCopy
inc esi
jmp _lFNPCopyEx
;;----------------
;;----------------
;; copy line (with parse)
_lFNPCopyParse:
xor eax, eax
jmp _lFNPCopyParseNext
_lFNPCopyParseCX:
stosb
_lFNPCopyParseNext:
lodsb
cmp byte ptr [_bAscii_00+eax], 00h
jz _lFNPCopyParseSym
jmp _lFNPCopyParseCX
;;----------------
;; symbols
_lFNPCopyParseSym:
mov ecx, dword ptr [esi-01h]
cmp cx, 7c7ch ;; ||
jne _next
inc esi
mov dword ptr [edi], 20726f20h ;; _or_
add edi, 04h
jmp _lFNPCopyParseNext
_lbl:
cmp cl, 21h ;; !
jne _next
cmp cx, 3d21h ;; !=
jne _lFNPNot
stosb
movsb
jmp _lFNPCopyParseNext
_lFNPNot:
mov dword ptr [edi], 746f6e20h ;; _not
mov dword ptr [edi+04h], 20h ;; _
add edi, 05h
jmp _lFNPCopyParseNext
_lbl:
cmp cx, 2626h ;; &&
jne _next
inc esi
mov dword ptr [edi], 646e6120h ;; _and
mov dword ptr [edi+04h], 20h ;; _
add edi, 05h
jmp _lFNPCopyParseNext
_lbl:
cmp cx, 2b2bh ;; ++
jne _next
push 2bh ;; +
jmp _lFNPIncDecPreX
_lbl:
cmp cx, 2d2dh ;; --
jne _next
push 2dh ;; -
;;----------------
;; inc dec pre
_lFNPIncDecPreX:
push edi
inc esi
mov al, byte ptr [esi]
cmp byte ptr [_bAscii_00+eax], 00h
jz _lFNPCopyParseNext
mov al, byte ptr [esi-03h]
cmp byte ptr [_bAscii_00+eax], 00h
jz _lFNPCopyParseNext
mov byte ptr [edi], 20h ;; _
inc edi
inc dword ptr [esp]
jmp _lFNPCopyParseNext
;;----------------
;;----------------
;; string
_lbl:
cmp cl, 22h ;; "
jne _next
stosb
_lFNPCopyString:
cmp word ptr [esi], 3801h ;; #8
je _lFNPCopyStringFN
movsb
_lFNPCopyStringSX:
cmp byte ptr [edi-01h], 22h ;; "
je _lFNPCopyParseNext
cmp byte ptr [edi-01h], 5ch ;; \
je _lFNPCopyStringEX
jmp _lFNPCopyString
_lFNPCopyStringEX:
movsw
jmp _lFNPCopyStringSX
_lFNPCopyStringFN:
sub edi, 02h
add esi, 02h
xor eax, eax
mov ecx, dword ptr [_dLastFuncName]
_lFNPCopyStringFNFX:
mov al, byte ptr [ecx]
cmp byte ptr [_bAscii_00+eax], ah
je _lFNPCopyString
stosb
inc ecx
jmp _lFNPCopyStringFNFX
;;----------------
_lbl:
cmp cx, 3d2bh ;; +=
jne _next
mov al, 2bh ;; +
jmp _lFNPPx
_lbl:
cmp cx, 3d2dh ;; -=
jne _next
mov al, 2dh ;; -
jmp _lFNPPx
_lbl:
cmp cx, 3d2ah ;; *=
jne _next
mov al, 2ah ;; *
jmp _lFNPPx
_lbl:
cmp cx, 3d2fh ;; /=
jne _next
mov al, 2fh ;; /
;;----------------
;; += -= *= /=
;;----------------
;; scan
_lFNPPx:
cmp byte ptr [edi-01h], 5dh ;; ]
jne _lFNPPxNorm
mov ecx, edi
xor edx, edx
_lFNPPxSS:
dec ecx
cmp byte ptr [ecx], 5bh ;; [
jne _lFNPPxDD
dec ah
jmp _lFNPPxSS
_lFNPPxDD:
cmp byte ptr [ecx], 5dh ;; ]
jne _lFNPPxFF
inc ah
jmp _lFNPPxSS
_lFNPPxFF:
cmp word ptr [ecx], 0a0dh ;; nl
je _lFNPPxNorm
cmp byte ptr [ecx], 28h ;; (
jne _lFNPPxSS
mov dl, byte ptr [ecx-01h]
cmp byte ptr [_bAscii_00+edx], dh
je _lFNPPxSS
;;----------------
;; ex index
mov ebp, esp
push ebx
mov ebx, dword ptr [ebp]
_lFNPPxII:
dec ecx
cmp byte ptr [ecx], 5dh ;; ]
jne _lFNPPxII_00
inc ah
jmp _lFNPPxII
_lFNPPxII_00:
cmp byte ptr [ecx], 5bh ;; [
jne _lFNPPxII
dec ah
jnz _lFNPPxII
mov edx, dword ptr [_dFCPL]
inc ecx
inc byte ptr [_bFCLL]
mov dword ptr [edx], 20746573h ;; set_
mov ah, byte ptr [_bFCLL]
mov dword ptr [edx+04h], 3d207871h ;; qx_=
mov byte ptr [edx+06h], ah
add edx, 08h
_lFNPPxII_01:
mov ah, byte ptr [ecx]
mov byte ptr [edx], ah
mov byte ptr [ecx], 20h
cmp ebx, ecx
jne _lFNPPxII_SC
mov dword ptr [ebp], edx
sub ebp, 04h
mov ebx, dword ptr [ebp]
_lFNPPxII_SC:
inc edx
inc ecx
cmp ecx, edi
jne _lFNPPxII_01
mov ah, byte ptr [_bFCLL]
mov word ptr [edx-01h], 0a0dh
mov dword ptr [edi-04h], 5d207871h ;; qx*]
inc edx
mov byte ptr [edi-02h], ah
mov dword ptr [_dFCPL], edx
pop ebx
;;----------------
;;----------------
;;----------------
;; norm
_lFNPPxNorm:
mov edx, edi
movsb ;; =
mov ecx, esi
_lFNPPxEX:
inc ecx
cmp word ptr [ecx], 0a0dh
jne _lFNPPxEX
mov word ptr [ecx], 3101h ;; #1
lea ecx, [edi-01h]
_lFNPPxSX:
dec edx
cmp dword ptr [edx-04h], 20746573h ;; set_
jne _lFNPPxSX
_lFNPPxDX:
mov ah, byte ptr [edx]
mov byte ptr [edi], ah
inc edx
inc edi
cmp edx, ecx
jb _lFNPPxDX
mov byte ptr [edi], al
mov byte ptr [edi+01h], 28h
add edi, 02h
xor eax, eax
jmp _lFNPCopyParseNext
;;----------------
;;----------------
;;----------------
_lbl:
cmp cl, 0eh ;; ;
jne _next
mov dword ptr [_dVarParams], edi
mov dword ptr [edi], 0a0dh ;; nl
dec esi
add edi, 02h
mov byte ptr [esi], 0ch ;; ;
test ebx, 01b
jp _lFNPLine
jmp _lFNPIncDecSTX
;;----------------
_lbl:
cmp cx, 0a0dh ;; new line
jne _next
mov dword ptr [edi], 0a0dh ;; new line
inc esi
add edi, 02h
test ebx, 01b
jp _lFNPLine
;;----------------
;; ++ -- in stack
_lFNPIncDecSTX:
mov dword ptr [_dBuffer], esi
mov esi, edi
mov edi, dword ptr [_dFCB]
_lFNPIncDecSTXNext:
cmp dword ptr [esp], 00h
je _lFNPIncDecSTXEnd
pop ebp
xor eax, eax
xor edx, edx
mov al, byte ptr [ebp]
mov ecx, ebp ;; ecx = operation position
cmp byte ptr [_bAscii_03+eax], ah
jz _lFNPIDS_00p
;;----------------
;; pref
;;----------------
;; scan
_lFNPIDS_00:
inc ecx
mov al, byte ptr [ecx]
cmp al, 5bh ;; [
jne _lFNPIDS_01
inc edx
jmp _lFNPIDS_00
_lFNPIDS_01:
cmp al, 28h ;; (
jne _lFNPIDS_02
mov al, byte ptr [ecx-01h]
cmp byte ptr [_bAscii_00+eax], ah
jne _lFNPIDEI
jmp _lFNPIDS_00
_lFNPIDS_02:
cmp al, 5dh ;; ]
jne _lFNPIDS_03
test edx, edx
jz _lFNPIDS_04
dec edx
jnz _lFNPIDS_00
jmp _lFNPIDS_04
_lFNPIDS_03:
cmp byte ptr [_bAscii_03+eax], ah
jne _lFNPIDS_00
_lFNPIDS_04:
mov ecx, ebp
;;----------------
;;----------------
;; norm
_lFNPIncDecSTX_Norm:
mov dword ptr [edi], 20746573h ;; set_
add edi, 04h
jmp _lFNPIncDecSTXPre
_lFNPIncDecSTXPreNext:
inc ebp
_lFNPIncDecSTXPre:
mov al, byte ptr [ebp]
cmp al, 5bh ;; [
jne _lFNPIncDecSTXPre_00
inc edx
jmp _lFNPIncDecSTXPre_02
_lFNPIncDecSTXPre_00:
test edx, edx
jnz _lFNPIncDecSTXPre_03
cmp byte ptr [_bAscii_03+eax], ah
jne _lFNPIncDecSTXPre_02
_lFNPIncDecSTXPre_01:
mov edx, ecx
sub ecx, ebp
neg ecx
mov ebp, edi
mov byte ptr [edi], 3dh ;; =
inc edi
_lFNPIncDecSTXCopyNext:
mov al, byte ptr [edx]
inc edx
mov byte ptr [edi], al
inc edi
dec ecx
jnz _lFNPIncDecSTXCopyNext
pop eax
or eax, 0a0d3100h ;; x 1 new line
mov dword ptr [edi], eax
add edi, 04h
jmp _lFNPIncDecSTXNext
_lFNPIncDecSTXPre_02:
mov byte ptr [edi], al
inc edi
jmp _lFNPIncDecSTXPreNext
_lFNPIncDecSTXPre_03:
cmp al, 5dh ;; ]
jne _lFNPIncDecSTXPre_02
dec edx
jmp _lFNPIncDecSTXPre_02
;;----------------
;;----------------
;; ex index
_lFNPIDEI:
inc byte ptr [_bFCLL]
mov ecx, ebp
xor edx, edx
mov al, byte ptr [_bFCLL]
mov dword ptr [edi], 20746573h ;; set_
mov dword ptr [edi+04h], 3d207871h ;; qx_=
mov byte ptr [edi+06h], al
add edi, 08h
_lFNPIDEIndexSet:
inc ecx
cmp byte ptr [ecx], 5bh ;; [
jne _lFNPIDEIndexSet
inc ecx
_lFNPIDEIndexSetEX:
mov ah, byte ptr [ecx]
cmp ah, 5bh ;; [
jne _lFNPIDEIndexSetFX
inc edx
jmp _lFNPIDEIndexSetCopy
_lFNPIDEIndexSetFX:
cmp ah, 5dh ;; ]
jne _lFNPIDEIndexSetCopy
dec edx
jns _lFNPIDEIndexSetCopy
mov word ptr [edi], 0a0dh ;; nl
mov word ptr [ecx-03h], 7871h ;; qx
mov byte ptr [ecx-01h], al
add edi, 02h
xor edx, edx
mov ecx, ebp
xor eax, eax
jmp _lFNPIncDecSTX_Norm
_lFNPIDEIndexSetCopy:
mov byte ptr [ecx], 20h ;; bs
mov byte ptr [edi], ah
inc ecx
inc edi
jmp _lFNPIDEIndexSetEX
;;----------------
;;----------------
;;----------------
;; post
;;----------------
;; scan
_lFNPIDS_00p:
dec ecx
mov al, byte ptr [ecx]
cmp al, 5dh ;; ]
jne _lFNPIDS_01p
inc edx
jmp _lFNPIDS_00p
_lFNPIDS_01p:
cmp al, 5bh ;; [
jne _lFNPIDS_02p
test edx, edx
jz _lFNPIDS_04p
dec edx
js _lFNPIDS_04p
jmp _lFNPIDS_00p
_lFNPIDS_02p:
cmp al, 28h ;; (
jne _lFNPIDS_03p
test edx, edx
jz _lFNPIDS_04p
mov al, byte ptr [ecx-01h]
cmp byte ptr [_bAscii_00+eax], ah
je _lFNPIDS_00p
jmp _lFNPIDEIp
_lFNPIDS_03p:
cmp byte ptr [_bAscii_03+eax], ah
jne _lFNPIDS_00p
test edx, edx
jnz _lFNPIDS_00p
_lFNPIDS_04p:
mov ecx, ebp
;;----------------
;;----------------
;; norm
_lFNPIncDecSTXPost:
mov byte ptr [_bCodePosOp], 01h ;; post operation = 1
_lFNPIncDecSTXPostNext:
dec ebp
mov al, byte ptr [ebp]
cmp al, 5dh ;; ]
jne _lFNPIncDecSTXPost_00
inc edx
jmp _lFNPIncDecSTXPostNext
_lFNPIncDecSTXPost_00:
cmp byte ptr [_bAscii_03+eax], ah
jnz _lFNPIncDecSTXPostNext
test edx, edx
jz _lFNPIncDecSTXPost_01
cmp al, 5bh ;; [
jne _lFNPIncDecSTXPostNext
dec edx
jmp _lFNPIncDecSTXPostNext
_lFNPIncDecSTXPost_01:
inc ebp
sub ecx, ebp
lea edx, [ecx+01h]
mov dword ptr [esi], 20746573h ;; set_
add esi, 04h
_lFNPIncDecSTXCopyEX:
mov al, byte ptr [ebp]
inc ebp
mov byte ptr [esi], al
mov byte ptr [esi+edx], al
inc esi
dec ecx
jnz _lFNPIncDecSTXCopyEX
mov byte ptr [esi], 3dh ;; =
add esi, edx
pop eax
or eax, 0a0d3100h ;; x 1 new line
mov dword ptr [esi], eax
add esi, 04h
jmp _lFNPIncDecSTXNext
;;----------------
;;----------------
;; ex index
_lFNPIDEIpEX:
inc edx
_lFNPIDEIp:
dec ecx
cmp byte ptr [ecx], 5dh ;; ]
je _lFNPIDEIpEX
cmp byte ptr [ecx], 5bh ;; [
jne _lFNPIDEIp
dec edx
jnz _lFNPIDEIp
inc byte ptr [_bFCLL]
; push edi
mov al, byte ptr [_bFCLL]
; mov edi, dword ptr [_dFCPL]
mov dword ptr [edi], 20746573h ;; set_
mov dword ptr [edi+04h], 3d207871h ;; qx_=
mov byte ptr [edi+06h], al
add edi, 08h
lea edx, [ebp-01h]
_lFNPIDEIndexSetp:
inc ecx
mov ah, byte ptr [ecx]
mov byte ptr [edi], ah
inc edi
mov byte ptr [ecx], 20h ;; bs
cmp ecx, edx
jne _lFNPIDEIndexSetp
inc ecx
mov word ptr [edi-01h], 0a0dh
mov dword ptr [ebp-04h], 5d207871h ;; qx*]
inc edi
mov byte ptr [ebp-02h], al
xor eax, eax
; mov dword ptr [_dFCPL], edi
; pop edi
xor edx, edx
jmp _lFNPIncDecSTXPost
;;----------------
;;----------------
;;----------------
;; copy code
_lFNPIncDecSTXEnd:
;;----------------
cmp byte ptr [_bCodeSys], 00h
je _lFNPIncDecSTXEndDD
cmp byte ptr [_bCodePosOp], 00h
je _lFNPIncDecSTXEndFL
mov eax, offset _bFuncCodeOneLine
cmp word ptr [eax], 6669h ;; if
jne _lFNPEXExit
;;----------------
;; if
mov byte ptr [_bTempBool], 01h
mov dword ptr [eax], 20746573h ;; set_
mov dword ptr [eax+04h], 765f6a63h ;; cj_v
mov dword ptr [eax+08h], 5f363636h ;; 666_
mov word ptr [eax+0ch], 3d62h ;; b=
mov dword ptr [esi], 63206669h ;; if_c
mov dword ptr [esi+04h], 36765f6ah ;; j_v6
mov dword ptr [esi+08h], 625f3636h ;; 66_b
mov dword ptr [esi+0ch], 65687420h ;; _the
mov dword ptr [esi+10h], 000a0d6eh ;; en__
add esi, 13h
_lFNPIncDecSTXEndRemThen:
inc eax
cmp dword ptr [eax], 6e656874h ;; then
jne _lFNPIncDecSTXEndRemThen
cmp word ptr [eax+04h], 0a0dh ;; nl
jne _lFNPIncDecSTXEndRemThen
mov dword ptr [eax], 20202020h ;; bs
jmp _lFNPIncDecSTXEndFL
;;----------------
;;----------------
;; exitwhen
_lFNPEXExit:
cmp dword ptr [eax], 74697865h ;; exit
jne _lFNPEXRetn
mov dword ptr [eax], 20746573h ;; set_
mov dword ptr [eax+04h], 765f6a63h ;; cj_v
mov dword ptr [eax+08h], 5f363636h ;; 666_
mov word ptr [eax+0ch], 3d62h ;; b=
mov byte ptr [_bTempBool], 01h
mov dword ptr [esi], 74697865h ;; exit
mov dword ptr [esi+04h], 6e656877h ;; when
mov dword ptr [esi+08h], 5f6a6320h ;; _cj_
mov dword ptr [esi+0ch], 36363677h ;; v666
mov dword ptr [esi+10h], 0a0d625fh ;; _b__
add esi, 14h
jmp _lFNPIncDecSTXEndFL
;;----------------
;;----------------
;; return
_lFNPEXRetn:
mov byte ptr [_bTempType], 01h
mov dword ptr [eax], 20746573h ;; set_
mov dword ptr [eax+04h], 765f6a63h ;; cj_v
mov dword ptr [eax+08h], 5f363636h ;; 666_
mov word ptr [eax+0ch], 3d72h ;; r=
mov dword ptr [esi], 75746572h ;; retu
mov dword ptr [esi+04h], 63206e72h ;; rn_c
mov dword ptr [esi+08h], 36765f6ah ;; j_v6
mov dword ptr [esi+0ch], 725f3636h ;; 66_r
mov word ptr [esi+10h], 0a0dh ;; nl
add esi, 12h
;;----------------
_lFNPIncDecSTXEndFL:
mov byte ptr [_bCodeSys], 00h
;;----------------
;;----------------
_lFNPIncDecSTXEndDD:
mov edx, esi
mov ecx, dword ptr [_dFCPL]
mov esi, offset _bFuncPostEX
sub ecx, esi
rep movsb
mov dword ptr [_dFCPL], offset _bFuncPostEX
;;----------------
;; locals
cmp dword ptr [_bFuncCodeOneLine], 61636f6ch ;; loca
jne _lFNPIncDecSTXEndSFXD_Pre
cmp word ptr [_bFuncCodeOneLine+04h], 206ch ;; l_
jne _lFNPIncDecSTXEndSFXD_Pre
mov dword ptr [_dFCB], edi
mov edi, dword ptr [_dFCL]
mov esi, offset _bFuncCodeOneLine
cmp dword ptr [_dFCB], offset _bFuncCodeBase
jne _lFNPLoc_02
;;----------------
;; norm
_lFNPLoc_00:
cmp word ptr [esi], 0a0dh ;; nl
je _lFNPLoc_01
movsb
jmp _lFNPLoc_00
_lFNPLoc_01:
movsw
mov dword ptr [_dFCL], edi
mov edi, dword ptr [_dFCB]
jmp _lFNPIncDecSTXEndSFXD
;;----------------
;;----------------
;; ex
_lFNPLoc_02:
cmp word ptr [esi], 0a0dh ;; nl
je _lFNPLoc_00
cmp byte ptr [esi], 3dh ;; =
je _lFNPLoc_03
movsb
jmp _lFNPLoc_02
;;----------------
;; scan
_lFNPLoc_03:
mov ecx, esi
xor eax, eax
_lFNPLoc_03_AX:
inc ecx
_lFNPLoc_03_AXX:
cmp word ptr [ecx], 0a0dh
je _lFNPLoc_00
_lFNPLoc_03_BX:
mov al, byte ptr [ecx]
cmp al, 22h ;; "
je _lFNPLoc_03_Str
cmp al, 30h
jb _lFNPLoc_03_AX
cmp al, 3ah
jb _lFNPLoc_03_Dgt
cmp byte ptr [_bAscii_00+eax], ah
je _lFNPLoc_03_AX
;;----------------
;; check word
mov ebp, offset _sCodeConst
push ecx
_lFNPLoc_03_Word:
mov al, byte ptr [ecx]
cmp byte ptr [ebp], al
jne _lFNPLoc_03_WordNext
inc ecx
inc ebp
jmp _lFNPLoc_03_Word
_lFNPLoc_03_WordNext:
cmp byte ptr [_bAscii_00+eax], ah
jne _lFNPLoc_03_WordNextFX
cmp byte ptr [ebp], ah
jne _lFNPLoc_03_WordNextFX
add esp, 04h
jmp _lFNPLoc_03_AXX
_lFNPLoc_03_WordNextFX:
mov ecx, dword ptr [esp]
_lFNPLoc_03_WordNextEX:
inc ebp
cmp byte ptr [ebp], ah
jne _lFNPLoc_03_WordNextEX
inc ebp
cmp byte ptr [ebp], 00h
jne _lFNPLoc_03_Word
pop ecx
jmp _lFNPLoc_05
;;----------------
_lFNPLoc_03_Dgt:
inc ecx
mov al, byte ptr [ecx]
cmp byte ptr [_bAscii_00+eax], ah
jne _lFNPLoc_03_Dgt
jmp _lFNPLoc_03_AXX
_lFNPLoc_03_Str:
inc ecx
cmp byte ptr [ecx], 5ch ;; \
jne _lFNPLoc_03_StrEX
add ecx, 02h
_lFNPLoc_03_StrEX:
cmp byte ptr [ecx], 22h ;; "
jne _lFNPLoc_03_Str
jmp _lFNPLoc_03_AX
;;----------------
_lFNPLoc_05:
mov word ptr [edi], 0a0dh
add edi, 02h
mov dword ptr [_dFCL], edi
mov edi, dword ptr [_dFCB]
mov dword ptr [edi], 20746573h ;; set_
add edi, 04h
_lFNPLoc_04:
dec esi
cmp byte ptr [esi-01h], 20h ;; bs
jne _lFNPLoc_04
jmp _lFNPIncDecSTXEndSFXD
;;----------------
;;----------------
_lFNPIncDecSTXEndSFXD_Pre:
mov esi, offset _bFuncCodeOneLine
_lFNPIncDecSTXEndSFXD:
mov ecx, edx
sub ecx, esi
rep movsb
mov al, byte ptr [_bFCLL]
cmp byte ptr [_bFCLLMAX], al
jg _lFNPIncDecSTXEndXX
mov byte ptr [_bFCLLMAX], al
_lFNPIncDecSTXEndXX:
mov byte ptr [_bFCLL], 40h
;;----------------
mov esi, dword ptr [_dBuffer]
mov dword ptr [_dFCB], edi
jmp _lFNPLine
;;----------------
;;----------------
_lbl:
cmp cl, 06h ;; ex bs
je _lFNPCopyParseNext
_lbl:
cmp cl, 01h ;; #
jne _lFNPCopyParseCX
;;----------------
;; parse #
cmp cx, 3001h ;; #0
jne _next
mov word ptr [esi-01h], 0a0dh ;; new line
inc esi
mov dword ptr [edi], 65687420h ;; _the
mov dword ptr [edi+04h], 000a0d6eh ;; n new line
add edi, 07h ;; !
jmp _lFNPIncDecSTX
_lbl:
cmp cx, 3101h ;; #1
jne _next
mov word ptr [esi-01h], 0a0dh ;; new line
mov dword ptr [edi], 000a0d29h ;; )__x
inc esi
add edi, 03h ;; !!!
jmp _lFNPIncDecSTX
_lbl:
cmp cx, 6601h ;; #f
jne _next
inc esi
mov dword ptr [edi], 6e650a0dh ;; nl en
mov dword ptr [edi+04h], 6f6f6c64h ;; dloo
mov dword ptr [edi+08h], 000a0d70h ;; p nl
add edi, 0bh
jmp _lFNPIncDecSTX
;;----------------
;; func name
_lbl:
cmp cx, 3801h ;; #8
jne _next
inc esi
sub edi, 02h
xor eax, eax
mov ecx, dword ptr [_dLastFuncName]
_lFNPFuncNameCopy:
mov al, byte ptr [ecx]
cmp byte ptr [_bAscii_00+eax], ah
je _lFNPCopyParseNext
stosb
inc ecx
jmp _lFNPFuncNameCopy
;;----------------
_lbl:
cmp cx, 3301h ;; #3
jne _next
mov word ptr [esi-01h], 0a0dh ;; new line
inc esi
mov dword ptr [edi], 6e650a0dh ;; __en
mov dword ptr [edi+04h], 6f6c6764h ;; dglo
mov dword ptr [edi+08h], 736c6162h ;; bals
mov word ptr [edi+0ch], 0a0dh ;; __
add edi, 0eh
jmp _lFNPLine
_lbl:
cmp cx, 7801h ;; #x
je _lFNPUnBlockErr
_lbl:
cmp cx, 7001h ;; #p
jne _next
mov al, 2bh ;; +
;;----------------
;; inc/dec
_lFNPIncDec:
;;----------------
;; scan
cmp byte ptr [edi-01h], 5dh ;; ]
jne _lFNPIncDecNormJJ
mov edx, edi
xor ecx, ecx
_lFNPIncDecFXScan:
dec edx
cmp byte ptr [edx], 28h ;; (
jne _lFNPIncDecFXScan_00
mov cl, byte ptr [edx-01h]
cmp byte ptr [_bAscii_00+ecx], ch
je _lFNPIncDecFXScan
;;----------------
;; ex index
_lFNPIncDecEXI_00:
dec edx
cmp dword ptr [edx-04h], 20746573h ;; set_
jne _lFNPIncDecEXI_00
_lFNPIncDecEXI_01:
inc edx
cmp byte ptr [edx], 5bh ;; [
jne _lFNPIncDecEXI_01
mov ebp, esp
push ebx
mov ebx, dword ptr [ebp]
mov ecx, dword ptr [_dFCPL]
inc edx
inc byte ptr [_bFCLL]
mov dword ptr [ecx], 20746573h ;; set_
mov ah, byte ptr [_bFCLL]
mov dword ptr [ecx+04h], 3d207871h ;; qx_=
mov byte ptr [ecx+06h], ah
add ecx, 08h
_lFNPIncDecEXI_02:
mov ah, byte ptr [edx]
mov byte ptr [ecx], ah
mov byte ptr [edx], 20h
cmp ebx, edx
jne _lFNPIncDecEXI_03
mov dword ptr [ebp], ecx
sub ebp, 04h
mov ebx, dword ptr [ebp]
_lFNPIncDecEXI_03:
inc ecx
inc edx
cmp edx, edi
jne _lFNPIncDecEXI_02
mov ah, byte ptr [_bFCLL]
mov word ptr [ecx-01h], 0a0dh ;; nl
mov dword ptr [edi-04h], 5d207871h ;; qx*]
inc ecx
mov byte ptr [edi-02h], ah
mov dword ptr [_dFCPL], ecx
pop ebx
jmp _lFNPIncDecNormJJ
;;----------------
_lFNPIncDecFXScan_00:
cmp word ptr [edx], 0a0dh ;; nl
jne _lFNPIncDecFXScan
;;----------------
_lFNPIncDecNormJJ:
mov edx, edi
mov ecx, edi
_lFNPIncDecEX:
dec edx
cmp dword ptr [edx-04h], 20746573h ;; set_
jne _lFNPIncDecEX
mov byte ptr [edi], 3dh ;; =
inc edi
_lFNPIncDecSX:
mov ah, byte ptr [edx]
mov byte ptr [edi], ah
inc edx
inc edi
cmp edx, ecx
jb _lFNPIncDecSX
mov byte ptr [edi], al
mov dword ptr [edi+01h], 000a0d31h ;; 1__x
add edi, 04h
add esi, 03h ;; !!!
jmp _lFNPIncDecSTX
;;----------------
_lbl:
cmp cx, 6d01h ;; #m
;;jne _next
mov al, 2dh ;; -
jmp _lFNPIncDec
;;----------------
;;----------------
;; multidefined variables
_lFNPVarX:
inc esi
mov edx, esi ;; store esi
mov esi, dword ptr [_dVarParams]
; mov word ptr [edi], 0a0dh
; add edi, 02h
_lbl: ;; search begin of parsed line
dec esi
cmp word ptr [esi-02h], 0a0dh
je _lNPVarXKeyPreX
cmp byte ptr [esi-01h], 00h
jne _prew
_lNPVarXKeyPreX:
mov eax, dword ptr [esi]
cmp eax, 61636f6ch ;; loca
jne _next
cmp word ptr [esi+04h], 206ch ;; l_
jne _next
movsd
movsw
jmp _lNPVarXKeyPreX
_lbl:
cmp eax, 76697270h ;; priv
jne _next
cmp dword ptr [esi+04h], 20657461h ;; ate_
jne _next
movsd
movsd
jmp _lNPVarXKeyPreX
_lbl:
cmp eax, 6c627570h ;; publ
jne _next
cmp word ptr [esi+04h], 6369h ;; ic
jne _next
cmp byte ptr [esi+06h], 20h ;; _
jne _next
movsd
movsw
movsb
jmp _lNPVarXKeyPreX
_lbl:
cmp eax, 74617473h ;; stat
jne _next
cmp word ptr [esi+04h], 6369h ;; ic
jne _next
cmp byte ptr [esi+06h], 20h ;; _
jne _next
movsd
movsw
movsb
jmp _lNPVarXKeyPreX
_lbl:
cmp eax, 736e6f63h ;; cons
jne _next
cmp dword ptr [esi+04h], 746e6174h ;; tant
jne _next
cmp byte ptr [esi+08h], 20h ;; _
jne _next
movsd
movsd
movsb
jmp _lNPVarXKeyPreX
_lbl:
cmp eax, 75626564h ;; debu
jne _next
cmp word ptr [esi+04h], 2067h ;; g_
jne _next
movsd
movsw
jmp _lNPVarXKeyPreX
_lbl:
movsb ;; copy type
cmp byte ptr [esi-01h], 20h
jne _prew
_lbl: ;; search next word
cmp dword ptr [esi], 61727261h ;; arra
jne _next
cmp word ptr [esi+04h], 2079h ;; y_
jne _next
mov dword ptr [edi], 61727261h ;; arra
mov word ptr [edi+04h], 2079h ;; y_
add edi, 06h
_lbl:
mov esi, edx ;; restore esi
xor eax, eax
jmp _lFNPCopyParseNext
;;----------------
;;----------------
;;----------------
_lFNPEnd:
cmp word ptr [edi-02h], 0a0dh ;; new line
jne _next
sub edi, 02h
_lbl:
;;----------------
add esi, 04h
mov esp, _dStackPos ;; restore esp
sub edi, esi ;; edi = new script size
add esp, 04h
;;----------------
mov _dCurrStr, offset _sProg_05
mov eax, 64h
call _lSetProg
;;----------------
retn
;;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;; parse endp
;;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;;-------------------------------------------------------------------------
;;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;; proc codep
;;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
_lOpenMapCode:
push THREAD_PRIORITY_TIME_CRITICAL
push dword ptr [_hTrd]
call _imp__SetThreadPriority@8
mov dword ptr [_dPreStackPos], esp ;; for error
push 0ffh
push 04h
push offset _sMapPath
call _imp__MpqOpenArchiveForUpdate@12
test eax, eax
jnz _lCodep_00
;;----------------
;; error
push MB_ICONERROR
push offset _sWinName
push offset _sErr_Arch
push dword ptr [_hWnd]
call _imp__MessageBoxA@16
push 01h
call _imp__ExitProcess@4
;;----------------
_lCodep_00:
push offset _sAttr
push eax
push offset _fScr
push 00h
push offset _sWJ
push eax
call _imp__SFileOpenFileEx@16
test eax, eax
jnz _next
;;----------------
;; error
push MB_ICONERROR
push offset _sWinName
push offset _sErr_Code
push dword ptr [_hWnd]
call _imp__MessageBoxA@16
push 01h
call _imp__ExitProcess@4
;;----------------
_lbl:
push 00h
push _fScr
call _imp__SFileGetFileSize@8
mov ebx, eax
shl eax, 06h
add eax, 00800000h ;; add 8 megabyte to include
push eax
push GMEM_ZEROINIT
call _imp__GlobalAlloc@8
push eax ;; SrcMem handle
push eax
call _imp__GlobalLock@4
mov esi, eax ;; esi = SrcMem address
push eax
lea edi, [eax+ebx+04h] ;; edi = DestMem address
push edi
push 00h
push 00h
push edi
push esi
push _fScr
call _imp__SFileReadFile@20
;;----------------
;; start code processing
call dword ptr [_dMapProcCode]
add esp, 04h
;;----------------
push dword ptr [_dfilename]
call _imp__DeleteFileA@4
push 00h
push FILE_ATTRIBUTE_ARCHIVE
push CREATE_ALWAYS
push 00h
push FILE_SHARE_WRITE
push GENERIC_WRITE
push dword ptr [_dfilename]
call _imp__CreateFileA@28
push eax ;; ---> _imp__CloseHandle@4
push 00h
push offset _dBuffer
push edi ;; <--- !!! byter to write
push esi
push eax
call _imp__WriteFile@20
call _imp__CloseHandle@4
call _imp__GlobalUnlock@4
call _imp__GlobalFree@4
mov ebp, dword ptr [esp]
call _imp__MpqDeleteFile@8
push 09h
push 02h ;; 08h
push 0201h ;; MAFA_REPLACE_EXISTING
push offset _sWJ
push dword ptr [_dfilename];offset _sWJ
push ebp
call _imp__MpqAddFileToArchiveEx@24
push ebp
call _imp__MpqCompactArchive@4
push 00h
push ebp
call _imp__MpqCloseUpdatedArchive@8
_lOpenMapCodeEnd:
push 00h
push 00h
push WM_PROCEND
push _hWnd
call _imp__PostMessageA@16
xor eax, eax
retn
;;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;; codep endp
;;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;;-------------------------------------------------------------------------
;;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;; proc main
;;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
start: ;; <---
;;----------------
;; command line
call _imp__GetCommandLineA@0
mov ebx, eax
dec ebx
_lCLScanStart:
inc ebx
cmp byte ptr [ebx], 00h
je _lCLAbout
cmp byte ptr [ebx], 2fh
jne _lCLScanStart
;;----------------
;; do not remove unused code
cmp dword ptr [ebx+01h], 20706f6eh ;; nop
jne _lCLScanVerEX
mov dword ptr [_dWarVerSL], 00h
add ebx, 05h
jmp _lCLScanMap
;;----------------
;;----------------
;; version
_lCLScanVerEX:
cmp dword ptr [ebx+01h], 20333276h ;; v23
jne _lCLScanVer
add ebx, 05h
mov dword ptr [_dWarVerSL], offset _sVer23
jmp _lCLScanDbg
_lCLScanVer:
cmp dword ptr [ebx+01h], 20343276h ;; v24
jne _lCLScanDbg
add ebx, 05h
mov dword ptr [_dWarVerSL], offset _sVer24
;;----------------
;;----------------
;; debug mode?
_lCLScanDbg:
cmp dword ptr [ebx+01h], 20676264h ;; dbg_
jne _lCLScanMap
add ebx, 05h
mov dword ptr [_dDbgOff], offset _lCRDebugAdd
;;----------------
;;----------------
;; parse mappath
_lCLScanMap:
cmp dword ptr [ebx+01h], 6f70616dh ;; mapo ;; mapoptz="..."
jne _lCLScanMapEX
mov dword ptr [_dMapProcCode], offset _lMapOptimizeCode
mov dword ptr [_dfilename], offset _sWJO
jmp _lCLMapScanSX
_lCLScanMapEX:
cmp dword ptr [ebx+01h], 7070616dh ;; mapp ;; mappars="..."
jne _lCLAbout
mov dword ptr [_dMapProcCode], offset _lMapParseCode
_lCLMapScanSX:
mov edi, offset _sMapPath
lea esi, [ebx+0ah]
_lCLScanMapNext:
mov al, byte ptr [esi]
cmp al, 22h
je _lCLScanMapEnd
mov byte ptr [edi], al
mov byte ptr [edi+_dMapPathToEX], al
inc esi
inc edi
jmp _lCLScanMapNext
;;----------------
;; find map directory
_lCLScanMapEnd:
add edi, _dMapPathToEX
_lCLFindMapDirr:
dec edi
cmp byte ptr [edi], 5ch
jne _lCLFindMapDirr
mov dword ptr [_dMapPathEnd], edi
jmp _lCLSetCurrDir
;;----------------
;;----------------
;;----------------
;; about
_lCLAbout:
mov dword ptr [_hWndCls], CS_HREDRAW or CS_VREDRAW or CS_BYTEALIGNWINDOW
mov dword ptr [_hWndCls+04h], offset _lInfoStart
mov dword ptr [_hWndCls+18h], 00h
mov dword ptr [_dBuffer], 00ff0000h
mov dword ptr [_dWndStlEx], WS_VISIBLE or WS_CAPTION or WS_SYSMENU
push IDC_ARROW
push 00h
call _imp__LoadCursorA@8
mov dword ptr [_dStdCursor], eax
push 40h
push 00400000h
call _imp__LoadCursorA@8
mov dword ptr [_dExCursor], eax
push offset _xWWWFont
call _imp__CreateFontIndirectA@4
mov dword ptr [_dWWWFont], eax
jmp _lSrartEX
;;----------------
;;----------------
;;----------------
;; set legal current directory
_lCLSetCurrDir:
mov edi, offset _sCurrDir
push edi
push edi
push 0200h
call _imp__GetCurrentDirectoryA@8
add edi, eax
cmp dword ptr [edi-04h], 7265706ch ;; lper
je _next
mov dword ptr [edi], 6964415ch ;; \Adi
mov dword ptr [edi+04h], 6c654863h ;; cHel
mov dword ptr [edi+08h], 00726570h ;; per_
add edi, 0bh
call _imp__SetCurrentDirectoryA@4
_lbl:
mov dword ptr [edi], 62696c5ch ;; \lib
mov byte ptr [edi+04h], 5ch ;; \
add edi, 04h ;; !!!
mov _dCurrDirEnd, edi
;;----------------
_lSrartEX:
xor ebx, ebx
;;push ebx ;; ebx ---> ExitProcess
;;----------------
;; load gui font
;;push 11h
;;call _imp__GetStockObject@4
push offset _xGuiFont
call _imp__CreateFontIndirectA@4
mov dword ptr [_dGuiFont], eax
;;----------------
;;----------------
;; create main window
push 20h
push 400000h
call _imp__LoadIconA@8
mov dword ptr [_hWndCls+14h], eax
mov dword ptr [_hErrCls+14h], eax
;; mov dword ptr [_hIconCJ], eax
push offset _hWndCls
call _imp__RegisterClassA@4
push ebx
push 400000h
push ebx
push ebx
push 79h
push 0192h
push SM_CYSCREEN
call _imp__GetSystemMetrics@4
shr eax, 01h
sub eax, 4bh
push eax
push SM_CXSCREEN
call _imp__GetSystemMetrics@4
shr eax, 01h
sub eax, 00c9h
push eax
push dword ptr [_dWndStlEx]
push offset _sWinName
push offset _sWJ
push ebx
call _imp__CreateWindowExA@48
mov _hWnd, eax
push SW_SHOWNORMAL or SW_RESTORE
push eax
call _imp__ShowWindow@8
;;----------------
cmp dword ptr [_dMapProcCode], 00h
jz _lExitButton
;;----------------
;; create progress bar
push ebx ;; 02h ;; control id
push dword ptr [_hWnd]
push 12h
push 016ah
push 3eh
push 10h
push WS_CHILD or WS_VISIBLE or PBS_SMOOTH
push ebx
push offset _sProgBar
push ebx
call _imp__CreateWindowExA@48
mov dword ptr [_hPrg], eax
;;----------------
;;----------------
;; create thread
push offset _hTrd
push ebx
push ebx
push offset _lOpenMapCode
push 0800h
push ebx
call _imp__CreateThread@24
push eax
call _imp__CloseHandle@4
;;----------------
;;----------------
;; message loop
_lWndLS:
push ebx
push ebx
push ebx
push offset _hWndCls
call _imp__GetMessageA@16
push offset _hWndCls
call _imp__DispatchMessageA@4
jmp _lWndLS
;;----------------
;;----------------
;; add exit button
_lExitButton:
push ebx
push dword ptr [_hWnd]
push 16h
push 72h
push 3ch
push 90h
push WS_CHILD or WS_VISIBLE
push offset _sExit
push offset _sButton
push ebx
call _imp__CreateWindowExA@48
push eax ;; ---> _imp__SetFocus
push ebx
push dword ptr [_dGuiFont]
push WM_SETFONT
push eax
call _imp__SendMessageA@16
call _imp__SetFocus@4
jmp _lWndLS
;;----------------
;;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;; main endp
;;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;; proc wnd
;;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
_hWndProc:
mov eax, dword ptr [esp+08h]
cmp eax, WM_PAINT
je _wmPaint
cmp eax, WM_PROCEND
je _wmEnd
cmp eax, WM_CJ_ERROR
je _wmErrS
jmp _imp__DefWindowProcA@16
_wmEnd:
push 00h
call _imp__ExitProcess@4
ret 10h
_wmPaint:
push offset _xPntStr
push dword ptr [esp+08h]
push dword ptr [esp+04h]
push dword ptr [esp+04h]
call _imp__BeginPaint@8
mov ebx, eax
push dword ptr [_dGuiFont]
push ebx
call _imp__SelectObject@8
push TRANSPARENT
push ebx
call _imp__SetBkMode@8
push DT_LEFT or DT_SINGLELINE or DT_PATH_ELLIPSIS
push offset _xRect_01
push 0ffffffffh
push _dCurrStr
push ebx
call _imp__DrawTextA@20
push DT_LEFT or DT_SINGLELINE or DT_PATH_ELLIPSIS
push offset _xRect_00
push 0ffffffffh
push offset _sMapPath
push ebx
call _imp__DrawTextA@20
call _imp__EndPaint@8
ret 10h
_wmErrS:
push dword ptr [_hWnd]
call _imp__DestroyWindow@4
ret 10h
;;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;; wnd endp
;;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;; proc infownd
;;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
_dSiteAdrXM equ 0174h
_dSiteArdXN equ 0118h ;;0162h-50h
_dSiteAdrYM equ 1ch
_dSiteAdrYN equ 10h
_lInfoStart:
mov eax, dword ptr [esp+08h]
cmp eax, WM_MOUSEMOVE
je _iwmMove
cmp eax, WM_PAINT
je _iwmPaint
cmp eax, WM_LBUTTONDOWN
je _iwmClick
cmp eax, WM_COMMAND
je _iwmClose
;; cmp eax, WM_KEYDOWN
;; je _iwmKey
cmp eax, WM_DESTROY
je _iwmClose
jmp _imp__DefWindowProcA@16
_iwmClose:
push 00h
call _imp__ExitProcess@4
;; _iwmKey:
;; cmp dword ptr [esp+0ch], 1bh ;; esc
;; je _iwmClose
;; cmp dword ptr [esp+0ch], 0dh ;; enter
;; je _iwmClose
;; retn 10h
_iwmMove:
mov eax, dword ptr [esp+10h]
cmp ax, _dSiteAdrXM
jg _next
cmp ax, _dSiteArdXN
jb _next
shr eax, 10h
cmp al, _dSiteAdrYN
jb _next
cmp al, _dSiteAdrYM
jg _next
cmp dword ptr [_dBuffer], 00ff4040h
je _iwmRet
mov dword ptr [_dBuffer], 00ff4040h
push dword ptr [_dExCursor]
jmp _iwmReDraw
_iwmRet:
retn 10h
_lbl:
cmp dword ptr [_dBuffer], 00ff0000h
je _iwmRet
mov dword ptr [_dBuffer], 00ff0000h
push dword ptr [_dStdCursor]
_iwmReDraw:
call _imp__SetCursor@4
push RDW_INVALIDATE or RDW_ERASE
push 00h
push offset _xRect_toRedraw
push _hWnd
call _imp__RedrawWindow@16
retn 10h
_iwmPaint:
push offset _xPntStr
push dword ptr [esp+08h]
push dword ptr [esp+04h]
push dword ptr [esp+04h]
call _imp__BeginPaint@8
mov ebx, eax
;; push dword ptr [_hIconCJ]
;; push 0034h
;; push 0138h
;; push ebx
;; call _imp__DrawIcon@16
;; push dword ptr [_hIconCJ]
;; push 34h
;; push 40h
;; push ebx
;; call _imp__DrawIcon@16
push dword ptr [_dGuiFont]
push ebx
call _imp__SelectObject@8
push TRANSPARENT
push ebx
call _imp__SetBkMode@8
push DT_LEFT
push offset _xRect_00
push 0ffffffffh
push offset _sTollInfo
push ebx
call _imp__DrawTextA@20
push dword ptr [_dBuffer]
push ebx
call _imp__SetTextColor@8
push dword ptr [_dWWWFont]
push ebx
call _imp__SelectObject@8
push DT_RIGHT
push offset _xRect_00
push 0ffffffffh
push offset _sSiteAdr
push ebx
call _imp__DrawTextA@20
call _imp__EndPaint@8
retn 10h
_iwmClick:
mov eax, dword ptr [esp+10h]
cmp ax, _dSiteAdrXM
jg _next
cmp ax, _dSiteArdXN
jb _next
shr eax, 10h
cmp al, _dSiteAdrYN
jb _next
cmp al, _dSiteAdrYM
jg _next
push 00h
push 00h
push 00h
push offset _sSiteAdr
push offset _sOpen
push _hWnd
call _imp__ShellExecuteA@24
_lbl:
retn 10h
;;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;; infownd endp
;;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;; set progress proc
;;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
_lSetProg:
push 00h
push eax
push PBM_SETPOS
push _hPrg
call _imp__SendMessageA@16
_lRedraw:
push RDW_INVALIDATE or RDW_ERASE
push 00h
push 00h
push _hWnd
call _imp__RedrawWindow@16
retn
;;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;; set progress endp
;;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;;-------------------------------------------------------------------------
;;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;; proc error
;;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
_lErrIn:
xor ebx, ebx
mov esi, dword ptr [_imp__SendMessageA@16]
;;----------------
;; destroy old window
push ebx
push ebx
push WM_CJ_ERROR
push dword ptr [_hWnd]
call esi ;; _imp__SendMessageA@16
;;----------------
;;----------------
;; beep
push 0ffffffffh
call _imp__MessageBeep@4
;;----------------
;;----------------
;; create new window
push offset _hErrCls
call _imp__RegisterClassA@4
push ebx
push 400000h
push ebx
push ebx
push 0300h ;; height
push 0400h ;; width
push SM_CYSCREEN
call _imp__GetSystemMetrics@4
shr eax, 01h
sub eax, 0180h
push eax
push SM_CXSCREEN
call _imp__GetSystemMetrics@4
shr eax, 01h
sub eax, 0200h
push eax
push WS_VISIBLE or WS_OVERLAPPEDWINDOW
push offset _sSynErr
push dword ptr [esp]
push ebx
call _imp__CreateWindowExA@48
mov _hWnd, eax
;;----------------
;; push SW_SHOWNORMAL or SW_RESTORE
;; push eax
;; call _imp__ShowWindow@8
;;----------------
;; edit
push ebx
push 400000h
push ebx ;; control id
push eax ;; own window
push 0210h
push 03d5h
push 20h
push 10h
push WS_CHILD or WS_VISIBLE or ES_LEFT or ES_MULTILINE or ES_READONLY or WS_HSCROLL or WS_VSCROLL or ES_NOHIDESEL
push ebx
push offset _sEditWnd
push WS_EX_CLIENTEDGE
call _imp__CreateWindowExA@48
mov dword ptr [_hPrg], eax
push ebx
push offset _xOutFont
call _imp__CreateFontIndirectA@4
push eax
push eax
call _imp__CloseHandle@4
push WM_SETFONT
push dword ptr [_hPrg]
call esi ;; _imp__SendMessageA@16
;;----------------
;;----------------
;; list
push ebx
push 400000h
push ebx
push dword ptr [_hWnd]
push 90h
push 0280h
push 0240h
push 10h
push WS_CHILD or WS_VISIBLE or WS_TABSTOP or LBS_NOINTEGRALHEIGHT or LBS_HASSTRINGS or LBS_NOTIFY
push ebx
push offset _sListWnd
push WS_EX_CLIENTEDGE
call _imp__CreateWindowExA@48
mov dword ptr [_hList], eax
push ebx
push dword ptr [_dGuiFont]
push WM_SETFONT
push eax
call esi ;; _imp__SendMessageA@16
;;----------------
;;----------------
;; exit button
push ebx
push dword ptr [_hWnd]
push 16h
push 72h
push 02bah ;; - 46h
push 0373h ;; - 62h
push WS_CHILD or WS_VISIBLE
push offset _sExit
push offset _sButton
push ebx
call _imp__CreateWindowExA@48
mov dword ptr [_hBtn], eax
push ebx
push dword ptr [_dGuiFont]
push WM_SETFONT
push eax
call esi ;; _imp__SendMessageA@16
;;----------------
;;----------------
;; veiw code
mov ecx, dword ptr [_dErrorCodeStart]
push ecx
push dword ptr [_hPrg]
jmp _lErrCStart
;;----------------
;; process code
_lErrCStartEX:
inc ecx
_lErrCStart:
mov eax, dword ptr [ecx]
;;----------------
;; add stdef
cmp al, 08h
jne _next
mov dword ptr [ecx], 64746573h ;; setd
mov word ptr [ecx+04h], 6665h ;; ef
add ecx, 06h
jmp _lErrCStart
;;----------------
;;----------------
;; add backspaces
_lbl:
cmp al, 06h
jne _next
_lErrCAddBS:
mov byte ptr [ecx], 20h
inc ecx
jmp _lErrCStart
_lbl:
cmp al, 07h
je _lErrCAddBS
cmp al, 05h
je _lErrCAddBS
cmp al, 04h
je _lErrCAddBS
cmp al, 03h
je _lSRNL
cmp al, 02h
je _lErrCAddBS
;;----------------
;;----------------
;; blocks
cmp ax, 7801h ;; #x
jne _next
mov word ptr [ecx], 0a0dh ;; nl
mov dword ptr [ecx+02h], 0a0d207bh ;; {_nl
add ecx, 06h
jmp _lErrCStart
_lbl:
cmp ax, 7901h ;; #x
jne _next
_lSRNLEX:
mov word ptr [ecx], 207dh ;; }_
mov dword ptr [ecx+02h], 20202020h ;; ____
add ecx, 06h
jmp _lErrCStart
;;----------------
;;----------------
;; add nl
_lSRNL:
cmp word ptr [ecx-02h], 0a0dh
je _lSRNLEX
mov byte ptr [ecx], 0dh
jmp _lErrCStartEX
;;----------------
;;----------------
;; error
_lbl:
cmp ax, 6701h ;; #g
jne _next
mov dword ptr [ecx], 72726523h ;; #err
add ecx, 04h
jmp _lErrCStart
;;----------------
;;----------------
;; #
_lbl:
cmp al, 01h
jne _next
;;----------------
;; single lined definr
cmp ax, 6301h ;; #c
jne _lErrSSX_00
cmp eax, 6d756301h ;; #cum
jne _lErrDefEX
mov word ptr [ecx], 6e65h ;; en
add ecx, 02h
jmp _lErrCStart
_lErrDefEX:
mov word ptr [ecx], 6564h ;; de
add ecx, 02h
jmp _lErrCStart
;;----------------
;;----------------
;; multilined define
_lErrSSX_00:
cmp eax, 6d756401h ;; #dum
jne _lErrSSX_02
mov word ptr [ecx], 6e65h ;; en
add ecx, 04h
jmp _lErrCStart
_lErrSSX_02:
cmp ax, 6401h ;; #d
jne _lErrSSX_01
cmp dword ptr [ecx+02h], 656e6966h ;; fine
jne _lErrSSX_00_EX
mov word ptr [ecx], 6564h ;; de
add ecx, 02h
jmp _lErrCStart
_lErrSSX_00_EX:
mov word ptr [ecx], 0a0dh ;; nl
add ecx, 02h
jmp _lErrCStart
;;----------------
_lErrSSX_01:
mov word ptr [ecx], 2020h ;; __
add ecx, 02h
jmp _lErrCStart
;;----------------
;;----------------
;; null
_lbl:
cmp al, 00h ;; 00h
jne _lErrCStartEX
;;----------------
;;----------------
;; add info
;;mov dword ptr [ecx], 2a2a2a20h ;; _***
;;----------------
;;----------------
call _imp__SetWindowTextA@8
;;----------------
;;----------------
;; select first error
mov eax, _dErrorCodeStart
sub dword ptr [_xErrorTable+08h], eax
sub dword ptr [_xErrorTable+04h], eax
sub dword ptr [_xErrorTable+18h], eax
sub dword ptr [_xErrorTable+14h], eax
push dword ptr [_xErrorTable+08h]
push dword ptr [_xErrorTable+04h]
push EM_SETSEL
push dword ptr [_hPrg]
call esi ;; _imp__SendMessageA@16
push ebx
push ebx
push EM_SCROLLCARET
push dword ptr [_hPrg]
call esi ;; _imp__SendMessageA@16
push dword ptr [_xErrorTable]
push ebx
push LB_ADDSTRING
push dword ptr [_hList]
call esi ;; _imp__SendMessageA@16
cmp dword ptr [_xErrorTable+10h], 00h
je _next
push dword ptr [_xErrorTable+10h]
push ebx
push LB_ADDSTRING
push dword ptr [_hList]
call esi ;; _imp__SendMessageA@16
_lbl:
;;----------------
_lErrLS:
push ebx
push ebx
push ebx
push offset _hErrCls
call _imp__GetMessageA@16
push offset _hErrCls
call _imp__DispatchMessageA@4
jmp _lErrLS
;;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;; error endp
;;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;; proc wnd_err
;;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
_hErrProc:
mov eax, dword ptr [esp+08h]
cmp eax, WM_SIZE
je _ewmSize
cmp eax, WM_SIZING
je _ewmCSize
cmp eax, WM_PAINT
je _ewmPaint
cmp eax, WM_COMMAND
je _ewmCmd
cmp eax, WM_DESTROY
je _ewmClose
jmp _imp__DefWindowProcA@16
;;----------------
;; close
_ewmClose:
push 01h
call _imp__ExitProcess@4
;;----------------
;;----------------
;; command
_ewmCmd:
mov ebx, dword ptr [esp+0ch]
shr ebx, 10h
cmp ebx, BN_CLICKED
je _ewmClose
cmp ebx, LBN_SELCHANGE
jne _next
mov esi, _imp__SendMessageA@16
push 00h
push 00h
push LB_GETCURSEL
push dword ptr [_hList]
call esi ;; _imp__SendMessageA@16
shl eax, 04h
push dword ptr [_xErrorTable+08h+eax]
push dword ptr [_xErrorTable+04h+eax]
push EM_SETSEL
push dword ptr [_hPrg]
call esi ;; _imp__SendMessageA@16
push ebx
push ebx
push EM_SCROLLCARET
push dword ptr [_hPrg]
call esi ;; _imp__SendMessageA@16
_lbl:
retn 10h
;;----------------
;;----------------
;; sizing
_ewmCSize:
mov ecx, dword ptr [esp+10h]
mov ebx, dword ptr [esp+0ch]
dec ebx ;; WMSZ_LEFT
jnz _next
call _ewmCSizeLeft
retn 10h
_lbl:
dec ebx ;; WMSZ_RIGHT
jnz _next
call _ewmCSizeRight
retn 10h
_lbl:
dec ebx ;; WMSZ_TOP
jnz _next
call _ewmCSizeTop
retn 10h
_lbl:
dec ebx ;; WMSZ_TOPLEFT
jnz _next
call _ewmCSizeTop
call _ewmCSizeLeft
retn 10h
_lbl:
dec ebx ;; WMSZ_TOPRIGHT
jnz _next
call _ewmCSizeTop
call _ewmCSizeRight
retn 10h
_lbl:
dec ebx ;; WMSZ_BOTTOM
jnz _next
call _ewmCSizeBottom
retn 10h
_lbl:
dec ebx ;; WMSZ_BOTTOMLEFT
jnz _next
call _ewmCSizeBottom
call _ewmCSizeLeft
retn 10h
_lbl:
;; dec edx ;; WMSZ_BOTTOMRIGHT
;; jnz _next
call _ewmCSizeBottom
call _ewmCSizeRight
retn 10h
_ewmCSizeBottom:
mov edi, dword ptr [ecx+0ch]
mov esi, dword ptr [ecx+04h]
sub edi, esi
cmp edi, 0300h
jg _next
add esi, 0300h
mov dword ptr [ecx+0ch], esi
_lbl:
retn
_ewmCSizeRight:
mov edi, dword ptr [ecx+08h]
mov esi, dword ptr [ecx]
sub edi, esi
cmp edi, 0400h
jg _next
add esi, 0400h
mov dword ptr [ecx+08h], esi
_lbl:
retn
_ewmCSizeTop:
mov edi, dword ptr [ecx+0ch]
mov esi, dword ptr [ecx+04h]
sub edi, esi
cmp edi, 0300h
jg _next
mov edi, dword ptr [ecx+0ch]
sub edi, 0300h
mov dword ptr [ecx+04h], edi
_lbl:
retn
_ewmCSizeLeft:
mov edi, dword ptr [ecx+08h]
mov esi, dword ptr [ecx]
sub edi, esi
cmp edi, 0400h
jg _next
mov edi, dword ptr [ecx+08h]
sub edi, 0400h
mov dword ptr [ecx], edi
_lbl:
retn
;;----------------
;;----------------
;; paint
_ewmPaint:
push offset _xPntStr
push dword ptr [esp+08h]
push dword ptr [esp+04h]
push dword ptr [esp+04h]
call _imp__BeginPaint@8
mov ebx, eax
push dword ptr [_dGuiFont]
push ebx
call _imp__SelectObject@8
push TRANSPARENT
push ebx
call _imp__SetBkMode@8
push DT_LEFT
push offset _xRect_02
push 0ffffffffh
push offset _sErr_Title
push ebx
call _imp__DrawTextA@20
call _imp__EndPaint@8
retn 10h
;;----------------
;;----------------
;; size
_ewmSize:
cmp dword ptr [esp+0ch], SIZE_MINIMIZED
je _ewmReSize
mov edi, dword ptr [esp+10h]
mov esi, edi
and edi, 0000ffffh ;; x
shr esi, 10h ;; y
sub edi, 20h
sub esi, 00d7h
push 01h
push esi
push edi
push 20h
push 10h
push dword ptr [_hPrg]
call _imp__MoveWindow@24 ;; move edit box
push 01h
push 90h
push 0280h
add esi, 30h
push esi
push 10h
push dword ptr [_hList]
call _imp__MoveWindow@24 ;; move list box
push 01h
push 16h
push 72h
add esi, 7ah
push esi
sub edi, 62h
push edi
push dword ptr [_hBtn]
call _imp__MoveWindow@24 ;; move button
_ewmReSize:
retn 10h
;;----------------
;;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;; wnd_err endp
;;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
end start
;;-------------------------------------------------------------------------