view nsis/AdvUninstLog2.nsh @ 149:eab3e1e52497

Modified EquipmentSlot to display an image instead of a text. Added EquipmentGui class, which handles the equipment slots of the player screen. An EquipmentGui instance will be created in the InventoryGUI constructor. The initializeInventory method of the Hud class supplies the players inventory and equipment to the InventoryGUI constructor.
author KarstenBock@gmx.net
date Wed, 05 Oct 2011 11:04:39 +0200
parents 1fd2201f5c36
children
line wrap: on
line source

     ;_____________________________ HEADER FILE BEGIN ____________________________

     # Advanced Uninstall Log NSIS header
     # Version 1.0 2007-01-31
     # By Red Wine (http://nsis.sf.net/User:Red_Wine)
     
     # Usage: See included examples Uninstall_Log_Default_UI.nsi - Uninstall_Log_Modern_UI.nsi

!verbose push
   !verbose 3

!ifndef ADVANCED_UNINSTALL.LOG_NSH
   !define ADVANCED_UNINSTALL.LOG_NSH

!ifndef INSTDIR_REG_ROOT | INSTDIR_REG_KEY
   !error "You must properly define both INSTDIR_REG_ROOT and INSTDIR_REG_KEY"
!endif

!ifndef UNINSTALL_LOG
   !define UNINSTALL_LOG         "Uninstall"
!endif

!ifndef UNINST_LOG_VERBOSE
   !define UNINST_LOG_VERBOSE    "3"
!endif

!verbose pop

!echo "Advanced Uninstall Log NSIS header v1.0 2007-01-31 by Red Wine (http://nsis.sf.net/User:Red_Wine)"

!verbose push
   !verbose ${UNINST_LOG_VERBOSE}

!define UNINST_EXE     "$INSTDIR\${UNINSTALL_LOG}.exe"
!define UNINST_DAT     "$INSTDIR\${UNINSTALL_LOG}.dat"
!define UNLOG_PART     "$PLUGINSDIR\part."
!define UNLOG_TEMP     "$PLUGINSDIR\unlog.tmp"
!define EXCLU_LIST     "$PLUGINSDIR\exclude.tmp"
!define UNLOG_HEAD     "=========== Uninstaller Log please do not edit this file ==========="

Var TargetDir

 var unlog_tmp_0
 var unlog_tmp_1
 var unlog_tmp_2
 var unlog_tmp_3
 var unlog_error

!include FileFunc.nsh
!include TextFunc.nsh

!insertmacro Locate
!insertmacro un.Locate
!insertmacro DirState
!insertmacro un.DirState
!insertmacro FileJoin
!insertmacro TrimNewLines
!insertmacro un.TrimNewLines

;.............................. Uninstaller Macros ..............................

/* Used to get rid of pesky newline characters that prevent installations from happenning */
Function un.TrimNewlines
 Exch $R0 ; removes whatever was stored into the stack with the file data
 Push $R1
 Push $R2
 StrCpy $R1 0
 
 loop:
   IntOp $R1 $R1 - 1
   StrCpy $R2 $R0 1 $R1
   StrCmp $R2 "$\r" loop
   StrCmp $R2 "$\n" loop
   IntOp $R1 $R1 + 1
   IntCmp $R1 0 no_trim_needed
   StrCpy $R0 $R0 $R1
 
 no_trim_needed:
   Pop $R2
   Pop $R1
   Exch $R0
FunctionEnd

Function un.RemoveEmptyDirs
  Pop $9

  FindFirst $0 $1 "$TargetDir$9*"
  StrCmp $0 "" End
  Loop:
    StrCmp $1 "" End
    StrCmp $1 "." Next
    StrCmp $1 ".." Next
      Push $0
      Push $1
      Push $9
      Push "$9$1\"
      Call un.RemoveEmptyDirs
      Pop $9
      Pop $1
      Pop $0
    RMDir "$TargetDir$9$1"
    Next:
    FindNext $0 $1
    Goto Loop
  End:
  FindClose $0
FunctionEnd

!macro UNINSTALL.NEW_UNINSTALL TempDir
	StrCpy $TargetDir ${TempDir}
  FileOpen $unlog_tmp_0 "$TargetDir\Uninstall.dat" r
  
  UninstallLoop:
    ClearErrors #ClearErrors from displaying
    FileRead $unlog_tmp_0 $R0 #Reads string lines from a file and stores them in $R0
		IfErrors UninstallEnd #If EOF has been reached
    Push $R0 #throw contents of $R0 into stack
	    Call un.TrimNewLines
    Pop $R0 #takes contents of stack and places into $R0
    Delete "$R0" #delete file
    Goto UninstallLoop
  UninstallEnd:
  FileClose $unlog_tmp_0

  Delete "$TargetDir\Uninstall.dat"
  Delete "$TargetDir\Uninstall.exe"
  
  Push "\"
  Call un.RemoveEmptyDirs
  RMDir "$TargetDir"
!macroend

!macro INTERACTIVE_UNINSTALL
  !verbose push
     !verbose ${UNINST_LOG_VERBOSE}
     
     !ifdef INTERACTIVE_UNINSTALL
        !error "INTERACTIVE_UNINSTALL is already defined"
     !endif

        var unlog_tmp_4
        var unlog_tmp_5

     !define INTERACTIVE_UNINSTALL

     !ifdef INTERACTIVE_UNINSTALL & UNATTENDED_UNINSTALL
        !error "You must insert either Interactive or Unattended Uninstall neither both, neither none."
     !endif

     !ifdef UnLog_Uninstall_CallBackFunc
        !undef UnLog_Uninstall_CallBackFunc
     !endif

     !ifndef UnLog_Uninstall_CallBackFunc
        !insertmacro UNINSTALL.LOG_UNINSTALL_INTERACTIVE
        !define UnLog_Uninstall_CallBackFunc "un._LocateCallBack_Function_Interactive"
     !endif

  !verbose pop
!macroend


!macro UNATTENDED_UNINSTALL
  !verbose push
     !verbose ${UNINST_LOG_VERBOSE}

     !ifdef UNATTENDED_UNINSTALL
        !error "UNATTENDED_UNINSTALL is already defined"
     !endif

     !define UNATTENDED_UNINSTALL

     !ifdef INTERACTIVE_UNINSTALL & UNATTENDED_UNINSTALL
        !error "You must insert either Interactive or Unattended Uninstall neither both, neither none."
     !endif

     !ifdef UnLog_Uninstall_CallBackFunc
        !undef UnLog_Uninstall_CallBackFunc
     !endif

     !ifndef UnLog_Uninstall_CallBackFunc
        !insertmacro UNINSTALL.LOG_UNINSTALL_UNATTENDED
        !define UnLog_Uninstall_CallBackFunc "un._LocateCallBack_Function_Unattended"
     !endif

  !verbose pop
!macroend


!macro UNINSTALL.LOG_UNINSTALL_UNATTENDED

  Function un._LocateCallBack_Function_Unattended
    start:
        FileRead $unlog_tmp_2 "$unlog_tmp_3" ${NSIS_MAX_STRLEN}
        ${un.TrimNewLines} "$unlog_tmp_3" "$unlog_tmp_3"
        StrCmp "$unlog_tmp_3" "$R9" islog
        IfErrors nolog
        goto start

    islog:
        IfFileExists "$R9\*.*" isdir

    isfile:
        Delete "$R9"
        goto end

    isdir:
        RmDir "$R9"
	IntOp $unlog_tmp_1 $unlog_tmp_1 + 1
        goto end

    nolog:
        ClearErrors
        StrCmp "$R9" "${UNINST_EXE}" isfile
        StrCmp "$R9" "${UNINST_DAT}" isfile

    end:
        FileSeek $unlog_tmp_2 0 SET
	Push $unlog_tmp_0
  FunctionEnd

!macroend


!macro UNINSTALL.LOG_UNINSTALL_INTERACTIVE

  Function un._LocateCallBack_Function_Interactive
    start:
        FileRead $unlog_tmp_2 "$unlog_tmp_3" ${NSIS_MAX_STRLEN}
        ${un.TrimNewLines} "$unlog_tmp_3" "$unlog_tmp_3"
        StrCmp "$unlog_tmp_3" "$R9" islog
        IfErrors nolog
        goto start

    islog:
        IfFileExists "$R9\*.*" isdir

    isfile:
        Delete "$R9"
        goto end

    isdir:
        RmDir "$R9"
	IntOp $unlog_tmp_1 $unlog_tmp_1 + 1
        goto end

    nolog:
        ClearErrors
	FileSeek $unlog_tmp_4 0 SET
    read:
        FileRead $unlog_tmp_4 "$unlog_tmp_3"
        ${un.TrimNewLines} "$unlog_tmp_3" "$unlog_tmp_3"
        StrCmp "$unlog_tmp_3" "$R9" end
        IfErrors +2
        goto read
        ClearErrors 
        StrCmp "$R9" "${UNINST_EXE}" isfile
        StrCmp "$R9" "${UNINST_DAT}" isfile
        IfFileExists "$R9\*.*" msgdir

	MessageBox MB_ICONQUESTION|MB_YESNO \
        'Delete File "$R9"?' /SD IDNO IDYES isfile IDNO nodel

    msgdir:
        MessageBox MB_ICONQUESTION|MB_YESNO \
        'Delete Directory "$R9"?' /SD IDNO IDYES isdir IDNO nodel

    nodel:
	FileSeek $unlog_tmp_4 0 END
	FileWrite $unlog_tmp_4 "$R9$\r$\n"

    end:
        FileSeek $unlog_tmp_2 0 SET
	Push $unlog_tmp_0
  FunctionEnd

!macroend

;................................. Installer Macros .................................

!macro UNINSTALL.LOG_INSTALL_UNATTENDED

  Function _LocateCallBack_Function_Install
    loop:
        FileRead $unlog_tmp_2 "$unlog_tmp_3" ${NSIS_MAX_STRLEN}
        ${TrimNewLines} "$unlog_tmp_3" "$unlog_tmp_3"
        IfErrors 0 +4
        ClearErrors
        FileSeek $unlog_tmp_2 0 SET
        goto next
        StrCmp "$R9" "$unlog_tmp_3" end
        goto loop
    next:
	FileWrite $unlog_tmp_1 "$R9$\r$\n"
    end:
	Push $unlog_tmp_0
  FunctionEnd

!macroend


!ifdef UnLog_Install_Func_CallBack
    !undef UnLog_Install_Func_CallBack
!endif

!ifndef UnLog_Install_Func_CallBack
    !insertmacro UNINSTALL.LOG_INSTALL_UNATTENDED
    !define UnLog_Install_Func_CallBack "_LocateCallBack_Function_Install"
!endif


!macro UNINSTALL.LOG_PREPARE_INSTALL
  !verbose push
     !verbose ${UNINST_LOG_VERBOSE}

      Push $0
      Push $1
        ClearErrors
        ReadRegStr "$0"  ${INSTDIR_REG_ROOT} "${INSTDIR_REG_KEY}" "${UNINSTALL_LOG}Directory"
        IfErrors next
        ${DirState} "$0" $1
        StrCmp "$1" "-1" next
        StrCmp "$1" "0" next
        IfFileExists "$0\${UNINSTALL_LOG}.dat" next
        MessageBox MB_ICONEXCLAMATION|MB_OK \
        "Previous installation detected at $0.$\n\
        Required file ${UNINSTALL_LOG}.dat is missing.$\n$\nIt is highly recommended \
        to select an empty directory and perform a fresh installation." /SD IDOK
        StrCpy $unlog_error "error"

    next:
        ClearErrors
        StrCmp "$PLUGINSDIR" "" 0 +2
           InitPluginsDir

        GetTempFileName "$1"
        FileOpen $0 "$1" w
        FileWrite $0 "${UNLOG_HEAD}$\r$\n"
        FileClose $0
        Rename "$1" "${UNLOG_TEMP}"
      Pop $1
      Pop $0

  !verbose pop
!macroend


!macro UNINSTALL.LOG_UPDATE_INSTALL
  !verbose push
     !verbose ${UNINST_LOG_VERBOSE}

        Delete "${UNINST_DAT}"
        Rename "${UNLOG_TEMP}" "${UNINST_DAT}"
        WriteUninstaller "${UNINST_EXE}"
        WriteRegStr ${INSTDIR_REG_ROOT} "${INSTDIR_REG_KEY}" "${UNINSTALL_LOG}.dat" "${UNINST_DAT}"
        WriteRegStr ${INSTDIR_REG_ROOT} "${INSTDIR_REG_KEY}" "${UNINSTALL_LOG}Directory" "$INSTDIR"

  !verbose pop
!macroend


!define uninstall.log_install "!insertmacro UNINSTALL.LOG_INSTALL"

!macro UNINSTALL.LOG_INSTALL FileOpenWrite FileOpenRead TargetDir
  !verbose push
     !verbose ${UNINST_LOG_VERBOSE}

	FileOpen $unlog_tmp_1 "${FileOpenWrite}" w
	FileOpen $unlog_tmp_2 "${FileOpenRead}" r

	${Locate} "${TargetDir}" "/L=FD" "${UnLog_Install_Func_CallBack}"

        StrCmp $unlog_error "error" 0 +2
        ClearErrors

	IfErrors 0 +2
	MessageBox MB_ICONEXCLAMATION|MB_OK "Error creating ${UNINSTALL_LOG} Log." /SD IDOK

	FileClose $unlog_tmp_1
	FileClose $unlog_tmp_2

  !verbose pop
!macroend


!define uninstall.log_mergeID "!insertmacro UNINSTALL.LOG_MERGE"

!macro UNINSTALL.LOG_MERGE UnlogPart
  !verbose push
     !verbose ${UNINST_LOG_VERBOSE}

        ${FileJoin} "${UNLOG_TEMP}" "${UnlogPart}" "${UNLOG_TEMP}"

  !verbose pop
!macroend


!macro UNINSTALL.LOG_OPEN_INSTALL
  !verbose push
     !verbose ${UNINST_LOG_VERBOSE}

        StrCmp $unlog_error "error" +2
        ${uninstall.log_install} "${EXCLU_LIST}" "${UNINST_DAT}" "$OUTDIR"

  !verbose pop
!macroend


!macro UNINSTALL.LOG_CLOSE_INSTALL
  !verbose push
     !verbose ${UNINST_LOG_VERBOSE}

   !define ID ${__LINE__}

        ${uninstall.log_install} "${UNLOG_PART}${ID}" "${EXCLU_LIST}" "$OUTDIR"
        ${uninstall.log_mergeID} "${UNLOG_PART}${ID}"

   !undef ID ${__LINE__}

  !verbose pop
!macroend

!endif

!verbose pop
     ;_____________________________ HEADER FILE END ____________________________