Check for spaces in a directory path: Difference between revisions
From NSIS Wiki
Jump to navigationJump to search
(→The Function: update: smaller and thus faster code) |
m (Reverted edits by 221.224.108.85 to last version by 88.104.156.235) |
||
(6 intermediate revisions by 3 users not shown) | |||
Line 7: | Line 7: | ||
== Usage == | == Usage == | ||
The CheckForSpaces function should be called in the Leave function of the Directory page. Below are the two ways to implement this (through Classic UI and Modern UI). Both implement a function called "DirectoryLeave" as the Directory pages' Leave function. | |||
=== | === MUI === | ||
Use this if you are using Modern UI (<i>!include MUI.nsh</i>). | |||
<highlight-nsis> | <highlight-nsis> | ||
!define MUI_PAGE_CUSTOMFUNCTION_LEAVE "DirectoryLeave" | |||
!insertmacro MUI_PAGE_DIRECTORY | |||
</highlight-nsis> | </highlight-nsis> | ||
=== MUI === | === Non-MUI === | ||
Use this if you aren't using Modern UI. | |||
<highlight-nsis> | <highlight-nsis> | ||
Page Directory "" "" "DirectoryLeave" | |||
</highlight-nsis> | </highlight-nsis> | ||
=== DirectoryLeave Function === | === DirectoryLeave Function === | ||
This gives an example of what your "DirectoryLeave" function should look like. | |||
<highlight-nsis> | <highlight-nsis> | ||
Function DirectoryLeave | Function DirectoryLeave | ||
# Call the CheckForSpaces function. | # Call the CheckForSpaces function. | ||
Push $INSTDIR | Push $INSTDIR # Input string (install path). | ||
Call CheckForSpaces | Call CheckForSpaces | ||
Pop $R0 | Pop $R0 # The function returns the number of spaces found in the input string. | ||
# Check if any spaces exist in $INSTDIR. | # Check if any spaces exist in $INSTDIR. | ||
Line 71: | Line 75: | ||
FunctionEnd | FunctionEnd | ||
</highlight-nsis> | </highlight-nsis> | ||
-Stu | -Stu | ||
[[Category:Disk, Path & File Functions]] | [[Category:Disk, Path & File Functions]] |
Latest revision as of 18:17, 26 December 2008
Author: Afrow UK (talk, contrib) |
Description
This script will check a string (or directory path) for spaces and returns the number of spaces found in the string.
Updated 12th January 2005
Usage
The CheckForSpaces function should be called in the Leave function of the Directory page. Below are the two ways to implement this (through Classic UI and Modern UI). Both implement a function called "DirectoryLeave" as the Directory pages' Leave function.
MUI
Use this if you are using Modern UI (!include MUI.nsh).
!define MUI_PAGE_CUSTOMFUNCTION_LEAVE "DirectoryLeave" !insertmacro MUI_PAGE_DIRECTORY
Non-MUI
Use this if you aren't using Modern UI.
Page Directory "" "" "DirectoryLeave"
DirectoryLeave Function
This gives an example of what your "DirectoryLeave" function should look like.
Function DirectoryLeave # Call the CheckForSpaces function. Push $INSTDIR # Input string (install path). Call CheckForSpaces Pop $R0 # The function returns the number of spaces found in the input string. # Check if any spaces exist in $INSTDIR. StrCmp $R0 0 NoSpaces # Plural if more than 1 space in $INSTDIR. StrCmp $R0 1 0 +3 StrCpy $R1 "" Goto +2 StrCpy $R1 "s" # Show message box then take the user back to the Directory page. MessageBox MB_OK|MB_ICONEXCLAMATION "Error: The Installaton directory \ has $R0 space$R1.$\nPlease remove the space$R1." Abort NoSpaces: FunctionEnd
The Function
Function CheckForSpaces Exch $R0 Push $R1 Push $R2 Push $R3 StrCpy $R1 -1 StrCpy $R3 $R0 StrCpy $R0 0 loop: StrCpy $R2 $R3 1 $R1 IntOp $R1 $R1 - 1 StrCmp $R2 "" done StrCmp $R2 " " 0 loop IntOp $R0 $R0 + 1 Goto loop done: Pop $R3 Pop $R2 Pop $R1 Exch $R0 FunctionEnd
-Stu