Guard the values used to set the cursor position in the real time console
parent
b71d68c9bc
commit
a8f3d625cb
OpenSim
Framework/Console
Region/Application
|
@ -554,13 +554,39 @@ namespace OpenSim.Framework.Console
|
||||||
WriteNewLine(DeriveColor(sender), sender, ConsoleColor.Gray, format, args);
|
WriteNewLine(DeriveColor(sender), sender, ConsoleColor.Gray, format, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private int SetCursorTop(int top)
|
||||||
|
{
|
||||||
|
if (top >= 0 && top < System.Console.BufferHeight)
|
||||||
|
{
|
||||||
|
System.Console.CursorTop = top;
|
||||||
|
return top;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return System.Console.CursorTop;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private int SetCursorLeft(int left)
|
||||||
|
{
|
||||||
|
if (left >= 0 && left < System.Console.BufferWidth)
|
||||||
|
{
|
||||||
|
System.Console.CursorLeft = left;
|
||||||
|
return left;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return System.Console.CursorLeft;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void WriteNewLine(ConsoleColor senderColor, string sender, ConsoleColor color, string format, params object[] args)
|
private void WriteNewLine(ConsoleColor senderColor, string sender, ConsoleColor color, string format, params object[] args)
|
||||||
{
|
{
|
||||||
lock (cmdline)
|
lock (cmdline)
|
||||||
{
|
{
|
||||||
if (y != -1)
|
if (y != -1)
|
||||||
{
|
{
|
||||||
System.Console.CursorTop = y;
|
y=SetCursorTop(y);
|
||||||
System.Console.CursorLeft = 0;
|
System.Console.CursorLeft = 0;
|
||||||
|
|
||||||
int count = cmdline.Length;
|
int count = cmdline.Length;
|
||||||
|
@ -569,7 +595,7 @@ namespace OpenSim.Framework.Console
|
||||||
while (count-- > 0)
|
while (count-- > 0)
|
||||||
System.Console.Write(" ");
|
System.Console.Write(" ");
|
||||||
|
|
||||||
System.Console.CursorTop = y;
|
y=SetCursorTop(y);
|
||||||
System.Console.CursorLeft = 0;
|
System.Console.CursorLeft = 0;
|
||||||
}
|
}
|
||||||
WritePrefixLine(senderColor, sender);
|
WritePrefixLine(senderColor, sender);
|
||||||
|
@ -585,7 +611,7 @@ namespace OpenSim.Framework.Console
|
||||||
{
|
{
|
||||||
if (y != -1)
|
if (y != -1)
|
||||||
{
|
{
|
||||||
System.Console.CursorTop = y;
|
y=SetCursorTop(y);
|
||||||
System.Console.CursorLeft = 0;
|
System.Console.CursorLeft = 0;
|
||||||
|
|
||||||
int count = cmdline.Length;
|
int count = cmdline.Length;
|
||||||
|
@ -594,7 +620,7 @@ namespace OpenSim.Framework.Console
|
||||||
while (count-- > 0)
|
while (count-- > 0)
|
||||||
System.Console.Write(" ");
|
System.Console.Write(" ");
|
||||||
|
|
||||||
System.Console.CursorTop = y;
|
y=SetCursorTop(y);
|
||||||
System.Console.CursorLeft = 0;
|
System.Console.CursorLeft = 0;
|
||||||
}
|
}
|
||||||
WriteConsoleLine(color, format, args);
|
WriteConsoleLine(color, format, args);
|
||||||
|
@ -695,7 +721,7 @@ namespace OpenSim.Framework.Console
|
||||||
System.Console.WriteLine(" ");
|
System.Console.WriteLine(" ");
|
||||||
}
|
}
|
||||||
|
|
||||||
System.Console.CursorTop = y;
|
y=SetCursorTop(y);
|
||||||
System.Console.CursorLeft = 0;
|
System.Console.CursorLeft = 0;
|
||||||
|
|
||||||
if (echo)
|
if (echo)
|
||||||
|
@ -703,8 +729,8 @@ namespace OpenSim.Framework.Console
|
||||||
else
|
else
|
||||||
System.Console.Write("{0}", prompt);
|
System.Console.Write("{0}", prompt);
|
||||||
|
|
||||||
System.Console.CursorLeft = new_x;
|
SetCursorLeft(new_x);
|
||||||
System.Console.CursorTop = new_y;
|
SetCursorTop(new_y);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -715,7 +741,7 @@ namespace OpenSim.Framework.Console
|
||||||
{
|
{
|
||||||
if (y != -1)
|
if (y != -1)
|
||||||
{
|
{
|
||||||
System.Console.CursorTop = y;
|
y = SetCursorTop(y);
|
||||||
System.Console.CursorLeft = 0;
|
System.Console.CursorLeft = 0;
|
||||||
|
|
||||||
int count = cmdline.Length + prompt.Length;
|
int count = cmdline.Length + prompt.Length;
|
||||||
|
@ -723,7 +749,7 @@ namespace OpenSim.Framework.Console
|
||||||
while (count-- > 0)
|
while (count-- > 0)
|
||||||
System.Console.Write(" ");
|
System.Console.Write(" ");
|
||||||
|
|
||||||
System.Console.CursorTop = y;
|
y = SetCursorTop(y);
|
||||||
System.Console.CursorLeft = 0;
|
System.Console.CursorLeft = 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -754,7 +780,7 @@ namespace OpenSim.Framework.Console
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
System.Console.CursorTop = y;
|
y = SetCursorTop(y);
|
||||||
System.Console.CursorLeft = 0;
|
System.Console.CursorLeft = 0;
|
||||||
|
|
||||||
int count = cmdline.Length + prompt.Length;
|
int count = cmdline.Length + prompt.Length;
|
||||||
|
@ -762,7 +788,7 @@ namespace OpenSim.Framework.Console
|
||||||
while (count-- > 0)
|
while (count-- > 0)
|
||||||
System.Console.Write(" ");
|
System.Console.Write(" ");
|
||||||
|
|
||||||
System.Console.CursorTop = y;
|
y = SetCursorTop(y);
|
||||||
System.Console.CursorLeft = 0;
|
System.Console.CursorLeft = 0;
|
||||||
|
|
||||||
System.Console.WriteLine(text);
|
System.Console.WriteLine(text);
|
||||||
|
@ -915,7 +941,7 @@ namespace OpenSim.Framework.Console
|
||||||
cp--;
|
cp--;
|
||||||
|
|
||||||
System.Console.CursorLeft = 0;
|
System.Console.CursorLeft = 0;
|
||||||
System.Console.CursorTop = y;
|
y = SetCursorTop(y);
|
||||||
|
|
||||||
System.Console.Write("{0}{1} ", prompt, cmdline);
|
System.Console.Write("{0}{1} ", prompt, cmdline);
|
||||||
|
|
||||||
|
@ -963,7 +989,7 @@ namespace OpenSim.Framework.Console
|
||||||
break;
|
break;
|
||||||
case ConsoleKey.Enter:
|
case ConsoleKey.Enter:
|
||||||
System.Console.CursorLeft = 0;
|
System.Console.CursorLeft = 0;
|
||||||
System.Console.CursorTop = y;
|
y = SetCursorTop(y);
|
||||||
|
|
||||||
System.Console.WriteLine("{0}{1}", prompt, cmdline);
|
System.Console.WriteLine("{0}{1}", prompt, cmdline);
|
||||||
|
|
||||||
|
|
|
@ -154,7 +154,9 @@ namespace OpenSim
|
||||||
protected override List<string> GetHelpTopics()
|
protected override List<string> GetHelpTopics()
|
||||||
{
|
{
|
||||||
List<string> topics = base.GetHelpTopics();
|
List<string> topics = base.GetHelpTopics();
|
||||||
topics.AddRange(SceneManager.CurrentOrFirstScene.GetCommanders().Keys);
|
Scene s = SceneManager.CurrentOrFirstScene;
|
||||||
|
if (s != null && s.GetCommanders() != null)
|
||||||
|
topics.AddRange(s.GetCommanders().Keys);
|
||||||
|
|
||||||
return topics;
|
return topics;
|
||||||
}
|
}
|
||||||
|
@ -204,8 +206,15 @@ namespace OpenSim
|
||||||
"Execute subcommand for plugin '" + topic + "'",
|
"Execute subcommand for plugin '" + topic + "'",
|
||||||
null);
|
null);
|
||||||
|
|
||||||
ICommander commander =
|
ICommander commander = null;
|
||||||
SceneManager.CurrentOrFirstScene.GetCommanders()[topic];
|
|
||||||
|
Scene s = SceneManager.CurrentOrFirstScene;
|
||||||
|
|
||||||
|
if (s != null && s.GetCommanders() != null)
|
||||||
|
{
|
||||||
|
if (s.GetCommanders().ContainsKey(topic))
|
||||||
|
commander = s.GetCommanders()[topic];
|
||||||
|
}
|
||||||
|
|
||||||
if (commander == null)
|
if (commander == null)
|
||||||
continue;
|
continue;
|
||||||
|
@ -227,6 +236,9 @@ namespace OpenSim
|
||||||
|
|
||||||
private void HandleCommanderHelp(string module, string[] cmd)
|
private void HandleCommanderHelp(string module, string[] cmd)
|
||||||
{
|
{
|
||||||
|
// Only safe for the interactive console, since it won't
|
||||||
|
// let us come here unless both scene and commander exist
|
||||||
|
//
|
||||||
ICommander moduleCommander = SceneManager.CurrentOrFirstScene.GetCommander(cmd[1]);
|
ICommander moduleCommander = SceneManager.CurrentOrFirstScene.GetCommander(cmd[1]);
|
||||||
if (moduleCommander != null)
|
if (moduleCommander != null)
|
||||||
m_console.Notice(moduleCommander.Help);
|
m_console.Notice(moduleCommander.Help);
|
||||||
|
|
Loading…
Reference in New Issue