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)
No edit summary
Line 71: Line 71:
FunctionEnd
FunctionEnd
</highlight-nsis>
</highlight-nsis>
-Stu
 
== Call "DirectoryLeave" on leaving the page ==
<highlight-nsis>
Page directory "" "" DirectoryLeave
</highlight-nsis>
-rmsh


[[Category:Disk, Path & File Functions]]
[[Category:Disk, Path & File Functions]]

Revision as of 17: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

Non-MUI

Page Directory "" "" "DirectoryLeave"

MUI

!define MUI_PAGE_CUSTOMFUNCTION_LEAVE "DirectoryLeave"
!insertmacro MUI_PAGE_DIRECTORY

DirectoryLeave Function

Function DirectoryLeave
 
  # Call the CheckForSpaces function.
  Push $INSTDIR
   Call CheckForSpaces
  Pop $R0
 
  # 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

Call "DirectoryLeave" on leaving the page

Page directory "" "" DirectoryLeave

-rmsh