Statistiques
| Révision :

root / tmp / org.txm.setups / nsis-2.5 / Examples / LogicLib.nsi @ 3107

Historique | Voir | Annoter | Télécharger (12,22 ko)

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