public inbox for frysk-cvs@sourceware.org
help / color / mirror / Atom feed
From: cagney@sourceware.org
To: frysk-cvs@sourceware.org
Subject: [SCM]  master: Alias commands extend ParameterizedCommand; test.
Date: Thu, 08 Nov 2007 18:21:00 -0000	[thread overview]
Message-ID: <20071108182144.31788.qmail@sourceware.org> (raw)

The branch, master has been updated
       via  b5953ea2cdffa37921ca9f21e01c3c5c0e712261 (commit)
      from  c5892213ca4bee5d89b7c02ce0ba9ab19d3bb8ed (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email.

- Log -----------------------------------------------------------------
commit b5953ea2cdffa37921ca9f21e01c3c5c0e712261
Author: Andrew Cagney <cagney@redhat.com>
Date:   Thu Nov 8 13:20:11 2007 -0500

    Alias commands extend ParameterizedCommand; test.
    
    frysk-core/frysk/hpd/ChangeLog
    2007-11-08  Andrew Cagney  <cagney@redhat.com>
    
    	* AliasCommands.java: New.
    	* AliasCommand.java: Delete.
    	* UnaliasCommand.java: Delete.
    	* ParameterizedCommand.java: Fix off-by-one error.
    	* AliasCommand.java: Extend ParameterizedCommand.
    	* CLI.java: Update.
    	* TopLevelCommand.java: Update.

-----------------------------------------------------------------------

Summary of changes:
 frysk-core/frysk/hpd/AliasCommand.java         |   82 ------------
 frysk-core/frysk/hpd/AliasCommands.java        |  158 ++++++++++++++++++++++++
 frysk-core/frysk/hpd/CLI.java                  |    4 +-
 frysk-core/frysk/hpd/ChangeLog                 |   10 ++
 frysk-core/frysk/hpd/ParameterizedCommand.java |    2 +-
 frysk-core/frysk/hpd/TopLevelCommand.java      |    4 +-
 frysk-core/frysk/hpd/UnaliasCommand.java       |   72 -----------
 7 files changed, 173 insertions(+), 159 deletions(-)
 delete mode 100644 frysk-core/frysk/hpd/AliasCommand.java
 create mode 100644 frysk-core/frysk/hpd/AliasCommands.java
 delete mode 100644 frysk-core/frysk/hpd/UnaliasCommand.java

First 500 lines of diff:
diff --git a/frysk-core/frysk/hpd/AliasCommand.java b/frysk-core/frysk/hpd/AliasCommand.java
deleted file mode 100644
index 43b0ddf..0000000
--- a/frysk-core/frysk/hpd/AliasCommand.java
+++ /dev/null
@@ -1,82 +0,0 @@
-// This file is part of the program FRYSK.
-//
-// Copyright 2005, 2006, 2007 Red Hat Inc.
-//
-// FRYSK is free software; you can redistribute it and/or modify it
-// under the terms of the GNU General Public License as published by
-// the Free Software Foundation; version 2 of the License.
-//
-// FRYSK is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-// 
-// You should have received a copy of the GNU General Public License
-// along with FRYSK; if not, write to the Free Software Foundation,
-// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
-// 
-// In addition, as a special exception, Red Hat, Inc. gives You the
-// additional right to link the code of FRYSK with code not covered
-// under the GNU General Public License ("Non-GPL Code") and to
-// distribute linked combinations including the two, subject to the
-// limitations in this paragraph. Non-GPL Code permitted under this
-// exception must only link to the code of FRYSK through those well
-// defined interfaces identified in the file named EXCEPTION found in
-// the source code files (the "Approved Interfaces"). The files of
-// Non-GPL Code may instantiate templates or use macros or inline
-// functions from the Approved Interfaces without causing the
-// resulting work to be covered by the GNU General Public
-// License. Only Red Hat, Inc. may make changes or additions to the
-// list of Approved Interfaces. You must obey the GNU General Public
-// License in all respects for all of the FRYSK code and other code
-// used in conjunction with FRYSK except the Non-GPL Code covered by
-// this exception. If you modify this file, you may extend this
-// exception to your version of the file, but you are not obligated to
-// do so. If you do not wish to provide this exception without
-// modification, you must delete this exception statement from your
-// version and license this file solely under the GPL without
-// exception.
-
-package frysk.hpd;
-
-class AliasCommand extends Command {
-
-    private static final String full = "The alias command associates a "
-	    + "user-defined name with a list of one or\n"
-	    + "more debugger commands. After definition, the user-defined "
-	    + "command can\n"
-	    + "be used in the same way as a debugger-defined command, "
-	    + "including as part\n"
-	    + "of the definition of new user-defined commands. ";
-
-    AliasCommand() {
-	super("alias", "Create or view user-defined commands",
-	      "alias command-name command body\nalias [command-name]", full);
-    }
-
-    public void interpret(CLI cli, Input cmd) {
-	if (cmd.size() == 1 && cmd.parameter(0).equals("-help")) {
-	    cli.printUsage(cmd);
-	    return;
-	}
-	if (cmd.size() <= 2) {
-	    if (cmd.size() == 2) {
-		cli.aliases.put((String) cmd.parameter(0),
-				(String) cmd.parameter(1));
-	    } else if (cmd.size() == 1) {
-		String temp = (String) cmd.parameter(0);
-		if (cli.aliases.containsKey(temp)) {
-		    cli.addMessage(temp + " = "
-			    + (String) (cli.aliases).get(temp),
-			    Message.TYPE_NORMAL);
-		} else
-		    cli.addMessage("Alias \"" + temp + "\" not defined.",
-			    Message.TYPE_ERROR);
-	    } else {
-		cli.addMessage(cli.aliases.toString(), Message.TYPE_NORMAL);
-	    }
-	} else {
-	    cli.printUsage(cmd);
-	}
-    }
-}
diff --git a/frysk-core/frysk/hpd/AliasCommands.java b/frysk-core/frysk/hpd/AliasCommands.java
new file mode 100644
index 0000000..aba2b26
--- /dev/null
+++ b/frysk-core/frysk/hpd/AliasCommands.java
@@ -0,0 +1,158 @@
+// This file is part of the program FRYSK.
+//
+// Copyright 2005, 2006, 2007 Red Hat Inc.
+//
+// FRYSK is free software; you can redistribute it and/or modify it
+// under the terms of the GNU General Public License as published by
+// the Free Software Foundation; version 2 of the License.
+//
+// FRYSK is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+// 
+// You should have received a copy of the GNU General Public License
+// along with FRYSK; if not, write to the Free Software Foundation,
+// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+// 
+// In addition, as a special exception, Red Hat, Inc. gives You the
+// additional right to link the code of FRYSK with code not covered
+// under the GNU General Public License ("Non-GPL Code") and to
+// distribute linked combinations including the two, subject to the
+// limitations in this paragraph. Non-GPL Code permitted under this
+// exception must only link to the code of FRYSK through those well
+// defined interfaces identified in the file named EXCEPTION found in
+// the source code files (the "Approved Interfaces"). The files of
+// Non-GPL Code may instantiate templates or use macros or inline
+// functions from the Approved Interfaces without causing the
+// resulting work to be covered by the GNU General Public
+// License. Only Red Hat, Inc. may make changes or additions to the
+// list of Approved Interfaces. You must obey the GNU General Public
+// License in all respects for all of the FRYSK code and other code
+// used in conjunction with FRYSK except the Non-GPL Code covered by
+// this exception. If you modify this file, you may extend this
+// exception to your version of the file, but you are not obligated to
+// do so. If you do not wish to provide this exception without
+// modification, you must delete this exception statement from your
+// version and license this file solely under the GPL without
+// exception.
+
+package frysk.hpd;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Iterator;
+
+abstract class AliasCommands extends ParameterizedCommand {
+
+    int complete(CLI cli, PTSet ptset, String incomplete, int base,
+		 List completions) {
+	for (Iterator i = cli.aliases.keySet().iterator(); i.hasNext(); ) {
+	    String key = (String)i.next();
+	    if (key.startsWith(incomplete))
+		completions.add(key);
+	}
+	CompletionFactory.padSingleCandidate(completions);
+	return 0;
+    }
+
+    AliasCommands(String name, String description, String syntax,
+		  String full) {
+	super(name, description, syntax, full);
+    }
+
+    static class Alias extends AliasCommands {
+	Alias() {
+	    super("alias", "create or view user-defined commands",
+		  ("alias <command-name> <command-body> -- define an alias\n"
+		   + "alias [ <command-name> ] -- view an alias"),
+		  ("The alias command associates a "
+		   + "user-defined name with a list of one or more debugger"
+		   + " commands. After definition, the user-defined command"
+		   + " can be used in the same way as a debugger-defined"
+		   + " command, including as part of the definition of new"
+		   + " user-defined commands."));
+	}
+
+	void interpret(CLI cli, Input cmd, Object options) {
+	    switch (cmd.size()) {
+	    default:
+		throw new InvalidCommandException("Too many parameters");
+	    case 2:
+		cli.aliases.put(cmd.parameter(0), cmd.parameter(1));
+		break;
+	    case 1:
+		String temp = cmd.parameter(0);
+		if (!cli.aliases.containsKey(temp))
+		    throw new InvalidCommandException("Alias \"" + temp
+						      + "\" not defined.");
+		cli.outWriter.print(temp);
+		cli.outWriter.print(" = ");
+		cli.outWriter.print(cli.aliases.get(temp));
+		cli.outWriter.println();
+		break;
+	    case 0:
+		if (cli.aliases.size() == 0) {
+		    cli.outWriter.println("No aliases.");
+		} else {
+		    for (Iterator i = cli.aliases.entrySet().iterator();
+			 i.hasNext(); ) {
+			Map.Entry entry = (Map.Entry)i.next();
+			cli.outWriter.print(entry.getKey());
+			cli.outWriter.print(" = ");
+			cli.outWriter.print(entry.getValue());
+			cli.outWriter.println();
+		    }
+		}
+		break;
+	    }
+	}
+    }
+
+    static class Unalias extends AliasCommands {
+	private static class Options {
+	    boolean deleteAll;
+	}
+	Object options() {
+	    return new Options();
+	}
+	Unalias() {
+	    super("unalias", "Create or view user-define commands.",
+		  "unalias [ command-name | -all -",
+		  ("The unalias command removes the alias that was"
+		   + " previously established for the specified"
+		   + " user-defined command name."));
+	    add(new CommandOption("all", "delete all use-defined aliases") {
+		    void parse(String argument, Object options) {
+			((Options)options).deleteAll = true;
+		    }
+		});
+	}
+
+	public void interpret(CLI cli, Input input, Object o) {
+	    Options options = (Options)o;
+	    if (options.deleteAll) {
+		if (input.size() != 0)
+		    throw new InvalidCommandException("Extra parameters");
+		cli.outWriter.println("Removing all aliases.");
+		cli.aliases.clear();
+	    } else {
+		if (input.size() == 0)
+		    throw new InvalidCommandException("Missing alias");
+		for (int i = 0; i < input.size(); i++) {
+		    String temp = input.parameter(i);
+		    if (cli.aliases.containsKey(temp)) {
+			cli.outWriter.print("Removed alias \"");
+			cli.outWriter.print(temp);
+			cli.outWriter.println("\"");
+			cli.aliases.remove(temp);
+		    } else {
+			cli.outWriter.print("Alias \"");
+			cli.outWriter.print(temp);
+			cli.outWriter.println("\" not defined.");
+		    }
+		}
+	    }
+	}
+    }
+}
diff --git a/frysk-core/frysk/hpd/CLI.java b/frysk-core/frysk/hpd/CLI.java
index f72545e..70871e3 100644
--- a/frysk-core/frysk/hpd/CLI.java
+++ b/frysk-core/frysk/hpd/CLI.java
@@ -233,7 +233,8 @@ public class CLI {
         //otherwise build system will discard those classes. Therefore
         //CLI cannot be made to be a singleton.
         addHandler(new ActionsCommand());
-        addHandler(new AliasCommand());
+        addHandler(new AliasCommands.Alias());
+        addHandler(new AliasCommands.Unalias());
         addHandler(new AssignCommand());
         addHandler(new AttachCommand());
         addHandler(new BreakpointCommand());
@@ -259,7 +260,6 @@ public class CLI {
         addHandler(new SetCommand(dbgvars));
         addHandler(new StepCommand());
         addHandler(new StepInstructionCommand());
-        addHandler(new UnaliasCommand());
         addHandler(new UndefsetCommand());
         addHandler(new UnsetCommand(dbgvars));
         addHandler(new FrameCommands("up"));
diff --git a/frysk-core/frysk/hpd/ChangeLog b/frysk-core/frysk/hpd/ChangeLog
index 2d36832..797684f 100644
--- a/frysk-core/frysk/hpd/ChangeLog
+++ b/frysk-core/frysk/hpd/ChangeLog
@@ -1,3 +1,13 @@
+2007-11-08  Andrew Cagney  <cagney@redhat.com>
+
+	* AliasCommands.java: New.
+	* AliasCommand.java: Delete.
+	* UnaliasCommand.java: Delete.
+	* ParameterizedCommand.java: Fix off-by-one error.
+	* AliasCommand.java: Extend ParameterizedCommand.
+	* CLI.java: Update.
+	* TopLevelCommand.java: Update.
+
 2007-11-08  Phil Muldoon  <pmuldoon@redhat.com>
 
 	* CoreCommand.java (interpret): Remove try{} for host building.
diff --git a/frysk-core/frysk/hpd/ParameterizedCommand.java b/frysk-core/frysk/hpd/ParameterizedCommand.java
index eb9db6f..be08aa0 100644
--- a/frysk-core/frysk/hpd/ParameterizedCommand.java
+++ b/frysk-core/frysk/hpd/ParameterizedCommand.java
@@ -177,7 +177,7 @@ abstract class ParameterizedCommand extends Command {
 	int start = input.token(0).start;
 	int pos = complete(cli, cli.getCommandPTSet(input),
 			   input.stringValue(), cursor - start, candidates);
-	if (pos > 0) {
+	if (pos >= 0) {
 	    return pos + start;
 	} else {
 	    return -1;
diff --git a/frysk-core/frysk/hpd/TopLevelCommand.java b/frysk-core/frysk/hpd/TopLevelCommand.java
index 82c1447..89c43e9 100644
--- a/frysk-core/frysk/hpd/TopLevelCommand.java
+++ b/frysk-core/frysk/hpd/TopLevelCommand.java
@@ -74,7 +74,8 @@ public class TopLevelCommand extends MultiLevelCommand {
 	      "<command> <parameter> ...",
 	      "a top level command");
         add(new ActionsCommand());
-        add(new AliasCommand());
+        add(new AliasCommands.Alias());
+        add(new AliasCommands.Unalias());
         add(new AssignCommand());
         add(new AttachCommand());
         add(new BreakpointCommand());
@@ -101,7 +102,6 @@ public class TopLevelCommand extends MultiLevelCommand {
         add(new SetCommand(dbgvars));
         add(new StepCommand());
         add(new StepInstructionCommand());
-        add(new UnaliasCommand());
         add(new UndefsetCommand());
         add(new UnsetCommand(dbgvars));
         add(new FrameCommands("up"));
diff --git a/frysk-core/frysk/hpd/UnaliasCommand.java b/frysk-core/frysk/hpd/UnaliasCommand.java
deleted file mode 100644
index a76783d..0000000
--- a/frysk-core/frysk/hpd/UnaliasCommand.java
+++ /dev/null
@@ -1,72 +0,0 @@
-// This file is part of the program FRYSK.
-//
-// Copyright 2005, 2006, 2007 Red Hat Inc.
-//
-// FRYSK is free software; you can redistribute it and/or modify it
-// under the terms of the GNU General Public License as published by
-// the Free Software Foundation; version 2 of the License.
-//
-// FRYSK is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-// 
-// You should have received a copy of the GNU General Public License
-// along with FRYSK; if not, write to the Free Software Foundation,
-// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
-// 
-// In addition, as a special exception, Red Hat, Inc. gives You the
-// additional right to link the code of FRYSK with code not covered
-// under the GNU General Public License ("Non-GPL Code") and to
-// distribute linked combinations including the two, subject to the
-// limitations in this paragraph. Non-GPL Code permitted under this
-// exception must only link to the code of FRYSK through those well
-// defined interfaces identified in the file named EXCEPTION found in
-// the source code files (the "Approved Interfaces"). The files of
-// Non-GPL Code may instantiate templates or use macros or inline
-// functions from the Approved Interfaces without causing the
-// resulting work to be covered by the GNU General Public
-// License. Only Red Hat, Inc. may make changes or additions to the
-// list of Approved Interfaces. You must obey the GNU General Public
-// License in all respects for all of the FRYSK code and other code
-// used in conjunction with FRYSK except the Non-GPL Code covered by
-// this exception. If you modify this file, you may extend this
-// exception to your version of the file, but you are not obligated to
-// do so. If you do not wish to provide this exception without
-// modification, you must delete this exception statement from your
-// version and license this file solely under the GPL without
-// exception.
-
-package frysk.hpd;
-
-class UnaliasCommand extends Command {
-    private static final String full = "The unalias command removes the alias "
-	    + "that was previously established\n"
-	    + "for the specified user-defined command name. Use of the "
-	    + "argument -all\n" + "deletes all user-defined commands at once.";
-
-    UnaliasCommand() {
-	super("unalias", "Create or view user-define commands.",
-	      "unalias { command-name | -all }", full);
-    }
-
-    public void interpret(CLI cli, Input cmd) {
-	if (cmd.size() == 1) {
-	    if ((cmd.parameter(0)).equals("-all")) {
-		cli.aliases.clear();
-		cli.addMessage("Removing all aliases.", Message.TYPE_VERBOSE);
-	    } else {
-		String temp = cmd.parameter(0);
-		if (cli.aliases.containsKey(temp)) {
-		    cli.aliases.remove(temp);
-		    cli.addMessage("Removed alias \"" + temp + "\"",
-			    Message.TYPE_VERBOSE);
-		} else
-		    cli.addMessage("Alias \"" + temp + "\" not defined.",
-			    Message.TYPE_ERROR);
-	    }
-	} else {
-	    cli.printUsage(cmd);
-	}
-    }
-}


hooks/post-receive
--
frysk system monitor/debugger


                 reply	other threads:[~2007-11-08 18:21 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20071108182144.31788.qmail@sourceware.org \
    --to=cagney@sourceware.org \
    --cc=frysk-cvs@sourceware.org \
    --cc=frysk@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).