From: <cr...@us...> - 2009-02-08 13:20:44
|
Revision: 5007 http://jnode.svn.sourceforge.net/jnode/?rev=5007&view=rev Author: crawley Date: 2009-02-08 13:20:40 +0000 (Sun, 08 Feb 2009) Log Message: ----------- Improvements to 'set' built-in. Now understands options -x, +x, -f, +f, -- and setting of arguments. Modified Paths: -------------- trunk/shell/src/shell/org/jnode/shell/bjorne/SetBuiltin.java trunk/shell/src/test/org/jnode/test/shell/bjorne/bjorne-shell-tests.xml Modified: trunk/shell/src/shell/org/jnode/shell/bjorne/SetBuiltin.java =================================================================== --- trunk/shell/src/shell/org/jnode/shell/bjorne/SetBuiltin.java 2009-02-08 08:01:48 UTC (rev 5006) +++ trunk/shell/src/shell/org/jnode/shell/bjorne/SetBuiltin.java 2009-02-08 13:20:40 UTC (rev 5007) @@ -20,23 +20,54 @@ package org.jnode.shell.bjorne; -import java.util.Iterator; +import java.util.ArrayList; +import java.util.List; import org.jnode.shell.CommandLine; import org.jnode.shell.ShellException; +import org.jnode.shell.ShellSyntaxException; final class SetBuiltin extends BjorneBuiltin { + @SuppressWarnings("deprecation") public int invoke(CommandLine command, BjorneInterpreter interpreter, BjorneContext context) throws ShellException { - Iterator<String> it = command.iterator(); - if (it.hasNext()) { - String flags = it.next(); - // FIXME ... lots more to implement ... - if (flags.equals("-x")) { - context.getParent().setEchoExpansions(true); + context = context.getParent(); + boolean optsDone = false; + boolean forceNewArgs = false; + List<String> newArgs = new ArrayList<String>(); + String[] args = command.getArguments(); + for (int i = 0; i < args.length; i++) { + String arg = args[i]; + if (optsDone) { + newArgs.add(arg); + } else if (arg.length() == 0 || + (arg.charAt(0) != '-' && arg.charAt(0) != '+')) { + optsDone = true; + newArgs.add(arg); + } else if (arg.equals("--")) { + optsDone = true; + forceNewArgs = true; + } else { + boolean set = arg.charAt(0) == '-'; + for (int j = 1; j < arg.length(); j++) { + switch (arg.charAt(j)) { + case 'x': + context.setEchoExpansions(set); + break; + case 'f': + context.setGlobbing(!set); + break; + default: + throw new ShellSyntaxException( + "Unknown set option: " + (set ? "-" : "+") + arg.charAt(j)); + } + } } } + if (forceNewArgs || newArgs.size() > 0) { + context.setArgs(newArgs.toArray(new String[newArgs.size()])); + } return 0; } } Modified: trunk/shell/src/test/org/jnode/test/shell/bjorne/bjorne-shell-tests.xml =================================================================== --- trunk/shell/src/test/org/jnode/test/shell/bjorne/bjorne-shell-tests.xml 2009-02-08 08:01:48 UTC (rev 5006) +++ trunk/shell/src/test/org/jnode/test/shell/bjorne/bjorne-shell-tests.xml 2009-02-08 13:20:40 UTC (rev 5007) @@ -491,6 +491,24 @@ arg1 arg2 </output> </testSpec> + <testSpec title="set arguments" command="test" runMode="AS_SCRIPT" rc="0"> + <script>#!bjorne + echo $* + set newarg1 newarg2 + echo $* + set -- newarg1 newarg2 + echo $* + set -- + echo $* + </script> + <arg>arg1</arg> + <arg>arg2</arg> + <output>arg1 arg2 +newarg1 newarg2 +newarg1 newarg2 + +</output> + </testSpec> <testSpec title="quote handling" command="test" runMode="AS_SCRIPT" rc="0"> <script>#!bjorne set -x This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |