home *** CD-ROM | disk | FTP | other *** search
- ; 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
-
- !define SF_SELECTED 1
- !define SF_SUBSEC 2
- !define SF_SUBSECEND 4
- !define SF_BOLD 8
- !define SF_RO 16
- !define SF_EXPAND 32
- !define SF_PSELECTED 64
-
- !define SECTION_OFF 0xFFFFFFFE
-
- ;--------------------------------
-
- ; Select / unselect / reserve section
-
- !macro SelectSection SECTION
-
- Push $0
- SectionGetFlags "${SECTION}" $0
- IntOp $0 $0 | ${SF_SELECTED}
- SectionSetFlags "${SECTION}" $0
- Pop $0
-
- !macroend
-
- !macro UnselectSection SECTION
-
- Push $0
- SectionGetFlags "${SECTION}" $0
- IntOp $0 $0 & ${SECTION_OFF}
- SectionSetFlags "${SECTION}" $0
- Pop $0
-
- !macroend
-
- ; If section selected, will unselect, if unselected, will select
-
- !macro ReverseSection SECTION
-
- Push $0
- SectionGetFlags "${SECTION}" $0
- IntOp $0 $0 ^ ${SF_SELECTED}
- SectionSetFlags "${SECTION}" $0
- 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/archive/nsisweb.php?page=287
- ;
- ; Use the defines below for the WANTED_INSTTYPE paramter.
-
- !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
- SectionGetInstTypes "${SECTION_NAME}" $0
- IntOp $0 $0 | ${WANTED_INSTTYPE}
- SectionSetInstTypes "${SECTION_NAME}" $0
- Pop $0
-
- !macroend
-
- !macro ClearSectionInInstType SECTION_NAME WANTED_INSTTYPE
-
- Push $0
- Push $1
- SectionGetInstTypes "${SECTION_NAME}" $0
- StrCpy $1 ${WANTED_INSTTYPE}
- IntOp $1 $1 ~
- IntOp $0 $0 & $1
- SectionSetInstTypes "${SECTION_NAME}" $0
- 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
- SectionGetFlags "${SECTION}" $R0
- IntOp $R0 $R0 | "${BITS}"
- SectionSetFlags "${SECTION}" $R0
- Pop $R0
-
- !macroend
-
- ; Clear one or more bits in section's flags
-
- !macro ClearSectionFlag SECTION BITS
-
- Push $R0
- Push $R1
- SectionGetFlags "${SECTION}" $R0
- IntOp $R1 "${BITS}" ~
- IntOp $R0 $R0 & $R1
- SectionSetFlags "${SECTION}" $R0
- 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
-
- ;--------------------------------
-
- !endif