|
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.
|