Files
2026-08-03 16:37:20 +08:00

2158 lines
39 KiB
NSIS

/*
2006 Shengalts Aleksander aka Instructor (Shengalts@mail.ru)
Note: header stripped out to avoid errors
*/
!ifndef WORDFUNC_INCLUDED
!define WORDFUNC_INCLUDED
!verbose push
!verbose 3
!ifndef _WORDFUNC_VERBOSE
!define _WORDFUNC_VERBOSE 3
!endif
!verbose ${_WORDFUNC_VERBOSE}
!define WORDFUNC_VERBOSE `!insertmacro WORDFUNC_VERBOSE`
!define _WORDFUNC_UN
!define _WORDFUNC_S
!verbose pop
!macro WORDFUNC_VERBOSE _VERBOSE
!verbose push
!verbose 3
!undef _WORDFUNC_VERBOSE
!define _WORDFUNC_VERBOSE ${_VERBOSE}
!verbose pop
!macroend
# Install. Case insensitive. #
!macro WordFindCall _STRING _DELIMITER _OPTION _RESULT
!verbose push
!verbose ${_WORDFUNC_VERBOSE}
Push `${_STRING}`
Push `${_DELIMITER}`
Push `${_OPTION}`
Call WordFind
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}`
Call WordFind2X
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}`
Call WordFind3X
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}`
Call WordReplace
Pop ${_RESULT}
!verbose pop
!macroend
!macro WordAddCall _STRING1 _DELIMITER _STRING2 _RESULT
!verbose push
!verbose ${_WORDFUNC_VERBOSE}
Push `${_STRING1}`
Push `${_DELIMITER}`
Push `${_STRING2}`
Call WordAdd
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}`
Call WordInsert
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}`
Call StrFilter
Pop ${_RESULT}
!verbose pop
!macroend
!macro VersionCompareCall _VER1 _VER2 _RESULT
!verbose push
!verbose ${_WORDFUNC_VERBOSE}
Push `${_VER1}`
Push `${_VER2}`
Call VersionCompare
Pop ${_RESULT}
!verbose pop
!macroend
!macro VersionConvertCall _VERSION _CHARLIST _RESULT
!verbose push
!verbose ${_WORDFUNC_VERBOSE}
Push `${_VERSION}`
Push `${_CHARLIST}`
Call VersionConvert
Pop ${_RESULT}
!verbose pop
!macroend
!macro WordFind
!ifndef ${_WORDFUNC_UN}WordFind${_WORDFUNC_S}
!verbose push
!verbose ${_WORDFUNC_VERBOSE}
!define ${_WORDFUNC_UN}WordFind${_WORDFUNC_S} `!insertmacro ${_WORDFUNC_UN}WordFind${_WORDFUNC_S}Call`
Function ${_WORDFUNC_UN}WordFind${_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
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 '/' restart
StrCmp${_WORDFUNC_S} $2 '#' restart
StrCmp${_WORDFUNC_S} $2 '*' restart
goto 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 '*' error3
StrCmp${_WORDFUNC_S} $3 '**' error3
StrCmp${_WORDFUNC_S} $3 '}{' error3
IntOp $1 $1 + 0
StrCmp${_WORDFUNC_S} $1 0 error2
restart:
StrCmp${_WORDFUNC_S} $R0 '' error1
StrCpy $4 0
StrCpy $5 0
StrCpy $6 0
StrLen $7 $0
goto loop
preloop:
IntOp $6 $6 + 1
loop:
StrCpy $8 $R0 $7 $6
StrCmp${_WORDFUNC_S} $8$5 0 error1
StrCmp${_WORDFUNC_S} $8 '' +2
StrCmp${_WORDFUNC_S} $8 $0 +5 preloop
StrCmp${_WORDFUNC_S} $3 '{' minus
StrCmp${_WORDFUNC_S} $3 '}' minus
StrCmp${_WORDFUNC_S} $2 '*' minus
StrCmp${_WORDFUNC_S} $5 $6 minus +5
StrCmp${_WORDFUNC_S} $3 '{' +4
StrCmp${_WORDFUNC_S} $3 '}' +3
StrCmp${_WORDFUNC_S} $2 '*' +2
StrCmp${_WORDFUNC_S} $5 $6 nextword
IntOp $4 $4 + 1
StrCmp${_WORDFUNC_S} $2$4 +$1 plus
StrCmp${_WORDFUNC_S} $2 '/' 0 nextword
IntOp $8 $6 - $5
StrCpy $8 $R0 $8 $5
StrCmp${_WORDFUNC_S} $1 $8 0 nextword
StrCpy $R1 $4
goto end
nextword:
IntOp $6 $6 + $7
StrCpy $5 $6
goto loop
minus:
StrCmp${_WORDFUNC_S} $2 '-' 0 sum
StrCpy $2 '+'
IntOp $1 $4 - $1
IntOp $1 $1 + 1
IntCmp $1 0 error2 error2 restart
sum:
StrCmp${_WORDFUNC_S} $2 '#' 0 sumdelim
StrCpy $R1 $4
goto end
sumdelim:
StrCmp${_WORDFUNC_S} $2 '*' 0 error2
StrCpy $R1 $4
goto end
plus:
StrCmp${_WORDFUNC_S} $3 '' 0 +4
IntOp $6 $6 - $5
StrCpy $R1 $R0 $6 $5
goto end
StrCmp${_WORDFUNC_S} $3 '{' 0 +3
StrCpy $R1 $R0 $6
goto end
StrCmp${_WORDFUNC_S} $3 '}' 0 +4
IntOp $6 $6 + $7
StrCpy $R1 $R0 '' $6
goto end
StrCmp${_WORDFUNC_S} $3 '{*' +2
StrCmp${_WORDFUNC_S} $3 '*{' 0 +3
StrCpy $R1 $R0 $6
goto end
StrCmp${_WORDFUNC_S} $3 '*}' +2
StrCmp${_WORDFUNC_S} $3 '}*' 0 +3
StrCpy $R1 $R0 '' $5
goto end
StrCmp${_WORDFUNC_S} $3 '}}' 0 +3
StrCpy $R1 $R0 '' $6
goto end
StrCmp${_WORDFUNC_S} $3 '{{' 0 +3
StrCpy $R1 $R0 $5
goto end
StrCmp${_WORDFUNC_S} $3 '{}' 0 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 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 end
error3:
StrCpy $R1 3
goto error
error2:
StrCpy $R1 2
goto error
error1:
StrCpy $R1 1
error:
StrCmp $9 'E' 0 +3
SetErrors
end:
StrCpy $R0 $R1
Pop $R1
Pop $9
Pop $8
Pop $7
Pop $6
Pop $5
Pop $4
Pop $3
Pop $2
Pop $1
Pop $0
Exch $R0
FunctionEnd
!verbose pop
!endif
!macroend
!macro WordFind2X
!ifndef ${_WORDFUNC_UN}WordFind2X${_WORDFUNC_S}
!verbose push
!verbose ${_WORDFUNC_VERBOSE}
!define ${_WORDFUNC_UN}WordFind2X${_WORDFUNC_S} `!insertmacro ${_WORDFUNC_UN}WordFind2X${_WORDFUNC_S}Call`
Function ${_WORDFUNC_UN}WordFind2X${_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 '#' restart
StrCmp${_WORDFUNC_S} $3 '/' restart
goto 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 error2
restart:
StrCmp${_WORDFUNC_S} $R0 '' error1
StrCpy $5 -1
StrCpy $6 0
StrCpy $7 ''
StrLen $8 $0
StrLen $9 $1
loop:
IntOp $5 $5 + 1
delim1:
StrCpy $R1 $R0 $8 $5
StrCmp${_WORDFUNC_S} $R1$6 0 error1
StrCmp${_WORDFUNC_S} $R1 '' minus
StrCmp${_WORDFUNC_S} $R1 $0 +2
StrCmp${_WORDFUNC_S} $7 '' loop delim2
StrCmp${_WORDFUNC_S} $0 $1 0 +2
StrCmp${_WORDFUNC_S} $7 '' 0 delim2
IntOp $7 $5 + $8
StrCpy $5 $7
goto delim1
delim2:
StrCpy $R1 $R0 $9 $5
StrCmp${_WORDFUNC_S} $R1 $1 0 loop
IntOp $6 $6 + 1
StrCmp${_WORDFUNC_S} $3$6 '+$2' plus
StrCmp${_WORDFUNC_S} $3 '/' 0 nextword
IntOp $R1 $5 - $7
StrCpy $R1 $R0 $R1 $7
StrCmp${_WORDFUNC_S} $R1 $2 0 +3
StrCpy $R1 $6
goto end
nextword:
IntOp $5 $5 + $9
StrCpy $7 ''
goto delim1
minus:
StrCmp${_WORDFUNC_S} $3 '-' 0 sum
StrCpy $3 +
IntOp $2 $6 - $2
IntOp $2 $2 + 1
IntCmp $2 0 error2 error2 restart
sum:
StrCmp${_WORDFUNC_S} $3 '#' 0 error2
StrCpy $R1 $6
goto end
plus:
StrCmp${_WORDFUNC_S} $4 '' 0 +4
IntOp $R1 $5 - $7
StrCpy $R1 $R0 $R1 $7
goto 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 end
StrCmp${_WORDFUNC_S} $4 '*}' +2
StrCmp${_WORDFUNC_S} $4 '}*' 0 +3
StrCpy $R1 $R0 '' $7
goto end
StrCmp${_WORDFUNC_S} $4 '}}' 0 +3
StrCpy $R1 $R0 '' $5
goto end
StrCmp${_WORDFUNC_S} $4 '{{' 0 +3
StrCpy $R1 $R0 $7
goto end
StrCmp${_WORDFUNC_S} $4 '{}' 0 error3
StrCpy $5 $R0 '' $5
StrCpy $7 $R0 $7
StrCpy $R1 '$7$5'
goto end
error3:
StrCpy $R1 3
goto error
error2:
StrCpy $R1 2
goto error
error1:
StrCpy $R1 1
error:
StrCmp $R2 'E' 0 +3
SetErrors
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
FunctionEnd
!verbose pop
!endif
!macroend
!macro WordFind3X
!ifndef ${_WORDFUNC_UN}WordFind3X${_WORDFUNC_S}
!verbose push
!verbose ${_WORDFUNC_VERBOSE}
!define ${_WORDFUNC_UN}WordFind3X${_WORDFUNC_S} `!insertmacro ${_WORDFUNC_UN}WordFind3X${_WORDFUNC_S}Call`
Function ${_WORDFUNC_UN}WordFind3X${_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 '#' restart
StrCmp${_WORDFUNC_S} $4 '/' restart
goto 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 error2
restart:
StrCmp${_WORDFUNC_S} $R0 '' error1
StrCpy $6 -1
StrCpy $7 0
StrCpy $8 ''
StrCpy $9 ''
StrLen $R1 $0
StrLen $R2 $1
StrLen $R3 $2
loop:
IntOp $6 $6 + 1
delim1:
StrCpy $R4 $R0 $R1 $6
StrCmp${_WORDFUNC_S} $R4$7 0 error1
StrCmp${_WORDFUNC_S} $R4 '' minus
StrCmp${_WORDFUNC_S} $R4 $0 +2
StrCmp${_WORDFUNC_S} $8 '' loop center
StrCmp${_WORDFUNC_S} $0 $1 +2
StrCmp${_WORDFUNC_S} $0 $2 0 +2
StrCmp${_WORDFUNC_S} $8 '' 0 center
IntOp $8 $6 + $R1
StrCpy $6 $8
goto delim1
center:
StrCmp${_WORDFUNC_S} $9 '' 0 delim2
StrCpy $R4 $R0 $R2 $6
StrCmp${_WORDFUNC_S} $R4 $1 0 loop
IntOp $9 $6 + $R2
StrCpy $6 $9
goto delim1
delim2:
StrCpy $R4 $R0 $R3 $6
StrCmp${_WORDFUNC_S} $R4 $2 0 loop
IntOp $7 $7 + 1
StrCmp${_WORDFUNC_S} $4$7 '+$3' plus
StrCmp${_WORDFUNC_S} $4 '/' 0 nextword
IntOp $R4 $6 - $8
StrCpy $R4 $R0 $R4 $8
StrCmp${_WORDFUNC_S} $R4 $3 0 +3
StrCpy $R4 $7
goto end
nextword:
IntOp $6 $6 + $R3
StrCpy $8 ''
StrCpy $9 ''
goto delim1
minus:
StrCmp${_WORDFUNC_S} $4 '-' 0 sum
StrCpy $4 +
IntOp $3 $7 - $3
IntOp $3 $3 + 1
IntCmp $3 0 error2 error2 restart
sum:
StrCmp${_WORDFUNC_S} $4 '#' 0 error2
StrCpy $R4 $7
goto end
plus:
StrCmp${_WORDFUNC_S} $5 '' 0 +4
IntOp $R4 $6 - $8
StrCpy $R4 $R0 $R4 $8
goto 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 end
StrCmp${_WORDFUNC_S} $5 '*}' +2
StrCmp${_WORDFUNC_S} $5 '}*' 0 +3
StrCpy $R4 $R0 '' $8
goto end
StrCmp${_WORDFUNC_S} $5 '}}' 0 +3
StrCpy $R4 $R0 '' $6
goto end
StrCmp${_WORDFUNC_S} $5 '{{' 0 +3
StrCpy $R4 $R0 $8
goto end
StrCmp${_WORDFUNC_S} $5 '{}' 0 error3
StrCpy $6 $R0 '' $6
StrCpy $8 $R0 $8
StrCpy $R4 '$8$6'
goto end
error3:
StrCpy $R4 3
goto error
error2:
StrCpy $R4 2
goto error
error1:
StrCpy $R4 1
error:
StrCmp $R5 'E' 0 +3
SetErrors
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
FunctionEnd
!verbose pop
!endif
!macroend
!macro WordReplace
!ifndef ${_WORDFUNC_UN}WordReplace${_WORDFUNC_S}
!verbose push
!verbose ${_WORDFUNC_VERBOSE}
!define ${_WORDFUNC_UN}WordReplace${_WORDFUNC_S} `!insertmacro ${_WORDFUNC_UN}WordReplace${_WORDFUNC_S}Call`
Function ${_WORDFUNC_UN}WordReplace${_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 error1
StrCmp${_WORDFUNC_S} $R0 '' error1
StrCmp${_WORDFUNC_S} $3 '{' beginning
StrCmp${_WORDFUNC_S} $3 '}' ending errorchk
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 merge
ending:
StrCpy $8 $R0 '' -$7
StrCmp${_WORDFUNC_S} $8 $0 0 +4
StrCpy $R0 $R0 -$7
StrCpy $6 '$6$1'
goto -4
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 end
errorchk:
StrCmp${_WORDFUNC_S} $3 '+' +2
StrCmp${_WORDFUNC_S} $3 '-' 0 error3
StrCpy $5 $2 1
IntOp $2 $2 + 0
StrCmp${_WORDFUNC_S} $2 0 0 one
StrCmp${_WORDFUNC_S} $5 0 error2
StrCpy $3 ''
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 error1
StrCpy $R0 '$3$R0'
goto 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 all
one:
StrCpy $5 0
StrCpy $8 0
goto loop
preloop:
IntOp $5 $5 + 1
loop:
StrCpy $6 $R0 $7 $5
StrCmp${_WORDFUNC_S} $6$8 0 error1
StrCmp${_WORDFUNC_S} $6 '' minus
StrCmp${_WORDFUNC_S} $6 $0 0 preloop
IntOp $8 $8 + 1
StrCmp${_WORDFUNC_S} $3$8 +$2 found
IntOp $5 $5 + $7
goto loop
minus:
StrCmp${_WORDFUNC_S} $3 '-' 0 error2
StrCpy $3 +
IntOp $2 $8 - $2
IntOp $2 $2 + 1
IntCmp $2 0 error2 error2 one
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 end
error3:
StrCpy $R0 3
goto error
error2:
StrCpy $R0 2
goto error
error1:
StrCpy $R0 1
error:
StrCmp $9 'E' +3
StrCpy $R0 $R1
goto +2
SetErrors
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
FunctionEnd
!verbose pop
!endif
!macroend
!macro WordAdd
!ifndef ${_WORDFUNC_UN}WordAdd${_WORDFUNC_S}
!verbose push
!verbose ${_WORDFUNC_VERBOSE}
!insertmacro WordFind
!define ${_WORDFUNC_UN}WordAdd${_WORDFUNC_S} `!insertmacro ${_WORDFUNC_UN}WordAdd${_WORDFUNC_S}Call`
Function ${_WORDFUNC_UN}WordAdd${_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 error3
StrCmp${_WORDFUNC_S} $0 '' error1
StrCmp${_WORDFUNC_S} $2 '' end
StrCmp${_WORDFUNC_S} $R0 '' 0 +5
StrCmp${_WORDFUNC_S} $1 '-' end
StrCmp${_WORDFUNC_S} $1 '+' 0 +3
StrCpy $R0 $2
goto end
loop:
IntOp $5 $5 + 1
Push `$2`
Push `$0`
Push `E+$5`
Call ${_WORDFUNC_UN}WordFind${_WORDFUNC_S}
Pop $3
IfErrors 0 /word
StrCmp${_WORDFUNC_S} $3 2 +4
StrCmp${_WORDFUNC_S} $3$5 11 0 +3
StrCpy $3 $2
goto /word
StrCmp${_WORDFUNC_S} $1 '-' end preend
/word:
Push `$R0`
Push `$0`
Push `E/$3`
Call ${_WORDFUNC_UN}WordFind${_WORDFUNC_S}
Pop $4
IfErrors +2
StrCmp${_WORDFUNC_S} $1 '-' delete loop
StrCmp${_WORDFUNC_S} $1$4 '-1' +2
StrCmp${_WORDFUNC_S} $1 '-' loop +4
StrCmp${_WORDFUNC_S} $R0 $3 0 loop
StrCpy $R0 ''
goto end
StrCmp${_WORDFUNC_S} $1$4 '+1' 0 +2
StrCmp${_WORDFUNC_S} $R0 $3 loop
StrCmp${_WORDFUNC_S} $R0 $R1 +3
StrCpy $R1 '$R1$0$3'
goto loop
StrLen $6 $0
StrCpy $6 $R0 '' -$6
StrCmp${_WORDFUNC_S} $6 $0 0 -4
StrCpy $R1 '$R1$3'
goto loop
delete:
Push `$R0`
Push `$0`
Push `E+$4{}`
Call ${_WORDFUNC_UN}WordFind${_WORDFUNC_S}
Pop $R0
goto /word
error3:
StrCpy $R1 3
goto error
error1:
StrCpy $R1 1
error:
StrCmp $7 'E' 0 end
SetErrors
preend:
StrCpy $R0 $R1
end:
Pop $R1
Pop $7
Pop $6
Pop $5
Pop $4
Pop $3
Pop $2
Pop $1
Pop $0
Exch $R0
FunctionEnd
!verbose pop
!endif
!macroend
!macro WordInsert
!ifndef ${_WORDFUNC_UN}WordInsert${_WORDFUNC_S}
!verbose push
!verbose ${_WORDFUNC_VERBOSE}
!insertmacro WordFind
!define ${_WORDFUNC_UN}WordInsert${_WORDFUNC_S} `!insertmacro ${_WORDFUNC_UN}WordInsert${_WORDFUNC_S}Call`
Function ${_WORDFUNC_UN}WordInsert${_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 error3
IntOp $2 $2 + 0
StrCmp${_WORDFUNC_S} $2 0 error2
StrCmp${_WORDFUNC_S} $0 '' error1
StrCmp${_WORDFUNC_S} $2 1 0 two
GetLabelAddress $8 oneback
StrCmp${_WORDFUNC_S} $3 '+' call
StrCpy $7 {
goto call
oneback:
IfErrors 0 +2
StrCpy $4 $R0
StrCmp${_WORDFUNC_S} $3 '+' 0 +3
StrCpy $R0 '$1$0$4'
goto end
StrCpy $R0 '$4$0$1'
goto end
two:
IntOp $2 $2 - 1
GetLabelAddress $8 twoback
StrCmp${_WORDFUNC_S} $3 '+' 0 call
StrCpy $7 {
goto call
twoback:
IfErrors 0 tree
StrCmp${_WORDFUNC_S} $2$4 11 0 error2
StrCmp${_WORDFUNC_S} $3 '+' 0 +3
StrCpy $R0 '$R0$0$1'
goto end
StrCpy $R0 '$1$0$R0'
goto end
tree:
StrCpy $7 }
StrCpy $5 $4
IntOp $2 $2 + 1
GetLabelAddress $8 treeback
StrCmp${_WORDFUNC_S} $3 '+' call
StrCpy $7 {
goto call
treeback:
IfErrors 0 +3
StrCpy $4 ''
StrCpy $6 ''
StrCmp${_WORDFUNC_S} $3 '+' 0 +3
StrCpy $R0 '$5$0$1$6$4'
goto end
StrCpy $R0 '$4$6$1$0$5'
goto end
call:
Push '$R0'
Push '$0'
Push 'E$3$2*$7'
Call ${_WORDFUNC_UN}WordFind${_WORDFUNC_S}
Pop $4
goto $8
error3:
StrCpy $R0 3
goto error
error2:
StrCpy $R0 2
goto error
error1:
StrCpy $R0 1
error:
StrCmp $9 'E' +3
StrCpy $R0 $R1
goto +2
SetErrors
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
FunctionEnd
!verbose pop
!endif
!macroend
!macro StrFilter
!ifndef ${_WORDFUNC_UN}StrFilter${_WORDFUNC_S}
!verbose push
!verbose ${_WORDFUNC_VERBOSE}
!define ${_WORDFUNC_UN}StrFilter${_WORDFUNC_S} `!insertmacro ${_WORDFUNC_UN}StrFilter${_WORDFUNC_S}Call`
Function ${_WORDFUNC_UN}StrFilter${_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 eng
StrCmp $R2 rus rus
eng:
StrCpy $4 65
StrCpy $5 90
StrCpy $6 97
StrCpy $7 122
goto langend
rus:
StrCpy $4 192
StrCpy $5 223
StrCpy $6 224
StrCpy $7 255
goto langend
;...
langend:
StrCpy $R7 ''
StrCpy $R8 ''
StrCmp${_WORDFUNC_S} $2 '' 0 begin
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 '' filter error
restart2:
StrCmp${_WORDFUNC_S} $3 '' end
StrCpy $R7 ''
StrCpy $R8 '+-'
goto begin
filter:
StrCmp${_WORDFUNC_S} $R7 '1' +3
StrCmp${_WORDFUNC_S} $R7 '2' +2
StrCmp${_WORDFUNC_S} $R7 '3' 0 error
StrCmp${_WORDFUNC_S} $R8 '' begin
StrCmp${_WORDFUNC_S} $R7$R8 '23' +2
StrCmp${_WORDFUNC_S} $R7$R8 '32' 0 +3
StrCpy $R7 -1
goto begin
StrCmp${_WORDFUNC_S} $R7$R8 '13' +2
StrCmp${_WORDFUNC_S} $R7$R8 '31' 0 +3
StrCpy $R7 -2
goto begin
StrCmp${_WORDFUNC_S} $R7$R8 '12' +2
StrCmp${_WORDFUNC_S} $R7$R8 '21' 0 error
StrCpy $R7 -3
begin:
StrCpy $R6 0
StrCpy $R1 ''
loop:
StrCpy $R2 $R0 1 $R6
StrCmp${_WORDFUNC_S} $R2 '' restartchk
StrCmp${_WORDFUNC_S} $2 '' +7
StrCpy $R4 0
StrCpy $R5 $2 1 $R4
StrCmp${_WORDFUNC_S} $R5 '' addsymbol
StrCmp${_WORDFUNC_S} $R5 $R2 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 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 loop2
StrCmp${_WORDFUNC_S} $R8 '+-' 0 +2
StrCmp${_WORDFUNC_S} $3 '+' 0 +4
StrCpy $R4 $4
StrCpy $R5 $5
goto loop2
StrCpy $R4 $6
StrCpy $R5 $7
loop2:
IntFmt $R3 '%c' $R4
StrCmp $R2 $R3 found
StrCmp $R4 $R5 notfound
IntOp $R4 $R4 + 1
goto loop2
found:
StrCmp${_WORDFUNC_S} $R8 '+-' setcase
StrCmp${_WORDFUNC_S} $R7 '3' skipsymbol
StrCmp${_WORDFUNC_S} $R7 '-3' addsymbol
StrCmp${_WORDFUNC_S} $R8 '' addsymbol skipsymbol
notfound:
StrCmp${_WORDFUNC_S} $R8 '+-' addsymbol
StrCmp${_WORDFUNC_S} $R7 '3' 0 +2
StrCmp${_WORDFUNC_S} $R5 57 addsymbol +3
StrCmp${_WORDFUNC_S} $R7 '-3' 0 +5
StrCmp${_WORDFUNC_S} $R5 57 skipsymbol
StrCpy $R4 48
StrCpy $R5 57
goto loop2
StrCmp${_WORDFUNC_S} $R8 '' skipsymbol addsymbol
setcase:
StrCpy $R2 $R3
addsymbol:
StrCpy $R1 $R1$R2
skipsymbol:
IntOp $R6 $R6 + 1
goto loop
error:
SetErrors
StrCpy $R0 ''
goto end
restartchk:
StrCpy $R0 $R1
StrCmp${_WORDFUNC_S} $2 '' 0 restart1
StrCmp${_WORDFUNC_S} $R8 '+-' 0 restart2
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
FunctionEnd
!verbose pop
!endif
!macroend
!macro VersionCompare
!ifndef ${_WORDFUNC_UN}VersionCompare
!verbose push
!verbose ${_WORDFUNC_VERBOSE}
!define ${_WORDFUNC_UN}VersionCompare `!insertmacro ${_WORDFUNC_UN}VersionCompareCall`
Function ${_WORDFUNC_UN}VersionCompare
Exch $1
Exch
Exch $0
Exch
Push $2
Push $3
Push $4
Push $5
Push $6
Push $7
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 '' 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 begin newer2
StrCmp $5 0 newer1
IntCmp $6 $7 0 newer1 newer2
StrCpy $4 '1$4'
StrCpy $5 '1$5'
IntCmp $4 $5 begin newer2 newer1
equal:
StrCpy $0 0
goto end
newer1:
StrCpy $0 1
goto end
newer2:
StrCpy $0 2
end:
Pop $7
Pop $6
Pop $5
Pop $4
Pop $3
Pop $2
Pop $1
Exch $0
FunctionEnd
!verbose pop
!endif
!macroend
!macro VersionConvert
!ifndef ${_WORDFUNC_UN}VersionConvert
!verbose push
!verbose ${_WORDFUNC_VERBOSE}
!define ${_WORDFUNC_UN}VersionConvert `!insertmacro ${_WORDFUNC_UN}VersionConvertCall`
Function ${_WORDFUNC_UN}VersionConvert
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 loop
preloop:
IntOp $2 $2 + 1
loop:
StrCpy $3 $0 1 $2
StrCmp $3 '' endcheck
StrCmp $3 '.' dot
StrCmp $3 '0' digit
IntCmp $3 '0' letter letter digit
dot:
StrCmp $7 'dot' replacespecial
StrCpy $7 'dot'
goto preloop
digit:
StrCmp $7 'letter' insertdot
StrCpy $7 'digit'
goto preloop
letter:
StrCpy $5 0
StrCpy $4 $1 1 $5
IntOp $5 $5 + 1
StrCmp $4 '' 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 loop
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 loop
insertdot:
StrCpy $4 $0 $2
StrCpy $0 $0 '' $2
StrCpy $0 '$4.$0'
StrCpy $7 'dot'
goto preloop
endcheck:
StrCpy $4 $0 1 -1
StrCmp $4 '.' 0 end
StrCpy $0 $0 -1
goto -3
end:
Pop $7
Pop $6
Pop $5
Pop $4
Pop $3
Pop $2
Pop $1
Exch $0
FunctionEnd
!verbose pop
!endif
!macroend
# Uninstall. Case insensitive. #
!macro un.WordFindCall _STRING _DELIMITER _OPTION _RESULT
!verbose push
!verbose ${_WORDFUNC_VERBOSE}
Push `${_STRING}`
Push `${_DELIMITER}`
Push `${_OPTION}`
Call un.WordFind
Pop ${_RESULT}
!verbose pop
!macroend
!macro un.WordFind2XCall _STRING _DELIMITER1 _DELIMITER2 _NUMBER _RESULT
!verbose push
!verbose ${_WORDFUNC_VERBOSE}
Push `${_STRING}`
Push `${_DELIMITER1}`
Push `${_DELIMITER2}`
Push `${_NUMBER}`
Call un.WordFind2X
Pop ${_RESULT}
!verbose pop
!macroend
!macro un.WordFind3XCall _STRING _DELIMITER1 _CENTER _DELIMITER2 _NUMBER _RESULT
!verbose push
!verbose ${_WORDFUNC_VERBOSE}
Push `${_STRING}`
Push `${_DELIMITER1}`
Push `${_CENTER}`
Push `${_DELIMITER2}`
Push `${_NUMBER}`
Call un.WordFind3X
Pop ${_RESULT}
!verbose pop
!macroend
!macro un.WordReplaceCall _STRING _WORD1 _WORD2 _NUMBER _RESULT
!verbose push
!verbose ${_WORDFUNC_VERBOSE}
Push `${_STRING}`
Push `${_WORD1}`
Push `${_WORD2}`
Push `${_NUMBER}`
Call un.WordReplace
Pop ${_RESULT}
!verbose pop
!macroend
!macro un.WordAddCall _STRING1 _DELIMITER _STRING2 _RESULT
!verbose push
!verbose ${_WORDFUNC_VERBOSE}
Push `${_STRING1}`
Push `${_DELIMITER}`
Push `${_STRING2}`
Call un.WordAdd
Pop ${_RESULT}
!verbose pop
!macroend
!macro un.WordInsertCall _STRING _DELIMITER _WORD _NUMBER _RESULT
!verbose push
!verbose ${_WORDFUNC_VERBOSE}
Push `${_STRING}`
Push `${_DELIMITER}`
Push `${_WORD}`
Push `${_NUMBER}`
Call un.WordInsert
Pop ${_RESULT}
!verbose pop
!macroend
!macro un.StrFilterCall _STRING _FILTER _INCLUDE _EXCLUDE _RESULT
!verbose push
!verbose ${_WORDFUNC_VERBOSE}
Push `${_STRING}`
Push `${_FILTER}`
Push `${_INCLUDE}`
Push `${_EXCLUDE}`
Call un.StrFilter
Pop ${_RESULT}
!verbose pop
!macroend
!macro un.VersionCompareCall _VER1 _VER2 _RESULT
!verbose push
!verbose ${_WORDFUNC_VERBOSE}
Push `${_VER1}`
Push `${_VER2}`
Call un.VersionCompare
Pop ${_RESULT}
!verbose pop
!macroend
!macro un.VersionConvertCall _VERSION _CHARLIST _RESULT
!verbose push
!verbose ${_WORDFUNC_VERBOSE}
Push `${_VERSION}`
Push `${_CHARLIST}`
Call un.VersionConvert
Pop ${_RESULT}
!verbose pop
!macroend
!macro un.WordFind
!ifndef un.WordFind
!verbose push
!verbose ${_WORDFUNC_VERBOSE}
!undef _WORDFUNC_UN
!define _WORDFUNC_UN `un.`
!insertmacro WordFind
!undef _WORDFUNC_UN
!define _WORDFUNC_UN
!verbose pop
!endif
!macroend
!macro un.WordFind2X
!ifndef un.WordFind2X
!verbose push
!verbose ${_WORDFUNC_VERBOSE}
!undef _WORDFUNC_UN
!define _WORDFUNC_UN `un.`
!insertmacro WordFind2X
!undef _WORDFUNC_UN
!define _WORDFUNC_UN
!verbose pop
!endif
!macroend
!macro un.WordFind3X
!ifndef un.WordFind3X
!verbose push
!verbose ${_WORDFUNC_VERBOSE}
!undef _WORDFUNC_UN
!define _WORDFUNC_UN `un.`
!insertmacro WordFind3X
!undef _WORDFUNC_UN
!define _WORDFUNC_UN
!verbose pop
!endif
!macroend
!macro un.WordReplace
!ifndef un.WordReplace
!verbose push
!verbose ${_WORDFUNC_VERBOSE}
!undef _WORDFUNC_UN
!define _WORDFUNC_UN `un.`
!insertmacro WordReplace
!undef _WORDFUNC_UN
!define _WORDFUNC_UN
!verbose pop
!endif
!macroend
!macro un.WordAdd
!ifndef un.WordAdd
!verbose push
!verbose ${_WORDFUNC_VERBOSE}
!undef _WORDFUNC_UN
!define _WORDFUNC_UN `un.`
!insertmacro WordAdd
!undef _WORDFUNC_UN
!define _WORDFUNC_UN
!verbose pop
!endif
!macroend
!macro un.WordInsert
!ifndef un.WordInsert
!verbose push
!verbose ${_WORDFUNC_VERBOSE}
!undef _WORDFUNC_UN
!define _WORDFUNC_UN `un.`
!insertmacro WordInsert
!undef _WORDFUNC_UN
!define _WORDFUNC_UN
!verbose pop
!endif
!macroend
!macro un.StrFilter
!ifndef un.StrFilter
!verbose push
!verbose ${_WORDFUNC_VERBOSE}
!undef _WORDFUNC_UN
!define _WORDFUNC_UN `un.`
!insertmacro StrFilter
!undef _WORDFUNC_UN
!define _WORDFUNC_UN
!verbose pop
!endif
!macroend
!macro un.VersionCompare
!ifndef un.VersionCompare
!verbose push
!verbose ${_WORDFUNC_VERBOSE}
!undef _WORDFUNC_UN
!define _WORDFUNC_UN `un.`
!insertmacro VersionCompare
!undef _WORDFUNC_UN
!define _WORDFUNC_UN
!verbose pop
!endif
!macroend
!macro un.VersionConvert
!ifndef un.VersionConvert
!verbose push
!verbose ${_WORDFUNC_VERBOSE}
!undef _WORDFUNC_UN
!define _WORDFUNC_UN `un.`
!insertmacro VersionConvert
!undef _WORDFUNC_UN
!define _WORDFUNC_UN
!verbose pop
!endif
!macroend
# Install. Case sensitive. #
!macro WordFindSCall _STRING _DELIMITER _OPTION _RESULT
!verbose push
!verbose ${_WORDFUNC_VERBOSE}
Push `${_STRING}`
Push `${_DELIMITER}`
Push `${_OPTION}`
Call WordFindS
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}`
Call WordFind2XS
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}`
Call WordFind3XS
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}`
Call WordReplaceS
Pop ${_RESULT}
!verbose pop
!macroend
!macro WordAddSCall _STRING1 _DELIMITER _STRING2 _RESULT
!verbose push
!verbose ${_WORDFUNC_VERBOSE}
Push `${_STRING1}`
Push `${_DELIMITER}`
Push `${_STRING2}`
Call WordAddS
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}`
Call WordInsertS
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}`
Call StrFilterS
Pop ${_RESULT}
!verbose pop
!macroend
!macro WordFindS
!ifndef WordFindS
!verbose push
!verbose ${_WORDFUNC_VERBOSE}
!undef _WORDFUNC_S
!define _WORDFUNC_S `S`
!insertmacro WordFind
!undef _WORDFUNC_S
!define _WORDFUNC_S
!verbose pop
!endif
!macroend
!macro WordFind2XS
!ifndef WordFind2XS
!verbose push
!verbose ${_WORDFUNC_VERBOSE}
!undef _WORDFUNC_S
!define _WORDFUNC_S `S`
!insertmacro WordFind2X
!undef _WORDFUNC_S
!define _WORDFUNC_S
!verbose pop
!endif
!macroend
!macro WordFind3XS
!ifndef WordFind3XS
!verbose push
!verbose ${_WORDFUNC_VERBOSE}
!undef _WORDFUNC_S
!define _WORDFUNC_S `S`
!insertmacro WordFind3X
!undef _WORDFUNC_S
!define _WORDFUNC_S
!verbose pop
!endif
!macroend
!macro WordReplaceS
!ifndef WordReplaceS
!verbose push
!verbose ${_WORDFUNC_VERBOSE}
!undef _WORDFUNC_S
!define _WORDFUNC_S `S`
!insertmacro WordReplace
!undef _WORDFUNC_S
!define _WORDFUNC_S
!verbose pop
!endif
!macroend
!macro WordAddS
!ifndef WordAddS
!verbose push
!verbose ${_WORDFUNC_VERBOSE}
!undef _WORDFUNC_S
!define _WORDFUNC_S `S`
!insertmacro WordAdd
!undef _WORDFUNC_S
!define _WORDFUNC_S
!verbose pop
!endif
!macroend
!macro WordInsertS
!ifndef WordInsertS
!verbose push
!verbose ${_WORDFUNC_VERBOSE}
!undef _WORDFUNC_S
!define _WORDFUNC_S `S`
!insertmacro WordInsert
!undef _WORDFUNC_S
!define _WORDFUNC_S
!verbose pop
!endif
!macroend
!macro StrFilterS
!ifndef StrFilterS
!verbose push
!verbose ${_WORDFUNC_VERBOSE}
!undef _WORDFUNC_S
!define _WORDFUNC_S `S`
!insertmacro StrFilter
!undef _WORDFUNC_S
!define _WORDFUNC_S
!verbose pop
!endif
!macroend
# Uninstall. Case sensitive. #
!macro un.WordFindSCall _STRING _DELIMITER _OPTION _RESULT
!verbose push
!verbose ${_WORDFUNC_VERBOSE}
Push `${_STRING}`
Push `${_DELIMITER}`
Push `${_OPTION}`
Call un.WordFindS
Pop ${_RESULT}
!verbose pop
!macroend
!macro un.WordFind2XSCall _STRING _DELIMITER1 _DELIMITER2 _NUMBER _RESULT
!verbose push
!verbose ${_WORDFUNC_VERBOSE}
Push `${_STRING}`
Push `${_DELIMITER1}`
Push `${_DELIMITER2}`
Push `${_NUMBER}`
Call un.WordFind2XS
Pop ${_RESULT}
!verbose pop
!macroend
!macro un.WordFind3XSCall _STRING _DELIMITER1 _CENTER _DELIMITER2 _NUMBER _RESULT
!verbose push
!verbose ${_WORDFUNC_VERBOSE}
Push `${_STRING}`
Push `${_DELIMITER1}`
Push `${_CENTER}`
Push `${_DELIMITER2}`
Push `${_NUMBER}`
Call un.WordFind3XS
Pop ${_RESULT}
!verbose pop
!macroend
!macro un.WordReplaceSCall _STRING _WORD1 _WORD2 _NUMBER _RESULT
!verbose push
!verbose ${_WORDFUNC_VERBOSE}
Push `${_STRING}`
Push `${_WORD1}`
Push `${_WORD2}`
Push `${_NUMBER}`
Call un.WordReplaceS
Pop ${_RESULT}
!verbose pop
!macroend
!macro un.WordAddSCall _STRING1 _DELIMITER _STRING2 _RESULT
!verbose push
!verbose ${_WORDFUNC_VERBOSE}
Push `${_STRING1}`
Push `${_DELIMITER}`
Push `${_STRING2}`
Call un.WordAddS
Pop ${_RESULT}
!verbose pop
!macroend
!macro un.WordInsertSCall _STRING _DELIMITER _WORD _NUMBER _RESULT
!verbose push
!verbose ${_WORDFUNC_VERBOSE}
Push `${_STRING}`
Push `${_DELIMITER}`
Push `${_WORD}`
Push `${_NUMBER}`
Call un.WordInsertS
Pop ${_RESULT}
!verbose pop
!macroend
!macro un.StrFilterSCall _STRING _FILTER _INCLUDE _EXCLUDE _RESULT
!verbose push
!verbose ${_WORDFUNC_VERBOSE}
Push `${_STRING}`
Push `${_FILTER}`
Push `${_INCLUDE}`
Push `${_EXCLUDE}`
Call un.StrFilterS
Pop ${_RESULT}
!verbose pop
!macroend
!macro un.WordFindS
!ifndef un.WordFindS
!verbose push
!verbose ${_WORDFUNC_VERBOSE}
!undef _WORDFUNC_S
!undef _WORDFUNC_UN
!define _WORDFUNC_UN `un.`
!define _WORDFUNC_S `S`
!insertmacro WordFind
!undef _WORDFUNC_UN
!define _WORDFUNC_UN
!undef _WORDFUNC_S
!define _WORDFUNC_S
!verbose pop
!endif
!macroend
!macro un.WordFind2XS
!ifndef un.WordFind2XS
!verbose push
!verbose ${_WORDFUNC_VERBOSE}
!undef _WORDFUNC_UN
!define _WORDFUNC_UN `un.`
!undef _WORDFUNC_S
!define _WORDFUNC_S `S`
!insertmacro WordFind2X
!undef _WORDFUNC_UN
!define _WORDFUNC_UN
!undef _WORDFUNC_S
!define _WORDFUNC_S
!verbose pop
!endif
!macroend
!macro un.WordFind3XS
!ifndef un.WordFind3XS
!verbose push
!verbose ${_WORDFUNC_VERBOSE}
!undef _WORDFUNC_UN
!define _WORDFUNC_UN `un.`
!undef _WORDFUNC_S
!define _WORDFUNC_S `S`
!insertmacro WordFind3X
!undef _WORDFUNC_UN
!define _WORDFUNC_UN
!undef _WORDFUNC_S
!define _WORDFUNC_S
!verbose pop
!endif
!macroend
!macro un.WordReplaceS
!ifndef un.WordReplaceS
!verbose push
!verbose ${_WORDFUNC_VERBOSE}
!undef _WORDFUNC_UN
!define _WORDFUNC_UN `un.`
!undef _WORDFUNC_S
!define _WORDFUNC_S `S`
!insertmacro WordReplace
!undef _WORDFUNC_UN
!define _WORDFUNC_UN
!undef _WORDFUNC_S
!define _WORDFUNC_S
!verbose pop
!endif
!macroend
!macro un.WordAddS
!ifndef un.WordAddS
!verbose push
!verbose ${_WORDFUNC_VERBOSE}
!undef _WORDFUNC_UN
!define _WORDFUNC_UN `un.`
!undef _WORDFUNC_S
!define _WORDFUNC_S `S`
!insertmacro WordAdd
!undef _WORDFUNC_UN
!define _WORDFUNC_UN
!undef _WORDFUNC_S
!define _WORDFUNC_S
!verbose pop
!endif
!macroend
!macro un.WordInsertS
!ifndef un.WordInsertS
!verbose push
!verbose ${_WORDFUNC_VERBOSE}
!undef _WORDFUNC_UN
!define _WORDFUNC_UN `un.`
!undef _WORDFUNC_S
!define _WORDFUNC_S `S`
!insertmacro WordInsert
!undef _WORDFUNC_UN
!define _WORDFUNC_UN
!undef _WORDFUNC_S
!define _WORDFUNC_S
!verbose pop
!endif
!macroend
!macro un.StrFilterS
!ifndef un.StrFilterS
!verbose push
!verbose ${_WORDFUNC_VERBOSE}
!undef _WORDFUNC_UN
!define _WORDFUNC_UN `un.`
!undef _WORDFUNC_S
!define _WORDFUNC_S `S`
!insertmacro StrFilter
!undef _WORDFUNC_UN
!define _WORDFUNC_UN
!undef _WORDFUNC_S
!define _WORDFUNC_S
!verbose pop
!endif
!macroend
!endif