Check for spaces in a directory path: Difference between revisions

From NSIS Wiki
Jump to navigationJump to search
No edit summary
Line 7: Line 7:


== Usage ==
== Usage ==
The 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.


=== Non-MUI ===
=== Non-MUI ===
Line 20: Line 21:


=== 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.

Revision as of 18:09, 15 January 2006

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 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.

Non-MUI

Page Directory "" "" "DirectoryLeave"

MUI

!define MUI_PAGE_CUSTOMFUNCTION_LEAVE "DirectoryLeave"
!insertmacro MUI_PAGE_DIRECTORY

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