/* _____________________________________________________________________________ Word Functions Header v3.3 _____________________________________________________________________________ 2006 Shengalts Aleksander aka Instructor (Shengalts@mail.ru) See documentation for more information about the following functions. Usage in script: 1. !include "WordFunc.nsh" 2. [Section|Function] ${WordFunction} "Param1" "Param2" "..." $var [SectionEnd|FunctionEnd] WordFunction=[WordFind|WordFindS|WordFind2X|WordFind2XS|WordFind3X|WordFind3XS| WordReplace|WordReplaceS|WordAdd|WordAddS|WordInsert|WordInsertS| StrFilter|StrFilterS|VersionCompare|VersionConvert] _____________________________________________________________________________ Thanks to: _____________________________________________________________________________ WordFind3X Afrow UK (Based on his idea of Function "StrSortLR") StrFilter sunjammer (Function "StrUpper") VersionCompare Afrow UK (Based on his Function "VersionCheckNew2") VersionConvert Afrow UK (Based on his idea of Function "CharIndexReplace") */ ;_____________________________________________________________________________ ; ; Macros ;_____________________________________________________________________________ ; ; Change log window verbosity (default: 3=no script) ; ; Example: ; !include "WordFunc.nsh" ; !insertmacro WordFind ; ${WORDFUNC_VERBOSE} 4 # all verbosity ; !insertmacro WordReplace ; ${WORDFUNC_VERBOSE} 3 # no script !ifndef WORDFUNC_INCLUDED !define WORDFUNC_INCLUDED !include Util.nsh !verbose push !verbose 3 !ifndef _WORDFUNC_VERBOSE !define _WORDFUNC_VERBOSE 3 !endif !verbose ${_WORDFUNC_VERBOSE} !define WORDFUNC_VERBOSE `!insertmacro WORDFUNC_VERBOSE` !verbose pop !macro WORDFUNC_VERBOSE _VERBOSE !verbose push !verbose 3 !undef _WORDFUNC_VERBOSE !define _WORDFUNC_VERBOSE ${_VERBOSE} !verbose pop !macroend !macro WordFindCall _ART _STRING _DELIMITER _OPTION _RESULT !verbose push !verbose ${_WORDFUNC_VERBOSE} Push `${_STRING}` Push `${_DELIMITER}` Push `${_OPTION}` ${CallArtificialFunction}${_ART} WordFind_ Pop ${_RESULT} !verbose pop !macroend !macro WordFindSCall _ART _STRING _DELIMITER _OPTION _RESULT !verbose push !verbose ${_WORDFUNC_VERBOSE} Push `${_STRING}` Push `${_DELIMITER}` Push `${_OPTION}` ${CallArtificialFunction}${_ART} WordFindS_ Pop ${_RESULT} !verbose pop !macroend !macro WordFind2XCall _STRING _DELIMITER1 _DELIMITER2 _NUMBER _RESULT !verbose push !verbose ${_WORDFUNC_VERBOSE} Push `${_STRING}` Push `${_DELIMITER1}` Push `${_DELIMITER2}` Push `${_NUMBER}` ${CallArtificialFunction} WordFind2X_ Pop ${_RESULT} !verbose pop !macroend !macro WordFind2XSCall _STRING _DELIMITER1 _DELIMITER2 _NUMBER _RESULT !verbose push !verbose ${_WORDFUNC_VERBOSE} Push `${_STRING}` Push `${_DELIMITER1}` Push `${_DELIMITER2}` Push `${_NUMBER}` ${CallArtificialFunction} WordFind2XS_ Pop ${_RESULT} !verbose pop !macroend !macro WordFind3XCall _STRING _DELIMITER1 _CENTER _DELIMITER2 _NUMBER _RESULT !verbose push !verbose ${_WORDFUNC_VERBOSE} Push `${_STRING}` Push `${_DELIMITER1}` Push `${_CENTER}` Push `${_DELIMITER2}` Push `${_NUMBER}` ${CallArtificialFunction} WordFind3X_ Pop ${_RESULT} !verbose pop !macroend !macro WordFind3XSCall _STRING _DELIMITER1 _CENTER _DELIMITER2 _NUMBER _RESULT !verbose push !verbose ${_WORDFUNC_VERBOSE} Push `${_STRING}` Push `${_DELIMITER1}` Push `${_CENTER}` Push `${_DELIMITER2}` Push `${_NUMBER}` ${CallArtificialFunction} WordFind3XS_ Pop ${_RESULT} !verbose pop !macroend !macro WordReplaceCall _STRING _WORD1 _WORD2 _NUMBER _RESULT !verbose push !verbose ${_WORDFUNC_VERBOSE} Push `${_STRING}` Push `${_WORD1}` Push `${_WORD2}` Push `${_NUMBER}` ${CallArtificialFunction} WordReplace_ Pop ${_RESULT} !verbose pop !macroend !macro WordReplaceSCall _STRING _WORD1 _WORD2 _NUMBER _RESULT !verbose push !verbose ${_WORDFUNC_VERBOSE} Push `${_STRING}` Push `${_WORD1}` Push `${_WORD2}` Push `${_NUMBER}` ${CallArtificialFunction} WordReplaceS_ Pop ${_RESULT} !verbose pop !macroend !macro WordAddCall _STRING1 _DELIMITER _STRING2 _RESULT !verbose push !verbose ${_WORDFUNC_VERBOSE} Push `${_STRING1}` Push `${_DELIMITER}` Push `${_STRING2}` ${CallArtificialFunction} WordAdd_ Pop ${_RESULT} !verbose pop !macroend !macro WordAddSCall _STRING1 _DELIMITER _STRING2 _RESULT !verbose push !verbose ${_WORDFUNC_VERBOSE} Push `${_STRING1}` Push `${_DELIMITER}` Push `${_STRING2}` ${CallArtificialFunction} WordAddS_ Pop ${_RESULT} !verbose pop !macroend !macro WordInsertCall _STRING _DELIMITER _WORD _NUMBER _RESULT !verbose push !verbose ${_WORDFUNC_VERBOSE} Push `${_STRING}` Push `${_DELIMITER}` Push `${_WORD}` Push `${_NUMBER}` ${CallArtificialFunction} WordInsert_ Pop ${_RESULT} !verbose pop !macroend !macro WordInsertSCall _STRING _DELIMITER _WORD _NUMBER _RESULT !verbose push !verbose ${_WORDFUNC_VERBOSE} Push `${_STRING}` Push `${_DELIMITER}` Push `${_WORD}` Push `${_NUMBER}` ${CallArtificialFunction} WordInsertS_ Pop ${_RESULT} !verbose pop !macroend !macro StrFilterCall _STRING _FILTER _INCLUDE _EXCLUDE _RESULT !verbose push !verbose ${_WORDFUNC_VERBOSE} Push `${_STRING}` Push `${_FILTER}` Push `${_INCLUDE}` Push `${_EXCLUDE}` ${CallArtificialFunction} StrFilter_ Pop ${_RESULT} !verbose pop !macroend !macro StrFilterSCall _STRING _FILTER _INCLUDE _EXCLUDE _RESULT !verbose push !verbose ${_WORDFUNC_VERBOSE} Push `${_STRING}` Push `${_FILTER}` Push `${_INCLUDE}` Push `${_EXCLUDE}` ${CallArtificialFunction} StrFilterS_ Pop ${_RESULT} !verbose pop !macroend !macro VersionCompareCall _VER1 _VER2 _RESULT !verbose push !verbose ${_WORDFUNC_VERBOSE} Push `${_VER1}` Push `${_VER2}` ${CallArtificialFunction} VersionCompare_ Pop ${_RESULT} !verbose pop !macroend !macro VersionConvertCall _VERSION _CHARLIST _RESULT !verbose push !verbose ${_WORDFUNC_VERBOSE} Push `${_VERSION}` Push `${_CHARLIST}` ${CallArtificialFunction} VersionConvert_ Pop ${_RESULT} !verbose pop !macroend !macro WordFindBody _WORDFUNC_S Exch $1 Exch Exch $0 Exch Exch 2 Exch $R0 Exch 2 Push $2 Push $3 Push $4 Push $5 Push $6 Push $7 Push $8 Push $9 Push $R1 Push $R2 ClearErrors StrCpy $9 '' StrCpy $2 $1 1 StrCpy $1 $1 '' 1 StrCmp $2 'E' 0 +3 StrCpy $9 E goto -4 StrCpy $3 '' StrCmp${_WORDFUNC_S} $2 '+' +6 StrCmp${_WORDFUNC_S} $2 '-' +5 StrCmp${_WORDFUNC_S} $2 '/' WordFunc_WordFind${_WORDFUNC_S}_restart StrCmp${_WORDFUNC_S} $2 '#' WordFunc_WordFind${_WORDFUNC_S}_restart StrCmp${_WORDFUNC_S} $2 '*' WordFunc_WordFind${_WORDFUNC_S}_restart goto WordFunc_WordFind${_WORDFUNC_S}_error3 StrCpy $4 $1 1 -1 StrCmp${_WORDFUNC_S} $4 '*' +4 StrCmp${_WORDFUNC_S} $4 '}' +3 StrCmp${_WORDFUNC_S} $4 '{' +2 goto +4 StrCpy $1 $1 -1 StrCpy $3 '$4$3' goto -7 StrCmp${_WORDFUNC_S} $3 '*' WordFunc_WordFind${_WORDFUNC_S}_error3 StrCmp${_WORDFUNC_S} $3 '**' WordFunc_WordFind${_WORDFUNC_S}_error3 StrCmp${_WORDFUNC_S} $3 '}{' WordFunc_WordFind${_WORDFUNC_S}_error3 IntOp $1 $1 + 0 StrCmp${_WORDFUNC_S} $1 0 WordFunc_WordFind${_WORDFUNC_S}_error2 WordFunc_WordFind${_WORDFUNC_S}_restart: StrCmp${_WORDFUNC_S} $R0 '' WordFunc_WordFind${_WORDFUNC_S}_error1 StrCpy $4 0 StrCpy $5 0 StrCpy $6 0 StrLen $7 $0 goto WordFunc_WordFind${_WORDFUNC_S}_loop WordFunc_WordFind${_WORDFUNC_S}_preloop: IntOp $6 $6 + 1 WordFunc_WordFind${_WORDFUNC_S}_loop: StrCpy $8 $R0 $7 $6 StrCmp${_WORDFUNC_S} $8$5 0 WordFunc_WordFind${_WORDFUNC_S}_error1 StrLen $R2 $8 IntCmp $R2 0 +2 StrCmp${_WORDFUNC_S} $8 $0 +5 WordFunc_WordFind${_WORDFUNC_S}_preloop StrCmp${_WORDFUNC_S} $3 '{' WordFunc_WordFind${_WORDFUNC_S}_minus StrCmp${_WORDFUNC_S} $3 '}' WordFunc_WordFind${_WORDFUNC_S}_minus StrCmp${_WORDFUNC_S} $2 '*' WordFunc_WordFind${_WORDFUNC_S}_minus StrCmp${_WORDFUNC_S} $5 $6 WordFunc_WordFind${_WORDFUNC_S}_minus +5 StrCmp${_WORDFUNC_S} $3 '{' +4 StrCmp${_WORDFUNC_S} $3 '}' +3 StrCmp${_WORDFUNC_S} $2 '*' +2 StrCmp${_WORDFUNC_S} $5 $6 WordFunc_WordFind${_WORDFUNC_S}_nextword IntOp $4 $4 + 1 StrCmp${_WORDFUNC_S} $2$4 +$1 WordFunc_WordFind${_WORDFUNC_S}_plus StrCmp${_WORDFUNC_S} $2 '/' 0 WordFunc_WordFind${_WORDFUNC_S}_nextword IntOp $8 $6 - $5 StrCpy $8 $R0 $8 $5 StrCmp${_WORDFUNC_S} $1 $8 0 WordFunc_WordFind${_WORDFUNC_S}_nextword StrCpy $R1 $4 goto WordFunc_WordFind${_WORDFUNC_S}_end WordFunc_WordFind${_WORDFUNC_S}_nextword: IntOp $6 $6 + $7 StrCpy $5 $6 goto WordFunc_WordFind${_WORDFUNC_S}_loop WordFunc_WordFind${_WORDFUNC_S}_minus: StrCmp${_WORDFUNC_S} $2 '-' 0 WordFunc_WordFind${_WORDFUNC_S}_sum StrCpy $2 '+' IntOp $1 $4 - $1 IntOp $1 $1 + 1 IntCmp $1 0 WordFunc_WordFind${_WORDFUNC_S}_error2 WordFunc_WordFind${_WORDFUNC_S}_error2 WordFunc_WordFind${_WORDFUNC_S}_restart WordFunc_WordFind${_WORDFUNC_S}_sum: StrCmp${_WORDFUNC_S} $2 '#' 0 WordFunc_WordFind${_WORDFUNC_S}_sumdelim StrCpy $R1 $4 goto WordFunc_WordFind${_WORDFUNC_S}_end WordFunc_WordFind${_WORDFUNC_S}_sumdelim: StrCmp${_WORDFUNC_S} $2 '*' 0 WordFunc_WordFind${_WORDFUNC_S}_error2 StrCpy $R1 $4 goto WordFunc_WordFind${_WORDFUNC_S}_end WordFunc_WordFind${_WORDFUNC_S}_plus: StrCmp${_WORDFUNC_S} $3 '' 0 +4 IntOp $6 $6 - $5 StrCpy $R1 $R0 $6 $5 goto WordFunc_WordFind${_WORDFUNC_S}_end StrCmp${_WORDFUNC_S} $3 '{' 0 +3 StrCpy $R1 $R0 $6 goto WordFunc_WordFind${_WORDFUNC_S}_end StrCmp${_WORDFUNC_S} $3 '}' 0 +4 IntOp $6 $6 + $7 StrCpy $R1 $R0 '' $6 goto WordFunc_WordFind${_WORDFUNC_S}_end StrCmp${_WORDFUNC_S} $3 '{*' +2 StrCmp${_WORDFUNC_S} $3 '*{' 0 +3 StrCpy $R1 $R0 $6 goto WordFunc_WordFind${_WORDFUNC_S}_end StrCmp${_WORDFUNC_S} $3 '*}' +2 StrCmp${_WORDFUNC_S} $3 '}*' 0 +3 StrCpy $R1 $R0 '' $5 goto WordFunc_WordFind${_WORDFUNC_S}_end StrCmp${_WORDFUNC_S} $3 '}}' 0 +3 StrCpy $R1 $R0 '' $6 goto WordFunc_WordFind${_WORDFUNC_S}_end StrCmp${_WORDFUNC_S} $3 '{{' 0 +3 StrCpy $R1 $R0 $5 goto WordFunc_WordFind${_WORDFUNC_S}_end StrCmp${_WORDFUNC_S} $3 '{}' 0 WordFunc_WordFind${_WORDFUNC_S}_error3 StrLen $3 $R0 StrCmp${_WORDFUNC_S} $3 $6 0 +3 StrCpy $0 '' goto +2 IntOp $6 $6 + $7 StrCpy $8 $R0 '' $6 StrCmp${_WORDFUNC_S} $4$8 1 +6 StrCmp${_WORDFUNC_S} $4 1 +2 +7 IntOp $6 $6 + $7 StrCpy $3 $R0 $7 $6 StrCmp${_WORDFUNC_S} $3 '' +2 StrCmp${_WORDFUNC_S} $3 $0 -3 +3 StrCpy $R1 '' goto WordFunc_WordFind${_WORDFUNC_S}_end StrCmp${_WORDFUNC_S} $5 0 0 +3 StrCpy $0 '' goto +2 IntOp $5 $5 - $7 StrCpy $3 $R0 $5 StrCpy $R1 '$3$0$8' goto WordFunc_WordFind${_WORDFUNC_S}_end WordFunc_WordFind${_WORDFUNC_S}_error3: StrCpy $R1 3 goto WordFunc_WordFind${_WORDFUNC_S}_error WordFunc_WordFind${_WORDFUNC_S}_error2: StrCpy $R1 2 goto WordFunc_WordFind${_WORDFUNC_S}_error WordFunc_WordFind${_WORDFUNC_S}_error1: StrCpy $R1 1 WordFunc_WordFind${_WORDFUNC_S}_error: StrCmp $9 'E' 0 +3 SetErrors WordFunc_WordFind${_WORDFUNC_S}_end: StrCpy $R0 $R1 Pop $R2 Pop $R1 Pop $9 Pop $8 Pop $7 Pop $6 Pop $5 Pop $4 Pop $3 Pop $2 Pop $1 Pop $0 Exch $R0 !macroend !define WordFind `!insertmacro WordFindCall ''` !define un.WordFind `!insertmacro WordFindCall ''` !macro WordFind !macroend !macro un.WordFind !macroend !macro WordFind_ !verbose push !verbose ${_WORDFUNC_VERBOSE} !insertmacro WordFindBody '' !verbose pop !macroend !define WordFindS `!insertmacro WordFindSCall ''` !define un.WordFindS `!insertmacro WordFindSCall ''` !macro WordFindS !macroend !macro un.WordFindS !macroend !macro WordFindS_ !verbose push !verbose ${_WORDFUNC_VERBOSE} !insertmacro WordFindBody 'S' !verbose pop !macroend !macro WordFind2XBody _WORDFUNC_S Exch $2 Exch Exch $1 Exch Exch 2 Exch $0 Exch 2 Exch 3 Exch $R0 Exch 3 Push $3 Push $4 Push $5 Push $6 Push $7 Push $8 Push $9 Push $R1 Push $R2 ClearErrors StrCpy $R2 '' StrCpy $3 $2 1 StrCpy $2 $2 '' 1 StrCmp $3 'E' 0 +3 StrCpy $R2 E goto -4 StrCmp${_WORDFUNC_S} $3 '+' +5 StrCmp${_WORDFUNC_S} $3 '-' +4 StrCmp${_WORDFUNC_S} $3 '#' WordFunc_WordFind2X${_WORDFUNC_S}_restart StrCmp${_WORDFUNC_S} $3 '/' WordFunc_WordFind2X${_WORDFUNC_S}_restart goto WordFunc_WordFind2X${_WORDFUNC_S}_error3 StrCpy $4 $2 2 -2 StrCmp${_WORDFUNC_S} $4 '{{' +9 StrCmp${_WORDFUNC_S} $4 '}}' +8 StrCmp${_WORDFUNC_S} $4 '{*' +7 StrCmp${_WORDFUNC_S} $4 '*{' +6 StrCmp${_WORDFUNC_S} $4 '*}' +5 StrCmp${_WORDFUNC_S} $4 '}*' +4 StrCmp${_WORDFUNC_S} $4 '{}' +3 StrCpy $4 '' goto +2 StrCpy $2 $2 -2 IntOp $2 $2 + 0 StrCmp${_WORDFUNC_S} $2 0 WordFunc_WordFind2X${_WORDFUNC_S}_error2 WordFunc_WordFind2X${_WORDFUNC_S}_restart: StrCmp${_WORDFUNC_S} $R0 '' WordFunc_WordFind2X${_WORDFUNC_S}_error1 StrCpy $5 -1 StrCpy $6 0 StrCpy $7 '' StrLen $8 $0 StrLen $9 $1 WordFunc_WordFind2X${_WORDFUNC_S}_loop: IntOp $5 $5 + 1 WordFunc_WordFind2X${_WORDFUNC_S}_delim1: StrCpy $R1 $R0 $8 $5 StrCmp${_WORDFUNC_S} $R1$6 0 WordFunc_WordFind2X${_WORDFUNC_S}_error1 StrCmp${_WORDFUNC_S} $R1 '' WordFunc_WordFind2X${_WORDFUNC_S}_minus StrCmp${_WORDFUNC_S} $R1 $0 +2 StrCmp${_WORDFUNC_S} $7 '' WordFunc_WordFind2X${_WORDFUNC_S}_loop WordFunc_WordFind2X${_WORDFUNC_S}_delim2 StrCmp${_WORDFUNC_S} $0 $1 0 +2 StrCmp${_WORDFUNC_S} $7 '' 0 WordFunc_WordFind2X${_WORDFUNC_S}_delim2 IntOp $7 $5 + $8 StrCpy $5 $7 goto WordFunc_WordFind2X${_WORDFUNC_S}_delim1 WordFunc_WordFind2X${_WORDFUNC_S}_delim2: StrCpy $R1 $R0 $9 $5 StrCmp${_WORDFUNC_S} $R1 $1 0 WordFunc_WordFind2X${_WORDFUNC_S}_loop IntOp $6 $6 + 1 StrCmp${_WORDFUNC_S} $3$6 '+$2' WordFunc_WordFind2X${_WORDFUNC_S}_plus StrCmp${_WORDFUNC_S} $3 '/' 0 WordFunc_WordFind2X${_WORDFUNC_S}_nextword IntOp $R1 $5 - $7 StrCpy $R1 $R0 $R1 $7 StrCmp${_WORDFUNC_S} $R1 $2 0 +3 StrCpy $R1 $6 goto WordFunc_WordFind2X${_WORDFUNC_S}_end WordFunc_WordFind2X${_WORDFUNC_S}_nextword: IntOp $5 $5 + $9 StrCpy $7 '' goto WordFunc_WordFind2X${_WORDFUNC_S}_delim1 WordFunc_WordFind2X${_WORDFUNC_S}_minus: StrCmp${_WORDFUNC_S} $3 '-' 0 WordFunc_WordFind2X${_WORDFUNC_S}_sum StrCpy $3 + IntOp $2 $6 - $2 IntOp $2 $2 + 1 IntCmp $2 0 WordFunc_WordFind2X${_WORDFUNC_S}_error2 WordFunc_WordFind2X${_WORDFUNC_S}_error2 WordFunc_WordFind2X${_WORDFUNC_S}_restart WordFunc_WordFind2X${_WORDFUNC_S}_sum: StrCmp${_WORDFUNC_S} $3 '#' 0 WordFunc_WordFind2X${_WORDFUNC_S}_error2 StrCpy $R1 $6 goto WordFunc_WordFind2X${_WORDFUNC_S}_end WordFunc_WordFind2X${_WORDFUNC_S}_plus: StrCmp${_WORDFUNC_S} $4 '' 0 +4 IntOp $R1 $5 - $7 StrCpy $R1 $R0 $R1 $7 goto WordFunc_WordFind2X${_WORDFUNC_S}_end IntOp $5 $5 + $9 IntOp $7 $7 - $8 StrCmp${_WORDFUNC_S} $4 '{*' +2 StrCmp${_WORDFUNC_S} $4 '*{' 0 +3 StrCpy $R1 $R0 $5 goto WordFunc_WordFind2X${_WORDFUNC_S}_end StrCmp${_WORDFUNC_S} $4 '*}' +2 StrCmp${_WORDFUNC_S} $4 '}*' 0 +3 StrCpy $R1 $R0 '' $7 goto WordFunc_WordFind2X${_WORDFUNC_S}_end StrCmp${_WORDFUNC_S} $4 '}}' 0 +3 StrCpy $R1 $R0 '' $5 goto WordFunc_WordFind2X${_WORDFUNC_S}_end StrCmp${_WORDFUNC_S} $4 '{{' 0 +3 StrCpy $R1 $R0 $7 goto WordFunc_WordFind2X${_WORDFUNC_S}_end StrCmp${_WORDFUNC_S} $4 '{}' 0 WordFunc_WordFind2X${_WORDFUNC_S}_error3 StrCpy $5 $R0 '' $5 StrCpy $7 $R0 $7 StrCpy $R1 '$7$5' goto WordFunc_WordFind2X${_WORDFUNC_S}_end WordFunc_WordFind2X${_WORDFUNC_S}_error3: StrCpy $R1 3 goto WordFunc_WordFind2X${_WORDFUNC_S}_error WordFunc_WordFind2X${_WORDFUNC_S}_error2: StrCpy $R1 2 goto WordFunc_WordFind2X${_WORDFUNC_S}_error WordFunc_WordFind2X${_WORDFUNC_S}_error1: StrCpy $R1 1 WordFunc_WordFind2X${_WORDFUNC_S}_error: StrCmp $R2 'E' 0 +3 SetErrors WordFunc_WordFind2X${_WORDFUNC_S}_end: StrCpy $R0 $R1 Pop $R2 Pop $R1 Pop $9 Pop $8 Pop $7 Pop $6 Pop $5 Pop $4 Pop $3 Pop $2 Pop $1 Pop $0 Exch $R0 !macroend !define WordFind2X `!insertmacro WordFind2XCall` !define un.WordFind2X `!insertmacro WordFind2XCall` !macro WordFind2X !macroend !macro un.WordFind2X !macroend !macro WordFind2X_ !verbose push !verbose ${_WORDFUNC_VERBOSE} !insertmacro WordFind2XBody '' !verbose pop !macroend !define WordFind2XS `!insertmacro WordFind2XSCall` !define un.WordFind2XS `!insertmacro WordFind2XSCall` !macro WordFind2XS !macroend !macro un.WordFind2XS !macroend !macro WordFind2XS_ !verbose push !verbose ${_WORDFUNC_VERBOSE} !insertmacro WordFind2XBody 'S' !verbose pop !macroend !macro WordFind3XBody _WORDFUNC_S Exch $3 Exch Exch $2 Exch Exch 2 Exch $1 Exch 2 Exch 3 Exch $0 Exch 3 Exch 4 Exch $R0 Exch 4 Push $4 Push $5 Push $6 Push $7 Push $8 Push $9 Push $R1 Push $R2 Push $R3 Push $R4 Push $R5 ClearErrors StrCpy $R5 '' StrCpy $4 $3 1 StrCpy $3 $3 '' 1 StrCmp $4 'E' 0 +3 StrCpy $R5 E goto -4 StrCmp${_WORDFUNC_S} $4 '+' +5 StrCmp${_WORDFUNC_S} $4 '-' +4 StrCmp${_WORDFUNC_S} $4 '#' WordFunc_WordFind3X${_WORDFUNC_S}_restart StrCmp${_WORDFUNC_S} $4 '/' WordFunc_WordFind3X${_WORDFUNC_S}_restart goto WordFunc_WordFind3X${_WORDFUNC_S}_error3 StrCpy $5 $3 2 -2 StrCmp${_WORDFUNC_S} $5 '{{' +9 StrCmp${_WORDFUNC_S} $5 '}}' +8 StrCmp${_WORDFUNC_S} $5 '{*' +7 StrCmp${_WORDFUNC_S} $5 '*{' +6 StrCmp${_WORDFUNC_S} $5 '*}' +5 StrCmp${_WORDFUNC_S} $5 '}*' +4 StrCmp${_WORDFUNC_S} $5 '{}' +3 StrCpy $5 '' goto +2 StrCpy $3 $3 -2 IntOp $3 $3 + 0 StrCmp${_WORDFUNC_S} $3 0 WordFunc_WordFind3X${_WORDFUNC_S}_error2 WordFunc_WordFind3X${_WORDFUNC_S}_restart: StrCmp${_WORDFUNC_S} $R0 '' WordFunc_WordFind3X${_WORDFUNC_S}_error1 StrCpy $6 -1 StrCpy $7 0 StrCpy $8 '' StrCpy $9 '' StrLen $R1 $0 StrLen $R2 $1 StrLen $R3 $2 WordFunc_WordFind3X${_WORDFUNC_S}_loop: IntOp $6 $6 + 1 WordFunc_WordFind3X${_WORDFUNC_S}_delim1: StrCpy $R4 $R0 $R1 $6 StrCmp${_WORDFUNC_S} $R4$7 0 WordFunc_WordFind3X${_WORDFUNC_S}_error1 StrCmp${_WORDFUNC_S} $R4 '' WordFunc_WordFind3X${_WORDFUNC_S}_minus StrCmp${_WORDFUNC_S} $R4 $0 +2 StrCmp${_WORDFUNC_S} $8 '' WordFunc_WordFind3X${_WORDFUNC_S}_loop WordFunc_WordFind3X${_WORDFUNC_S}_center StrCmp${_WORDFUNC_S} $0 $1 +2 StrCmp${_WORDFUNC_S} $0 $2 0 +2 StrCmp${_WORDFUNC_S} $8 '' 0 WordFunc_WordFind3X${_WORDFUNC_S}_center IntOp $8 $6 + $R1 StrCpy $6 $8 goto WordFunc_WordFind3X${_WORDFUNC_S}_delim1 WordFunc_WordFind3X${_WORDFUNC_S}_center: StrCmp${_WORDFUNC_S} $9 '' 0 WordFunc_WordFind3X${_WORDFUNC_S}_delim2 StrCpy $R4 $R0 $R2 $6 StrCmp${_WORDFUNC_S} $R4 $1 0 WordFunc_WordFind3X${_WORDFUNC_S}_loop IntOp $9 $6 + $R2 StrCpy $6 $9 goto WordFunc_WordFind3X${_WORDFUNC_S}_delim1 WordFunc_WordFind3X${_WORDFUNC_S}_delim2: StrCpy $R4 $R0 $R3 $6 StrCmp${_WORDFUNC_S} $R4 $2 0 WordFunc_WordFind3X${_WORDFUNC_S}_loop IntOp $7 $7 + 1 StrCmp${_WORDFUNC_S} $4$7 '+$3' WordFunc_WordFind3X${_WORDFUNC_S}_plus StrCmp${_WORDFUNC_S} $4 '/' 0 WordFunc_WordFind3X${_WORDFUNC_S}_nextword IntOp $R4 $6 - $8 StrCpy $R4 $R0 $R4 $8 StrCmp${_WORDFUNC_S} $R4 $3 0 +3 StrCpy $R4 $7 goto WordFunc_WordFind3X${_WORDFUNC_S}_end WordFunc_WordFind3X${_WORDFUNC_S}_nextword: IntOp $6 $6 + $R3 StrCpy $8 '' StrCpy $9 '' goto WordFunc_WordFind3X${_WORDFUNC_S}_delim1 WordFunc_WordFind3X${_WORDFUNC_S}_minus: StrCmp${_WORDFUNC_S} $4 '-' 0 WordFunc_WordFind3X${_WORDFUNC_S}_sum StrCpy $4 + IntOp $3 $7 - $3 IntOp $3 $3 + 1 IntCmp $3 0 WordFunc_WordFind3X${_WORDFUNC_S}_error2 WordFunc_WordFind3X${_WORDFUNC_S}_error2 WordFunc_WordFind3X${_WORDFUNC_S}_restart WordFunc_WordFind3X${_WORDFUNC_S}_sum: StrCmp${_WORDFUNC_S} $4 '#' 0 WordFunc_WordFind3X${_WORDFUNC_S}_error2 StrCpy $R4 $7 goto WordFunc_WordFind3X${_WORDFUNC_S}_end WordFunc_WordFind3X${_WORDFUNC_S}_plus: StrCmp${_WORDFUNC_S} $5 '' 0 +4 IntOp $R4 $6 - $8 StrCpy $R4 $R0 $R4 $8 goto WordFunc_WordFind3X${_WORDFUNC_S}_end IntOp $6 $6 + $R3 IntOp $8 $8 - $R1 StrCmp${_WORDFUNC_S} $5 '{*' +2 StrCmp${_WORDFUNC_S} $5 '*{' 0 +3 StrCpy $R4 $R0 $6 goto WordFunc_WordFind3X${_WORDFUNC_S}_end StrCmp${_WORDFUNC_S} $5 '*}' +2 StrCmp${_WORDFUNC_S} $5 '}*' 0 +3 StrCpy $R4 $R0 '' $8 goto WordFunc_WordFind3X${_WORDFUNC_S}_end StrCmp${_WORDFUNC_S} $5 '}}' 0 +3 StrCpy $R4 $R0 '' $6 goto WordFunc_WordFind3X${_WORDFUNC_S}_end StrCmp${_WORDFUNC_S} $5 '{{' 0 +3 StrCpy $R4 $R0 $8 goto WordFunc_WordFind3X${_WORDFUNC_S}_end StrCmp${_WORDFUNC_S} $5 '{}' 0 WordFunc_WordFind3X${_WORDFUNC_S}_error3 StrCpy $6 $R0 '' $6 StrCpy $8 $R0 $8 StrCpy $R4 '$8$6' goto WordFunc_WordFind3X${_WORDFUNC_S}_end WordFunc_WordFind3X${_WORDFUNC_S}_error3: StrCpy $R4 3 goto WordFunc_WordFind3X${_WORDFUNC_S}_error WordFunc_WordFind3X${_WORDFUNC_S}_error2: StrCpy $R4 2 goto WordFunc_WordFind3X${_WORDFUNC_S}_error WordFunc_WordFind3X${_WORDFUNC_S}_error1: StrCpy $R4 1 WordFunc_WordFind3X${_WORDFUNC_S}_error: StrCmp $R5 'E' 0 +3 SetErrors WordFunc_WordFind3X${_WORDFUNC_S}_end: StrCpy $R0 $R4 Pop $R5 Pop $R4 Pop $R3 Pop $R2 Pop $R1 Pop $9 Pop $8 Pop $7 Pop $6 Pop $5 Pop $4 Pop $3 Pop $2 Pop $1 Pop $0 Exch $R0 !macroend !define WordFind3X `!insertmacro WordFind3XCall` !define un.WordFind3X `!insertmacro WordFind3XCall` !macro WordFind3X !macroend !macro un.WordFind3X !macroend !macro WordFind3X_ !verbose push !verbose ${_WORDFUNC_VERBOSE} !insertmacro WordFind3XBody '' !verbose pop !macroend !define WordFind3XS `!insertmacro WordFind3XSCall` !define un.WordFind3XS `!insertmacro WordFind3XSCall` !macro WordFind3XS !macroend !macro un.WordFind3XS !macroend !macro WordFind3XS_ !verbose push !verbose ${_WORDFUNC_VERBOSE} !insertmacro WordFind3XBody 'S' !verbose pop !macroend !macro WordReplaceBody _WORDFUNC_S Exch $2 Exch Exch $1 Exch Exch 2 Exch $0 Exch 2 Exch 3 Exch $R0 Exch 3 Push $3 Push $4 Push $5 Push $6 Push $7 Push $8 Push $9 Push $R1 ClearErrors StrCpy $R1 $R0 StrCpy $9 '' StrCpy $3 $2 1 StrCpy $2 $2 '' 1 StrCmp $3 'E' 0 +3 StrCpy $9 E goto -4 StrCpy $4 $2 1 -1 StrCpy $5 '' StrCpy $6 '' StrLen $7 $0 StrCmp${_WORDFUNC_S} $7 0 WordFunc_WordReplace${_WORDFUNC_S}_error1 StrCmp${_WORDFUNC_S} $R0 '' WordFunc_WordReplace${_WORDFUNC_S}_error1 StrCmp${_WORDFUNC_S} $3 '{' WordFunc_WordReplace${_WORDFUNC_S}_beginning StrCmp${_WORDFUNC_S} $3 '}' WordFunc_WordReplace${_WORDFUNC_S}_ending WordFunc_WordReplace${_WORDFUNC_S}_errorchk WordFunc_WordReplace${_WORDFUNC_S}_beginning: StrCpy $8 $R0 $7 StrCmp${_WORDFUNC_S} $8 $0 0 +4 StrCpy $R0 $R0 '' $7 StrCpy $5 '$5$1' goto -4 StrCpy $3 $2 1 StrCmp${_WORDFUNC_S} $3 '}' 0 WordFunc_WordReplace${_WORDFUNC_S}_merge WordFunc_WordReplace${_WORDFUNC_S}_ending: StrCpy $8 $R0 '' -$7 StrCmp${_WORDFUNC_S} $8 $0 0 +4 StrCpy $R0 $R0 -$7 StrCpy $6 '$6$1' goto -4 WordFunc_WordReplace${_WORDFUNC_S}_merge: StrCmp${_WORDFUNC_S} $4 '*' 0 +5 StrCmp${_WORDFUNC_S} $5 '' +2 StrCpy $5 $1 StrCmp${_WORDFUNC_S} $6 '' +2 StrCpy $6 $1 StrCpy $R0 '$5$R0$6' goto WordFunc_WordReplace${_WORDFUNC_S}_end WordFunc_WordReplace${_WORDFUNC_S}_errorchk: StrCmp${_WORDFUNC_S} $3 '+' +2 StrCmp${_WORDFUNC_S} $3 '-' 0 WordFunc_WordReplace${_WORDFUNC_S}_error3 StrCpy $5 $2 1 IntOp $2 $2 + 0 StrCmp${_WORDFUNC_S} $2 0 0 WordFunc_WordReplace${_WORDFUNC_S}_one StrCmp${_WORDFUNC_S} $5 0 WordFunc_WordReplace${_WORDFUNC_S}_error2 StrCpy $3 '' WordFunc_WordReplace${_WORDFUNC_S}_all: StrCpy $5 0 StrCpy $2 $R0 $7 $5 StrCmp${_WORDFUNC_S} $2 '' +4 StrCmp${_WORDFUNC_S} $2 $0 +6 IntOp $5 $5 + 1 goto -4 StrCmp${_WORDFUNC_S} $R0 $R1 WordFunc_WordReplace${_WORDFUNC_S}_error1 StrCpy $R0 '$3$R0' goto WordFunc_WordReplace${_WORDFUNC_S}_end StrCpy $2 $R0 $5 IntOp $5 $5 + $7 StrCmp${_WORDFUNC_S} $4 '*' 0 +3 StrCpy $6 $R0 $7 $5 StrCmp${_WORDFUNC_S} $6 $0 -3 StrCpy $R0 $R0 '' $5 StrCpy $3 '$3$2$1' goto WordFunc_WordReplace${_WORDFUNC_S}_all WordFunc_WordReplace${_WORDFUNC_S}_one: StrCpy $5 0 StrCpy $8 0 goto WordFunc_WordReplace${_WORDFUNC_S}_loop WordFunc_WordReplace${_WORDFUNC_S}_preloop: IntOp $5 $5 + 1 WordFunc_WordReplace${_WORDFUNC_S}_loop: StrCpy $6 $R0 $7 $5 StrCmp${_WORDFUNC_S} $6$8 0 WordFunc_WordReplace${_WORDFUNC_S}_error1 StrCmp${_WORDFUNC_S} $6 '' WordFunc_WordReplace${_WORDFUNC_S}_minus StrCmp${_WORDFUNC_S} $6 $0 0 WordFunc_WordReplace${_WORDFUNC_S}_preloop IntOp $8 $8 + 1 StrCmp${_WORDFUNC_S} $3$8 +$2 WordFunc_WordReplace${_WORDFUNC_S}_found IntOp $5 $5 + $7 goto WordFunc_WordReplace${_WORDFUNC_S}_loop WordFunc_WordReplace${_WORDFUNC_S}_minus: StrCmp${_WORDFUNC_S} $3 '-' 0 WordFunc_WordReplace${_WORDFUNC_S}_error2 StrCpy $3 + IntOp $2 $8 - $2 IntOp $2 $2 + 1 IntCmp $2 0 WordFunc_WordReplace${_WORDFUNC_S}_error2 WordFunc_WordReplace${_WORDFUNC_S}_error2 WordFunc_WordReplace${_WORDFUNC_S}_one WordFunc_WordReplace${_WORDFUNC_S}_found: StrCpy $3 $R0 $5 StrCmp${_WORDFUNC_S} $4 '*' 0 +5 StrCpy $6 $3 '' -$7 StrCmp${_WORDFUNC_S} $6 $0 0 +3 StrCpy $3 $3 -$7 goto -3 IntOp $5 $5 + $7 StrCmp${_WORDFUNC_S} $4 '*' 0 +3 StrCpy $6 $R0 $7 $5 StrCmp${_WORDFUNC_S} $6 $0 -3 StrCpy $R0 $R0 '' $5 StrCpy $R0 '$3$1$R0' goto WordFunc_WordReplace${_WORDFUNC_S}_end WordFunc_WordReplace${_WORDFUNC_S}_error3: StrCpy $R0 3 goto WordFunc_WordReplace${_WORDFUNC_S}_error WordFunc_WordReplace${_WORDFUNC_S}_error2: StrCpy $R0 2 goto WordFunc_WordReplace${_WORDFUNC_S}_error WordFunc_WordReplace${_WORDFUNC_S}_error1: StrCpy $R0 1 WordFunc_WordReplace${_WORDFUNC_S}_error: StrCmp $9 'E' +3 StrCpy $R0 $R1 goto +2 SetErrors WordFunc_WordReplace${_WORDFUNC_S}_end: Pop $R1 Pop $9 Pop $8 Pop $7 Pop $6 Pop $5 Pop $4 Pop $3 Pop $2 Pop $1 Pop $0 Exch $R0 !macroend !define WordReplace `!insertmacro WordReplaceCall` !define un.WordReplace `!insertmacro WordReplaceCall` !macro WordReplace !macroend !macro un.WordReplace !macroend !macro WordReplace_ !verbose push !verbose ${_WORDFUNC_VERBOSE} !insertmacro WordReplaceBody '' !verbose pop !macroend !define WordReplaceS `!insertmacro WordReplaceSCall` !define un.WordReplaceS `!insertmacro WordReplaceSCall` !macro WordReplaceS !macroend !macro un.WordReplaceS !macroend !macro WordReplaceS_ !verbose push !verbose ${_WORDFUNC_VERBOSE} !insertmacro WordReplaceBody 'S' !verbose pop !macroend !macro WordAddBody _WORDFUNC_S Exch $1 Exch Exch $0 Exch Exch 2 Exch $R0 Exch 2 Push $2 Push $3 Push $4 Push $5 Push $6 Push $7 Push $R1 ClearErrors StrCpy $7 '' StrCpy $2 $1 1 StrCmp $2 'E' 0 +4 StrCpy $7 E StrCpy $1 $1 '' 1 goto -4 StrCpy $5 0 StrCpy $R1 $R0 StrCpy $2 $1 '' 1 StrCpy $1 $1 1 StrCmp${_WORDFUNC_S} $1 '+' +2 StrCmp${_WORDFUNC_S} $1 '-' 0 WordFunc_WordAdd${_WORDFUNC_S}_error3 StrCmp${_WORDFUNC_S} $0 '' WordFunc_WordAdd${_WORDFUNC_S}_error1 StrCmp${_WORDFUNC_S} $2 '' WordFunc_WordAdd${_WORDFUNC_S}_end StrCmp${_WORDFUNC_S} $R0 '' 0 +5 StrCmp${_WORDFUNC_S} $1 '-' WordFunc_WordAdd${_WORDFUNC_S}_end StrCmp${_WORDFUNC_S} $1 '+' 0 +3 StrCpy $R0 $2 goto WordFunc_WordAdd${_WORDFUNC_S}_end WordFunc_WordAdd${_WORDFUNC_S}_loop: IntOp $5 $5 + 1 !insertmacro WordFind${_WORDFUNC_S}Call 2 $2 $0 E+$5 $3 IfErrors 0 WordFunc_WordAdd${_WORDFUNC_S}_/word StrCmp${_WORDFUNC_S} $3 2 +4 StrCmp${_WORDFUNC_S} $3$5 11 0 +3 StrCpy $3 $2 goto WordFunc_WordAdd${_WORDFUNC_S}_/word StrCmp${_WORDFUNC_S} $1 '-' WordFunc_WordAdd${_WORDFUNC_S}_end WordFunc_WordAdd${_WORDFUNC_S}_preend WordFunc_WordAdd${_WORDFUNC_S}_/word: !insertmacro WordFind${_WORDFUNC_S}Call 2 $R0 $0 E/$3 $4 IfErrors +2 StrCmp${_WORDFUNC_S} $1 '-' WordFunc_WordAdd${_WORDFUNC_S}_delete WordFunc_WordAdd${_WORDFUNC_S}_loop StrCmp${_WORDFUNC_S} $1$4 '-1' +2 StrCmp${_WORDFUNC_S} $1 '-' WordFunc_WordAdd${_WORDFUNC_S}_loop +4 StrCmp${_WORDFUNC_S} $R0 $3 0 WordFunc_WordAdd${_WORDFUNC_S}_loop StrCpy $R0 '' goto WordFunc_WordAdd${_WORDFUNC_S}_end StrCmp${_WORDFUNC_S} $1$4 '+1' 0 +2 StrCmp${_WORDFUNC_S} $R0 $3 WordFunc_WordAdd${_WORDFUNC_S}_loop StrCmp${_WORDFUNC_S} $R0 $R1 +3 StrCpy $R1 '$R1$0$3' goto WordFunc_WordAdd${_WORDFUNC_S}_loop StrLen $6 $0 StrCpy $6 $R0 '' -$6 StrCmp${_WORDFUNC_S} $6 $0 0 -4 StrCpy $R1 '$R1$3' goto WordFunc_WordAdd${_WORDFUNC_S}_loop WordFunc_WordAdd${_WORDFUNC_S}_delete: !insertmacro WordFind${_WORDFUNC_S}Call 2 $R0 $0 E+$4{} $R0 goto WordFunc_WordAdd${_WORDFUNC_S}_/word WordFunc_WordAdd${_WORDFUNC_S}_error3: StrCpy $R1 3 goto WordFunc_WordAdd${_WORDFUNC_S}_error WordFunc_WordAdd${_WORDFUNC_S}_error1: StrCpy $R1 1 WordFunc_WordAdd${_WORDFUNC_S}_error: StrCmp $7 'E' 0 WordFunc_WordAdd${_WORDFUNC_S}_end SetErrors WordFunc_WordAdd${_WORDFUNC_S}_preend: StrCpy $R0 $R1 WordFunc_WordAdd${_WORDFUNC_S}_end: Pop $R1 Pop $7 Pop $6 Pop $5 Pop $4 Pop $3 Pop $2 Pop $1 Pop $0 Exch $R0 !macroend !define WordAdd `!insertmacro WordAddCall` !define un.WordAdd `!insertmacro WordAddCall` !macro WordAdd !macroend !macro un.WordAdd !macroend !macro WordAdd_ !verbose push !verbose ${_WORDFUNC_VERBOSE} !insertmacro WordAddBody '' !verbose pop !macroend !define WordAddS `!insertmacro WordAddSCall` !define un.WordAddS `!insertmacro WordAddSCall` !macro WordAddS !macroend !macro un.WordAddS !macroend !macro WordAddS_ !verbose push !verbose ${_WORDFUNC_VERBOSE} !insertmacro WordAddBody 'S' !verbose pop !macroend !macro WordInsertBody _WORDFUNC_S Exch $2 Exch Exch $1 Exch Exch 2 Exch $0 Exch 2 Exch 3 Exch $R0 Exch 3 Push $3 Push $4 Push $5 Push $6 Push $7 Push $8 Push $9 Push $R1 ClearErrors StrCpy $5 '' StrCpy $6 $0 StrCpy $7 } StrCpy $9 '' StrCpy $R1 $R0 StrCpy $3 $2 1 StrCpy $2 $2 '' 1 StrCmp $3 'E' 0 +3 StrCpy $9 'E' goto -4 StrCmp${_WORDFUNC_S} $3 '+' +2 StrCmp${_WORDFUNC_S} $3 '-' 0 WordFunc_WordInsert${_WORDFUNC_S}_error3 IntOp $2 $2 + 0 StrCmp${_WORDFUNC_S} $2 0 WordFunc_WordInsert${_WORDFUNC_S}_error2 StrCmp${_WORDFUNC_S} $0 '' WordFunc_WordInsert${_WORDFUNC_S}_error1 StrCmp${_WORDFUNC_S} $2 1 0 WordFunc_WordInsert${_WORDFUNC_S}_two GetLabelAddress $8 WordFunc_WordInsert${_WORDFUNC_S}_oneback StrCmp${_WORDFUNC_S} $3 '+' WordFunc_WordInsert${_WORDFUNC_S}_call StrCpy $7 { goto WordFunc_WordInsert${_WORDFUNC_S}_call WordFunc_WordInsert${_WORDFUNC_S}_oneback: IfErrors 0 +2 StrCpy $4 $R0 StrCmp${_WORDFUNC_S} $3 '+' 0 +3 StrCpy $R0 '$1$0$4' goto WordFunc_WordInsert${_WORDFUNC_S}_end StrCpy $R0 '$4$0$1' goto WordFunc_WordInsert${_WORDFUNC_S}_end WordFunc_WordInsert${_WORDFUNC_S}_two: IntOp $2 $2 - 1 GetLabelAddress $8 WordFunc_WordInsert${_WORDFUNC_S}_twoback StrCmp${_WORDFUNC_S} $3 '+' 0 WordFunc_WordInsert${_WORDFUNC_S}_call StrCpy $7 { goto WordFunc_WordInsert${_WORDFUNC_S}_call WordFunc_WordInsert${_WORDFUNC_S}_twoback: IfErrors 0 WordFunc_WordInsert${_WORDFUNC_S}_tree StrCmp${_WORDFUNC_S} $2$4 11 0 WordFunc_WordInsert${_WORDFUNC_S}_error2 StrCmp${_WORDFUNC_S} $3 '+' 0 +3 StrCpy $R0 '$R0$0$1' goto WordFunc_WordInsert${_WORDFUNC_S}_end StrCpy $R0 '$1$0$R0' goto WordFunc_WordInsert${_WORDFUNC_S}_end WordFunc_WordInsert${_WORDFUNC_S}_tree: StrCpy $7 } StrCpy $5 $4 IntOp $2 $2 + 1 GetLabelAddress $8 WordFunc_WordInsert${_WORDFUNC_S}_treeback StrCmp${_WORDFUNC_S} $3 '+' WordFunc_WordInsert${_WORDFUNC_S}_call StrCpy $7 { goto WordFunc_WordInsert${_WORDFUNC_S}_call WordFunc_WordInsert${_WORDFUNC_S}_treeback: IfErrors 0 +3 StrCpy $4 '' StrCpy $6 '' StrCmp${_WORDFUNC_S} $3 '+' 0 +3 StrCpy $R0 '$5$0$1$6$4' goto WordFunc_WordInsert${_WORDFUNC_S}_end StrCpy $R0 '$4$6$1$0$5' goto WordFunc_WordInsert${_WORDFUNC_S}_end WordFunc_WordInsert${_WORDFUNC_S}_call: !insertmacro WordFind${_WORDFUNC_S}Call 2 $R0 $0 E$3$2*$7 $4 goto $8 WordFunc_WordInsert${_WORDFUNC_S}_error3: StrCpy $R0 3 goto WordFunc_WordInsert${_WORDFUNC_S}_error WordFunc_WordInsert${_WORDFUNC_S}_error2: StrCpy $R0 2 goto WordFunc_WordInsert${_WORDFUNC_S}_error WordFunc_WordInsert${_WORDFUNC_S}_error1: StrCpy $R0 1 WordFunc_WordInsert${_WORDFUNC_S}_error: StrCmp $9 'E' +3 StrCpy $R0 $R1 goto +2 SetErrors WordFunc_WordInsert${_WORDFUNC_S}_end: Pop $R1 Pop $9 Pop $8 Pop $7 Pop $6 Pop $5 Pop $4 Pop $3 Pop $2 Pop $1 Pop $0 Exch $R0 !macroend !define WordInsert `!insertmacro WordInsertCall` !define un.WordInsert `!insertmacro WordInsertCall` !macro WordInsert !macroend !macro un.WordInsert !macroend !macro WordInsert_ !verbose push !verbose ${_WORDFUNC_VERBOSE} !insertmacro WordInsertBody '' !verbose pop !macroend !define WordInsertS `!insertmacro WordInsertSCall` !define un.WordInsertS `!insertmacro WordInsertSCall` !macro WordInsertS !macroend !macro un.WordInsertS !macroend !macro WordInsertS_ !verbose push !verbose ${_WORDFUNC_VERBOSE} !insertmacro WordInsertBody 'S' !verbose pop !macroend !macro StrFilterBody _WORDFUNC_S Exch $2 Exch Exch $1 Exch Exch 2 Exch $0 Exch 2 Exch 3 Exch $R0 Exch 3 Push $3 Push $4 Push $5 Push $6 Push $7 Push $R1 Push $R2 Push $R3 Push $R4 Push $R5 Push $R6 Push $R7 Push $R8 ClearErrors StrCpy $R2 $0 '' -3 StrCmp $R2 "eng" WordFunc_StrFilter${_WORDFUNC_S}_eng StrCmp $R2 "rus" WordFunc_StrFilter${_WORDFUNC_S}_rus WordFunc_StrFilter${_WORDFUNC_S}_eng: StrCpy $4 65 StrCpy $5 90 StrCpy $6 97 StrCpy $7 122 goto WordFunc_StrFilter${_WORDFUNC_S}_langend WordFunc_StrFilter${_WORDFUNC_S}_rus: StrCpy $4 192 StrCpy $5 223 StrCpy $6 224 StrCpy $7 255 goto WordFunc_StrFilter${_WORDFUNC_S}_langend ;... WordFunc_StrFilter${_WORDFUNC_S}_langend: StrCpy $R7 '' StrCpy $R8 '' StrCmp${_WORDFUNC_S} $2 '' 0 WordFunc_StrFilter${_WORDFUNC_S}_begin WordFunc_StrFilter${_WORDFUNC_S}_restart1: StrCpy $2 '' StrCpy $3 $0 1 StrCmp${_WORDFUNC_S} $3 '+' +2 StrCmp${_WORDFUNC_S} $3 '-' 0 +3 StrCpy $0 $0 '' 1 goto +2 StrCpy $3 '' IntOp $0 $0 + 0 StrCmp${_WORDFUNC_S} $0 0 +5 StrCpy $R7 $0 1 0 StrCpy $R8 $0 1 1 StrCpy $R2 $0 1 2 StrCmp${_WORDFUNC_S} $R2 '' WordFunc_StrFilter${_WORDFUNC_S}_filter WordFunc_StrFilter${_WORDFUNC_S}_error WordFunc_StrFilter${_WORDFUNC_S}_restart2: StrCmp${_WORDFUNC_S} $3 '' WordFunc_StrFilter${_WORDFUNC_S}_end StrCpy $R7 '' StrCpy $R8 '+-' goto WordFunc_StrFilter${_WORDFUNC_S}_begin WordFunc_StrFilter${_WORDFUNC_S}_filter: StrCmp${_WORDFUNC_S} $R7 '1' +3 StrCmp${_WORDFUNC_S} $R7 '2' +2 StrCmp${_WORDFUNC_S} $R7 '3' 0 WordFunc_StrFilter${_WORDFUNC_S}_error StrCmp${_WORDFUNC_S} $R8 '' WordFunc_StrFilter${_WORDFUNC_S}_begin StrCmp${_WORDFUNC_S} $R7$R8 '23' +2 StrCmp${_WORDFUNC_S} $R7$R8 '32' 0 +3 StrCpy $R7 -1 goto WordFunc_StrFilter${_WORDFUNC_S}_begin StrCmp${_WORDFUNC_S} $R7$R8 '13' +2 StrCmp${_WORDFUNC_S} $R7$R8 '31' 0 +3 StrCpy $R7 -2 goto WordFunc_StrFilter${_WORDFUNC_S}_begin StrCmp${_WORDFUNC_S} $R7$R8 '12' +2 StrCmp${_WORDFUNC_S} $R7$R8 '21' 0 WordFunc_StrFilter${_WORDFUNC_S}_error StrCpy $R7 -3 WordFunc_StrFilter${_WORDFUNC_S}_begin: StrCpy $R6 0 StrCpy $R1 '' WordFunc_StrFilter${_WORDFUNC_S}_loop: StrCpy $R2 $R0 1 $R6 StrCmp${_WORDFUNC_S} $R2 '' WordFunc_StrFilter${_WORDFUNC_S}_restartchk StrCmp${_WORDFUNC_S} $2 '' +7 StrCpy $R4 0 StrCpy $R5 $2 1 $R4 StrCmp${_WORDFUNC_S} $R5 '' WordFunc_StrFilter${_WORDFUNC_S}_addsymbol StrCmp${_WORDFUNC_S} $R5 $R2 WordFunc_StrFilter${_WORDFUNC_S}_skipsymbol IntOp $R4 $R4 + 1 goto -4 StrCmp${_WORDFUNC_S} $1 '' +7 StrCpy $R4 0 StrCpy $R5 $1 1 $R4 StrCmp${_WORDFUNC_S} $R5 '' +4 StrCmp${_WORDFUNC_S} $R5 $R2 WordFunc_StrFilter${_WORDFUNC_S}_addsymbol IntOp $R4 $R4 + 1 goto -4 StrCmp${_WORDFUNC_S} $R7 '1' +2 StrCmp${_WORDFUNC_S} $R7 '-1' 0 +4 StrCpy $R4 48 StrCpy $R5 57 goto WordFunc_StrFilter${_WORDFUNC_S}_loop2 StrCmp${_WORDFUNC_S} $R8 '+-' 0 +2 StrCmp${_WORDFUNC_S} $3 '+' 0 +4 StrCpy $R4 $4 StrCpy $R5 $5 goto WordFunc_StrFilter${_WORDFUNC_S}_loop2 StrCpy $R4 $6 StrCpy $R5 $7 WordFunc_StrFilter${_WORDFUNC_S}_loop2: IntFmt $R3 '%c' $R4 StrCmp $R2 $R3 WordFunc_StrFilter${_WORDFUNC_S}_found StrCmp $R4 $R5 WordFunc_StrFilter${_WORDFUNC_S}_notfound IntOp $R4 $R4 + 1 goto WordFunc_StrFilter${_WORDFUNC_S}_loop2 WordFunc_StrFilter${_WORDFUNC_S}_found: StrCmp${_WORDFUNC_S} $R8 '+-' WordFunc_StrFilter${_WORDFUNC_S}_setcase StrCmp${_WORDFUNC_S} $R7 '3' WordFunc_StrFilter${_WORDFUNC_S}_skipsymbol StrCmp${_WORDFUNC_S} $R7 '-3' WordFunc_StrFilter${_WORDFUNC_S}_addsymbol StrCmp${_WORDFUNC_S} $R8 '' WordFunc_StrFilter${_WORDFUNC_S}_addsymbol WordFunc_StrFilter${_WORDFUNC_S}_skipsymbol WordFunc_StrFilter${_WORDFUNC_S}_notfound: StrCmp${_WORDFUNC_S} $R8 '+-' WordFunc_StrFilter${_WORDFUNC_S}_addsymbol StrCmp${_WORDFUNC_S} $R7 '3' 0 +2 StrCmp${_WORDFUNC_S} $R5 57 WordFunc_StrFilter${_WORDFUNC_S}_addsymbol +3 StrCmp${_WORDFUNC_S} $R7 '-3' 0 +5 StrCmp${_WORDFUNC_S} $R5 57 WordFunc_StrFilter${_WORDFUNC_S}_skipsymbol StrCpy $R4 48 StrCpy $R5 57 goto WordFunc_StrFilter${_WORDFUNC_S}_loop2 StrCmp${_WORDFUNC_S} $R8 '' WordFunc_StrFilter${_WORDFUNC_S}_skipsymbol WordFunc_StrFilter${_WORDFUNC_S}_addsymbol WordFunc_StrFilter${_WORDFUNC_S}_setcase: StrCpy $R2 $R3 WordFunc_StrFilter${_WORDFUNC_S}_addsymbol: StrCpy $R1 $R1$R2 WordFunc_StrFilter${_WORDFUNC_S}_skipsymbol: IntOp $R6 $R6 + 1 goto WordFunc_StrFilter${_WORDFUNC_S}_loop WordFunc_StrFilter${_WORDFUNC_S}_error: SetErrors StrCpy $R0 '' goto WordFunc_StrFilter${_WORDFUNC_S}_end WordFunc_StrFilter${_WORDFUNC_S}_restartchk: StrCpy $R0 $R1 StrCmp${_WORDFUNC_S} $2 '' 0 WordFunc_StrFilter${_WORDFUNC_S}_restart1 StrCmp${_WORDFUNC_S} $R8 '+-' 0 WordFunc_StrFilter${_WORDFUNC_S}_restart2 WordFunc_StrFilter${_WORDFUNC_S}_end: Pop $R8 Pop $R7 Pop $R6 Pop $R5 Pop $R4 Pop $R3 Pop $R2 Pop $R1 Pop $7 Pop $6 Pop $5 Pop $4 Pop $3 Pop $2 Pop $1 Pop $0 Exch $R0 !macroend !define StrFilter `!insertmacro StrFilterCall` !define un.StrFilter `!insertmacro StrFilterCall` !macro StrFilter !macroend !macro un.StrFilter !macroend !macro StrFilter_ !verbose push !verbose ${_WORDFUNC_VERBOSE} !insertmacro StrFilterBody '' !verbose pop !macroend !define StrFilterS `!insertmacro StrFilterSCall` !define un.StrFilterS `!insertmacro StrFilterSCall` !macro StrFilterS !macroend !macro un.StrFilterS !macroend !macro StrFilterS_ !verbose push !verbose ${_WORDFUNC_VERBOSE} !insertmacro StrFilterBody 'S' !verbose pop !macroend !define VersionCompare `!insertmacro VersionCompareCall` !define un.VersionCompare `!insertmacro VersionCompareCall` !macro VersionCompare !macroend !macro un.VersionCompare !macroend !macro VersionCompare_ !verbose push !verbose ${_WORDFUNC_VERBOSE} Exch $1 Exch Exch $0 Exch Push $2 Push $3 Push $4 Push $5 Push $6 Push $7 WordFunc_VersionCompare_begin: StrCpy $2 -1 IntOp $2 $2 + 1 StrCpy $3 $0 1 $2 StrCmp $3 '' +2 StrCmp $3 '.' 0 -3 StrCpy $4 $0 $2 IntOp $2 $2 + 1 StrCpy $0 $0 '' $2 StrCpy $2 -1 IntOp $2 $2 + 1 StrCpy $3 $1 1 $2 StrCmp $3 '' +2 StrCmp $3 '.' 0 -3 StrCpy $5 $1 $2 IntOp $2 $2 + 1 StrCpy $1 $1 '' $2 StrCmp $4$5 '' WordFunc_VersionCompare_equal StrCpy $6 -1 IntOp $6 $6 + 1 StrCpy $3 $4 1 $6 StrCmp $3 '0' -2 StrCmp $3 '' 0 +2 StrCpy $4 0 StrCpy $7 -1 IntOp $7 $7 + 1 StrCpy $3 $5 1 $7 StrCmp $3 '0' -2 StrCmp $3 '' 0 +2 StrCpy $5 0 StrCmp $4 0 0 +2 StrCmp $5 0 WordFunc_VersionCompare_begin WordFunc_VersionCompare_newer2 StrCmp $5 0 WordFunc_VersionCompare_newer1 IntCmp $6 $7 0 WordFunc_VersionCompare_newer1 WordFunc_VersionCompare_newer2 StrCpy $4 '1$4' StrCpy $5 '1$5' IntCmp $4 $5 WordFunc_VersionCompare_begin WordFunc_VersionCompare_newer2 WordFunc_VersionCompare_newer1 WordFunc_VersionCompare_equal: StrCpy $0 0 goto WordFunc_VersionCompare_end WordFunc_VersionCompare_newer1: StrCpy $0 1 goto WordFunc_VersionCompare_end WordFunc_VersionCompare_newer2: StrCpy $0 2 WordFunc_VersionCompare_end: Pop $7 Pop $6 Pop $5 Pop $4 Pop $3 Pop $2 Pop $1 Exch $0 !verbose pop !macroend !define VersionConvert `!insertmacro VersionConvertCall` !define un.VersionConvert `!insertmacro VersionConvertCall` !macro VersionConvert !macroend !macro un.VersionConvert !macroend !macro VersionConvert_ !verbose push !verbose ${_WORDFUNC_VERBOSE} Exch $1 Exch Exch $0 Exch Push $2 Push $3 Push $4 Push $5 Push $6 Push $7 StrCmp $1 '' 0 +2 StrCpy $1 'abcdefghijklmnopqrstuvwxyz' StrCpy $1 $1 99 StrCpy $2 0 StrCpy $7 'dot' goto WordFunc_VersionConvert_loop WordFunc_VersionConvert_preloop: IntOp $2 $2 + 1 WordFunc_VersionConvert_loop: StrCpy $3 $0 1 $2 StrCmp $3 '' WordFunc_VersionConvert_endcheck StrCmp $3 '.' WordFunc_VersionConvert_dot StrCmp $3 '0' WordFunc_VersionConvert_digit IntCmp $3 '0' WordFunc_VersionConvert_letter WordFunc_VersionConvert_letter WordFunc_VersionConvert_digit WordFunc_VersionConvert_dot: StrCmp $7 'dot' WordFunc_VersionConvert_replacespecial StrCpy $7 'dot' goto WordFunc_VersionConvert_preloop WordFunc_VersionConvert_digit: StrCmp $7 'letter' WordFunc_VersionConvert_insertdot StrCpy $7 'digit' goto WordFunc_VersionConvert_preloop WordFunc_VersionConvert_letter: StrCpy $5 0 StrCpy $4 $1 1 $5 IntOp $5 $5 + 1 StrCmp $4 '' WordFunc_VersionConvert_replacespecial StrCmp $4 $3 0 -3 IntCmp $5 9 0 0 +2 StrCpy $5 '0$5' StrCmp $7 'letter' +2 StrCmp $7 'dot' 0 +3 StrCpy $6 '' goto +2 StrCpy $6 '.' StrCpy $4 $0 $2 IntOp $2 $2 + 1 StrCpy $0 $0 '' $2 StrCpy $0 '$4$6$5$0' StrLen $4 '$6$5' IntOp $2 $2 + $4 IntOp $2 $2 - 1 StrCpy $7 'letter' goto WordFunc_VersionConvert_loop WordFunc_VersionConvert_replacespecial: StrCmp $7 'dot' 0 +3 StrCpy $6 '' goto +2 StrCpy $6 '.' StrCpy $4 $0 $2 IntOp $2 $2 + 1 StrCpy $0 $0 '' $2 StrCpy $0 '$4$6$0' StrLen $4 $6 IntOp $2 $2 + $4 IntOp $2 $2 - 1 StrCpy $7 'dot' goto WordFunc_VersionConvert_loop WordFunc_VersionConvert_insertdot: StrCpy $4 $0 $2 StrCpy $0 $0 '' $2 StrCpy $0 '$4.$0' StrCpy $7 'dot' goto WordFunc_VersionConvert_preloop WordFunc_VersionConvert_endcheck: StrCpy $4 $0 1 -1 StrCmp $4 '.' 0 WordFunc_VersionConvert_end StrCpy $0 $0 -1 goto -3 WordFunc_VersionConvert_end: Pop $7 Pop $6 Pop $5 Pop $4 Pop $3 Pop $2 Pop $1 Exch $0 !verbose pop !macroend !endif