Statistiques
| Révision :

root / tmp / org.txm.setups / nsis-2.5 / Include / Memento.nsh @ 2961

Historique | Voir | Annoter | Télécharger (10,38 ko)

1 2961 mdecorde
!verbose push
2 2961 mdecorde
!verbose 3
3 2961 mdecorde
4 2961 mdecorde
!include LogicLib.nsh
5 2961 mdecorde
!include Sections.nsh
6 2961 mdecorde
7 2961 mdecorde
!ifndef ___MEMENTO_NSH___
8 2961 mdecorde
!define ___MEMENTO_NSH___
9 2961 mdecorde
10 2961 mdecorde
#####################################
11 2961 mdecorde
### Memento                       ###
12 2961 mdecorde
#####################################
13 2961 mdecorde
14 2961 mdecorde
/*
15 2961 mdecorde
16 2961 mdecorde
Memento is a set of macros that allow installers to remember user selection
17 2961 mdecorde
across separate runs of the installer. Currently, it can remember the state
18 2961 mdecorde
of sections and mark new sections as bold. In the future, it'll integrate
19 2961 mdecorde
InstallOptions and maybe even the Modern UI.
20 2961 mdecorde
21 2961 mdecorde
A usage example can be found in `Examples\Memento.nsi`.
22 2961 mdecorde
23 2961 mdecorde
*/
24 2961 mdecorde
25 2961 mdecorde
#####################################
26 2961 mdecorde
### Usage Instructions            ###
27 2961 mdecorde
#####################################
28 2961 mdecorde
29 2961 mdecorde
/*
30 2961 mdecorde
31 2961 mdecorde
1. Declare usage of Memento by including Memento.nsh at the top of the script.
32 2961 mdecorde
33 2961 mdecorde
      !include Memento.nsh
34 2961 mdecorde
35 2961 mdecorde
2. Define MEMENTO_REGISTRY_ROOT and MEMENTO_REGISTRY_KEY with the a registry key
36 2961 mdecorde
   where sections' state should be saved.
37 2961 mdecorde
38 2961 mdecorde
      !define MEMENTO_REGISTRY_ROOT HKLM
39 2961 mdecorde
      !define MEMENTO_REGISTRY_KEY \
40 2961 mdecorde
                Software\Microsoft\Windows\CurrentVersion\Uninstall\MyProgram
41 2961 mdecorde
42 2961 mdecorde
3. Replace Section with ${MementoSection} and SectionEnd with ${MementoSectionEnd}
43 2961 mdecorde
   for sections that whose state should be remembered by Memento.
44 2961 mdecorde
45 2961 mdecorde
   For sections that should be unselected by default, use ${MementoSection}'s
46 2961 mdecorde
   brother - ${MementoUnselectedSection}.
47 2961 mdecorde
48 2961 mdecorde
   Sections that don't already have an identifier must be assigned one.
49 2961 mdecorde
50 2961 mdecorde
   Section identifiers must stay the same across different versions of the
51 2961 mdecorde
   installer or their state will be forgotten.
52 2961 mdecorde
53 2961 mdecorde
4. Use ${MementoSectionDone} after the last ${MementoSection}.
54 2961 mdecorde
55 2961 mdecorde
5. Add a call to ${MementoSectionRestore} to .onInit to restore the state
56 2961 mdecorde
   of all sections from the registry.
57 2961 mdecorde
58 2961 mdecorde
      Function .onInit
59 2961 mdecorde
60 2961 mdecorde
        ${MementoSectionRestore}
61 2961 mdecorde
62 2961 mdecorde
      FunctionEnd
63 2961 mdecorde
64 2961 mdecorde
6. Add a call to ${MementoSectionSave} to .onInstSuccess to save the state
65 2961 mdecorde
   of all sections to the registry.
66 2961 mdecorde
67 2961 mdecorde
      Function .onInstSuccess
68 2961 mdecorde
69 2961 mdecorde
        ${MementoSectionSave}
70 2961 mdecorde
71 2961 mdecorde
      FunctionEnd
72 2961 mdecorde
73 2961 mdecorde
7. Tattoo the location of the chosen registry key on your arm.
74 2961 mdecorde
75 2961 mdecorde
*/
76 2961 mdecorde
77 2961 mdecorde
#####################################
78 2961 mdecorde
### User API                      ###
79 2961 mdecorde
#####################################
80 2961 mdecorde
81 2961 mdecorde
;
82 2961 mdecorde
; ${MementoSection}
83 2961 mdecorde
;
84 2961 mdecorde
;   Defines a section whose state is remembered by Memento.
85 2961 mdecorde
;
86 2961 mdecorde
;   Usage is similar to Section.
87 2961 mdecorde
;
88 2961 mdecorde
;     ${MementoSection} "name" "some_id"
89 2961 mdecorde
;
90 2961 mdecorde
91 2961 mdecorde
!define MementoSection "!insertmacro MementoSection"
92 2961 mdecorde
93 2961 mdecorde
;
94 2961 mdecorde
; ${MementoSectionEnd}
95 2961 mdecorde
;
96 2961 mdecorde
;   Ends a section previously opened using ${MementoSection}.
97 2961 mdecorde
;
98 2961 mdecorde
;   Usage is similar to SectionEnd.
99 2961 mdecorde
;
100 2961 mdecorde
;     ${MementoSection} "name" "some_id"
101 2961 mdecorde
;        # some code...
102 2961 mdecorde
;     ${MementoSectionEnd}
103 2961 mdecorde
;
104 2961 mdecorde
105 2961 mdecorde
;
106 2961 mdecorde
; ${MementoUnselectedSection}
107 2961 mdecorde
;
108 2961 mdecorde
;   Defines a section whose state is remembered by Memento and is
109 2961 mdecorde
;   unselected by default.
110 2961 mdecorde
;
111 2961 mdecorde
;   Usage is similar to Section with the /o switch.
112 2961 mdecorde
;
113 2961 mdecorde
;     ${MementoUnselectedSection} "name" "some_id"
114 2961 mdecorde
;
115 2961 mdecorde
116 2961 mdecorde
!define MementoUnselectedSection "!insertmacro MementoUnselectedSection"
117 2961 mdecorde
118 2961 mdecorde
;
119 2961 mdecorde
; ${MementoSectionEnd}
120 2961 mdecorde
;
121 2961 mdecorde
;   Ends a section previously opened using ${MementoSection}.
122 2961 mdecorde
;
123 2961 mdecorde
;   Usage is similar to SectionEnd.
124 2961 mdecorde
;
125 2961 mdecorde
;     ${MementoSection} "name" "some_id"
126 2961 mdecorde
;        # some code...
127 2961 mdecorde
;     ${MementoSectionEnd}
128 2961 mdecorde
;
129 2961 mdecorde
130 2961 mdecorde
!define MementoSectionEnd "!insertmacro MementoSectionEnd"
131 2961 mdecorde
132 2961 mdecorde
;
133 2961 mdecorde
; ${MementoSectionDone}
134 2961 mdecorde
;
135 2961 mdecorde
;   Used after all ${MementoSection} have been set.
136 2961 mdecorde
;
137 2961 mdecorde
;     ${MementoSection} "name1" "some_id1"
138 2961 mdecorde
;        # some code...
139 2961 mdecorde
;     ${MementoSectionEnd}
140 2961 mdecorde
;
141 2961 mdecorde
;     ${MementoSection} "name2" "some_id2"
142 2961 mdecorde
;        # some code...
143 2961 mdecorde
;     ${MementoSectionEnd}
144 2961 mdecorde
;
145 2961 mdecorde
;     ${MementoSection} "name3" "some_id3"
146 2961 mdecorde
;        # some code...
147 2961 mdecorde
;     ${MementoSectionEnd}
148 2961 mdecorde
;
149 2961 mdecorde
;     ${MementoSectionDone}
150 2961 mdecorde
;
151 2961 mdecorde
152 2961 mdecorde
!define MementoSectionDone "!insertmacro MementoSectionDone"
153 2961 mdecorde
154 2961 mdecorde
;
155 2961 mdecorde
; ${MementoSectionRestore}
156 2961 mdecorde
;
157 2961 mdecorde
;   Restores the state of all Memento sections from the registry.
158 2961 mdecorde
;
159 2961 mdecorde
;   Commonly used in .onInit.
160 2961 mdecorde
;
161 2961 mdecorde
;     Function .onInit
162 2961 mdecorde
;
163 2961 mdecorde
;       ${MementoSectionRestore}
164 2961 mdecorde
;
165 2961 mdecorde
;     FunctionEnd
166 2961 mdecorde
;
167 2961 mdecorde
168 2961 mdecorde
!define MementoSectionRestore "!insertmacro MementoSectionRestore"
169 2961 mdecorde
170 2961 mdecorde
;
171 2961 mdecorde
; ${MementoSectionSave}
172 2961 mdecorde
;
173 2961 mdecorde
;   Saves the state of all Memento sections to the registry.
174 2961 mdecorde
;
175 2961 mdecorde
;   Commonly used in .onInstSuccess.
176 2961 mdecorde
;
177 2961 mdecorde
;     Function .onInstSuccess
178 2961 mdecorde
;
179 2961 mdecorde
;       ${MementoSectionSave}
180 2961 mdecorde
;
181 2961 mdecorde
;     FunctionEnd
182 2961 mdecorde
;
183 2961 mdecorde
184 2961 mdecorde
!define MementoSectionSave "!insertmacro MementoSectionSave"
185 2961 mdecorde
186 2961 mdecorde
187 2961 mdecorde
#####################################
188 2961 mdecorde
### Internal Defines              ###
189 2961 mdecorde
#####################################
190 2961 mdecorde
191 2961 mdecorde
!define __MementoSectionIndex 1
192 2961 mdecorde
193 2961 mdecorde
#####################################
194 2961 mdecorde
### Internal Macros               ###
195 2961 mdecorde
#####################################
196 2961 mdecorde
197 2961 mdecorde
!macro __MementoCheckSettings
198 2961 mdecorde
199 2961 mdecorde
  !ifndef MEMENTO_REGISTRY_ROOT | MEMENTO_REGISTRY_KEY
200 2961 mdecorde
201 2961 mdecorde
    !error "MEMENTO_REGISTRY_ROOT and MEMENTO_REGISTRY_KEY must be defined before using any of Memento's macros"
202 2961 mdecorde
203 2961 mdecorde
  !endif
204 2961 mdecorde
205 2961 mdecorde
!macroend
206 2961 mdecorde
207 2961 mdecorde
!macro __MementoSection flags name id
208 2961 mdecorde
209 2961 mdecorde
  !insertmacro __MementoCheckSettings
210 2961 mdecorde
211 2961 mdecorde
  !ifndef __MementoSectionIndex
212 2961 mdecorde
213 2961 mdecorde
    !error "MementoSectionDone already used!"
214 2961 mdecorde
215 2961 mdecorde
  !endif
216 2961 mdecorde
217 2961 mdecorde
  !define __MementoSectionLastSectionId `${id}`
218 2961 mdecorde
219 2961 mdecorde
  !verbose pop
220 2961 mdecorde
221 2961 mdecorde
  Section ${flags} `${name}` `${id}`
222 2961 mdecorde
223 2961 mdecorde
  !verbose push
224 2961 mdecorde
  !verbose 3
225 2961 mdecorde
226 2961 mdecorde
!macroend
227 2961 mdecorde
228 2961 mdecorde
#####################################
229 2961 mdecorde
### User Macros                   ###
230 2961 mdecorde
#####################################
231 2961 mdecorde
232 2961 mdecorde
!macro MementoSection name id
233 2961 mdecorde
234 2961 mdecorde
  !verbose push
