From 204f371097d72aa6c9b0fb4895096b1c36113809 Mon Sep 17 00:00:00 2001 From: anders_k Date: Mon, 3 Feb 2014 20:19:35 +0000 Subject: [PATCH] Added Int32/64/Ptr helper macros to Util.nsh git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@6438 212acab6-be3b-0410-9dea-997c60f758d6 --- Docs/src/history.but | 10 +++++ Include/Util.nsh | 91 ++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 97 insertions(+), 4 deletions(-) diff --git a/Docs/src/history.but b/Docs/src/history.but index e964422d..509d0a0c 100644 --- a/Docs/src/history.but +++ b/Docs/src/history.but @@ -1,5 +1,15 @@ \A{history} Changelog and Release Notes +\H{v3.0b0} 3.0 Beta 0 + +Released on ?, 2014 + +\S1{v3.0b0-rl} Release Notes + +\S2{} Minor Changes + +\b Added Int<32|64|Ptr> helper macros to Util.nsh + \H{v3.0a2} 3.0 Alpha 2 Released on December 24th, 2013 diff --git a/Include/Util.nsh b/Include/Util.nsh index cb046364..736b6ba3 100644 --- a/Include/Util.nsh +++ b/Include/Util.nsh @@ -4,9 +4,7 @@ ; ; Voodoo macros to make end-user usage easier. This may be documented someday. -!verbose push -!verbose 3 - +!verbose push 3 !ifndef ___UTIL__NSH___ !define ___UTIL__NSH___ @@ -51,6 +49,91 @@ !macroend !define CallArtificialFunction2 `!insertmacro CallArtificialFunction2` -!endif # !___UTIL__NSH___ +!define Int32Op '!insertmacro Int32Op ' +!define Int64Op '!insertmacro Int64Op ' +!define IntPtrOp '!insertmacro IntPtrOp ' +!macro Int32Op r a o b +!if ${NSIS_PTR_SIZE} <= 4 + IntOp ${r} ${a} ${o} ${b} +!else + !error "Int32Op not implemented" +!endif +!macroend +!macro Int64Op r a o b +System::Int64Op ${a} ${o} ${b} +Pop ${r} +!macroend +!macro IntPtrOp r a o b +!if ${NSIS_PTR_SIZE} <= 4 + ${Int32Op} ${r} ${a} ${o} "${b}" +!else + ${Int64Op} ${r} ${a} ${o} "${b}" +!endif +!macroend + +!define Int32Cmp '!insertmacro Int32Cmp ' +!define Int64Cmp '!insertmacro Int64Cmp ' +!define IntPtrCmp '!insertmacro IntPtrCmp ' +!macro Int32Cmp a b jeek jles jgtr +!if ${NSIS_PTR_SIZE} <= 4 + IntCmp ${a} ${b} "${jeek}" "${jles}" "${jgtr}" +!else + !error "Int32Cmp not implemented" +!endif +!macroend +!macro Int64Cmp a b jeek jles jgtr +!ifmacrondef _LOGICLIB_TEMP +!include LogicLib.nsh +!endif +!echo "Int64Cmp ${a} ${b} ${jeek} ${jles} ${jgtr}" +!verbose push 2 +${IfThen} ${a} L= ${b} ${|} Goto ${jeek} ${|} +!insertmacro _L< ${a} ${b} ${jles} ${jgtr} +!verbose pop +!macroend +!macro IntPtrCmp a b jeek jles jgtr +!if ${NSIS_PTR_SIZE} <= 4 + ${Int32Cmp} ${a} ${b} ${jeek} ${jles} ${jgtr} +!else + ${Int64Cmp} ${a} ${b} ${jeek} ${jles} ${jgtr} +!endif +!macroend + +!define Int32CmpU '!insertmacro Int32CmpU ' +!define Int64CmpU '!insertmacro Int64CmpU ' +!define IntPtrCmpU '!insertmacro IntPtrCmpU ' +!macro Int32CmpU a b jeek jles jgtr +!if ${NSIS_PTR_SIZE} <= 4 + IntCmpU ${a} ${b} "${jeek}" "${jles}" "${jgtr}" +!else + !error "Int32CmpU not implemented" +!endif +!macroend +!macro Int64CmpU a b jeek jles jgtr +!ifmacrondef _LOGICLIB_TEMP +!include LogicLib.nsh +!endif +!echo "Int64CmpU ${a} ${b} ${jeek} ${jles} ${jgtr}" +!verbose push 2 +!insertmacro _LOGICLIB_TEMP +${IfThen} ${a} L= ${b} ${|} Goto ${jeek} ${|} +${If} ${a} L> 0 + ${IfThen} ${b} L< 0 ${|} Goto ${jles} ${|} +${ElseIf} ${b} L> 0 + ${IfThen} ${a} L< 0 ${|} Goto ${jgtr} ${|} +${EndIf} +!insertmacro _L< ${a} ${b} ${jles} ${jgtr} +!verbose pop +!macroend +!macro IntPtrCmpU a b jeek jles jgtr +!if ${NSIS_PTR_SIZE} <= 4 + ${Int32CmpU} ${a} ${b} ${jeek} ${jles} ${jgtr} +!else + ${Int64CmpU} ${a} ${b} ${jeek} ${jles} ${jgtr} +!endif +!macroend + + +!endif # !___UTIL__NSH___ !verbose pop