summaryrefslogtreecommitdiff
path: root/win/setpath.nsi
diff options
context:
space:
mode:
Diffstat (limited to 'win/setpath.nsi')
-rwxr-xr-xwin/setpath.nsi231
1 files changed, 0 insertions, 231 deletions
diff --git a/win/setpath.nsi b/win/setpath.nsi
deleted file mode 100755
index a9626c3..0000000
--- a/win/setpath.nsi
+++ /dev/null
@@ -1,231 +0,0 @@
-; Modify the user's PATH variable.
-;
-; Modified by JY to have both a RemoveFromPath
-; and an un.RemoveFromPath which are basically
-; copies of each other. Why does NSIS demand
-; this nonsense?
-;
-; Modified Feb 14, 2005 by Mathias Sundman:
-; Added code to remove the semicolon at the end of the path
-; when uninstalling.
-;
-; Added code to make sure we don't insert an extra semicolon
-; before our path if there already exist one at the end of
-; the original path.
-;
-; Removed duplicated "un. and install" functions and made
-; macros to duplicate the code instead.
-
-; example usage
-;
-;Section "Add to path"
-; Push $INSTDIR
-; Call AddToPath
-;SectionEnd
-;
-;# ...
-;
-;Section "uninstall"
-; # ...
-; Push $INSTDIR
-; Call un.RemoveFromPath
-; # ...
-;SectionEnd
-
-!verbose 3
-!include "WinMessages.NSH"
-!verbose 4
-
-;====================================================
-; AddToPath - Adds the given dir to the search path.
-; Input - head of the stack
-; Note - Win9x systems requires reboot
-;====================================================
-Function AddToPath
- Exch $0
- Push $1
- Push $2
-
- Call IsNT
- Pop $1
- StrCmp $1 1 AddToPath_NT
- ; Not on NT
- StrCpy $1 $WINDIR 2
- FileOpen $1 "$1\autoexec.bat" a
- FileSeek $1 0 END
- GetFullPathName /SHORT $0 $0
- FileWrite $1 "$\r$\nSET PATH=%PATH%;$0$\r$\n"
- FileClose $1
- Goto AddToPath_done
-
- AddToPath_NT:
- ReadRegStr $1 HKCU "Environment" "PATH"
- StrCpy $2 $1 1 -1 # copy last char
- StrCmp $2 ";" 0 +2 # if last char == ;
- StrCpy $1 $1 -1 # remove last char
-
- StrCmp $1 "" AddToPath_NTdoIt
- StrCpy $0 "$1;$0"
- Goto AddToPath_NTdoIt
- AddToPath_NTdoIt:
- WriteRegExpandStr HKCU "Environment" "PATH" $0
- SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000
-
- AddToPath_done:
- Pop $2
- Pop $1
- Pop $0
-FunctionEnd
-
-;====================================================
-; RemoveFromPath - Remove a given dir from the path
-; Input: head of the stack
-;====================================================
-!macro RemoveFromPath un
-Function ${un}RemoveFromPath
- Exch $0
- Push $1
- Push $2
- Push $3
- Push $4
- Push $5
-
- Call ${un}IsNT
- Pop $1
- StrCmp $1 1 RemoveFromPath_NT
- ; Not on NT
- StrCpy $1 $WINDIR 2
- FileOpen $1 "$1\autoexec.bat" r
- GetTempFileName $4
- FileOpen $2 $4 w
- GetFullPathName /SHORT $0 $0
- StrCpy $0 "SET PATH=%PATH%;$0"
- SetRebootFlag true
- Goto RemoveFromPath_dosLoop
-
- RemoveFromPath_dosLoop:
- FileRead $1 $3
- StrCmp $3 "$0$\r$\n" RemoveFromPath_dosLoop
- StrCmp $3 "$0$\n" RemoveFromPath_dosLoop
- StrCmp $3 "$0" RemoveFromPath_dosLoop
- StrCmp $3 "" RemoveFromPath_dosLoopEnd
- FileWrite $2 $3
- Goto RemoveFromPath_dosLoop
-
- RemoveFromPath_dosLoopEnd:
- FileClose $2
- FileClose $1
- StrCpy $1 $WINDIR 2
- Delete "$1\autoexec.bat"
- CopyFiles /SILENT $4 "$1\autoexec.bat"
- Delete $4
- Goto RemoveFromPath_done
-
- RemoveFromPath_NT:
- StrLen $2 $0
- ReadRegStr $1 HKCU "Environment" "PATH"
- Push $1
- Push $0
- Call ${un}StrStr ; Find $0 in $1
- Pop $0 ; pos of our dir
- IntCmp $0 -1 RemoveFromPath_done
- ; else, it is in path
- StrCpy $3 $1 $0 ; $3 now has the part of the path before our dir
- IntOp $2 $2 + $0 ; $2 now contains the pos after our dir in the path (';')
- IntOp $2 $2 + 1 ; $2 now containts the pos after our dir and the semicolon.
- StrLen $0 $1
- StrCpy $1 $1 $0 $2
- StrCpy $3 "$3$1"
-
- StrCpy $5 $3 1 -1 # copy last char
- StrCmp $5 ";" 0 +2 # if last char == ;
- StrCpy $3 $3 -1 # remove last char
-
- WriteRegExpandStr HKCU "Environment" "PATH" $3
- SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000
-
- RemoveFromPath_done:
- Pop $5
- Pop $4
- Pop $3
- Pop $2
- Pop $1
- Pop $0
-FunctionEnd
-!macroend
-!insertmacro RemoveFromPath ""
-!insertmacro RemoveFromPath "un."
-
-
-;====================================================
-; StrStr - Finds a given string in another given string.
-; Returns -1 if not found and the pos if found.
-; Input: head of the stack - string to find
-; second in the stack - string to find in
-; Output: head of the stack
-;====================================================
-!macro StrStr un
-Function ${un}StrStr
- Push $0
- Exch
- Pop $0 ; $0 now have the string to find
- Push $1
- Exch 2
- Pop $1 ; $1 now have the string to find in
- Exch
- Push $2
- Push $3
- Push $4
- Push $5
-
- StrCpy $2 -1
- StrLen $3 $0
- StrLen $4 $1
- IntOp $4 $4 - $3
-
- StrStr_loop:
- IntOp $2 $2 + 1
- IntCmp $2 $4 0 0 StrStrReturn_notFound
- StrCpy $5 $1 $3 $2
- StrCmp $5 $0 StrStr_done StrStr_loop
-
- StrStrReturn_notFound:
- StrCpy $2 -1
-
- StrStr_done:
- Pop $5
- Pop $4
- Pop $3
- Exch $2
- Exch 2
- Pop $0
- Pop $1
-FunctionEnd
-!macroend
-!insertmacro StrStr ""
-!insertmacro StrStr "un."
-
-;====================================================
-; IsNT - Returns 1 if the current system is NT, 0
-; otherwise.
-; Output: head of the stack
-;====================================================
-!macro IsNT un
-Function ${un}IsNT
- Push $0
- ReadRegStr $0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion
- StrCmp $0 "" 0 IsNT_yes
- ; we are not NT.
- Pop $0
- Push 0
- Return
-
- IsNT_yes:
- ; NT!!!
- Pop $0
- Push 1
-FunctionEnd
-!macroend
-!insertmacro IsNT ""
-!insertmacro IsNT "un."
-