summaryrefslogtreecommitdiff
path: root/cs/demo/Manual/lifecycle/Parser.cs
diff options
context:
space:
mode:
authorJose <jose@zeroc.com>2014-11-11 22:33:50 +0100
committerJose <jose@zeroc.com>2014-11-11 22:33:50 +0100
commitfefe5c503a8bec0882443e994db64f916f806b5e (patch)
treef1881528106f75b50ab0f72ea6b5da6f90dc5b2e /cs/demo/Manual/lifecycle/Parser.cs
parentICE-5863 - merge Java RPMs (diff)
downloadice-fefe5c503a8bec0882443e994db64f916f806b5e.tar.bz2
ice-fefe5c503a8bec0882443e994db64f916f806b5e.tar.xz
ice-fefe5c503a8bec0882443e994db64f916f806b5e.zip
Fixed (ICE-5857) rename manual -> Manual
Diffstat (limited to 'cs/demo/Manual/lifecycle/Parser.cs')
-rw-r--r--cs/demo/Manual/lifecycle/Parser.cs333
1 files changed, 333 insertions, 0 deletions
diff --git a/cs/demo/Manual/lifecycle/Parser.cs b/cs/demo/Manual/lifecycle/Parser.cs
new file mode 100644
index 00000000000..e1c26fb95b8
--- /dev/null
+++ b/cs/demo/Manual/lifecycle/Parser.cs
@@ -0,0 +1,333 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2014 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+
+using System;
+using System.Collections;
+using System.IO;
+using System.Text;
+using Filesystem;
+
+class Parser
+{
+ virtual internal string Input
+ {
+ get
+ {
+ Console.Write("> ");
+ Console.Out.Flush();
+
+ try
+ {
+ return _in.ReadLine();
+ }
+ catch(IOException)
+ {
+ return null;
+ }
+ }
+
+ }
+ internal Parser(DirectoryPrx root)
+ {
+ _dirs = new ArrayList();
+ _dirs.Insert(0, root);
+ }
+
+ internal virtual void usage()
+ {
+ Console.Error.Write(
+ "help Print this message.\n" +
+ "pwd Print current directory (/ = root).\n" +
+ "cd [DIR] Change directory (/ or empty = root).\n" +
+ "ls List current directory.\n" +
+ "lr Recursively list current directory.\n" +
+ "mkdir DIR [DIR...] Create directories DIR in current directory.\n" +
+ "mkfile FILE [FILE...] Create files FILE in current directory.\n" +
+ "rm NAME [NAME...] Delete directory or file NAME (rm * to delete all).\n" +
+ "cat FILE List the contents of FILE.\n" +
+ "write FILE [STRING...] Write STRING to FILE.\n" +
+ "exit, quit Exit this program.\n");
+ }
+
+ internal virtual void list(bool recursive)
+ {
+ try
+ {
+ list((DirectoryPrx)_dirs[0], recursive, 0);
+ }
+ catch(Ice.LocalException ex)
+ {
+ error(ex.ToString());
+ }
+ }
+
+ internal virtual void list(Filesystem.DirectoryPrx dir, bool recursive, int depth)
+ {
+ StringBuilder b = new StringBuilder();
+ for(int i = 0; i < depth; ++i)
+ {
+ b.Append('\t');
+ }
+ string indent = b.ToString();
+
+ NodeDesc[] contents = dir.list();
+
+ for(int i = 0; i < contents.Length; ++i)
+ {
+ DirectoryPrx d = contents[i].type == NodeType.DirType
+ ? DirectoryPrxHelper.uncheckedCast(contents[i].proxy) : null;
+ Console.Write(indent + contents[i].name + (d != null ? " (directory)" : " (file)"));
+ if(d != null && recursive)
+ {
+ Console.WriteLine(":");
+ list(d, true, ++depth);
+ }
+ else
+ {
+ Console.WriteLine();
+ }
+ }
+ }
+
+ internal virtual void createFile(IList names)
+ {
+ DirectoryPrx dir = (DirectoryPrx)_dirs[0];
+
+ foreach(string name in names)
+ {
+ if(name.Equals(".."))
+ {
+ Console.WriteLine("Cannot create a file named `..'");
+ continue;
+ }
+
+ try
+ {
+ dir.createFile(name);
+ }
+ catch(NameInUse)
+ {
+ Console.WriteLine("`" + name + "' exists already");
+ }
+ }
+ }
+
+ internal virtual void createDir(IList names)
+ {
+ DirectoryPrx dir = (DirectoryPrx)_dirs[0];
+
+ foreach(string name in names)
+ {
+ if(name.Equals(".."))
+ {
+ Console.WriteLine("Cannot create a directory named `..'");
+ continue;
+ }
+
+ try
+ {
+ dir.createDirectory(name);
+ }
+ catch(NameInUse)
+ {
+ Console.WriteLine("`" + name + "' exists already");
+ }
+ }
+ }
+
+ internal virtual void pwd()
+ {
+ if(_dirs.Count == 1)
+ {
+ Console.Write("/");
+ }
+ else
+ {
+ for(int i = _dirs.Count - 2; i >= 0; --i)
+ {
+ Console.Write("/" + ((DirectoryPrx)_dirs[i]).name());
+ }
+ }
+ Console.WriteLine();
+ }
+
+ internal virtual void cd(string name)
+ {
+ if(name.Equals("/"))
+ {
+ while(_dirs.Count > 1)
+ {
+ _dirs.RemoveAt(0);
+ }
+ return;
+ }
+
+ if(name.Equals(".."))
+ {
+ if(_dirs.Count > 1)
+ {
+ _dirs.RemoveAt(0);
+ }
+ return;
+ }
+
+ DirectoryPrx dir = (DirectoryPrx)_dirs[0];
+ NodeDesc d;
+ try
+ {
+ d = dir.find(name);
+ }
+ catch(NoSuchName)
+ {
+ Console.WriteLine("`" + name + "': no such directory");
+ return;
+ }
+ if(d.type == NodeType.FileType)
+ {
+ Console.WriteLine("`" + name + "': not a directory");
+ return;
+ }
+ _dirs.Insert(0, DirectoryPrxHelper.uncheckedCast(d.proxy));
+ }
+
+ internal virtual void cat(string name)
+ {
+ DirectoryPrx dir = (DirectoryPrx)_dirs[0];
+ NodeDesc d;
+ try
+ {
+ d = dir.find(name);
+ }
+ catch(NoSuchName)
+ {
+ Console.WriteLine("`" + name + "': no such file");
+ return;
+ }
+ if(d.type == NodeType.DirType)
+ {
+ Console.WriteLine("`" + name + "': not a file");
+ return;
+ }
+ FilePrx f = FilePrxHelper.uncheckedCast(d.proxy);
+ string[] l = f.read();
+ for(int i = 0; i < l.Length; ++i)
+ {
+ Console.WriteLine(l[i]);
+ }
+ }
+
+ internal virtual void write(IList args)
+ {
+ DirectoryPrx dir = (DirectoryPrx)_dirs[0];
+ string name = (string)args[0];
+ args.RemoveAt(0);
+ NodeDesc d;
+ try
+ {
+ d = dir.find(name);
+ }
+ catch(NoSuchName)
+ {
+ Console.WriteLine("`" + name + "': no such file");
+ return;
+ }
+ if(d.type == NodeType.DirType)
+ {
+ Console.WriteLine("`" + name + "': not a file");
+ return;
+ }
+ FilePrx f = FilePrxHelper.uncheckedCast(d.proxy);
+
+ string[] l = new string[args.Count];
+ args.CopyTo(l, 0);
+ try
+ {
+ f.write(l);
+ }
+ catch(GenericError ex)
+ {
+ Console.WriteLine("`" + name + "': cannot write to file: " + ex.reason);
+ }
+ }
+
+ internal virtual void destroy(IList names)
+ {
+ DirectoryPrx dir = (DirectoryPrx)_dirs[0];
+
+ foreach(string name in names)
+ {
+ if(name.Equals("*"))
+ {
+ NodeDesc[] nodes = dir.list();
+ for(int j = 0; j < nodes.Length; ++j)
+ {
+ try
+ {
+ nodes[j].proxy.destroy();
+ }
+ catch(PermissionDenied ex)
+ {
+ Console.WriteLine("cannot remove `" + nodes[j].name + "': " + ex.reason);
+ }
+ }
+ return;
+ }
+ else
+ {
+ NodeDesc d;
+ try
+ {
+ d = dir.find(name);
+ }
+ catch(NoSuchName)
+ {
+ Console.WriteLine("`" + name + "': no such file or directory");
+ return;
+ }
+ try
+ {
+ d.proxy.destroy();
+ }
+ catch(PermissionDenied ex)
+ {
+ Console.WriteLine("cannot remove `" + name + "': " + ex.reason);
+ }
+ }
+ }
+ }
+
+ internal virtual void error(string s)
+ {
+ Console.Error.WriteLine("error: " + s);
+ }
+
+ internal virtual void warning(string s)
+ {
+ Console.Error.WriteLine("warning: " + s);
+ }
+
+ internal virtual int parse()
+ {
+#if COMPACT
+ _in = Console.In;
+#else
+ _in = new StreamReader(new StreamReader(Console.OpenStandardInput(), Encoding.Default).BaseStream,
+ new StreamReader(Console.OpenStandardInput(), Encoding.Default).CurrentEncoding);
+#endif
+
+ Grammar g = new Grammar(this);
+ g.parse();
+
+ return 0;
+ }
+
+ private ArrayList _dirs;
+
+ private TextReader _in;
+}