mirror of https://github.com/vitalif/openscad
226 lines
6.1 KiB
Plaintext
226 lines
6.1 KiB
Plaintext
/*
|
|
nsis.sourceforge.net COPYRIGHT
|
|
Copyright (C) 1995-2009 Contributors
|
|
|
|
Note the 'edit' page of the wiki at nsis.sourceforge.net specifically
|
|
states the following:
|
|
|
|
"All contributions sent to this wiki are generally considered to be in
|
|
the zlib/libpng license (see License for details)."
|
|
|
|
The NSIS 'license' link on the wiki states the following:
|
|
|
|
"All NSIS source code, plug-ins, documentation, examples, header files
|
|
and graphics, with the exception of the compression modules and where
|
|
otherwise noted, are licensed under the zlib/libpng license."
|
|
|
|
http://nsis.sourceforge.net/File_Assocation lists these authors:
|
|
|
|
Author: Vytautas (talk, contrib)
|
|
Author: intersol (talk, contrib)
|
|
Author: chefkoch (talk, contrib)
|
|
|
|
ZLIB/LIBPNG LICENSE
|
|
-------------------
|
|
|
|
This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software.
|
|
|
|
Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions:
|
|
|
|
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
|
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
|
3. This notice may not be removed or altered from any source distribution.
|
|
*/
|
|
|
|
/*
|
|
_____________________________________________________________________________
|
|
|
|
File Association
|
|
_____________________________________________________________________________
|
|
|
|
Based on code taken from http://nsis.sourceforge.net/File_Association
|
|
|
|
Usage in script:
|
|
1. !include "FileAssociation.nsh"
|
|
2. [Section|Function]
|
|
${FileAssociationFunction} "Param1" "Param2" "..." $var
|
|
[SectionEnd|FunctionEnd]
|
|
|
|
FileAssociationFunction=[RegisterExtension|UnRegisterExtension]
|
|
|
|
_____________________________________________________________________________
|
|
|
|
${RegisterExtension} "[executable]" "[extension]" "[description]"
|
|
|
|
"[executable]" ; executable which opens the file format
|
|
;
|
|
"[extension]" ; extension, which represents the file format to open
|
|
;
|
|
"[description]" ; description for the extension. This will be display in Windows Explorer.
|
|
;
|
|
|
|
|
|
${UnRegisterExtension} "[extension]" "[description]"
|
|
|
|
"[extension]" ; extension, which represents the file format to open
|
|
;
|
|
"[description]" ; description for the extension. This will be display in Windows Explorer.
|
|
;
|
|
|
|
_____________________________________________________________________________
|
|
|
|
Macros
|
|
_____________________________________________________________________________
|
|
|
|
Change log window verbosity (default: 3=no script)
|
|
|
|
Example:
|
|
!include "FileAssociation.nsh"
|
|
!insertmacro RegisterExtension
|
|
${FileAssociation_VERBOSE} 4 # all verbosity
|
|
!insertmacro UnRegisterExtension
|
|
${FileAssociation_VERBOSE} 3 # no script
|
|
*/
|
|
|
|
|
|
!ifndef FileAssociation_INCLUDED
|
|
!define FileAssociation_INCLUDED
|
|
|
|
!include Util.nsh
|
|
|
|
!verbose push
|
|
!verbose 3
|
|
!ifndef _FileAssociation_VERBOSE
|
|
!define _FileAssociation_VERBOSE 3
|
|
!endif
|
|
!verbose ${_FileAssociation_VERBOSE}
|
|
!define FileAssociation_VERBOSE `!insertmacro FileAssociation_VERBOSE`
|
|
!verbose pop
|
|
|
|
!macro FileAssociation_VERBOSE _VERBOSE
|
|
!verbose push
|
|
!verbose 3
|
|
!undef _FileAssociation_VERBOSE
|
|
!define _FileAssociation_VERBOSE ${_VERBOSE}
|
|
!verbose pop
|
|
!macroend
|
|
|
|
|
|
|
|
!macro RegisterExtensionCall _EXECUTABLE _EXTENSION _DESCRIPTION
|
|
!verbose push
|
|
!verbose ${_FileAssociation_VERBOSE}
|
|
Push `${_DESCRIPTION}`
|
|
Push `${_EXTENSION}`
|
|
Push `${_EXECUTABLE}`
|
|
${CallArtificialFunction} RegisterExtension_
|
|
!verbose pop
|
|
!macroend
|
|
|
|
!macro UnRegisterExtensionCall _EXTENSION _DESCRIPTION
|
|
!verbose push
|
|
!verbose ${_FileAssociation_VERBOSE}
|
|
Push `${_EXTENSION}`
|
|
Push `${_DESCRIPTION}`
|
|
${CallArtificialFunction} UnRegisterExtension_
|
|
!verbose pop
|
|
!macroend
|
|
|
|
|
|
|
|
!define RegisterExtension `!insertmacro RegisterExtensionCall`
|
|
!define un.RegisterExtension `!insertmacro RegisterExtensionCall`
|
|
|
|
!macro RegisterExtension
|
|
!macroend
|
|
|
|
!macro un.RegisterExtension
|
|
!macroend
|
|
|
|
!macro RegisterExtension_
|
|
!verbose push
|
|
!verbose ${_FileAssociation_VERBOSE}
|
|
|
|
Exch $R2 ;exe
|
|
Exch
|
|
Exch $R1 ;ext
|
|
Exch
|
|
Exch 2
|
|
Exch $R0 ;desc
|
|
Exch 2
|
|
Push $0
|
|
Push $1
|
|
|
|
ReadRegStr $1 HKCR $R1 "" ; read current file association
|
|
StrCmp "$1" "" NoBackup ; is it empty
|
|
StrCmp "$1" "$R0" NoBackup ; is it our own
|
|
WriteRegStr HKCR $R1 "backup_val" "$1" ; backup current value
|
|
NoBackup:
|
|
WriteRegStr HKCR $R1 "" "$R0" ; set our file association
|
|
|
|
ReadRegStr $0 HKCR $R0 ""
|
|
StrCmp $0 "" 0 Skip
|
|
WriteRegStr HKCR "$R0" "" "$R0"
|
|
WriteRegStr HKCR "$R0\shell" "" "open"
|
|
WriteRegStr HKCR "$R0\DefaultIcon" "" "$R2,0"
|
|
Skip:
|
|
WriteRegStr HKCR "$R0\shell\open\command" "" '"$R2" "%1"'
|
|
WriteRegStr HKCR "$R0\shell\edit" "" "Edit $R0"
|
|
WriteRegStr HKCR "$R0\shell\edit\command" "" '"$R2" "%1"'
|
|
|
|
Pop $1
|
|
Pop $0
|
|
Pop $R2
|
|
Pop $R1
|
|
Pop $R0
|
|
|
|
!verbose pop
|
|
!macroend
|
|
|
|
|
|
|
|
!define UnRegisterExtension `!insertmacro UnRegisterExtensionCall`
|
|
!define un.UnRegisterExtension `!insertmacro UnRegisterExtensionCall`
|
|
|
|
!macro UnRegisterExtension
|
|
!macroend
|
|
|
|
!macro un.UnRegisterExtension
|
|
!macroend
|
|
|
|
!macro UnRegisterExtension_
|
|
!verbose push
|
|
!verbose ${_FileAssociation_VERBOSE}
|
|
|
|
Exch $R1 ;desc
|
|
Exch
|
|
Exch $R0 ;ext
|
|
Exch
|
|
Push $0
|
|
Push $1
|
|
|
|
ReadRegStr $1 HKCR $R0 ""
|
|
StrCmp $1 $R1 0 NoOwn ; only do this if we own it
|
|
ReadRegStr $1 HKCR $R0 "backup_val"
|
|
StrCmp $1 "" 0 Restore ; if backup="" then delete the whole key
|
|
DeleteRegKey HKCR $R0
|
|
Goto NoOwn
|
|
|
|
Restore:
|
|
WriteRegStr HKCR $R0 "" $1
|
|
DeleteRegValue HKCR $R0 "backup_val"
|
|
DeleteRegKey HKCR $R1 ;Delete key with association name settings
|
|
|
|
NoOwn:
|
|
|
|
Pop $1
|
|
Pop $0
|
|
Pop $R1
|
|
Pop $R0
|
|
|
|
!verbose pop
|
|
!macroend
|
|
|
|
!endif # !FileAssociation_INCLUDED
|
|
|