Declare Function GetCommandLineA Library "kernel32" Returns long As number; Declare Function lstrcpyA Library "kernel32" (string As string, long Value As number) Returns long As number; REM This is ported from http://www.thecodeproject.com/csharp/command_line.asp ; REM ; REM Valid parameters forms: REM {-,/,--}param{ ,=,:}((",')value(",')) REM Examples: REM -param1 value1 --param2 /param3:"Test-:-work" REM /param4=happy -param5 '--=nice=--'; REM It currently doesn't get things like -I7892 correct, the lack of spaces are the problem ; Function ParseCommandLineArgs(&arrArgs As array of string) Returns JavaObject; Local JavaObject &jPattern = GetJavaClass("java.util.regex.Pattern"); Local JavaObject &jRA = GetJavaClass("java.lang.reflect.Array"); Local JavaObject &jParms = CreateJavaObject("java.util.HashMap"); Local string &sSplitPattern = "^-{1,2}|^/|=|:"; Local JavaObject &jSplitter = &jPattern.compile(&sSplitPattern, &jPattern.CASE_INSENSITIVE); Local string &sRemoverPattern = "^['""]?(.*?)['""]?$"; Local JavaObject &jRemover = &jPattern.compile(&sRemoverPattern, &jPattern.CASE_INSENSITIVE); Local string &sParameter = ""; Local integer &I; For &I = 1 To &arrArgs.Len REM Look for new parameters (-,/ or --) and a possible enclosed value (=,:) ; REM *** Ugh, PeopleTools screws up the method lookup here, so we have to repeatedly compile the regex *** ; REM Local JavaObject &jParts = &jSplitter.split(&arrArgs [&I], 3); Local JavaObject &jParts = CreateJavaObject("java.lang.String", &arrArgs [&I]).split(&sSplitPattern, 3); Evaluate &jRA.getLength(&jParts) REM Found a value (for the last parameter found (space separator)); When = 1 If &sParameter <> "" Then If Not &jParms.containsKey(&sParameter) Then Local string &sParts0 = &jRA.get(&jParts, 0).toString(); &sParts0 = &jRemover.matcher(CreateJavaObject("java.lang.String", &sParts0)).replaceAll("$1"); &jParms.put(&sParameter, &sParts0); End-If; &sParameter = ""; End-If; Break; REM Found just a parameter; When = 2 REM The last parameter is still waiting. With no value, set it to true. ; If &sParameter <> "" Then If Not &jParms.containsKey(&sParameter) Then &jParms.put(&sParameter, True); End-If; End-If; &sParameter = &jRA.get(&jParts, 1).toString(); Break; REM Parameter with enclosed value ; When = 3 REM The last parameter is still waiting. With no value, set it to true. ; If &sParameter <> "" Then If Not &jParms.containsKey(&sParameter) Then &jParms.put(&sParameter, True); End-If; End-If; &sParameter = &jRA.get(&jParts, 1).toString(); REM Remove possible enclosing characters (",') ; If Not &jParms.containsKey(&sParameter) Then Local string &sParts2 = &jRA.get(&jParts, 2).toString(); &jParms.put(&sParameter, &jRemover.matcher(CreateJavaObject("java.lang.String", &sParts2)).replaceAll("$1")); End-If; &sParameter = ""; Break; End-Evaluate; End-For; REM In case a parameter is still waiting ; If &sParameter <> "" Then If Not &jParms.containsKey(&sParameter) Then &jParms.put(&sParameter, True); End-If; End-If; Return &jParms; End-Function; REM Note that this currently does not deal with strings with embedded spaces in them ; Function ParseCommandLine(&sCMDLine As string) Returns JavaObject; Local array of string &arrArgs = Split(&sCMDLine, " "); REM The first parmeter is always the .exe itself (on Windows, but what about other platforms?) ; &arrArgs.Shift(); Return ParseCommandLineArgs(&arrArgs); End-Function; Function ParseWindowsCommandLine() Returns JavaObject Local string &sOSName = GetJavaClass("java.lang.System").getProperty("os.name"); If Find("Windows", &sOSName) = 0 Then Error ("This function can only be called on Windows. This machine is currently running " | &sOSName); End-If; Local string &sCMDLine = Rept(" ", 1024); Local number &nResults = lstrcpyA(&sCMDLine, GetCommandLineA()); Return ParseCommandLine(&sCMDLine); End-Function; Local String &sProject; Local JavaObject &jParms = ParseWindowsCommandLine(); Local JavaObject &jProject = &jParms.get("project"); If &jProject <> Null Then &sProject = &jProject.toString(); Else rem Here's where you would prompt for the project name; End-If;