NSIS/Include/WordFunc.nsh
kichik 3c5b768f06 updates by Instructor:
* GetFileAttributes corrections
 * Prevent error in case of multiple header inclusion


git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@4685 212acab6-be3b-0410-9dea-997c60f758d6
2006-06-01 10:43:20 +00:00

2205 lines
40 KiB
NSIS

/*
_____________________________________________________________________________
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. !insertmacro WordFunction
3. [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]
un.WordFunction=[un.WordFind|un.WordFindS|un.WordFind2X|un.WordFind2XS|
un.WordFind3X|un.WordFind3XS|un.WordReplace|un.WordReplaceS|
un.WordAdd|un.WordAddS|un.WordInsert|un.WordInsertS|
un.StrFilter|un.StrFilterS|un.VersionCompare|un.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
!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