mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-11 16:31:09 +00:00
adc618f6e7
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@17366 a592a061-630c-0410-9148-cb99ea01b6c8
535 lines
14 KiB
Plaintext
535 lines
14 KiB
Plaintext
# This script contains the following functions:
|
|
#
|
|
# - LaTeXCheck (check installed LaTeX-system), uses:
|
|
# StrPointer
|
|
# StrPoint
|
|
# RevStrPointer
|
|
# RevStrPoint
|
|
#
|
|
# - un.DelAppPathSub and UnAppPreSuff, (delete the folder ~\Documents and Settings\username\Application Data\LyX for all users), uses:
|
|
# un.GetParent
|
|
# un.GetUsers
|
|
# un.StrPoint
|
|
# StrPointer
|
|
# StrPoint
|
|
# UnAppPreSuff
|
|
#
|
|
# - CreateAppPathSub and AppPreSuff, (creates the folder ~\Documents and Settings\username\Application Data\LyX for all users), uses:
|
|
# GetParent
|
|
# GetUsers
|
|
# StrPointer
|
|
# StrPoint
|
|
# UnAppPreSuff
|
|
#
|
|
# - IsUserAdmin (checks if user is admin)
|
|
#
|
|
# - FileCheck (checks if a given file exists)
|
|
#
|
|
# - EditorCheck (check for installed editors)
|
|
#
|
|
#--------------------------
|
|
|
|
!macro StrPointer FindStr SearchStr Pointer
|
|
# searches for a string/character (SearchStr) in another string (FindStr)
|
|
# and returns the number of the character in the FindStr where the SearchStr was found (Pointer)
|
|
# if nothing was found or the search is impossible the Pointer is set to -1
|
|
|
|
StrLen $R2 ${SearchStr}
|
|
StrLen $R4 ${FindStr}
|
|
StrCpy $R5 0
|
|
${if} $R2 == 0
|
|
${orif} $R4 == 0
|
|
Goto NotFound
|
|
${endif}
|
|
IntCmp $R4 $R2 loopA NotFound
|
|
loopA:
|
|
StrCpy $R3 ${FindStr} $R2 $R5
|
|
StrCmp $R3 ${SearchStr} Found
|
|
IntOp $R5 $R5 + 1
|
|
IntCmp $R4 $R5 loopA NotFound
|
|
Goto loopA
|
|
Found:
|
|
StrCpy ${Pointer} $R5
|
|
Goto done
|
|
NotFound:
|
|
StrCpy ${Pointer} "-1"
|
|
done:
|
|
|
|
!macroend
|
|
|
|
#--------------------------------
|
|
|
|
Function StrPoint
|
|
!insertmacro StrPointer $String $Search $Pointer
|
|
FunctionEnd
|
|
|
|
#--------------------------------
|
|
|
|
!macro RevStrPointer FindStr SearchStr Pointer
|
|
# searches for a string/character (SearchStr) in another string (FindStr) in reverse order
|
|
# and returns the number of the character in the FindStr where the SearchStr was found (Pointer)
|
|
# if nothing was found or the search is impossible the Pointer is set to +1
|
|
|
|
StrLen $R2 ${SearchStr}
|
|
StrLen $R4 ${FindStr}
|
|
${if} $R2 == 0
|
|
${orif} $R4 == 0
|
|
Goto NotFound
|
|
${endif}
|
|
IntCmp $R4 $R2 loopA NotFound
|
|
StrCpy $R5 "-$R2"
|
|
loopA:
|
|
StrCpy $R3 ${FindStr} $R2 $R5
|
|
StrCmp $R3 ${SearchStr} Found
|
|
IntOp $R5 $R5 - 1
|
|
IntCmp "$R5" "-$R4" loopA NotFound
|
|
Goto loopA
|
|
Found:
|
|
StrCpy ${Pointer} $R5
|
|
Goto done
|
|
NotFound:
|
|
StrCpy ${Pointer} "+1"
|
|
done:
|
|
|
|
!macroend
|
|
|
|
#--------------------------------
|
|
|
|
Function RevStrPoint
|
|
!insertmacro RevStrPointer $String $Search $Pointer
|
|
FunctionEnd
|
|
|
|
#--------------------------------
|
|
|
|
!macro AppPreSuff AppPre AppSuff
|
|
# the APPDATA path has always the following structure:
|
|
# C:\Documents and Settings\username\Application Data
|
|
# this macro saves the "C:\Documents and Settings\" substring into the variable "AppPre"
|
|
# and the "Application Data" substring into the variable "AppSuff"
|
|
|
|
StrCpy $String "$APPDATA"
|
|
StrCpy $Search "\"
|
|
Call StrPoint ; search for the first "\"
|
|
IntOp $Pointer $Pointer + 1 ; jump after the "\"
|
|
StrCpy $String $String "" $Pointer ; cut off the part before the first "\"
|
|
StrCpy $0 $Pointer
|
|
Call StrPoint ; search for the second "\"
|
|
IntOp $0 $0 + $Pointer ; $0 is now the pointer to the second "\" in the APPDATA string
|
|
StrCpy ${AppPre} $APPDATA $0 ; save the part before the second "\"
|
|
IntOp $Pointer $Pointer + 1 ; jump after the "\"
|
|
StrCpy $String $String "" $Pointer ; cut off the part before the second "\"
|
|
Call StrPoint ; search for the third "\"
|
|
IntOp $Pointer $Pointer + 1 ; jump after the "\"
|
|
StrCpy ${AppSuff} $String "" $Pointer ; save the part after the third "\"
|
|
|
|
!macroend
|
|
|
|
#--------------------------------
|
|
|
|
Function GetParent
|
|
# deletes a subfolder of the APPDATA path for all users
|
|
# used by the function "un.getUsers"
|
|
|
|
Exch $R0
|
|
Push $R1
|
|
Push $R2
|
|
Push $R3
|
|
StrCpy $R1 0
|
|
StrLen $R2 $R0
|
|
loop:
|
|
IntOp $R1 $R1 + 1
|
|
IntCmp $R1 $R2 get 0 get
|
|
StrCpy $R3 $R0 1 -$R1
|
|
StrCmp $R3 "\" get
|
|
Goto loop
|
|
get:
|
|
StrCpy $R0 $R0 -$R1
|
|
Pop $R3
|
|
Pop $R2
|
|
Pop $R1
|
|
Exch $R0
|
|
|
|
FunctionEnd
|
|
|
|
#--------------------------------
|
|
|
|
Function GetUsers
|
|
# reads the subfolders of the "Documents and Settings" folder to get a list of the users
|
|
|
|
StrCpy $R3 ""
|
|
Push "$PROFILE"
|
|
Call GetParent
|
|
Pop $R2
|
|
StrCpy $R2 "$R2"
|
|
FindFirst $R0 $R1 "$R2\*"
|
|
StrCmp $R1 "" findend 0
|
|
findloop:
|
|
IfFileExists "$R2\$R1\*.*" 0 notDir
|
|
StrCmp $R1 "." notDir
|
|
StrCmp $R1 ".." notDir
|
|
StrCmp $R1 "All Users" notDir
|
|
StrCmp $R1 "Default User" notDir
|
|
StrCmp $R1 "All Users.WINNT" notDir
|
|
StrCmp $R1 "Default User.WINNT" notDir
|
|
StrCpy $R3 "$R3|$R1"
|
|
notDir:
|
|
FindNext $R0 $R1
|
|
StrCmp $R1 "" findend 0
|
|
Goto findloop
|
|
findend:
|
|
FindClose $R0
|
|
|
|
FunctionEnd
|
|
|
|
#--------------------------------
|
|
|
|
Function un.GetParent
|
|
# deletes a subfolder of the APPDATA path for all users
|
|
# used by the function "un.getUsers"
|
|
|
|
Exch $R0
|
|
Push $R1
|
|
Push $R2
|
|
Push $R3
|
|
StrCpy $R1 0
|
|
StrLen $R2 $R0
|
|
loop:
|
|
IntOp $R1 $R1 + 1
|
|
IntCmp $R1 $R2 get 0 get
|
|
StrCpy $R3 $R0 1 -$R1
|
|
StrCmp $R3 "\" get
|
|
Goto loop
|
|
get:
|
|
StrCpy $R0 $R0 -$R1
|
|
Pop $R3
|
|
Pop $R2
|
|
Pop $R1
|
|
Exch $R0
|
|
|
|
FunctionEnd
|
|
|
|
#--------------------------------
|
|
|
|
Function un.GetUsers
|
|
# reads the subfolders of the "Documents and Settings" folder to get a list of the users
|
|
|
|
StrCpy $R3 ""
|
|
Push "$PROFILE"
|
|
Call un.GetParent
|
|
Pop $R2
|
|
StrCpy $R2 "$R2"
|
|
FindFirst $R0 $R1 "$R2\*"
|
|
StrCmp $R1 "" findend 0
|
|
findloop:
|
|
IfFileExists "$R2\$R1\*.*" 0 notDir
|
|
StrCmp $R1 "." notDir
|
|
StrCmp $R1 ".." notDir
|
|
StrCmp $R1 "All Users" notDir
|
|
StrCmp $R1 "Default User" notDir
|
|
StrCmp $R1 "All Users.WINNT" notDir
|
|
StrCmp $R1 "Default User.WINNT" notDir
|
|
StrCpy $R3 "$R3|$R1"
|
|
notDir:
|
|
FindNext $R0 $R1
|
|
StrCmp $R1 "" findend 0
|
|
Goto findloop
|
|
findend:
|
|
FindClose $R0
|
|
|
|
FunctionEnd
|
|
|
|
#--------------------------------
|
|
|
|
Function un.StrPoint
|
|
!insertmacro StrPointer $String $Search $Pointer
|
|
FunctionEnd
|
|
|
|
#--------------------------------
|
|
|
|
!macro UnAppPreSuff AppPre AppSuff
|
|
# the APPDATA path has always the following structure:
|
|
# C:\Documents and Settings\username\Application Data
|
|
# this macro saves the "C:\Documents and Settings\" substring into the variable "AppPre"
|
|
# and the "Application Data" substring into the variable "AppSuff"
|
|
|
|
StrCpy $String "$APPDATA"
|
|
StrCpy $Search "\"
|
|
Call un.StrPoint ; search for the first "\"
|
|
IntOp $Pointer $Pointer + 1 ; jump after the "\"
|
|
StrCpy $String $String "" $Pointer ; cut off the part before the first "\"
|
|
StrCpy $0 $Pointer
|
|
Call un.StrPoint ; search for the second "\"
|
|
IntOp $0 $0 + $Pointer ; $0 is now the pointer to the second "\" in the APPDATA string
|
|
StrCpy ${AppPre} $APPDATA $0 ; save the part before the second "\"
|
|
IntOp $Pointer $Pointer + 1 ; jump after the "\"
|
|
StrCpy $String $String "" $Pointer ; cut off the part before the second "\"
|
|
Call un.StrPoint ; search for the third "\"
|
|
IntOp $Pointer $Pointer + 1 ; jump after the "\"
|
|
StrCpy ${AppSuff} $String "" $Pointer ; save the part after the third "\"
|
|
|
|
!macroend
|
|
|
|
#--------------------------------
|
|
|
|
Function un.DelAppPathSub
|
|
# deletes a subfolder of the APPDATA path for all users
|
|
|
|
# get list of all users
|
|
Push $R0
|
|
Push $R1
|
|
Push $R2
|
|
Push $R3
|
|
Call un.GetUsers
|
|
StrCpy $UserList $R3 "" 1 ; cut off the "|" at the end of the list
|
|
Pop $R3
|
|
Pop $R2
|
|
Pop $R1
|
|
Pop $R0
|
|
|
|
# the usernames in the list of all users is separated by "|"
|
|
loop:
|
|
StrCpy $String "$UserList"
|
|
StrCpy $Search "|"
|
|
Call un.StrPoint ; search for the "|"
|
|
StrCmp $Pointer "-1" ready
|
|
StrCpy $0 $UserList $Pointer ; $0 contains now the username
|
|
IntOp $Pointer $Pointer + 1 ; jump after the "|"
|
|
StrCpy $UserList $UserList "" $Pointer ; cut off the first username in the list
|
|
# generate the string for the current user
|
|
# AppPre and AppSuff are generated in the macro "AppPreSuff"
|
|
StrCpy $AppPath "$AppPre\$0\$AppSuff\${PRODUCT_SUBFOLDER}"
|
|
RMDir /r $AppPath ; delete the folder
|
|
Goto loop
|
|
ready:
|
|
StrCpy $0 $UserList
|
|
StrCpy $AppPath "$AppPre\$0\$AppSuff\${PRODUCT_SUBFOLDER}"
|
|
RMDir /r $AppPath ; delete the folder
|
|
|
|
FunctionEnd
|
|
|
|
#--------------------------------
|
|
|
|
Function CreateAppPathSub
|
|
# creates a subfolder of the APPDATA path for all users
|
|
|
|
# get folder names
|
|
!insertmacro AppPreSuff $AppPre $AppSuff
|
|
|
|
# get list of all users
|
|
Push $R0
|
|
Push $R1
|
|
Push $R2
|
|
Push $R3
|
|
Call GetUsers
|
|
StrCpy $UserList $R3 "" 1 ; cut off the "|" at the end of the list
|
|
Pop $R3
|
|
Pop $R2
|
|
Pop $R1
|
|
Pop $R0
|
|
|
|
# the usernames in the list of all users is separated by "|"
|
|
loop:
|
|
StrCpy $String "$UserList"
|
|
StrCpy $Search "|"
|
|
Call StrPoint ; search for the "|"
|
|
StrCmp $Pointer "-1" ready
|
|
StrCpy $0 $UserList $Pointer ; $0 contains now the username
|
|
IntOp $Pointer $Pointer + 1 ; jump after the "|"
|
|
StrCpy $UserList $UserList "" $Pointer ; cut off the first username in the list
|
|
# generate the string for the current user
|
|
# AppPre and AppSuff are generated in the macro "AppPreSuff"
|
|
StrCpy $AppPath "$AppPre\$0\$AppSuff\${PRODUCT_SUBFOLDER}"
|
|
CreateDirectory $AppPath ; create the folder
|
|
CopyFiles "$INSTDIR\Resources\session" "$AppPath"
|
|
Goto loop
|
|
ready:
|
|
StrCpy $0 $UserList
|
|
StrCpy $AppPath "$AppPre\$0\$AppSuff\${PRODUCT_SUBFOLDER}"
|
|
CreateDirectory $AppPath ; create the folder
|
|
CopyFiles "$INSTDIR\Resources\session" "$AppPath"
|
|
Delete "$INSTDIR\Resources\session" ; delete the session file in the INSTDIR because it is unneeded there
|
|
|
|
FunctionEnd
|
|
|
|
#--------------------------------
|
|
|
|
!macro IsUserAdmin Result Name
|
|
|
|
ClearErrors
|
|
UserInfo::GetName
|
|
IfErrors Win9x
|
|
Pop $0
|
|
StrCpy ${Name} $0
|
|
UserInfo::GetAccountType
|
|
Pop $1
|
|
${if} $1 == "Admin"
|
|
StrCpy ${Result} "yes"
|
|
${else}
|
|
StrCpy ${Result} "no"
|
|
${endif}
|
|
Goto done
|
|
|
|
Win9x:
|
|
StrCpy ${Result} "yes"
|
|
done:
|
|
|
|
!macroend
|
|
|
|
#--------------------------------
|
|
|
|
!macro FileCheck Result FileName FilePath
|
|
# checks if a file exists, returns "True" or "False"
|
|
|
|
Push $0
|
|
Push $1
|
|
StrCpy $0 ""
|
|
StrCpy $1 ""
|
|
FileOpen $0 "${Filepath}\${FileName}" r
|
|
${if} $0 = ""
|
|
StrCpy $1 "False"
|
|
${Else}
|
|
StrCpy $1 "True"
|
|
${endif}
|
|
FileClose $0
|
|
StrCpy ${Result} $1
|
|
Pop $1
|
|
Pop $0
|
|
|
|
!macroend
|
|
|
|
#------------------------------------------
|
|
|
|
Function LaTeXCheck
|
|
# searches the string "$Search" in the string "$String" and extracts the path around it
|
|
# the extracted path is checked if the file "latex.exe" is in it
|
|
|
|
StartCheck:
|
|
StrLen $3 $String
|
|
Call StrPoint
|
|
${if} $Pointer == "-1" ; if nothing was found
|
|
StrCpy $LatexPath ""
|
|
Return
|
|
${endif}
|
|
IntOp $3 $3 - $Pointer
|
|
StrCpy $4 $String $3 "-$3" ; $4 is now the part behind the $Search string
|
|
StrCpy $String $String $Pointer ; $String is now the part before the $Search string
|
|
StrCpy $Search ":" ; search for the ":" after the first previous drive letter
|
|
Call RevStrPoint
|
|
IntOp $Pointer $Pointer - 1 ; jump before the ":" to the drive letter
|
|
StrCpy $Pointer $Pointer "" 1 ; cut of the "-" sign
|
|
StrCpy $LatexPath $String $Pointer "-$Pointer"
|
|
StrCpy $String $4
|
|
StrCpy $Search ";" ; search for the following ";" that separates the different paths
|
|
Call StrPoint
|
|
${if} $Pointer != "-1" ; if something was found
|
|
StrCpy $String $String $Pointer
|
|
${endif}
|
|
StrCpy $LatexPath "$LatexPath$String"
|
|
# check if the latex.exe exists in the $LatexPath folder
|
|
!insertmacro FileCheck $5 "latex.exe" "$LatexPath"
|
|
${if} $5 == "False" ; delete the entry with the wrong path to the latex.exe and try again
|
|
StrCpy $LatexPath ""
|
|
StrLen $3 $String
|
|
StrCpy $String $4 "" $3
|
|
${if} $2 == "TeXLive"
|
|
StrCpy $Search "TeXLive"
|
|
${else}
|
|
StrCpy $Search "miktex"
|
|
${endif}
|
|
Goto StartCheck
|
|
${endif}
|
|
|
|
FunctionEnd
|
|
|
|
#------------------------------------------
|
|
|
|
Function EditorCheck
|
|
|
|
# test if an editor with syntax-highlighting for LaTeX-files is installed
|
|
# (check for jEdit, PSPad, WinShell, ConTEXT, Crimson Editor, Vim, TeXnicCenter, LaTeXEditor, WinEdt, LEd, WinTeX)
|
|
StrCpy $EditorPath ""
|
|
StrCpy $0 ""
|
|
# check for jEdit
|
|
ReadRegStr $EditorPath HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\jEdit_is1" "InstallLocation"
|
|
${if} $EditorPath != ""
|
|
StrCpy $EditorPath $EditorPath -1 ; remove "\" from the end of the string
|
|
${endif}
|
|
# check for PSPad
|
|
StrCpy $0 ""
|
|
ReadRegStr $0 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\PSPad editor_is1" "InstallLocation"
|
|
${if} $0 != ""
|
|
StrCpy $0 $0 -1
|
|
StrCpy $EditorPath "$EditorPath;$0"
|
|
${endif}
|
|
# check for WinShell
|
|
StrCpy $0 ""
|
|
ReadRegStr $0 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\WinShell_is1" "InstallLocation"
|
|
${if} $0 != ""
|
|
StrCpy $0 $0 -1
|
|
StrCpy $EditorPath "$EditorPath;$0"
|
|
${endif}
|
|
# check for ConTEXT
|
|
StrCpy $0 ""
|
|
ReadRegStr $0 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\ConTEXTEditor_is1" "InstallLocation"
|
|
${if} $0 != ""
|
|
StrCpy $0 $0 -1
|
|
StrCpy $EditorPath "$EditorPath;$0"
|
|
${endif}
|
|
# check for Crimson Editor
|
|
StrCpy $0 ""
|
|
ReadRegStr $0 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Crimson Editor" "UninstallString"
|
|
${if} $0 != ""
|
|
StrCpy $0 $0 -14 ; remove "\uninstall.exe"
|
|
StrCpy $EditorPath "$EditorPath;$0"
|
|
${endif}
|
|
# check for Vim 6.x
|
|
StrCpy $0 ""
|
|
ReadRegStr $0 HKLM "Software\Classes\Applications\gvim.exe\shell\edit\command" ""
|
|
${if} $0 != ""
|
|
StrCpy $0 $0 -13 ; remove "gvim.exe "%1""
|
|
StrCpy $EditorPath "$EditorPath;$0"
|
|
${endif}
|
|
# check for Vim 7.0
|
|
StrCpy $0 ""
|
|
ReadRegStr $0 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Vim 7.0" "UninstallString"
|
|
${if} $0 != ""
|
|
StrCpy $0 $0 -18 ; remove "\uninstall-gui.exe"
|
|
StrCpy $EditorPath "$EditorPath;$0"
|
|
${endif}
|
|
# check for TeXnicCenter
|
|
StrCpy $0 ""
|
|
ReadRegStr $0 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\TeXnicCenter_is1" "Inno Setup: App Path"
|
|
${if} $0 != ""
|
|
StrCpy $EditorPath "$EditorPath;$0"
|
|
${endif}
|
|
# check for LaTeXEditor
|
|
StrCpy $0 ""
|
|
ReadRegStr $0 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\LaTeX Editor" "InstallLocation"
|
|
${if} $0 != ""
|
|
StrCpy $EditorPath "$EditorPath;$0"
|
|
${endif}
|
|
# check for WinEdt
|
|
StrCpy $0 ""
|
|
ReadRegStr $0 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\WinEdt_is1" "InstallLocation"
|
|
${if} $0 != ""
|
|
StrCpy $0 $0 -1
|
|
StrCpy $EditorPath "$EditorPath;$0"
|
|
${endif}
|
|
# check for LEd
|
|
StrCpy $0 ""
|
|
ReadRegStr $0 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\LEd_is1" "InstallLocation"
|
|
${if} $0 != ""
|
|
StrCpy $0 $0 -1
|
|
StrCpy $EditorPath "$EditorPath;$0"
|
|
${endif}
|
|
# check for WinTeX
|
|
StrCpy $0 ""
|
|
ReadRegStr $0 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\WinTeX XP" "DisplayIcon"
|
|
${if} $0 != ""
|
|
StrCpy $0 $0 -11 ; remove "\wintex.exe"
|
|
StrCpy $EditorPath "$EditorPath;$0"
|
|
${endif}
|
|
|
|
FunctionEnd
|
|
|