home *** CD-ROM | disk | FTP | other *** search
/ Hackers Magazine 57 / CdHackersMagazineNr57.iso / Software / Programming / nsis-2.46-setup.exe / Examples / LogicLib.nsi < prev    next >
Text File  |  2009-12-05  |  13KB  |  620 lines

  1. !verbose 2
  2.  
  3. Name "NSIS LogicLib Example"
  4. OutFile "LogicLib.exe"
  5. ShowInstDetails show
  6. RequestExecutionLevel user
  7.  
  8. !include "LogicLib.nsh"
  9.  
  10. ;!undef LOGICLIB_VERBOSITY
  11. ;!define LOGICLIB_VERBOSITY 4   ; For debugging - watch what logiclib does with your code!
  12.  
  13. Page components "" "" ComponentsLeave
  14. Page instfiles
  15.  
  16. Section /o "Run tests" TESTS
  17.  
  18.   ; kinds of if other than "value1 comparison value2"
  19.   ClearErrors
  20.   FindFirst $R1 $R2 "$PROGRAMFILES\*"
  21.   ${Unless} ${Errors}
  22.     ${Do}
  23.       ${Select} $R2
  24.         ${Case2} "." ".."
  25.           ; Do nothing
  26.         ${CaseElse}
  27.           DetailPrint "Found $PROGRAMFILES\$R2"
  28.       ${EndSelect}
  29.       FindNext $R1 $R2
  30.     ${LoopUntil} ${Errors}
  31.     FindClose $R1
  32.   ${EndUnless}
  33.  
  34.   ${If} ${FileExists} "${__FILE__}"
  35.     DetailPrint 'Source file "${__FILE__}" still exists'
  36.   ${Else}
  37.     DetailPrint 'Source file "${__FILE__}" has gone'
  38.   ${EndIf}
  39.  
  40.   ; if..endif
  41.   StrCpy $R1 1
  42.   StrCpy $R2 ""
  43.   ${If} $R1 = 1
  44.     StrCpy $R2 $R2A
  45.   ${EndIf}
  46.   ${If} $R1 = 2
  47.     StrCpy $R2 $R2B
  48.   ${EndIf}
  49.   ${If} $R1 < 2
  50.     StrCpy $R2 $R2C
  51.   ${EndIf}
  52.   ${If} $R1 < -2
  53.     StrCpy $R2 $R2D
  54.   ${EndIf}
  55.   ${If} $R1 > 2
  56.     StrCpy $R2 $R2E
  57.   ${EndIf}
  58.   ${If} $R1 > -2
  59.     StrCpy $R2 $R2F
  60.   ${EndIf}
  61.   ${If} $R1 <> 1
  62.     StrCpy $R2 $R2G
  63.   ${EndIf}
  64.   ${If} $R1 <> 2
  65.     StrCpy $R2 $R2H
  66.   ${EndIf}
  67.   ${If} $R1 >= 2
  68.     StrCpy $R2 $R2I
  69.   ${EndIf}
  70.   ${If} $R1 >= -2
  71.     StrCpy $R2 $R2J
  72.   ${EndIf}
  73.   ${If} $R1 <= 2
  74.     StrCpy $R2 $R2K
  75.   ${EndIf}
  76.   ${If} $R1 <= -2
  77.     StrCpy $R2 $R2L
  78.   ${EndIf}
  79.   ${If} $R2 == "ACFHJK"
  80.     DetailPrint "PASSED If..EndIf test"
  81.   ${Else}
  82.     DetailPrint "FAILED If..EndIf test"
  83.   ${EndIf}
  84.  
  85.   ; if..elseif..else..endif
  86.   StrCpy $R1 A
  87.   StrCpy $R2 ""
  88.   ${If} $R1 == A
  89.     StrCpy $R2 $R2A
  90.   ${ElseIf} $R1 == B
  91.     StrCpy $R2 $R2B
  92.   ${ElseUnless} $R1 != C
  93.     StrCpy $R2 $R2C
  94.   ${Else}
  95.     StrCpy $R2 $R2D
  96.   ${EndIf}
  97.   ${If} $R1 == D
  98.     StrCpy $R2 $R2D
  99.   ${ElseIf} $R1 == A
  100.     StrCpy $R2 $R2A
  101.   ${ElseUnless} $R1 != B
  102.     StrCpy $R2 $R2B
  103.   ${Else}
  104.     StrCpy $R2 $R2C
  105.   ${EndIf}
  106.   ${If} $R1 == C
  107.     StrCpy $R2 $R2C
  108.   ${ElseIf} $R1 == D
  109.     StrCpy $R2 $R2D
  110.   ${ElseUnless} $R1 != A
  111.     StrCpy $R2 $R2A
  112.   ${Else}
  113.     StrCpy $R2 $R2B
  114.   ${EndIf}
  115.   ${If} $R1 == B
  116.     StrCpy $R2 $R2B
  117.   ${ElseIf} $R1 == C
  118.     StrCpy $R2 $R2C
  119.   ${ElseUnless} $R1 != D
  120.     StrCpy $R2 $R2D
  121.   ${Else}
  122.     StrCpy $R2 $R2A
  123.   ${EndIf}
  124.   ${If} $R2 == "$R1$R1$R1$R1"
  125.     DetailPrint "PASSED If..ElseIf..Else..EndIf test"
  126.   ${Else}
  127.     DetailPrint "FAILED If..ElseIf..Else..EndIf test"
  128.   ${EndIf}
  129.  
  130.   ; if..andif..orif..endif
  131.   StrCpy $R2 ""
  132.   ${If} 1 = 1
  133.   ${AndIf} 2 = 2
  134.     StrCpy $R2 $R2A
  135.   ${Else}
  136.     StrCpy $R2 $R2B
  137.   ${EndIf}
  138.   ${If} 1 = 1
  139.   ${AndIf} 2 = 3
  140.     StrCpy $R2 $R2B
  141.   ${Else}
  142.     StrCpy $R2 $R2A
  143.   ${EndIf}
  144.   ${If} 1 = 2
  145.   ${AndIf} 2 = 2
  146.     StrCpy $R2 $R2B
  147.   ${Else}
  148.     StrCpy $R2 $R2A
  149.   ${EndIf}
  150.   ${If} 1 = 2
  151.   ${AndIf} 2 = 3
  152.     StrCpy $R2 $R2B
  153.   ${Else}
  154.     StrCpy $R2 $R2A
  155.   ${EndIf}
  156.  
  157.   ${If} 1 = 1
  158.   ${OrIf} 2 = 2
  159.     StrCpy $R2 $R2A
  160.   ${Else}
  161.     StrCpy $R2 $R2B
  162.   ${EndIf}
  163.   ${If} 1 = 1
  164.   ${OrIf} 2 = 3
  165.     StrCpy $R2 $R2A
  166.   ${Else}
  167.     StrCpy $R2 $R2B
  168.   ${EndIf}
  169.   ${If} 1 = 2
  170.   ${OrIf} 2 = 2
  171.     StrCpy $R2 $R2A
  172.   ${Else}
  173.     StrCpy $R2 $R2B
  174.   ${EndIf}
  175.   ${If} 1 = 2
  176.   ${OrIf} 2 = 3
  177.     StrCpy $R2 $R2B
  178.   ${Else}
  179.     StrCpy $R2 $R2A
  180.   ${EndIf}
  181.  
  182.   ${If} 1 = 1
  183.   ${AndIf} 2 = 2
  184.   ${OrIf} 3 = 3
  185.     StrCpy $R2 $R2A
  186.   ${Else}
  187.     StrCpy $R2 $R2B
  188.   ${EndIf}
  189.   ${If} 1 = 1
  190.   ${AndIf} 2 = 3
  191.   ${OrIf} 3 = 3
  192.     StrCpy $R2 $R2A
  193.   ${Else}
  194.     StrCpy $R2 $R2B
  195.   ${EndIf}
  196.   ${If} 1 = 2
  197.   ${AndIf} 2 = 2
  198.   ${OrIf} 3 = 3
  199.     StrCpy $R2 $R2A
  200.   ${Else}
  201.     StrCpy $R2 $R2B
  202.   ${EndIf}
  203.   ${If} 1 = 2
  204.   ${AndIf} 2 = 3
  205.   ${OrIf} 3 = 3
  206.     StrCpy $R2 $R2A
  207.   ${Else}
  208.     StrCpy $R2 $R2B
  209.   ${EndIf}
  210.   ${If} 1 = 1
  211.   ${AndIf} 2 = 2
  212.   ${OrIf} 3 = 4
  213.     StrCpy $R2 $R2A
  214.   ${Else}
  215.     StrCpy $R2 $R2B
  216.   ${EndIf}
  217.   ${If} 1 = 1
  218.   ${AndIf} 2 = 3
  219.   ${OrIf} 3 = 4
  220.     StrCpy $R2 $R2B
  221.   ${Else}
  222.     StrCpy $R2 $R2A
  223.   ${EndIf}
  224.   ${If} 1 = 2
  225.   ${AndIf} 2 = 2
  226.   ${OrIf} 3 = 4
  227.     StrCpy $R2 $R2B
  228.   ${Else}
  229.     StrCpy $R2 $R2A
  230.   ${EndIf}
  231.   ${If} 1 = 2
  232.   ${AndIf} 2 = 3
  233.   ${OrIf} 3 = 4
  234.     StrCpy $R2 $R2B
  235.   ${Else}
  236.     StrCpy $R2 $R2A
  237.   ${EndIf}
  238.  
  239.   ${If} 1 = 1
  240.   ${OrIf} 2 = 2
  241.   ${AndIf} 3 = 3
  242.     StrCpy $R2 $R2A
  243.   ${Else}
  244.     StrCpy $R2 $R2B
  245.   ${EndIf}
  246.   ${If} 1 = 1
  247.   ${OrIf} 2 = 3
  248.   ${AndIf} 3 = 3
  249.     StrCpy $R2 $R2A
  250.   ${Else}
  251.     StrCpy $R2 $R2B
  252.   ${EndIf}
  253.   ${If} 1 = 2
  254.   ${OrIf} 2 = 2
  255.   ${AndIf} 3 = 3
  256.     StrCpy $R2 $R2A
  257.   ${Else}
  258.     StrCpy $R2 $R2B
  259.   ${EndIf}
  260.   ${If} 1 = 2
  261.   ${OrIf} 2 = 3
  262.   ${AndIf} 3 = 3
  263.     StrCpy $R2 $R2B
  264.   ${Else}
  265.     StrCpy $R2 $R2A
  266.   ${EndIf}
  267.   ${If} 1 = 1
  268.   ${OrIf} 2 = 2
  269.   ${AndIf} 3 = 4
  270.     StrCpy $R2 $R2B
  271.   ${Else}
  272.     StrCpy $R2 $R2A
  273.   ${EndIf}
  274.   ${If} 1 = 1
  275.   ${OrIf} 2 = 3
  276.   ${AndIf} 3 = 4
  277.     StrCpy $R2 $R2B
  278.   ${Else}
  279.     StrCpy $R2 $R2A
  280.   ${EndIf}
  281.   ${If} 1 = 2
  282.   ${OrIf} 2 = 2
  283.   ${AndIf} 3 = 4
  284.     StrCpy $R2 $R2B
  285.   ${Else}
  286.     StrCpy $R2 $R2A
  287.   ${EndIf}
  288.   ${If} 1 = 2
  289.   ${OrIf} 2 = 3
  290.   ${AndIf} 3 = 4
  291.     StrCpy $R2 $R2B
  292.   ${Else}
  293.     StrCpy $R2 $R2A
  294.   ${EndIf}
  295.  
  296.   ${If} $R2 == "AAAAAAAAAAAAAAAAAAAAAAAA"
  297.     DetailPrint "PASSED If..AndIf..OrIf..Else..EndIf test"
  298.   ${Else}
  299.     DetailPrint "FAILED If..AndIf..OrIf..Else..EndIf test"
  300.   ${EndIf}
  301.  
  302.   ; ifthen..|..|
  303.   StrCpy $R1 1
  304.   StrCpy $R2 ""
  305.   ${IfThen} $R1 = 1 ${|} StrCpy $R2 $R2A ${|}
  306.   ${IfThen} $R1 = 2 ${|} StrCpy $R2 $R2B ${|}
  307.   ${IfNotThen} $R1 = 1 ${|} StrCpy $R2 $R2C ${|}
  308.   ${IfNotThen} $R1 = 2 ${|} StrCpy $R2 $R2D ${|}
  309.   ${If} $R2 == "AD"
  310.     DetailPrint "PASSED IfThen test"
  311.   ${Else}
  312.     DetailPrint "FAILED IfThen test"
  313.   ${EndIf}
  314.  
  315.   ; ifcmd..||..| and if/unless cmd
  316.   StrCpy $R2 ""
  317.   ${IfCmd} MessageBox MB_YESNO "Please click Yes" IDYES ${||} StrCpy $R2 $R2A ${|}
  318.   ${Unless} ${Cmd} `MessageBox MB_YESNO|MB_DEFBUTTON2 "Please click No" IDYES`
  319.     StrCpy $R2 $R2B
  320.   ${EndUnless}
  321.   ${If} $R2 == "AB"
  322.     DetailPrint "PASSED IfCmd/If Cmd test"
  323.   ${Else}
  324.     DetailPrint "FAILED IfCmd/If Cmd test"
  325.   ${EndIf}
  326.  
  327.   ; select..case..case2..case3..case4..case5..caseelse..endselect
  328.   StrCpy $R1 1
  329.   StrCpy $R2 ""
  330.   ${Select} $R1
  331.     ${Case} "1"
  332.       StrCpy $R2 $R2A
  333.     ${Case} "2"
  334.       StrCpy $R2 $R2B
  335.     ${Case2} "3" "4"
  336.       StrCpy $R2 $R2C
  337.     ${CaseElse}
  338.       StrCpy $R2 $R2D
  339.   ${EndSelect}
  340.   ${Select} $R1
  341.     ${Case} "2"
  342.       StrCpy $R2 $R2A
  343.     ${Case} "3"
  344.       StrCpy $R2 $R2B
  345.     ${Case2} "4" "5"
  346.       StrCpy $R2 $R2C
  347.     ${CaseElse}
  348.       StrCpy $R2 $R2D
  349.   ${EndSelect}
  350.   ${Select} $R1
  351.     ${Case} "3"
  352.       StrCpy $R2 $R2A
  353.     ${Case} "4"
  354.       StrCpy $R2 $R2B
  355.     ${Case2} "5" "1"
  356.       StrCpy $R2 $R2C
  357.     ${CaseElse}
  358.       StrCpy $R2 $R2D
  359.   ${EndSelect}
  360.   ${Select} $R1
  361.     ${Case} "4"
  362.       StrCpy $R2 $R2A
  363.     ${Case} "5"
  364.       StrCpy $R2 $R2B
  365.     ${Case2} "1" "2"
  366.       StrCpy $R2 $R2C
  367.     ${CaseElse}
  368.       StrCpy $R2 $R2D
  369.   ${EndSelect}
  370.   ${If} $R2 == "ADCC"
  371.     DetailPrint "PASSED Select..Case*..EndSelect test"
  372.   ${Else}
  373.     DetailPrint "FAILED Select..Case*..EndSelect test"
  374.   ${EndIf}
  375.  
  376.   ; switch..case..caseelse..endswitch
  377.   StrCpy $R2 ""
  378.   ${For} $R1 1 10
  379.     ${Switch} $R1
  380.       ${Case} 3
  381.         StrCpy $R2 $R2A
  382.       ${Case} 4
  383.         StrCpy $R2 $R2B
  384.         ${Break}
  385.       ${Case} 5
  386.         StrCpy $R2 $R2C
  387.     ${EndSwitch}
  388.     ${Switch} $R1
  389.       ${Case} 1
  390.         StrCpy $R2 $R2D
  391.       ${Default}
  392.         StrCpy $R2 $R2E
  393.         ${Break}
  394.       ${Case} 2
  395.         StrCpy $R2 $R2F
  396.     ${EndSwitch}
  397.     ${Switch} $R1
  398.       ${Case} 6
  399.       ${Case} 7
  400.         StrCpy $R2 $R2G
  401.         ${If} $R1 = 6
  402.       ${Case} 8
  403.           StrCpy $R2 $R2H
  404.           ${Switch} $R1
  405.             ${Case} 6
  406.               StrCpy $R2 $R2I
  407.               ${Break}
  408.             ${Case} 8
  409.               StrCpy $R2 $R2J
  410.           ${EndSwitch}
  411.         ${EndIf}
  412.         StrCpy $R2 $R2K
  413.         ${Break}
  414.       ${Default}
  415.         StrCpy $R2 $R2L
  416.       ${Case} 9
  417.         StrCpy $R2 $R2M
  418.     ${EndSwitch}
  419.   ${Next}
  420.   ${If} $R2 == "DELMFLMABELMBELMCELMEGHIKEGKEHJKEMELM"
  421.     DetailPrint "PASSED Switch..Case*..EndSwitch test"
  422.   ${Else}
  423.     DetailPrint "FAILED Switch..Case*..EndSwitch test"
  424.   ${EndIf}
  425.  
  426.   ; for[each]..exitfor..next
  427.   StrCpy $R2 ""
  428.   ${For} $R1 1 5
  429.     StrCpy $R2 $R2$R1
  430.   ${Next}
  431.   ${ForEach} $R1 10 1 - 1
  432.     StrCpy $R2 $R2$R1
  433.   ${Next}
  434.   ${For} $R1 1 0
  435.     StrCpy $R2 $R2$R1
  436.   ${Next}
  437.   ${If} $R2 == "1234510987654321"
  438.     DetailPrint "PASSED For[Each]..Next test"
  439.   ${Else}
  440.     DetailPrint "FAILED For[Each]..Next test"
  441.   ${EndIf}
  442.  
  443.   ; do..loop
  444.   StrCpy $R1 0
  445.   Call DoLoop
  446.   ${If} $R1 == 5
  447.     DetailPrint "PASSED Do..Loop test"
  448.   ${Else}
  449.     DetailPrint "FAILED Do..Loop test"
  450.   ${EndIf}
  451.  
  452.   ; do..exitdo..loop
  453.   StrCpy $R1 0
  454.   StrCpy $R2 ""
  455.   ${Do}
  456.     StrCpy $R2 $R2$R1
  457.     IntOp $R1 $R1 + 1
  458.     ${If} $R1 > 10
  459.       ${ExitDo}
  460.     ${EndIf}
  461.   ${Loop}
  462.   ${If} $R2 == "012345678910"
  463.     DetailPrint "PASSED Do..ExitDo..Loop test"
  464.   ${Else}
  465.     DetailPrint "FAILED Do..ExitDo..Loop test"
  466.   ${EndIf}
  467.  
  468.   ; do..exitdo..loopuntil
  469.   StrCpy $R1 0
  470.   StrCpy $R2 ""
  471.   ${Do}
  472.     StrCpy $R2 $R2$R1
  473.     IntOp $R1 $R1 + 1
  474.   ${LoopUntil} $R1 >= 5
  475.   ${If} $R2 == "01234"
  476.     DetailPrint "PASSED Do..ExitDo..LoopUntil test"
  477.   ${Else}
  478.     DetailPrint "FAILED Do..ExitDo..LoopUntil test"
  479.   ${EndIf}
  480.  
  481.   ; dountil..exitdo..loop
  482.   StrCpy $R1 0
  483.   StrCpy $R2 ""
  484.   ${DoUntil} $R1 >= 5
  485.     StrCpy $R2 $R2$R1
  486.     IntOp $R1 $R1 + 1
  487.   ${Loop}
  488.   ${If} $R2 == "01234"
  489.     DetailPrint "PASSED DoUntil..ExitDo..Loop test"
  490.   ${Else}
  491.     DetailPrint "FAILED DoUntil..ExitDo..Loop test"
  492.   ${EndIf}
  493.  
  494.   ; nested do test
  495.   StrCpy $R1 0
  496.   StrCpy $R2 0
  497.   StrCpy $R3 ""
  498.   ${Do}
  499.     StrCpy $R3 $R3$R1$R2
  500.     IntOp $R1 $R1 + 1
  501.     ${If} $R1 > 5
  502.       ${ExitDo}
  503.     ${EndIf}
  504.     StrCpy $R2 0
  505.     ${Do}
  506.       StrCpy $R3 $R3$R1$R2
  507.       IntOp $R2 $R2 + 1
  508.       ${If} $R2 >= 5
  509.         ${ExitDo}
  510.       ${EndIf}
  511.     ${Loop}
  512.   ${Loop}
  513.   ${If} $R3 == "00101112131415202122232425303132333435404142434445505152535455"
  514.     DetailPrint "PASSED nested Do test"
  515.   ${Else}
  516.     DetailPrint "FAILED nested Do test"
  517.   ${EndIf}
  518.  
  519.   ; while..exitwhile..endwhile (exact replica of dowhile..enddo}
  520.   StrCpy $R1 0
  521.   StrCpy $R2 ""
  522.   ${While} $R1 < 5
  523.     StrCpy $R2 $R2$R1
  524.     IntOp $R1 $R1 + 1
  525.   ${EndWhile}
  526.   ${If} $R2 == "01234"
  527.     DetailPrint "PASSED While..ExitWhile..EndWhile test"
  528.   ${Else}
  529.     DetailPrint "FAILED While..ExitWhile..EndWhile test"
  530.   ${EndIf}
  531.  
  532.   ; Unsigned integer tests
  533.   StrCpy $R2 ""
  534.   ${If} -1 < 1
  535.     StrCpy $R2 $R2A
  536.   ${EndIf}
  537.   ${If} -1 U< 1
  538.     StrCpy $R2 $R2B
  539.   ${EndIf}
  540.   ${If} 0xFFFFFFFF > 1
  541.     StrCpy $R2 $R2C
  542.   ${EndIf}
  543.   ${If} 0xFFFFFFFF U> 1
  544.     StrCpy $R2 $R2D
  545.   ${EndIf}
  546.   ${If} $R2 == "AD"
  547.     DetailPrint "PASSED unsigned integer test"
  548.   ${Else}
  549.     DetailPrint "FAILED unsigned integer test"
  550.   ${EndIf}
  551.  
  552.   ; 64-bit integer tests (uses System.dll)
  553.   StrCpy $R2 ""
  554.   ${If} 0x100000000 L= 4294967296
  555.     StrCpy $R2 $R2A
  556.   ${EndIf}
  557.   ${If} 0x100000000 L< 0x200000000
  558.     StrCpy $R2 $R2B
  559.   ${EndIf}
  560.   ${If} 0x500000000 L>= 0x500000000
  561.     StrCpy $R2 $R2C
  562.   ${EndIf}
  563.   ${If} $R2 == "ABC"
  564.     DetailPrint "PASSED 64-bit integer test"
  565.   ${Else}
  566.     DetailPrint "FAILED 64-bit integer test"
  567.   ${EndIf}
  568.  
  569.   ; Extra string tests (uses System.dll)
  570.   StrCpy $R2 ""
  571.   ${If} "A" S< "B"
  572.     StrCpy $R2 $R2A
  573.   ${EndIf}
  574.   ${If} "b" S> "A"
  575.     StrCpy $R2 $R2B
  576.   ${EndIf}
  577.   ${If} "a" S<= "B"
  578.     StrCpy $R2 $R2C
  579.   ${EndIf}
  580.   ${If} "B" S< "B"
  581.     StrCpy $R2 $R2D
  582.   ${EndIf}
  583.   ${If} "A" S== "A"
  584.     StrCpy $R2 $R2E
  585.   ${EndIf}
  586.   ${If} "A" S== "a"
  587.     StrCpy $R2 $R2F
  588.   ${EndIf}
  589.   ${If} "A" S!= "a"
  590.     StrCpy $R2 $R2G
  591.   ${EndIf}
  592.   ${If} $R2 == "ABCEG"
  593.     DetailPrint "PASSED extra string test"
  594.   ${Else}
  595.     DetailPrint "FAILED extra string test"
  596.   ${EndIf}
  597.  
  598. SectionEnd
  599.  
  600. Function ComponentsLeave
  601.   ; Section flags tests (requires sections.nsh be included)
  602.   ${Unless} ${SectionIsSelected} ${TESTS}
  603.     MessageBox MB_OK "Please select the component"
  604.     Abort
  605.   ${EndIf}
  606. FunctionEnd
  607.  
  608. Function DoLoop
  609.  
  610.   ${Do}
  611.     IntOp $R1 $R1 + 1
  612.     ${If} $R1 == 5
  613.       Return
  614.     ${EndIf}
  615.   ${Loop}
  616.  
  617. FunctionEnd
  618.  
  619. !verbose 3
  620.