Code archives/File Utilities/Commandline Splitting
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
This function Splits the Space separated Commandline parameters into the CMDLine type. Usefull for getting the Filenames dropped from the explorer to the .exe file. The Space chars between " " are ignored, so the whole parameter is passed to the Type. With the Return value, you can check if any parameters were passed, or how many are in. | |||||
; Version: 1.0 ; Author: Dan (at www.blitzbasic.com forum) ; Email: - ; Copyright: PD ; Description: Returns space separated Commandline parameters ; Parameter in Quotes ".." is passed as is ; Read the description from the CommandLine_Init function ;==================================================================== ;Put type declaration at the start: Type CMDLine Field arg$ End Type ;Demo: uncomment to test, set the commandline in the IDE's options ;BB ide Menu: Program/Program Command Line ... ;c:\bb3d\test.bmp /hlp "c:\bb 3d\file name.txt" c:\windows\win.com /PNG /type bla bla .jpg c:\dd\1.jpg/ lala ;Graphics 1650,1050,32,2 ; ;A=Commandline_Init() ;Must be called first, to split the commandline into parts, it returns a number of Commands. ;; ;Print "Commandline Captured: "+a ;For x=1 To a ; Print x+" "+Commandline_Read$(x) ; Delay 100 ; needed only for the demo display slowdown ;Next ;WaitKey ;/Demo Function Commandline_Read$(nr) ; Returns the commandline at index nr If nr>0 this.CMDLine = First CMDLine For this.CMDLine = Each CMDLine x=x+1 If nr=x Then Return this\arg$ Next End If Return False End Function Function Commandline_Init() ;This function returns the number of commandline, added to the CMDline type ;To use this function in your program you have to declare the rules for passing the commandline to this app ; ;This function works as : ; Every commandline parameter will be split at the 1st space position ; example:/hlp c:\files\01.bmp ; will return 2 as parameter value and ;/hlp ;c:\files\01.bmp ; ;Space characters are stripped from each parameter, but not if they were enclosed in the Double Quote " ; singlequote ' and Doublesinglequote '' are ignored ; if the filename has space chars in it eg: My Birthdayphoto.jpg the file passed to this program ; from the commandline shall be like this: "My Birthdaysphoto.jpg" (enclosed in quotes) ; This is automaticaly done in windows (8.1) when dropping files onto the .exe ; If the file/pathname contains a space char " " in it, the whole drive:path/filename.ext shall be enclosed in quotes ; eg. "c:\my files\my file.jpe g" ; This function does not check if the file exists, because the parameter can be nonfile, so it is on your part to do this ; This function returns an value of maximum parameters added, so you can check if anything were added aswell ; and access the single items within the limits of this value ; Call this function like: A=Commandline_Init() qa$=CommandLine() CMD_start=1 CMD_Quote=0 CMD_index=0 x=0 ca$="" a$="" If Len(qa$)=0 Goto CMDreadEnd .CMDread x=x+1 ca$=ca$+Mid$(qa$,x,1) ; Print LSet ("x="+x,6)+":"+Right$(Hex$(Asc(ca$)),2)+" = "+ca$+" --"+CMD_Start+" ->"+CMD_Quote ; Uncomment for debug a$=Trim(Mid$(qa$,CMD_Start,X-CMD_Start)) If ca$=" " And CMD_Quote=0 If CMD_Start=1 If a$>"" CMD_index=CMD_AddType(CMD_Index,a$) EndIf CMD_start=x Else A$=Trim(Mid$(qa$,CMD_Start+1,X-CMD_Start)) If A$>"" CMD_index=CMD_AddType(CMD_Index,a$) EndIf CMD_Start=x EndIf EndIf If ca$=Chr$(34) If x-CMD_Start>0 And CMD_Quote=0 If a$>"" CMD_index=CMD_AddType(CMD_Index,a$) EndIf CMD_Start=x EndIf If CMD_Quote=0 CMD_Start=x+1 CMD_Quote=1 Else If a$>"" CMD_index=CMD_AddType(CMD_Index,a$) EndIf CMD_start=x+1 CMD_Quote=0 EndIf EndIf If x>Len(qa$) If A$>"" CMD_index=CMD_AddType(CMD_Index,a$) EndIf Goto CMDreadEnd EndIf ca$="" Goto CMDread .CMDreadEnd ;Print CMD_Index ;Uncomment for debug Return CMD_index End Function Function CMD_AddType(index,A$) ;Used to shorten the code from the Commandline_Init() function CMD_index=index+1 This.Cmdline = New CMDLine this\arg$=A$ Return CMD_index End Function |
Comments
None.
Code Archives Forum