235 2961 mdecorde
  !verbose 3
236 2961 mdecorde
237 2961 mdecorde
  !insertmacro __MementoSection "" `${name}` `${id}`
238 2961 mdecorde
239 2961 mdecorde
  !verbose pop
240 2961 mdecorde
241 2961 mdecorde
!macroend
242 2961 mdecorde
243 2961 mdecorde
!macro MementoUnselectedSection name id
244 2961 mdecorde
245 2961 mdecorde
  !verbose push
246 2961 mdecorde
  !verbose 3
247 2961 mdecorde
248 2961 mdecorde
  !insertmacro __MementoSection /o `${name}` `${id}`
249 2961 mdecorde
250 2961 mdecorde
  !define __MementoSectionUnselected
251 2961 mdecorde
252 2961 mdecorde
  !verbose pop
253 2961 mdecorde
254 2961 mdecorde
!macroend
255 2961 mdecorde
256 2961 mdecorde
!macro MementoSectionEnd
257 2961 mdecorde
258 2961 mdecorde
  SectionEnd
259 2961 mdecorde
260 2961 mdecorde
  !verbose push
261 2961 mdecorde
  !verbose 3
262 2961 mdecorde
263 2961 mdecorde
  !insertmacro __MementoCheckSettings
264 2961 mdecorde
265 2961 mdecorde
  !ifndef __MementoSectionIndex
