diff options
author | Jose <jose@zeroc.com> | 2014-11-11 22:33:50 +0100 |
---|---|---|
committer | Jose <jose@zeroc.com> | 2014-11-11 22:33:50 +0100 |
commit | fefe5c503a8bec0882443e994db64f916f806b5e (patch) | |
tree | f1881528106f75b50ab0f72ea6b5da6f90dc5b2e /cs/demo/Manual/lifecycle/Parser.cs | |
parent | ICE-5863 - merge Java RPMs (diff) | |
download | ice-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.cs | 333 |
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; +} |