BannerTrimPath: Difference between revisions

From NSIS Wiki
Jump to navigationJump to search
Line 42: Line 42:




Example:
Example:<highlight-nsis>
<highlight-nsis>
Section
Section
${BannerTrimPath} "C:\Server\Documents\Terminal\license.htm" "35A" $R0
${BannerTrimPath} "C:\Server\Documents\Terminal\license.htm" "35A" $R0

Revision as of 12:04, 4 July 2005

Author: Instructor (talk, contrib)


Links

Latest version of headers "nsh.zip"
http://forums.winamp.com/showthread.php?s=&threadid=203228&goto=lastpost

If a function is used without header, put the function code in your script before calling it.

The Function Description

____________________________________________________________________________
 
                            BannerTrimPath
____________________________________________________________________________
 
 
Trim string path for banner.
 
 
Syntax:
${BannerTrimPath} "[PathString]" "[Option]" $var
 
"[PathString]"    ;
                  ;
"[Option]"        ; [Length][A|B|C]
                  ;
                  ; Length  -Maximum string length
                  ;   A     -Trim center path (default)
                  ;           (C:\root\...\third path) 
                  ;           If A mode not possible Then will be used B mode
                  ;           If B mode not possible Then will be used C mode
                  ;   B     -Trim right path
                  ;           (C:\root\second path\...)
                  ;           If B mode not possible Then will be used C mode
                  ;   C     -Trim right string
                  ;           (C:\root\second path\third p...)
                  ;
$var              ; Result:  Trimmed path


Example:

Section
	${BannerTrimPath} "C:\Server\Documents\Terminal\license.htm" "35A" $R0
	;$R0=C:\Server\...\Terminal\licensing.htm
SectionEnd


Example (Banner plugin):

!include "WinMessages.nsh"
!include "FileFunc.nsh"
!insertmacro Locate
 
Section
	Banner::show /NOUNLOAD "Starting..."
	Banner::getWindow /NOUNLOAD
	Pop $R1
	${Locate} "$WINDIR" "/L=F /M=*.* /B=1" "LocateCallback"
	Banner::destroy
SectionEnd
 
Function LocateCallback
	StrCmp $R0 $R8 code
	StrCpy $R0 $R8
	${BannerTrimPath} "$R8" "38B" $R8
	GetDlgItem $1 $R1 1030
	SendMessage $1 ${WM_SETTEXT} 0 "STR:$R8"
 
	code:
	StrCmp $R9 '' end
	;...
 
	end:
	Push $0
FunctionEnd


Example (nxs plugin):

!include "FileFunc.nsh"
!insertmacro Locate
 
Section
	nxs::Show /NOUNLOAD `$(^Name) Setup`\
	  /top `Setup searching something$\nPlease wait$\nIf you can...`\
	  /h 1 /can 1 /end
	${Locate} "$WINDIR" "/L=F /M=*.* /B=1" "LocateCallback"
	nxs::Destroy
SectionEnd
 
Function LocateCallback
	StrCmp $R0 $R8 abortcheck
	StrCpy $R0 $R8
	${BannerTrimPath} "$R8" "55A" $R8
	nxs::Update /NOUNLOAD /sub "$R8" /pos 78 /end
 
	abortcheck:
	nxs::HasUserAborted /NOUNLOAD
	Pop $0
	StrCmp $0 1 0 +2
	StrCpy $0 StopLocate
 
	StrCmp $R9 '' end
	;...
 
	end:
	Push $0
FunctionEnd

The Function Code

Function BannerTrimPath
	!define BannerTrimPath `!insertmacro BannerTrimPathCall`
 
	!macro BannerTrimPathCall _PATH _LENGHT _RESULT
		Push `${_PATH}`
		Push `${_LENGHT}`
		Call BannerTrimPath
		Pop ${_RESULT}
	!macroend
 
	Exch $1
	Exch
	Exch $0
	Exch
	Push $2
	Push $3
	Push $4
 
	StrCpy $3 $1 1 -1
	IntOp $1 $1 + 0
	StrLen $2 $0
	IntCmp $2 $1 end end
	IntOp $1 $1 - 3
	IntCmp $1 0 empty empty
	StrCmp $3 'A' A-trim
	StrCmp $3 'B' B-trim
	StrCmp $3 'C' C-trim
 
	A-trim:
	StrCpy $3 $0 1 1
	StrCpy $2 0
	StrCmp $3 ':' 0 +2
	IntOp $2 $2 + 2
 
	loopleft:
	IntOp $2 $2 + 1
	StrCpy $3 $0 1 $2
	StrCmp $2 $1 C-trim
	StrCmp $3 '\' 0 loopleft
	StrCpy $3 $0 $2
	IntOp $2 $2 - $1
	IntCmp $2 0 B-trim 0 B-trim
 
	loopright:
	IntOp $2 $2 + 1
	StrCpy $4 $0 1 $2
	StrCmp $2 0 B-trim
	StrCmp $4 '\' 0 loopright
	StrCpy $4 $0 '' $2
	StrCpy $0 '$3\...$4'
	goto end
 
	B-trim:
	StrCpy $2 $1
	IntOp $2 $2 - 1
	StrCmp $2 -1 C-trim
	StrCpy $3 $0 1 $2
	StrCmp $3 '\' 0 -3
	StrCpy $0 $0 $2
	StrCpy $0 '$0\...'
	goto end
 
	C-trim:
	StrCpy $0 $0 $1
	StrCpy $0 '$0...'
	goto end
 
	empty:
	StrCpy $0 ''
 
	end:
	Pop $4
	Pop $3
	Pop $2
	Pop $1
	Exch $0
FunctionEnd