VersionConvert: Difference between revisions
From NSIS Wiki
Jump to navigationJump to search
m (Adding new author and category links.) |
Instructor (talk | contribs) No edit summary |
||
Line 2: | Line 2: | ||
== Links == | == Links == | ||
; Latest version of headers "nsh.zip": | ; Latest version of headers "nsh.zip": | ||
: http://forums.winamp.com/showthread.php?s=&threadid=203228&goto=lastpost | : http://forums.winamp.com/showthread.php?s=&threadid=203228&goto=lastpost | ||
== The Function == | If a function is used without header, put the function code in your script before calling it. | ||
<highlight-nsis> | |||
== The Function Description== | |||
<highlight-nsis> | |||
____________________________________________________________________________ | ____________________________________________________________________________ | ||
Line 32: | Line 36: | ||
-Converted letters are separated with dot | -Converted letters are separated with dot | ||
-If character is non-digit and not in list then it will be converted to dot | -If character is non-digit and not in list then it will be converted to dot | ||
</highlight-nsis> | |||
Example1: | <b>Example1:</b> | ||
Section | <highlight-nsis>Section | ||
${VersionConvert} "9.0a" "" $R0 | ${VersionConvert} "9.0a" "" $R0 | ||
; $R0="9.0.01" | ; $R0="9.0.01" | ||
Line 46: | Line 51: | ||
; $R2="2" version2 is newer | ; $R2="2" version2 is newer | ||
SectionEnd | SectionEnd | ||
</highlight-nsis> | |||
Example2: | <b>Example2:</b> | ||
Section | <highlight-nsis>Section | ||
${VersionConvert} "0.15c-9m" "" $R0 | ${VersionConvert} "0.15c-9m" "" $R0 | ||
; $R0="0.15.03.9.13" | ; $R0="0.15.03.9.13" | ||
Line 58: | Line 64: | ||
; $R2="1" version1 is newer | ; $R2="1" version1 is newer | ||
SectionEnd | SectionEnd | ||
</highlight-nsis> | |||
Example3: | <b>Example3:</b> | ||
Section | <highlight-nsis>Section | ||
${VersionConvert} "0.15c+" "abcdefghijklmnopqrstuvwxyz+" $R0 | ${VersionConvert} "0.15c+" "abcdefghijklmnopqrstuvwxyz+" $R0 | ||
; $R0="0.15.0327" | ; $R0="0.15.0327" | ||
Line 69: | Line 76: | ||
${VersionCompare} "$R0" "$R1" $R2 | ${VersionCompare} "$R0" "$R1" $R2 | ||
; $R2="1" version1 is newer | ; $R2="1" version1 is newer | ||
SectionEnd | SectionEnd | ||
</highlight-nsis> | |||
== The Function Code== | |||
<highlight-nsis> | |||
Function VersionConvert | Function VersionConvert | ||
!define VersionConvert `!insertmacro VersionConvertCall` | !define VersionConvert `!insertmacro VersionConvertCall` |
Revision as of 14:18, 4 July 2005
Author: Instructor (talk, contrib) |
Links
- Latest version of headers "nsh.zip"
- http://forums.winamp.com/showthread.php?s=&threadid=203228&goto=lastpost
If a function is used without header, put the function code in your script before calling it.
The Function Description
____________________________________________________________________________ VersionConvert v1.0 ____________________________________________________________________________ Thanks Afrow UK (Based on his idea of Function "CharIndexReplace") Convert version in the numerical format which can be compared. Syntax: ${VersionConvert} "[Version]" "[CharList]" $var "[Version]" ; Version ; "[CharList]" ; List of characters, which will be replaced by numbers ; "abcdefghijklmnopqrstuvwxyz" (default) ; $var ; Result: converted version Note: -Converted letters are separated with dot -If character is non-digit and not in list then it will be converted to dot
Example1:
Section ${VersionConvert} "9.0a" "" $R0 ; $R0="9.0.01" ${VersionConvert} "9.0c" "" $R1 ; $R1="9.0.03" ${VersionCompare} "$R0" "$R1" $R2 ; $R2="2" version2 is newer SectionEnd
Example2:
Section ${VersionConvert} "0.15c-9m" "" $R0 ; $R0="0.15.03.9.13" ${VersionConvert} "0.15c-1n" "" $R1 ; $R1="0.15.03.1.14" ${VersionCompare} "$R0" "$R1" $R2 ; $R2="1" version1 is newer SectionEnd
Example3:
Section ${VersionConvert} "0.15c+" "abcdefghijklmnopqrstuvwxyz+" $R0 ; $R0="0.15.0327" ${VersionConvert} "0.15c" "abcdefghijklmnopqrstuvwxyz+" $R1 ; $R1="0.15.03" ${VersionCompare} "$R0" "$R1" $R2 ; $R2="1" version1 is newer SectionEnd
The Function Code
Function VersionConvert !define VersionConvert `!insertmacro VersionConvertCall` !macro VersionConvertCall _VERSION _CHARLIST _RESULT Push `${_VERSION}` Push `${_CHARLIST}` Call VersionConvert Pop ${_RESULT} !macroend 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