;--------------------------------
;Include Modern UI

  !define LOGICLIB_SECTIONCMP

  !include "MUI.nsh"
  !include "logiclib.nsh"
  !include "sections.nsh"

;--------------------------------
;General

  ;Name and file
  Name "Test"
  OutFile "test.exe"
  
;--------------------------------
;Pages

  !insertmacro MUI_PAGE_COMPONENTS
  !insertmacro MUI_PAGE_INSTFILES

Section A secA
SectionEnd

Section /o B secB
SectionEnd

Section C secC
SectionEnd

Section D secD
SectionEnd

!define SECTIONCOUNT 3 ; total - 1

;--------------------------------
;Save selected sections
!macro SaveSections VAR
  StrCpy ${VAR} 0
  ${ForEach} $R0 ${SECTIONCOUNT} 0 - 1
	  IntOp ${VAR} ${VAR} << 1
    ${If} ${SectionIsSelected} $R0
		  IntOp ${VAR} ${VAR} + 1
		${EndIf}
  ${Next}
!macroend

Function .onSelChange
  ; save selected sections to compare
	!insertmacro SaveSections $R1

  ; save original number for comparison
  Push $R1
	; XOR both results, find out which sections changed
  IntOp $R3 $R2 ^ $R1

  ${For} $R0 0 ${SECTIONCOUNT}
	  ; check if section has changed
		IntOp $R4 $R3 & 1
		${If} $R4 == 1
      IntOp $R5 $R1 & 1
      SectionGetText $R0 $R6
			${If} $R5 == 1
        MessageBox MB_OK "Section '$R6' ($R0) has been activated."
			${Else}
        MessageBox MB_OK "Section '$R6' ($R0) has been deactivated."
			${EndIf}
			; :
			; :
		${EndIf}
		; go to next section
	  IntOp $R3 $R3 >> 1
		IntOp $R1 $R1 >> 1
  ${Next}

	Pop $R2

FunctionEnd

Function .onInit
  ; save initial selected sections
	!insertmacro SaveSections $R2
FunctionEnd

;--------------------------------
;Languages
 
  !insertmacro MUI_LANGUAGE "English"

