diff options
Diffstat (limited to 'OpenSim/Framework/Console')
-rw-r--r-- | OpenSim/Framework/Console/AssemblyInfo.cs | 4 | ||||
-rw-r--r-- | OpenSim/Framework/Console/CommandConsole.cs | 36 | ||||
-rwxr-xr-x | OpenSim/Framework/Console/ConsoleBase.cs | 10 | ||||
-rw-r--r-- | OpenSim/Framework/Console/ConsoleUtil.cs | 228 | ||||
-rw-r--r-- | OpenSim/Framework/Console/MockConsole.cs | 7 |
5 files changed, 271 insertions, 14 deletions
diff --git a/OpenSim/Framework/Console/AssemblyInfo.cs b/OpenSim/Framework/Console/AssemblyInfo.cs index 75e35bf..37c7304 100644 --- a/OpenSim/Framework/Console/AssemblyInfo.cs +++ b/OpenSim/Framework/Console/AssemblyInfo.cs | |||
@@ -39,7 +39,7 @@ using System.Runtime.InteropServices; | |||
39 | [assembly: AssemblyConfiguration("")] | 39 | [assembly: AssemblyConfiguration("")] |
40 | [assembly: AssemblyCompany("http://opensimulator.org")] | 40 | [assembly: AssemblyCompany("http://opensimulator.org")] |
41 | [assembly : AssemblyProduct("ServerConsole")] | 41 | [assembly : AssemblyProduct("ServerConsole")] |
42 | [assembly: AssemblyCopyright("Copyright (c) OpenSimulator.org Developers 2007-2009")] | 42 | [assembly: AssemblyCopyright("Copyright (c) OpenSimulator.org Developers")] |
43 | [assembly: AssemblyTrademark("")] | 43 | [assembly: AssemblyTrademark("")] |
44 | [assembly: AssemblyCulture("")] | 44 | [assembly: AssemblyCulture("")] |
45 | 45 | ||
@@ -55,4 +55,4 @@ using System.Runtime.InteropServices; | |||
55 | // You can specify all values by your own or you can build default build and revision | 55 | // You can specify all values by your own or you can build default build and revision |
56 | // numbers with the '*' character (the default): | 56 | // numbers with the '*' character (the default): |
57 | 57 | ||
58 | [assembly : AssemblyVersion("0.6.5.*")] | 58 | [assembly : AssemblyVersion("0.7.5.*")] |
diff --git a/OpenSim/Framework/Console/CommandConsole.cs b/OpenSim/Framework/Console/CommandConsole.cs index bd23d1c..d703d78 100644 --- a/OpenSim/Framework/Console/CommandConsole.cs +++ b/OpenSim/Framework/Console/CommandConsole.cs | |||
@@ -83,7 +83,8 @@ namespace OpenSim.Framework.Console | |||
83 | = "To enter an argument that contains spaces, surround the argument with double quotes.\nFor example, show object name \"My long object name\"\n"; | 83 | = "To enter an argument that contains spaces, surround the argument with double quotes.\nFor example, show object name \"My long object name\"\n"; |
84 | 84 | ||
85 | public const string ItemHelpText | 85 | public const string ItemHelpText |
86 | = "For more information, type 'help <item>' where <item> is one of the following:"; | 86 | = @"For more information, type 'help' to get a list of all commands, |
87 | or type help <item>' where <item> is one of the following:"; | ||
87 | 88 | ||
88 | /// <value> | 89 | /// <value> |
89 | /// Commands organized by keyword in a tree | 90 | /// Commands organized by keyword in a tree |
@@ -114,6 +115,12 @@ namespace OpenSim.Framework.Console | |||
114 | { | 115 | { |
115 | help.Add(""); // Will become a newline. | 116 | help.Add(""); // Will become a newline. |
116 | help.Add(GeneralHelpText); | 117 | help.Add(GeneralHelpText); |
118 | help.AddRange(CollectAllCommandsHelp()); | ||
119 | } | ||
120 | else if (helpParts.Count == 1 && helpParts[0] == "categories") | ||
121 | { | ||
122 | help.Add(""); // Will become a newline. | ||
123 | help.Add(GeneralHelpText); | ||
117 | help.Add(ItemHelpText); | 124 | help.Add(ItemHelpText); |
118 | help.AddRange(CollectModulesHelp(tree)); | 125 | help.AddRange(CollectModulesHelp(tree)); |
119 | } | 126 | } |
@@ -124,6 +131,31 @@ namespace OpenSim.Framework.Console | |||
124 | 131 | ||
125 | return help; | 132 | return help; |
126 | } | 133 | } |
134 | |||
135 | /// <summary> | ||
136 | /// Collects the help from all commands and return in alphabetical order. | ||
137 | /// </summary> | ||
138 | /// <returns></returns> | ||
139 | private List<string> CollectAllCommandsHelp() | ||
140 | { | ||
141 | List<string> help = new List<string>(); | ||
142 | |||
143 | lock (m_modulesCommands) | ||
144 | { | ||
145 | foreach (List<CommandInfo> commands in m_modulesCommands.Values) | ||
146 | { | ||
147 | foreach (CommandInfo c in commands) | ||
148 | { | ||
149 | if (c.long_help != String.Empty) | ||
150 | help.Add(string.Format("{0} - {1}", c.help_text, c.long_help)); | ||
151 | } | ||
152 | } | ||
153 | } | ||
154 | |||
155 | help.Sort(); | ||
156 | |||
157 | return help; | ||
158 | } | ||
127 | 159 | ||
128 | /// <summary> | 160 | /// <summary> |
129 | /// See if we can find the requested command in order to display longer help | 161 | /// See if we can find the requested command in order to display longer help |
@@ -711,7 +743,7 @@ namespace OpenSim.Framework.Console | |||
711 | /// </summary> | 743 | /// </summary> |
712 | public void Prompt() | 744 | public void Prompt() |
713 | { | 745 | { |
714 | string line = ReadLine(m_defaultPrompt + "# ", true, true); | 746 | string line = ReadLine(DefaultPrompt + "# ", true, true); |
715 | 747 | ||
716 | if (line != String.Empty) | 748 | if (line != String.Empty) |
717 | Output("Invalid command"); | 749 | Output("Invalid command"); |
diff --git a/OpenSim/Framework/Console/ConsoleBase.cs b/OpenSim/Framework/Console/ConsoleBase.cs index 4b375d9..2d8e723 100755 --- a/OpenSim/Framework/Console/ConsoleBase.cs +++ b/OpenSim/Framework/Console/ConsoleBase.cs | |||
@@ -43,15 +43,7 @@ namespace OpenSim.Framework.Console | |||
43 | 43 | ||
44 | public object ConsoleScene { get; set; } | 44 | public object ConsoleScene { get; set; } |
45 | 45 | ||
46 | /// <summary> | 46 | public string DefaultPrompt { get; set; } |
47 | /// The default prompt text. | ||
48 | /// </summary> | ||
49 | public string DefaultPrompt | ||
50 | { | ||
51 | set { m_defaultPrompt = value; } | ||
52 | get { return m_defaultPrompt; } | ||
53 | } | ||
54 | protected string m_defaultPrompt; | ||
55 | 47 | ||
56 | public ConsoleBase(string defaultPrompt) | 48 | public ConsoleBase(string defaultPrompt) |
57 | { | 49 | { |
diff --git a/OpenSim/Framework/Console/ConsoleUtil.cs b/OpenSim/Framework/Console/ConsoleUtil.cs new file mode 100644 index 0000000..16a63e0 --- /dev/null +++ b/OpenSim/Framework/Console/ConsoleUtil.cs | |||
@@ -0,0 +1,228 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://opensimulator.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSimulator Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | */ | ||
27 | |||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.IO; | ||
31 | using System.Linq; | ||
32 | using System.Reflection; | ||
33 | using log4net; | ||
34 | using OpenMetaverse; | ||
35 | |||
36 | namespace OpenSim.Framework.Console | ||
37 | { | ||
38 | public class ConsoleUtil | ||
39 | { | ||
40 | // private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | ||
41 | |||
42 | public const int LocalIdNotFound = 0; | ||
43 | |||
44 | /// <summary> | ||
45 | /// Used by modules to display stock co-ordinate help, though possibly this should be under some general section | ||
46 | /// rather than in each help summary. | ||
47 | /// </summary> | ||
48 | public const string CoordHelp | ||
49 | = @"Each component of the coord is comma separated. There must be no spaces between the commas. | ||
50 | If you don't care about the z component you can simply omit it. | ||
51 | If you don't care about the x or y components then you can leave them blank (though a comma is still required) | ||
52 | If you want to specify the maxmimum value of a component then you can use ~ instead of a number | ||
53 | If you want to specify the minimum value of a component then you can use -~ instead of a number | ||
54 | e.g. | ||
55 | delete object pos 20,20,20 to 40,40,40 | ||
56 | delete object pos 20,20 to 40,40 | ||
57 | delete object pos ,20,20 to ,40,40 | ||
58 | delete object pos ,,30 to ,,~ | ||
59 | delete object pos ,,-~ to ,,30"; | ||
60 | |||
61 | public const string MinRawConsoleVectorValue = "-~"; | ||
62 | public const string MaxRawConsoleVectorValue = "~"; | ||
63 | |||
64 | public const string VectorSeparator = ","; | ||
65 | public static char[] VectorSeparatorChars = VectorSeparator.ToCharArray(); | ||
66 | |||
67 | /// <summary> | ||
68 | /// Check if the given file path exists. | ||
69 | /// </summary> | ||
70 | /// <remarks>If not, warning is printed to the given console.</remarks> | ||
71 | /// <returns>true if the file does not exist, false otherwise.</returns> | ||
72 | /// <param name='console'></param> | ||
73 | /// <param name='path'></param> | ||
74 | public static bool CheckFileDoesNotExist(ICommandConsole console, string path) | ||
75 | { | ||
76 | if (File.Exists(path)) | ||
77 | { | ||
78 | console.OutputFormat("File {0} already exists. Please move or remove it.", path); | ||
79 | return false; | ||
80 | } | ||
81 | |||
82 | return true; | ||
83 | } | ||
84 | |||
85 | /// <summary> | ||
86 | /// Try to parse a console UUID from the console. | ||
87 | /// </summary> | ||
88 | /// <remarks> | ||
89 | /// Will complain to the console if parsing fails. | ||
90 | /// </remarks> | ||
91 | /// <returns></returns> | ||
92 | /// <param name='console'>If null then no complaint is printed.</param> | ||
93 | /// <param name='rawUuid'></param> | ||
94 | /// <param name='uuid'></param> | ||
95 | public static bool TryParseConsoleUuid(ICommandConsole console, string rawUuid, out UUID uuid) | ||
96 | { | ||
97 | if (!UUID.TryParse(rawUuid, out uuid)) | ||
98 | { | ||
99 | if (console != null) | ||
100 | console.OutputFormat("{0} is not a valid uuid", rawUuid); | ||
101 | |||
102 | return false; | ||
103 | } | ||
104 | |||
105 | return true; | ||
106 | } | ||
107 | |||
108 | public static bool TryParseConsoleLocalId(ICommandConsole console, string rawLocalId, out uint localId) | ||
109 | { | ||
110 | if (!uint.TryParse(rawLocalId, out localId)) | ||
111 | { | ||
112 | if (console != null) | ||
113 | console.OutputFormat("{0} is not a valid local id", localId); | ||
114 | |||
115 | return false; | ||
116 | } | ||
117 | |||
118 | if (localId == 0) | ||
119 | { | ||
120 | if (console != null) | ||
121 | console.OutputFormat("{0} is not a valid local id - it must be greater than 0", localId); | ||
122 | |||
123 | return false; | ||
124 | } | ||
125 | |||
126 | return true; | ||
127 | } | ||
128 | |||
129 | /// <summary> | ||
130 | /// Tries to parse the input as either a UUID or a local ID. | ||
131 | /// </summary> | ||
132 | /// <returns>true if parsing succeeded, false otherwise.</returns> | ||
133 | /// <param name='console'></param> | ||
134 | /// <param name='rawId'></param> | ||
135 | /// <param name='uuid'></param> | ||
136 | /// <param name='localId'> | ||
137 | /// Will be set to ConsoleUtil.LocalIdNotFound if parsing result was a UUID or no parse succeeded. | ||
138 | /// </param> | ||
139 | public static bool TryParseConsoleId(ICommandConsole console, string rawId, out UUID uuid, out uint localId) | ||
140 | { | ||
141 | if (TryParseConsoleUuid(null, rawId, out uuid)) | ||
142 | { | ||
143 | localId = LocalIdNotFound; | ||
144 | return true; | ||
145 | } | ||
146 | |||
147 | if (TryParseConsoleLocalId(null, rawId, out localId)) | ||
148 | { | ||
149 | return true; | ||
150 | } | ||
151 | |||
152 | if (console != null) | ||
153 | console.OutputFormat("{0} is not a valid UUID or local id", rawId); | ||
154 | |||
155 | return false; | ||
156 | } | ||
157 | |||
158 | /// <summary> | ||
159 | /// Convert a minimum vector input from the console to an OpenMetaverse.Vector3 | ||
160 | /// </summary> | ||
161 | /// <param name='rawConsoleVector'>/param> | ||
162 | /// <param name='vector'></param> | ||
163 | /// <returns></returns> | ||
164 | public static bool TryParseConsoleMinVector(string rawConsoleVector, out Vector3 vector) | ||
165 | { | ||
166 | return TryParseConsoleVector(rawConsoleVector, c => float.MinValue.ToString(), out vector); | ||
167 | } | ||
168 | |||
169 | /// <summary> | ||
170 | /// Convert a maximum vector input from the console to an OpenMetaverse.Vector3 | ||
171 | /// </summary> | ||
172 | /// <param name='rawConsoleVector'>/param> | ||
173 | /// <param name='vector'></param> | ||
174 | /// <returns></returns> | ||
175 | public static bool TryParseConsoleMaxVector(string rawConsoleVector, out Vector3 vector) | ||
176 | { | ||
177 | return TryParseConsoleVector(rawConsoleVector, c => float.MaxValue.ToString(), out vector); | ||
178 | } | ||
179 | |||
180 | /// <summary> | ||
181 | /// Convert a vector input from the console to an OpenMetaverse.Vector3 | ||
182 | /// </summary> | ||
183 | /// <param name='rawConsoleVector'> | ||
184 | /// A string in the form <x>,<y>,<z> where there is no space between values. | ||
185 | /// Any component can be missing (e.g. ,,40). blankComponentFunc is invoked to replace the blank with a suitable value | ||
186 | /// Also, if the blank component is at the end, then the comma can be missed off entirely (e.g. 40,30 or 40) | ||
187 | /// The strings "~" and "-~" are valid in components. The first substitutes float.MaxValue whilst the second is float.MinValue | ||
188 | /// Other than that, component values must be numeric. | ||
189 | /// </param> | ||
190 | /// <param name='blankComponentFunc'></param> | ||
191 | /// <param name='vector'></param> | ||
192 | /// <returns></returns> | ||
193 | public static bool TryParseConsoleVector( | ||
194 | string rawConsoleVector, Func<string, string> blankComponentFunc, out Vector3 vector) | ||
195 | { | ||
196 | List<string> components = rawConsoleVector.Split(VectorSeparatorChars).ToList(); | ||
197 | |||
198 | if (components.Count < 1 || components.Count > 3) | ||
199 | { | ||
200 | vector = Vector3.Zero; | ||
201 | return false; | ||
202 | } | ||
203 | |||
204 | for (int i = components.Count; i < 3; i++) | ||
205 | components.Add(""); | ||
206 | |||
207 | List<string> semiDigestedComponents | ||
208 | = components.ConvertAll<string>( | ||
209 | c => | ||
210 | { | ||
211 | if (c == "") | ||
212 | return blankComponentFunc.Invoke(c); | ||
213 | else if (c == MaxRawConsoleVectorValue) | ||
214 | return float.MaxValue.ToString(); | ||
215 | else if (c == MinRawConsoleVectorValue) | ||
216 | return float.MinValue.ToString(); | ||
217 | else | ||
218 | return c; | ||
219 | }); | ||
220 | |||
221 | string semiDigestedConsoleVector = string.Join(VectorSeparator, semiDigestedComponents.ToArray()); | ||
222 | |||
223 | // m_log.DebugFormat("[CONSOLE UTIL]: Parsing {0} into OpenMetaverse.Vector3", semiDigestedConsoleVector); | ||
224 | |||
225 | return Vector3.TryParse(semiDigestedConsoleVector, out vector); | ||
226 | } | ||
227 | } | ||
228 | } \ No newline at end of file | ||
diff --git a/OpenSim/Framework/Console/MockConsole.cs b/OpenSim/Framework/Console/MockConsole.cs index b489f93..8ba58e4 100644 --- a/OpenSim/Framework/Console/MockConsole.cs +++ b/OpenSim/Framework/Console/MockConsole.cs | |||
@@ -46,13 +46,18 @@ namespace OpenSim.Framework.Console | |||
46 | 46 | ||
47 | public ICommands Commands { get { return m_commands; } } | 47 | public ICommands Commands { get { return m_commands; } } |
48 | 48 | ||
49 | public string DefaultPrompt { get; set; } | ||
50 | |||
49 | public void Prompt() {} | 51 | public void Prompt() {} |
50 | 52 | ||
51 | public void RunCommand(string cmd) {} | 53 | public void RunCommand(string cmd) {} |
52 | 54 | ||
53 | public string ReadLine(string p, bool isCommand, bool e) { return ""; } | 55 | public string ReadLine(string p, bool isCommand, bool e) { return ""; } |
54 | 56 | ||
55 | public object ConsoleScene { get { return null; } } | 57 | public object ConsoleScene { |
58 | get { return null; } | ||
59 | set {} | ||
60 | } | ||
56 | 61 | ||
57 | public void Output(string text, string level) {} | 62 | public void Output(string text, string level) {} |
58 | public void Output(string text) {} | 63 | public void Output(string text) {} |