home *** CD-ROM | disk | FTP | other *** search
/ Chip 2004 March / CMCD0304.ISO / Software / Freeware / Programare / nullsoft / nsis20.exe / Examples / LogicLib.nsi < prev    next >
Text File  |  2003-12-20  |  9KB  |  423 lines

  1. Name "NSIS LogicLib Example"
  2. OutFile "LogicLib.exe"
  3. ShowInstDetails show
  4.  
  5. !include "Sections.nsh"
  6. !include "LogicLib.nsh"
  7.  
  8. ;!undef LOGICLIB_VERBOSITY
  9. ;!define LOGICLIB_VERBOSITY 4   ; For debugging - watch what logiclib does with your code!
  10.  
  11. Page components "" "" ComponentsLeave
  12. Page instfiles
  13.  
  14. Section /o "Run tests" TESTS
  15.  
  16.   ; kinds of if other than "value1 comparison value2"
  17.   ClearErrors
  18.   FindFirst $R1 $R2 "$PROGRAMFILES\*"
  19.   ${Unless} ${Errors}
  20.     ${Do}
  21.       ${Select} $R2
  22.         ${Case2} "." ".."
  23.           ; Do nothing
  24.         ${CaseElse}
  25.           DetailPrint "Found $PROGRAMFILES\$R2"
  26.       ${EndSelect}
  27.       FindNext $R1 $R2
  28.     ${LoopUntil} ${Errors}
  29.     FindClose $R1
  30.   ${EndUnless}
  31.  
  32.   StrCpy $R1 "example.xxx"
  33.   ${If} ${FileExists} "${__FILE__}"
  34.     DetailPrint 'Source file "${__FILE__}" still exists'
  35.   ${Else}
  36.     DetailPrint 'Source file "${__FILE__}" has gone'
  37.   ${EndIf}
  38.  
  39.   ; if..endif
  40.   StrCpy $R1 1
  41.   StrCpy $R2 ""
  42.   ${If} $R1 = 1
  43.     StrCpy $R2 $R2A
  44.   ${EndIf}
  45.   ${If} $R1 = 2
  46.     StrCpy $R2 $R2B
  47.   ${EndIf}
  48.   ${If} $R1 < 2
  49.     StrCpy $R2 $R2C
  50.   ${EndIf}
  51.   ${If} $R1 < -2
  52.     StrCpy $R2 $R2D
  53.   ${EndIf}
  54.   ${If} $R1 > 2
  55.     StrCpy $R2 $R2E
  56.   ${EndIf}
  57.   ${If} $R1 > -2
  58.     StrCpy $R2 $R2F
  59.   ${EndIf}
  60.   ${If} $R1 <> 1
  61.     StrCpy $R2 $R2G
  62.   ${EndIf}
  63.   ${If} $R1 <> 2
  64.     StrCpy $R2 $R2H
  65.   ${EndIf}
  66.   ${If} $R1 >= 2
  67.     StrCpy $R2 $R2I
  68.   ${EndIf}
  69.   ${If} $R1 >= -2
  70.     StrCpy $R2 $R2J
  71.   ${EndIf}
  72.   ${If} $R1 <= 2
  73.     StrCpy $R2 $R2K
  74.   ${EndIf}
  75.   ${If} $R1 <= -2
  76.     StrCpy $R2 $R2L
  77.   ${EndIf}
  78.   ${If} $R2 == "ACFHJK"
  79.     DetailPrint "PASSED If..EndIf test"
  80.   ${Else}
  81.     DetailPrint "FAILED If..EndIf test"
  82.   ${EndIf}
  83.  
  84.   ; if..elseif..else..endif
  85.   StrCpy $R1 A
  86.   StrCpy $R2 ""
  87.   ${If} $R1 == A
  88.     StrCpy $R2 $R2A
  89.   ${ElseIf} $R1 == B
  90.     StrCpy $R2 $R2B
  91.   ${ElseUnless} $R1 != C
  92.     StrCpy $R2 $R2C
  93.   ${Else}
  94.     StrCpy $R2 $R2D
  95.   ${EndIf}
  96.   ${If} $R1 == D
  97.     StrCpy $R2 $R2D
  98.   ${ElseIf} $R1 == A
  99.     StrCpy $R2 $R2A
  100.   ${ElseUnless} $R1 != B
  101.     StrCpy $R2 $R2B
  102.   ${Else}
  103.     StrCpy $R2 $R2C
  104.   ${EndIf}
  105.   ${If} $R1 == C
  106.     StrCpy $R2 $R2C
  107.   ${ElseIf} $R1 == D
  108.     StrCpy $R2 $R2D
  109.   ${ElseUnless} $R1 != A
  110.     StrCpy $R2 $R2A
  111.   ${Else}
  112.     StrCpy $R2 $R2B
  113.   ${EndIf}
  114.   ${If} $R1 == B
  115.     StrCpy $R2 $R2B
  116.   ${ElseIf} $R1 == C
  117.     StrCpy $R2 $R2C
  118.   ${ElseUnless} $R1 != D
  119.     StrCpy $R2 $R2D
  120.   ${Else}
  121.     StrCpy $R2 $R2A
  122.   ${EndIf}
  123.   ${If} $R2 == "$R1$R1$R1$R1"
  124.     DetailPrint "PASSED If..ElseIf..Else..EndIf test"
  125.   ${Else}
  126.     DetailPrint "FAILED If..ElseIf..Else..EndIf test"
  127.   ${EndIf}
  128.  
  129.   ; ifthen..|..|
  130.   StrCpy $R1 1
  131.   StrCpy $R2 ""
  132.   ${ifthen} $R1 = 1 ${|} StrCpy $R2 $R2A ${|}
  133.   ${ifthen} $R1 = 2 ${|} StrCpy $R2 $R2B ${|}
  134.   ${If} $R2 == "A"
  135.     DetailPrint "PASSED IfThen test"
  136.   ${Else}
  137.     DetailPrint "FAILED IfThen test"
  138.   ${EndIf}
  139.  
  140.   ; ifcmd..||..| and if/unless cmd
  141.   StrCpy $R2 ""
  142.   ${ifcmd} MessageBox MB_YESNO "Please press Yes" IDYES ${||} StrCpy $R2 $R2A ${|}
  143.   ${Unless} ${Cmd} `MessageBox MB_YESNO|MB_DEFBUTTON2 "Please press No" IDYES`
  144.     StrCpy $R2 $R2B
  145.   ${EndUnless}
  146.   ${If} $R2 == "AB"
  147.     DetailPrint "PASSED IfCmd/If Cmd test"
  148.   ${Else}
  149.     DetailPrint "FAILED IfCmd/If Cmd test"
  150.   ${EndIf}
  151.  
  152.   ; select..case..case2..case3..case4..case5..caseelse..endselect
  153.   StrCpy $R1 1
  154.   StrCpy $R2 ""
  155.   ${Select} $R1
  156.     ${Case} "1"
  157.       StrCpy $R2 $R2A
  158.     ${Case} "2"
  159.       StrCpy $R2 $R2B
  160.     ${Case2} "3" "4"
  161.       StrCpy $R2 $R2C
  162.     ${CaseElse}
  163.       StrCpy $R2 $R2D
  164.   ${EndSelect}
  165.   ${Select} $R1
  166.     ${Case} "2"
  167.       StrCpy $R2 $R2A
  168.     ${Case} "3"
  169.       StrCpy $R2 $R2B
  170.     ${Case2} "4" "5"
  171.       StrCpy $R2 $R2C
  172.     ${CaseElse}
  173.       StrCpy $R2 $R2D
  174.   ${EndSelect}
  175.   ${Select} $R1
  176.     ${Case} "3"
  177.       StrCpy $R2 $R2A
  178.     ${Case} "4"
  179.       StrCpy $R2 $R2B
  180.     ${Case2} "5" "1"
  181.       StrCpy $R2 $R2C
  182.     ${CaseElse}
  183.       StrCpy $R2 $R2D
  184.   ${EndSelect}
  185.   ${Select} $R1
  186.     ${Case} "4"
  187.       StrCpy $R2 $R2A
  188.     ${Case} "5"
  189.       StrCpy $R2 $R2B
  190.     ${Case2} "1" "2"
  191.       StrCpy $R2 $R2C
  192.     ${CaseElse}
  193.       StrCpy $R2 $R2D
  194.   ${EndSelect}
  195.   ${If} $R2 == "ADCC"
  196.     DetailPrint "PASSED Select..Case*..EndSelect test"
  197.   ${Else}
  198.     DetailPrint "FAILED Select..Case*..EndSelect test"
  199.   ${EndIf}
  200.  
  201.   ; switch..case..caseelse..endswitch
  202.   StrCpy $R2 ""
  203.   ${For} $R1 1 10
  204.     ${Switch} $R1
  205.       ${Case} 3
  206.         StrCpy $R2 $R2A
  207.       ${Case} 4
  208.         StrCpy $R2 $R2B
  209.         ${Break}
  210.       ${Case} 5
  211.         StrCpy $R2 $R2C
  212.     ${EndSwitch}
  213.     ${Switch} $R1
  214.       ${Case} 1
  215.         StrCpy $R2 $R2D
  216.       ${Default}
  217.         StrCpy $R2 $R2E
  218.         ${Break}
  219.       ${Case} 2
  220.         StrCpy $R2 $R2F
  221.     ${EndSwitch}
  222.     ${Switch} $R1
  223.       ${Case} 6
  224.       ${Case} 7
  225.         StrCpy $R2 $R2G
  226.         ${If} $R1 = 6
  227.       ${Case} 8
  228.           StrCpy $R2 $R2H
  229.           ${Switch} $R1
  230.             ${Case} 6
  231.               StrCpy $R2 $R2I
  232.               ${Break}
  233.             ${Case} 8
  234.               StrCpy $R2 $R2J
  235.           ${EndSwitch}
  236.         ${EndIf}
  237.         StrCpy $R2 $R2K
  238.         ${Break}
  239.       ${Default}
  240.         StrCpy $R2 $R2L
  241.       ${Case} 9
  242.         StrCpy $R2 $R2M
  243.     ${EndSwitch}
  244.   ${Next}
  245.   ${If} $R2 == "DELMFLMABELMBELMCELMEGHIKEGKEHJKEMELM"
  246.     DetailPrint "PASSED Switch..Case*..EndSwitch test"
  247.   ${Else}
  248.     DetailPrint "FAILED Switch..Case*..EndSwitch test"
  249.   ${EndIf}
  250.  
  251.   ; for[each]..exitfor..next
  252.   StrCpy $R2 ""
  253.   ${For} $R1 1 5
  254.     StrCpy $R2 $R2$R1
  255.   ${Next}
  256.   ${ForEach} $R1 10 1 - 1
  257.     StrCpy $R2 $R2$R1
  258.   ${Next}
  259.   ${For} $R1 1 0
  260.     StrCpy $R2 $R2$R1
  261.   ${Next}
  262.   ${If} $R2 == "1234510987654321"
  263.     DetailPrint "PASSED For[Each]..Next test"
  264.   ${Else}
  265.     DetailPrint "FAILED For[Each]..Next test"
  266.   ${EndIf}
  267.  
  268.   ; do..exitdo..loop
  269.   StrCpy $R1 0
  270.   StrCpy $R2 ""
  271.   ${Do}
  272.     StrCpy $R2 $R2$R1
  273.     IntOp $R1 $R1 + 1
  274.     ${If} $R1 > 10
  275.       ${ExitDo}
  276.     ${EndIf}
  277.   ${Loop}
  278.   ${If} $R2 == "012345678910"
  279.     DetailPrint "PASSED Do..ExitDo..Loop test"
  280.   ${Else}
  281.     DetailPrint "FAILED Do..ExitDo..Loop test"
  282.   ${EndIf}
  283.  
  284.   ; do..exitdo..loopuntil
  285.   StrCpy $R1 0
  286.   StrCpy $R2 ""
  287.   ${Do}
  288.     StrCpy $R2 $R2$R1
  289.     IntOp $R1 $R1 + 1
  290.   ${LoopUntil} $R1 >= 5
  291.   ${If} $R2 == "01234"
  292.     DetailPrint "PASSED Do..ExitDo..LoopUntil test"
  293.   ${Else}
  294.     DetailPrint "FAILED Do..ExitDo..LoopUntil test"
  295.   ${EndIf}
  296.  
  297.   ; dountil..exitdo..loop
  298.   StrCpy $R1 0
  299.   StrCpy $R2 ""
  300.   ${DoUntil} $R1 >= 5
  301.     StrCpy $R2 $R2$R1
  302.     IntOp $R1 $R1 + 1
  303.   ${Loop}
  304.   ${If} $R2 == "01234"
  305.     DetailPrint "PASSED DoUntil..ExitDo..Loop test"
  306.   ${Else}
  307.     DetailPrint "FAILED DoUntil..ExitDo..Loop test"
  308.   ${EndIf}
  309.  
  310.   ; nested do test
  311.   StrCpy $R1 0
  312.   StrCpy $R2 0
  313.   StrCpy $R3 ""
  314.   ${Do}
  315.     StrCpy $R3 $R3$R1$R2
  316.     IntOp $R1 $R1 + 1
  317.     ${If} $R1 > 5
  318.       ${ExitDo}
  319.     ${EndIf}
  320.     StrCpy $R2 0
  321.     ${Do}
  322.       StrCpy $R3 $R3$R1$R2
  323.       IntOp $R2 $R2 + 1
  324.       ${If} $R2 >= 5
  325.         ${ExitDo}
  326.       ${EndIf}
  327.     ${Loop}
  328.   ${Loop}
  329.   ${If} $R3 == "00101112131415202122232425303132333435404142434445505152535455"
  330.     DetailPrint "PASSED nested Do test"
  331.   ${Else}
  332.     DetailPrint "FAILED nested Do test"
  333.   ${EndIf}
  334.  
  335.   ; while..exitwhile..endwhile (exact replica of dowhile..enddo}
  336.   StrCpy $R1 0
  337.   StrCpy $R2 ""
  338.   ${While} $R1 < 5
  339.     StrCpy $R2 $R2$R1
  340.     IntOp $R1 $R1 + 1
  341.   ${EndWhile}
  342.   ${If} $R2 == "01234"
  343.     DetailPrint "PASSED While..ExitWhile..EndWhile test"
  344.   ${Else}
  345.     DetailPrint "FAILED While..ExitWhile..EndWhile test"
  346.   ${EndIf}
  347.  
  348.   ; Unsigned integer tests
  349.   StrCpy $R2 ""
  350.   ${If} -1 < 1
  351.     StrCpy $R2 $R2A
  352.   ${EndIf}
  353.   ${If} -1 U< 1
  354.     StrCpy $R2 $R2B
  355.   ${EndIf}
  356.   ${If} 0xFFFFFFFF > 1
  357.     StrCpy $R2 $R2C
  358.   ${EndIf}
  359.   ${If} 0xFFFFFFFF U> 1
  360.     StrCpy $R2 $R2D
  361.   ${EndIf}
  362.   ${If} $R2 == "AD"
  363.     DetailPrint "PASSED unsigned integer test"
  364.   ${Else}
  365.     DetailPrint "FAILED unsigned integer test"
  366.   ${EndIf}
  367.  
  368.   ; 64-bit integer tests (uses System.dll)
  369.   StrCpy $R2 ""
  370.   ${If} 0x100000000 L= 4294967296
  371.     StrCpy $R2 $R2A
  372.   ${EndIf}
  373.   ${If} 0x100000000 L< 0x200000000
  374.     StrCpy $R2 $R2B
  375.   ${EndIf}
  376.   ${If} 0x500000000 L>= 0x500000000
  377.     StrCpy $R2 $R2C
  378.   ${EndIf}
  379.   ${If} $R2 == "ABC"
  380.     DetailPrint "PASSED 64-bit integer test"
  381.   ${Else}
  382.     DetailPrint "FAILED 64-bit integer test"
  383.   ${EndIf}
  384.  
  385.   ; Extra string tests (uses System.dll)
  386.   StrCpy $R2 ""
  387.   ${If} "A" S< "B"
  388.     StrCpy $R2 $R2A
  389.   ${EndIf}
  390.   ${If} "b" S> "A"
  391.     StrCpy $R2 $R2B
  392.   ${EndIf}
  393.   ${If} "a" S<= "B"
  394.     StrCpy $R2 $R2C
  395.   ${EndIf}
  396.   ${If} "B" S< "B"
  397.     StrCpy $R2 $R2D
  398.   ${EndIf}
  399.   ${If} "A" S== "A"
  400.     StrCpy $R2 $R2E
  401.   ${EndIf}
  402.   ${If} "A" S== "a"
  403.     StrCpy $R2 $R2F
  404.   ${EndIf}
  405.   ${If} "A" S!= "a"
  406.     StrCpy $R2 $R2G
  407.   ${EndIf}
  408.   ${If} $R2 == "ABCEG"
  409.     DetailPrint "PASSED extra string test"
  410.   ${Else}
  411.     DetailPrint "FAILED extra string test"
  412.   ${EndIf}
  413.  
  414. SectionEnd
  415.  
  416. Function ComponentsLeave
  417.   ; Section flags tests (requires sections.nsh be included)
  418.   ${Unless} ${SectionIsSelected} ${TESTS}
  419.     MessageBox MB_OK "Please select the component"
  420.     Abort
  421.   ${EndIf}
  422. FunctionEnd
  423.