diff --git a/Examples/LogicLib.nsi b/Examples/LogicLib.nsi new file mode 100644 index 00000000..291e9e7c --- /dev/null +++ b/Examples/LogicLib.nsi @@ -0,0 +1,16 @@ +name "Test" +outfile "test.exe" +silentinstall silent + +!include "selectlib.nsh" + +Section + !insertmacro SELECT "TESTCASE" "test1" + !insertmacro CASE "test1" + MessageBox MB_OK "case test1" + !insertmacro CASE "test 2;test3" + MessageBox MB_OK "case test2 or test3" + !insertmacro CASE_ELSE + MessageBox MB_OK "case else" + !insertmacro SELECTEND +SectionEnd \ No newline at end of file diff --git a/Include/LogicLib.nsh b/Include/LogicLib.nsh new file mode 100644 index 00000000..c4b68044 --- /dev/null +++ b/Include/LogicLib.nsh @@ -0,0 +1,117 @@ +; NSIS SELECT LIBRARY - selectlib.nsh +; Version 1.0 - 09/15/2003 +; Questions/Comments - dselkirk@hotmail.com +; +; Description: +; Provides the use of select statements +; +; Usage: +; Section +; !insertmacro SELECT "TESTCASE" "test1" +; !insertmacro CASE "test1" +; MessageBox MB_OK "case test1" +; !insertmacro CASE "test 2;test3" +; MessageBox MB_OK "case test2 or test3" +; !insertmacro CASE_ELSE +; MessageBox MB_OK "case else" +; !insertmacro SELECTEND +; SectionEnd +; +; History: +; 1.0 - 09/19/2003 - Initial release + +!ifndef SELECTLIB + !define SELECTLIB + +!macro SELECT NAME VALUE + !define SELECT_NAME "${NAME}" + !define SELECT_VALUE "${VALUE}" + !define SELECT_COUNT "${__LINE__}" + Goto "lbl_${SELECT_NAME}_${SELECT_COUNT}" +!macroend + +!macro CASE VALUES + Goto "lbl_${SELECT_NAME}" + "lbl_${SELECT_NAME}_${SELECT_COUNT}:" + + !undef SELECT_COUNT + !define SELECT_COUNT "${__LINE__}" + + Push $R1 ;counter + Push $R2 ;value + Push $R3 ;return + StrCpy $R1 "${VALUES};" + "lbl_${SELECT_NAME}_${SELECT_COUNT}_loop:" + StrCmp $R1 "" "lbl_${SELECT_NAME}_${SELECT_COUNT}" + Push "$R1" + Push ";" + Call StrTok + Pop $R2 + Pop $R1 + StrCmp $R2 "${SELECT_VALUE}" "lbl_${SELECT_NAME}_${SELECT_COUNT}_done" "lbl_${SELECT_NAME}_${SELECT_COUNT}_loop" + + "lbl_${SELECT_NAME}_${SELECT_COUNT}_done:" + Pop $R3 + Pop $R2 + Pop $R1 + + ;StrCmp ${VALUES} "${SELECT_VALUE}" 0 "lbl_${SELECT_NAME}_${SELECT_COUNT}" +!macroend + +!macro CASE_ELSE + Goto "lbl_${SELECT_NAME}" + "lbl_${SELECT_NAME}_${SELECT_COUNT}:" +!macroend + +!macro SELECTEND + lbl_${SELECT_NAME}: + !undef SELECT_NAME + !undef SELECT_VALUE + !undef SELECT_COUNT +!macroend + +Function StrTok + Exch $R1 + Exch 1 + Exch $R0 + Push $R2 + Push $R3 + Push $R4 + Push $R5 + StrLen $R2 $R0 + IntOp $R2 $R2 + 1 + loop1: + IntOp $R2 $R2 - 1 + IntCmp $R2 0 exit + StrCpy $R4 $R0 1 -$R2 + StrLen $R3 $R1 + IntOp $R3 $R3 + 1 + loop2: + IntOp $R3 $R3 - 1 + IntCmp $R3 0 loop1 + StrCpy $R5 $R1 1 -$R3 + StrCmp $R4 $R5 Found + Goto loop2 + Goto loop1 + exit: + StrCpy $R1 "" + StrCpy $R0 "" + Goto Cleanup + Found: + StrLen $R3 $R0 + IntOp $R3 $R3 - $R2 + StrCpy $R1 $R0 $R3 + IntOp $R2 $R2 - 1 + IntOp $R3 $R3 + 1 + StrCpy $R0 $R0 $R2 $R3 + Cleanup: + Pop $R5 + Pop $R4 + Pop $R3 + Pop $R2 + Exch $R0 + Exch 1 + Exch $R1 +FunctionEnd + +!endif ;SELECTLIB \ No newline at end of file