266 2961 mdecorde
267 2961 mdecorde
    !error "MementoSectionDone already used!"
268 2961 mdecorde
269 2961 mdecorde
  !endif
270 2961 mdecorde
271 2961 mdecorde
  !define /MATH __MementoSectionIndexNext \
272 2961 mdecorde
      ${__MementoSectionIndex} + 1
273 2961 mdecorde
274 2961 mdecorde
  Function __MementoSectionMarkNew${__MementoSectionIndex}
275 2961 mdecorde
276 2961 mdecorde
    ClearErrors
277 2961 mdecorde
    ReadRegDWORD $0 ${MEMENTO_REGISTRY_ROOT} `${MEMENTO_REGISTRY_KEY}` `MementoSection_${__MementoSectionLastSectionId}`
278 2961 mdecorde
279 2961 mdecorde
    ${If} ${Errors}
280 2961 mdecorde
281 2961 mdecorde
      !insertmacro SetSectionFlag `${${__MementoSectionLastSectionId}}` ${SF_BOLD}
282 2961 mdecorde
283 2961 mdecorde
    ${EndIf}
284 2961 mdecorde
285 2961 mdecorde
    GetFunctionAddress $0 __MementoSectionMarkNew${__MementoSectionIndexNext}
286 2961 mdecorde
    Goto $0
287 2961 mdecorde
288 2961 mdecorde
  FunctionEnd
289 2961 mdecorde
290 2961 mdecorde
  Function __MementoSectionRestoreStatus${__MementoSectionIndex}
291 2961 mdecorde
292 2961 mdecorde
    ClearErrors
293 2961 mdecorde
    ReadRegDWORD $0 ${MEMENTO_REGISTRY_ROOT} `${MEMENTO_REGISTRY_KEY}` `MementoSection_${__MementoSectionLastSectionId}`
294 2961 mdecorde
295 2961 mdecorde
    !ifndef __MementoSectionUnselected
296 2961 mdecorde
297 2961 mdecorde
      ${If} ${Errors}
298 2961 mdecorde
      ${OrIf} $0 != 0
299 2961 mdecorde
300 2961 mdecorde
        !insertmacro SelectSection `${${__MementoSectionLastSectionId}}`
301 2961 mdecorde
302 2961 mdecorde
      ${Else}
303 2961 mdecorde
304 2961 mdecorde
        !insertmacro UnselectSection `${${__MementoSectionLastSectionId}}`
305 2961 mdecorde
306 2961 mdecorde
      ${EndIf}
307 2961 mdecorde
308 2961 mdecorde
    !else
309 2961 mdecorde
310 2961 mdecorde
      !undef __MementoSectionUnselected
311 2961 mdecorde
312 2961 mdecorde
      ${If} ${Errors}
313 2961 mdecorde
      ${OrIf} $0 == 0
314 2961 mdecorde
315 2961 mdecorde
        !insertmacro UnselectSection `${${__MementoSectionLastSectionId}}`
316 2961 mdecorde
317 2961 mdecorde
      ${Else}
318 2961 mdecorde
319 2961 mdecorde
        !insertmacro SelectSection `${${__MementoSectionLastSectionId}}`
320 2961 mdecorde
321 2961 mdecorde
      ${EndIf}
322 2961 mdecorde
323 2961 mdecorde
    !endif
324 2961 mdecorde
325 2961 mdecorde
    GetFunctionAddress $0 __MementoSectionRestoreStatus${__MementoSectionIndexNext}
326 2961 mdecorde
    Goto $0
327 2961 mdecorde
328 2961 mdecorde
  FunctionEnd
329 2961 mdecorde
330 2961 mdecorde
  Function __MementoSectionSaveStatus${__MementoSectionIndex}
331 2961 mdecorde
332 2961 mdecorde
    ${If} ${SectionIsSelected} `${${__MementoSectionLastSectionId}}`
333 2961 mdecorde
334 2961 mdecorde
      WriteRegDWORD ${MEMENTO_REGISTRY_ROOT} `${MEMENTO_REGISTRY_KEY}` `MementoSection_${__MementoSectionLastSectionId}` 1
335 2961 mdecorde
336 2961 mdecorde
    ${Else}
337 2961 mdecorde
338 2961 mdecorde
      WriteRegDWORD ${MEMENTO_REGISTRY_ROOT} `${MEMENTO_REGISTRY_KEY}` `MementoSection_${__MementoSectionLastSectionId}` 0
339 2961 mdecorde
340 2961 mdecorde
    ${EndIf}
341 2961 mdecorde
342 2961 mdecorde
    GetFunctionAddress $0 __MementoSectionSaveStatus${__MementoSectionIndexNext}
343 2961 mdecorde
    Goto $0
344 2961 mdecorde
345 2961 mdecorde
  FunctionEnd
346 2961 mdecorde
347 2961 mdecorde
  !undef __MementoSectionIndex
348 2961 mdecorde
  !define __MementoSectionIndex ${__MementoSectionIndexNext}
349 2961 mdecorde
  !undef __MementoSectionIndexNext
350 2961 mdecorde
351 2961 mdecorde
  !undef __MementoSectionLastSectionId
352 2961 mdecorde
353 2961 mdecorde
  !verbose pop
354 2961 mdecorde
355 2961 mdecorde
!macroend
356 2961 mdecorde
357 2961 mdecorde
!macro MementoSectionDone
358 2961 mdecorde
359 2961 mdecorde
  !verbose push
360 2961 mdecorde
  !verbose 3
361 2961 mdecorde
362 2961 mdecorde
  !insertmacro __MementoCheckSettings
363 2961 mdecorde
364 2961 mdecorde
  Function __MementoSectionMarkNew${__MementoSectionIndex}
365 2961 mdecorde
  FunctionEnd
366 2961 mdecorde
367 2961 mdecorde
  Function __MementoSectionRestoreStatus${__MementoSectionIndex}
368 2961 mdecorde
  FunctionEnd
369 2961 mdecorde
370 2961 mdecorde
  Function __MementoSectionSaveStatus${__MementoSectionIndex}
371 2961 mdecorde
  FunctionEnd
372 2961 mdecorde
373 2961 mdecorde
  !undef __MementoSectionIndex
374 2961 mdecorde
375 2961 mdecorde
  !verbose pop
376 2961 mdecorde
377 2961 mdecorde
!macroend
378 2961 mdecorde
379 2961 mdecorde
!macro MementoSectionRestore
380 2961 mdecorde
381 2961 mdecorde
  !verbose push
382 2961 mdecorde
  !verbose 3
383 2961 mdecorde
384 2961 mdecorde
  !insertmacro __MementoCheckSettings
385 2961 mdecorde
386 2961 mdecorde
  Push $0
387 2961 mdecorde
  Push $1
388 2961 mdecorde
  Push $2
389 2961 mdecorde
  Push $3
390 2961 mdecorde
391 2961 mdecorde
    # check for first usage
392 2961 mdecorde
393 2961 mdecorde
    ClearErrors
394 2961 mdecorde
395 2961 mdecorde
    ReadRegStr $0 ${MEMENTO_REGISTRY_ROOT} `${MEMENTO_REGISTRY_KEY}` MementoSectionUsed
396 2961 mdecorde
397 2961 mdecorde
    ${If} ${Errors}
398 2961 mdecorde
399 2961 mdecorde
      # use script defaults on first run
400 2961 mdecorde
      Goto done
401 2961 mdecorde
402 2961 mdecorde
    ${EndIf}
403 2961 mdecorde
404 2961 mdecorde
    # mark new components in bold
405 2961 mdecorde
406 2961 mdecorde
    Call __MementoSectionMarkNew1
407 2961 mdecorde
408 2961 mdecorde
    # mark section groups in bold
409 2961 mdecorde
410 2961 mdecorde
    StrCpy $0 0
411 2961 mdecorde
    StrCpy $1 ""
412 2961 mdecorde
    StrCpy $2 ""
413 2961 mdecorde
    StrCpy $3 ""
414 2961 mdecorde
415 2961 mdecorde
    loop:
416 2961 mdecorde
417 2961 mdecorde
      ClearErrors
418 2961 mdecorde
419 2961 mdecorde
      ${If} ${SectionIsBold} $0
420 2961 mdecorde
421 2961 mdecorde
        ${If} $1 != ""
422 2961 mdecorde
423 2961 mdecorde
          !insertmacro SetSectionFlag $1 ${SF_BOLD}
424 2961 mdecorde
425 2961 mdecorde
        ${EndIf}
426 2961 mdecorde
427 2961 mdecorde
        ${If} $2 != ""
