⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pidgin-plugin.nsh

📁 Linux下的多协议即时通讯程序源代码
💻 NSH
字号:
;;;; Windows Pidgin NSIS installer plugin helper utilities;; Copyright 2005, Daniel Atallah <daniel_atallah@yahoo.com>;;;; Include in plugin installer scripts using:;;   !addincludedir "${PATH_TO_PIDGIN_SRC}\pidgin\win32\nsis";;   !include "pidgin-plugin.nsh";;!define PIDGIN_REG_KEY              "SOFTWARE\pidgin"!define PIDGIN_VERSION_OK           0!define PIDGIN_VERSION_INCOMPATIBLE 1!define PIDGIN_VERSION_UNDEFINED    2; Extract the Pidgin Version from the registry; This will set the Error flag if unable to determine the value; Pop the value of the stack after calling this to get the value (unless Error Flag is set)Function GetPidginVersion  Push $R0  ; Read the pidgin version  ClearErrors  ReadRegStr $R0 HKLM ${PIDGIN_REG_KEY} "Version"  IfErrors +1 GetPidginVersion_found  ; fall back to the HKCU registry key  ReadRegStr $R0 HKCU ${PIDGIN_REG_KEY} "Version"  IfErrors GetPidginVersion_done ; Keep the error flag set  GetPidginVersion_found:  Push $R0 ; Push the value onto the stack  Exch  GetPidginVersion_done:  ; restore $R0  Pop $R0FunctionEnd; Check that the currently installed Pidgin version is compatible; with the plugin version we are installing; Push the Plugin's Pidgin Version onto the Stack before calling; After calling, the top of the Stack will contain the result of the check:;   PIDGIN_VERSION_OK - If the installed Pidgin version is compatible w/ the version specified;   PIDGIN_VERSION_INCOMPATIBLE - If the installed Pidgin version isn't compatible w/ the version specified;   PIDGIN_VERSION_UNDEFINED - If the installed Pidgin version can't be determined Function CheckPidginVersion  ; Save the Variable values that we will use in the stack  Push $R4  Exch  Pop $R4 ; Get the plugin's Pidgin Version  Push $R0  Push $R1  Push $R2  ; Read the pidgin version  Call GetPidginVersion  IfErrors checkPidginVersion_noPidginInstallFound  Pop $R0  ;If they are exactly the same, we don't need to look at anything else  StrCmp $R0 $R4 checkPidginVersion_VersionOK   ; Versions are in the form of X.Y.Z  ; If X is different or plugin's Y > pidgin's Y, then we shouldn't install  ;Check the Major Version  Push $R0  Push 0  Call GetVersionComponent  IfErrors checkPidginVersion_noPidginInstallFound ;We couldn't extract 'X' from the installed pidgin version  Pop $R2  Push $R4  Push 0  Call GetVersionComponent  IfErrors checkPidginVersion_BadVersion ; this isn't a valid version, so don't bother even checking  Pop $R1  ;Check that both versions' X is the same  StrCmp $R1 $R2 +1 checkPidginVersion_BadVersion  ;Check the Minor Version  Push $R0  Push 1  Call GetVersionComponent  IfErrors checkPidginVersion_noPidginInstallFound ;We couldn't extract 'Y' from the installed pidgin version  Pop $R2  Push $R4  Push 1  Call GetVersionComponent  IfErrors checkPidginVersion_BadVersion ; this isn't a valid version, so don't bother even checking  Pop $R1  ;Check that plugin's Y <= pidgin's Y  IntCmp $R1 $R2 checkPidginVersion_VersionOK checkPidginVersion_VersionOK checkPidginVersion_BadVersion  checkPidginVersion_BadVersion:    Push ${PIDGIN_VERSION_INCOMPATIBLE}    goto checkPidginVersion_done  checkPidginVersion_noPidginInstallFound:    Push ${PIDGIN_VERSION_UNDEFINED}    goto checkPidginVersion_done  checkPidginVersion_VersionOK:    Push ${PIDGIN_VERSION_OK}  checkPidginVersion_done:  ; Restore the Variables that we used  Exch  Pop $R2  Exch  Pop $R1  Exch  Pop $R0  Exch  Pop $R4FunctionEnd; Extract the part of a string prior to "." (or the whole string if there is no "."); If no "." was found, the ErrorFlag will be set; Before this is called, Push ${VERSION_STRING} must be called, and then Push 0 for Major, 1 for Minor, etc; Pop should be called after to retrieve the new valueFunction GetVersionComponent  ClearErrors  ; Save the Variable values that we will use in the stack  Push $1  Exch  Pop $1 ;The version component which we want to extract (0, 1, 2)  Exch  Push $0  Exch  Pop $0 ;The string from which to extract the version component  Push $2  Push $3  Push $4  Push $5  Push $6  Push $7  StrCpy $2 "0" ;Initialize our string index counter  StrCpy $7 "0" ;Index of last "."  StrCpy $3 "0" ;Initialize our version index counter  startGetVersionComponentLoop:    ;avoid infinite loop (if we have gotten the whole initial string, exit the loop and set the error flag)    StrCmp $6 $0 GetVersionComponentSetErrorFlag    IntOp $2 $2 + 1    StrCpy $6 $0 $2 ;Update the infinite loop preventing string    ;Determine the correct substring (only the current index component)    IntOp $5 $2 - $7    StrCpy $4 $0 $5 $7 ;Append the current character in $0 to $4    StrCpy $5 $0 1 $2 ;store the next character in $5    ;if the next character is ".", $4 will contain the version component prior to "."    StrCmp $5 "." +1 startGetVersionComponentLoop    StrCmp $3 $1 doneGetVersionComponent ;If it is the version component we're looking for, stop    IntOp $3 $3 + 1 ;Increment the version index counter    IntOp $2 $2 + 1 ;Increment the version string index to "." (so it will be skipped)    StrCpy $7 $2 ;Keep track of the index of the last "."    StrCpy $6 $0 $2 ;Update the infinite loop preventing string    goto startGetVersionComponentLoop  GetVersionComponentSetErrorFlag:    SetErrors  doneGetVersionComponent:  ; Restore the Variables that we used  Pop $7  Pop $6  Pop $5  Push $4 ;This is the value we're returning  Exch  Pop $4  Exch  Pop $3  Exch  Pop $2  Exch  Pop $0  Exch  Pop $1FunctionEnd

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -