123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310 |
- ; Sections.nsh
- ;
- ; Defines and macros for section control
- ;
- ; Include in your script using:
- ; !include "Sections.nsh"
- ;--------------------------------
- !ifndef SECTIONS_INCLUDED
- !define SECTIONS_INCLUDED
- ;--------------------------------
- ; Generic section defines
- # section or section group is selected
- !define SF_SELECTED 1
- # section group
- !define SF_SECGRP 2
- !define SF_SUBSEC 2 # deprecated
- # section group end marker
- !define SF_SECGRPEND 4
- !define SF_SUBSECEND 4 # deprecated
- # bold text (Section !blah)
- !define SF_BOLD 8
- # read only (SectionIn RO)
- !define SF_RO 16
- # expanded section group (SectionGroup /e blah)
- !define SF_EXPAND 32
- # section group is partially selected
- !define SF_PSELECTED 64 # internal
- # internal
- !define SF_TOGGLED 128 # internal
- !define SF_NAMECHG 256 # internal
- # mask to toggle off the selected flag
- !define SECTION_OFF 0xFFFFFFFE
- ;--------------------------------
- ; Select / unselect / reserve section
- !macro SelectSection SECTION
- Push $0
- Push $1
- StrCpy $1 "${SECTION}"
- SectionGetFlags $1 $0
- IntOp $0 $0 | ${SF_SELECTED}
- SectionSetFlags $1 $0
- Pop $1
- Pop $0
- !macroend
- !macro UnselectSection SECTION
- Push $0
- Push $1
- StrCpy $1 "${SECTION}"
- SectionGetFlags $1 $0
- IntOp $0 $0 & ${SECTION_OFF}
- SectionSetFlags $1 $0
- Pop $1
- Pop $0
- !macroend
- ; If section selected, will unselect, if unselected, will select
- !macro ReverseSection SECTION
- Push $0
- Push $1
- StrCpy $1 "${SECTION}"
- SectionGetFlags $1 $0
- IntOp $0 $0 ^ ${SF_SELECTED}
- SectionSetFlags $1 $0
- Pop $1
- Pop $0
- !macroend
- ;--------------------------------
- ; Macros for mutually exclusive section selection
- ; Written by Tim Gallagher
- ;
- ; See one-section.nsi for an example of usage
- ; Starts the Radio Button Block
- ; You should pass a variable that keeps the selected section
- ; as the first parameter for this macro. This variable should
- ; be initialized to the default section's index.
- ;
- ; As this macro uses $R0 and $R1 you can't use those two as the
- ; varible which will keep the selected section.
- !macro StartRadioButtons var
- !define StartRadioButtons_Var "${var}"
- Push $R0
-
- SectionGetFlags "${StartRadioButtons_Var}" $R0
- IntOp $R0 $R0 & ${SECTION_OFF}
- SectionSetFlags "${StartRadioButtons_Var}" $R0
-
- Push $R1
-
- StrCpy $R1 "${StartRadioButtons_Var}"
-
- !macroend
- ; A radio button
- !macro RadioButton SECTION_NAME
- SectionGetFlags ${SECTION_NAME} $R0
- IntOp $R0 $R0 & ${SF_SELECTED}
- IntCmp $R0 ${SF_SELECTED} 0 +2 +2
- StrCpy "${StartRadioButtons_Var}" ${SECTION_NAME}
- !macroend
- ; Ends the radio button block
- !macro EndRadioButtons
-
- StrCmp $R1 "${StartRadioButtons_Var}" 0 +4 ; selection hasn't changed
- SectionGetFlags "${StartRadioButtons_Var}" $R0
- IntOp $R0 $R0 | ${SF_SELECTED}
- SectionSetFlags "${StartRadioButtons_Var}" $R0
- Pop $R1
- Pop $R0
-
- !undef StartRadioButtons_Var
- !macroend
- ;--------------------------------
- ; These are two macros you can use to set a Section in an InstType
- ; or clear it from an InstType.
- ;
- ; Written by Robert Kehl
- ;
- ; For details, see http://nsis.sourceforge.net/wiki/SetSectionInInstType%2C_ClearSectionInInstType
- ;
- ; Use the defines below for the WANTED_INSTTYPE parameter.
- !define INSTTYPE_1 1
- !define INSTTYPE_2 2
- !define INSTTYPE_3 4
- !define INSTTYPE_4 8
- !define INSTTYPE_5 16
- !define INSTTYPE_6 32
- !define INSTTYPE_7 64
- !define INSTTYPE_8 128
- !define INSTTYPE_9 256
- !define INSTTYPE_10 512
- !define INSTTYPE_11 1024
- !define INSTTYPE_12 2048
- !define INSTTYPE_13 4096
- !define INSTTYPE_14 8192
- !define INSTTYPE_15 16384
- !define INSTTYPE_16 32768
- !define INSTTYPE_17 65536
- !define INSTTYPE_18 131072
- !define INSTTYPE_19 262144
- !define INSTTYPE_20 524288
- !define INSTTYPE_21 1048576
- !define INSTTYPE_22 2097152
- !define INSTTYPE_23 4194304
- !define INSTTYPE_24 8388608
- !define INSTTYPE_25 16777216
- !define INSTTYPE_26 33554432
- !define INSTTYPE_27 67108864
- !define INSTTYPE_28 134217728
- !define INSTTYPE_29 268435456
- !define INSTTYPE_30 536870912
- !define INSTTYPE_31 1073741824
- !define INSTTYPE_32 2147483648
- !macro SetSectionInInstType SECTION_NAME WANTED_INSTTYPE
- Push $0
- Push $1
- StrCpy $1 "${SECTION_NAME}"
- SectionGetInstTypes $1 $0
- IntOp $0 $0 | ${WANTED_INSTTYPE}
- SectionSetInstTypes $1 $0
- Pop $1
- Pop $0
- !macroend
- !macro ClearSectionInInstType SECTION_NAME WANTED_INSTTYPE
- Push $0
- Push $1
- Push $2
- StrCpy $2 "${SECTION_NAME}"
- SectionGetInstTypes $2 $0
- StrCpy $1 ${WANTED_INSTTYPE}
- IntOp $1 $1 ~
- IntOp $0 $0 & $1
- SectionSetInstTypes $2 $0
- Pop $2
- Pop $1
- Pop $0
- !macroend
- ;--------------------------------
- ; Set / clear / check bits in a section's flags
- ; Written by derekrprice
- ; Set one or more bits in a sections's flags
- !macro SetSectionFlag SECTION BITS
- Push $R0
- Push $R1
- StrCpy $R1 "${SECTION}"
- SectionGetFlags $R1 $R0
- IntOp $R0 $R0 | "${BITS}"
- SectionSetFlags $R1 $R0
- Pop $R1
- Pop $R0
-
- !macroend
- ; Clear one or more bits in section's flags
- !macro ClearSectionFlag SECTION BITS
- Push $R0
- Push $R1
- Push $R2
- StrCpy $R2 "${SECTION}"
- SectionGetFlags $R2 $R0
- IntOp $R1 "${BITS}" ~
- IntOp $R0 $R0 & $R1
- SectionSetFlags $R2 $R0
- Pop $R2
- Pop $R1
- Pop $R0
- !macroend
- ; Check if one or more bits in section's flags are set
- ; If they are, jump to JUMPIFSET
- ; If not, jump to JUMPIFNOTSET
- !macro SectionFlagIsSet SECTION BITS JUMPIFSET JUMPIFNOTSET
- Push $R0
- SectionGetFlags "${SECTION}" $R0
- IntOp $R0 $R0 & "${BITS}"
- IntCmp $R0 "${BITS}" +3
- Pop $R0
- StrCmp "" "${JUMPIFNOTSET}" +3 "${JUMPIFNOTSET}"
- Pop $R0
- Goto "${JUMPIFSET}"
- !macroend
- ;--------------------------------
- ; Removes a section by unselecting and hiding it
- !macro RemoveSection SECTION
- Push $R0
- Push $R1
- StrCpy $R1 `${SECTION}`
- SectionGetFlags $R1 $R0
- IntOp $R0 $R0 & ${SECTION_OFF}
- SectionSetFlags $R1 $R0
- SectionSetText $R1 ``
- Pop $R1
- Pop $R0
- !macroend
- ; Undoes the RemoveSection action
- !macro UnremoveSection SECTION SECTION_TEXT
- Push $R0
- Push $R1
- Push $R2
- StrCpy $R1 `${SECTION}`
- StrCpy $R2 `${SECTION_TEXT}`
- SectionGetFlags $R1 $R0
- IntOp $R0 $R0 | ${SF_SELECTED}
- SectionSetFlags $R1 $R0
- SectionSetText $R1 $R2
- Pop $R2
- Pop $R1
- Pop $R0
- !macroend
- ;--------------------------------
- !endif
|