428 2961 mdecorde
429 2961 mdecorde
          !insertmacro SetSectionFlag $2 ${SF_BOLD}
430 2961 mdecorde
431 2961 mdecorde
        ${EndIf}
432 2961 mdecorde
433 2961 mdecorde
        ${If} $3 != ""
434 2961 mdecorde
435 2961 mdecorde
          !insertmacro SetSectionFlag $3 ${SF_BOLD}
436 2961 mdecorde
437 2961 mdecorde
        ${EndIf}
438 2961 mdecorde
439 2961 mdecorde
      ${ElseIf} ${Errors}
440 2961 mdecorde
441 2961 mdecorde
        Goto loop_end
442 2961 mdecorde
443 2961 mdecorde
      ${EndIf}
444 2961 mdecorde
445 2961 mdecorde
      ${If} ${SectionIsSectionGroup} $0
446 2961 mdecorde
447 2961 mdecorde
        ${If} $1 == ""
448 2961 mdecorde
449 2961 mdecorde
          StrCpy $1 $0
450 2961 mdecorde
451 2961 mdecorde
        ${ElseIf} $2 == ""
452 2961 mdecorde
453 2961 mdecorde
          StrCpy $2 $0
454 2961 mdecorde
455 2961 mdecorde
        ${ElseIf} $3 == ""
456 2961 mdecorde
457 2961 mdecorde
          StrCpy $3 $0
458 2961 mdecorde
459 2961 mdecorde
        ${EndIf}
460 2961 mdecorde
461 2961 mdecorde
      ${EndIf}
462 2961 mdecorde
463 2961 mdecorde
      ${If} ${SectionIsSectionGroupEnd} $0
464 2961 mdecorde
465 2961 mdecorde
        ${If} $3 != ""
466 2961 mdecorde
467 2961 mdecorde
          StrCpy $3 ""
468 2961 mdecorde
469 2961 mdecorde
        ${ElseIf} $2 != ""
470 2961 mdecorde
471 2961 mdecorde
          StrCpy $2 ""
472 2961 mdecorde
473 2961 mdecorde
        ${ElseIf} $1 != ""
474 2961 mdecorde
475 2961 mdecorde
          StrCpy $1 ""
476 2961 mdecorde
477 2961 mdecorde
        ${EndIf}
478 2961 mdecorde
479 2961 mdecorde
      ${EndIf}
480 2961 mdecorde
481 2961 mdecorde
      IntOp $0 $0 + 1
482 2961 mdecorde
483 2961 mdecorde
    Goto loop
484 2961 mdecorde
    loop_end:
485 2961 mdecorde
486 2961 mdecorde
    # restore sections' status
487 2961 mdecorde
488 2961 mdecorde
    Call __MementoSectionRestoreStatus1
489 2961 mdecorde
490 2961 mdecorde
  # all done
491 2961 mdecorde
492 2961 mdecorde
  done:
493 2961 mdecorde
494 2961 mdecorde
  Pop $3
495 2961 mdecorde
  Pop $2
496 2961 mdecorde
  Pop $1
497 2961 mdecorde
  Pop $0
498 2961 mdecorde
499 2961 mdecorde
  !verbose pop
500 2961 mdecorde
501 2961 mdecorde
!macroend
502 2961 mdecorde
503 2961 mdecorde
!macro MementoSectionSave
504 2961 mdecorde
505 2961 mdecorde
  !verbose push
506 2961 mdecorde
  !verbose 3
507 2961 mdecorde
508 2961 mdecorde
  !insertmacro __MementoCheckSettings
509 2961 mdecorde
510 2961 mdecorde
  Push $0
511 2961 mdecorde
512 2961 mdecorde
    WriteRegStr ${MEMENTO_REGISTRY_ROOT} `${MEMENTO_REGISTRY_KEY}` MementoSectionUsed ""
513 2961 mdecorde
514 2961 mdecorde
    Call __MementoSectionSaveStatus1
515 2961 mdecorde
516 2961 mdecorde
  Pop $0
517 2961 mdecorde
518 2961 mdecorde
  !verbose pop
519 2961 mdecorde
520 2961 mdecorde
!macroend
521 2961 mdecorde
522 2961 mdecorde
523 2961 mdecorde
524 2961 mdecorde
!endif # ___MEMENTO_NSH___
525 2961 mdecorde
526 2961 mdecorde
!verbose pop