VersionCompare: Difference between revisions
From NSIS Wiki
Jump to navigationJump to search
m (Added category links.) |
m (Updated by user: Instructor (talk, contrib).) |
||
Line 6: | Line 6: | ||
; 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 | ||
If a function is used without an header, you should put the function below in your script before calling it. | |||
== The Function == | == The Function == | ||
Line 14: | Line 16: | ||
____________________________________________________________________________ | ____________________________________________________________________________ | ||
Thanks Afrow UK (Based on his Function "VersionCheckNew2") | |||
Thanks Afrow UK (Based on his Function "VersionCheckNew2" | |||
Line 23: | Line 23: | ||
Syntax: | Syntax: | ||
${VersionCompare} "[Version1]" "[Version2]" $var | |||
"[Version1]" ; First version | |||
"[Version2]" ; Second version | |||
$var ; Result: | |||
; $var=0 Versions are equal | |||
; $var=1 Version1 is newer | |||
; $var=2 Version2 is newer | |||
Example: | Example: | ||
Section | Section | ||
${VersionCompare} "1.1.1.9" "1.1.1.01" $R0 | |||
; $R0="1" | |||
SectionEnd*/ | SectionEnd*/ | ||
;--------------------------------------------------------------------------- | ;--------------------------------------------------------------------------- | ||
Function VersionCompare | Function VersionCompare | ||
!define VersionCompare `!insertmacro VersionCompareCall` | |||
!macro VersionCompareCall _VER1 _VER2 _RESULT | |||
Push `${_VER1}` | |||
Push `${_VER2}` | |||
Call VersionCompare | |||
Pop ${_RESULT} | |||
!macroend | |||
Exch $1 | Exch $1 | ||
Exch | Exch |
Revision as of 09:41, 24 June 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 an header, you should put the function below in your script before calling it.
The Function
/* ____________________________________________________________________________ VersionCompare v1.0 ____________________________________________________________________________ Thanks Afrow UK (Based on his Function "VersionCheckNew2") Compare version numbers. Syntax: ${VersionCompare} "[Version1]" "[Version2]" $var "[Version1]" ; First version "[Version2]" ; Second version $var ; Result: ; $var=0 Versions are equal ; $var=1 Version1 is newer ; $var=2 Version2 is newer Example: Section ${VersionCompare} "1.1.1.9" "1.1.1.01" $R0 ; $R0="1" SectionEnd*/ ;--------------------------------------------------------------------------- Function VersionCompare !define VersionCompare `!insertmacro VersionCompareCall` !macro VersionCompareCall _VER1 _VER2 _RESULT Push `${_VER1}` Push `${_VER2}` Call VersionCompare Pop ${_RESULT} !macroend 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