Fix http://opensimulator.org/mantis/view.php?id=4657 where OpenSim.Grid.UserServer.exe fails on startup if no previous config
probably appears to occur because mono 2.4.2.3 (and possibly later) erroneously returns a value of 0 for BufferWidth and BufferHeight in some circumstancesslimupdates
parent
a7449a82bc
commit
48f3733963
|
@ -38,7 +38,7 @@ namespace OpenSim.Framework.Console
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// A console that uses cursor control and color
|
/// A console that uses cursor control and color
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class LocalConsole : CommandConsole
|
public class LocalConsole : CommandConsole
|
||||||
{
|
{
|
||||||
// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
@ -100,24 +100,40 @@ namespace OpenSim.Framework.Console
|
||||||
private int SetCursorTop(int top)
|
private int SetCursorTop(int top)
|
||||||
{
|
{
|
||||||
// From at least mono 2.4.2.3, window resizing can give mono an invalid row and column values. If we try
|
// From at least mono 2.4.2.3, window resizing can give mono an invalid row and column values. If we try
|
||||||
// to set a cursor row position with a currently invalid column, mono will throw an exception.
|
// to set a cursor row position with a currently invalid column, mono will throw an exception.
|
||||||
// Therefore, we need to make sure that the column position is valid first.
|
// Therefore, we need to make sure that the column position is valid first.
|
||||||
int left = System.Console.CursorLeft;
|
int left = System.Console.CursorLeft;
|
||||||
|
|
||||||
if (left < 0)
|
if (left < 0)
|
||||||
|
{
|
||||||
System.Console.CursorLeft = 0;
|
System.Console.CursorLeft = 0;
|
||||||
else if (left >= System.Console.BufferWidth)
|
}
|
||||||
System.Console.CursorLeft = System.Console.BufferWidth - 1;
|
else
|
||||||
|
{
|
||||||
|
int bw = System.Console.BufferWidth;
|
||||||
|
|
||||||
|
// On Mono 2.4.2.3 (and possibly above), the buffer value is sometimes erroneously zero (Mantis 4657)
|
||||||
|
if (bw > 0 && left >= bw)
|
||||||
|
System.Console.CursorLeft = bw - 1;
|
||||||
|
}
|
||||||
|
|
||||||
if (top < 0)
|
if (top < 0)
|
||||||
|
{
|
||||||
top = 0;
|
top = 0;
|
||||||
if (top >= System.Console.BufferHeight)
|
}
|
||||||
top = System.Console.BufferHeight - 1;
|
else
|
||||||
|
{
|
||||||
|
int bh = System.Console.BufferHeight;
|
||||||
|
|
||||||
|
// On Mono 2.4.2.3 (and possibly above), the buffer value is sometimes erroneously zero (Mantis 4657)
|
||||||
|
if (bh > 0 && top >= bh)
|
||||||
|
top = bh - 1;
|
||||||
|
}
|
||||||
|
|
||||||
System.Console.CursorTop = top;
|
System.Console.CursorTop = top;
|
||||||
|
|
||||||
return top;
|
return top;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Set the cursor column.
|
/// Set the cursor column.
|
||||||
|
@ -129,23 +145,38 @@ namespace OpenSim.Framework.Console
|
||||||
/// </param>
|
/// </param>
|
||||||
/// <returns>
|
/// <returns>
|
||||||
/// The new cursor column.
|
/// The new cursor column.
|
||||||
/// </returns>
|
/// </returns>
|
||||||
private int SetCursorLeft(int left)
|
private int SetCursorLeft(int left)
|
||||||
{
|
{
|
||||||
// From at least mono 2.4.2.3, window resizing can give mono an invalid row and column values. If we try
|
// From at least mono 2.4.2.3, window resizing can give mono an invalid row and column values. If we try
|
||||||
// to set a cursor column position with a currently invalid row, mono will throw an exception.
|
// to set a cursor column position with a currently invalid row, mono will throw an exception.
|
||||||
// Therefore, we need to make sure that the row position is valid first.
|
// Therefore, we need to make sure that the row position is valid first.
|
||||||
int top = System.Console.CursorTop;
|
int top = System.Console.CursorTop;
|
||||||
|
|
||||||
if (top < 0)
|
if (top < 0)
|
||||||
|
{
|
||||||
System.Console.CursorTop = 0;
|
System.Console.CursorTop = 0;
|
||||||
else if (top >= System.Console.BufferHeight)
|
}
|
||||||
System.Console.CursorTop = System.Console.BufferHeight - 1;
|
else
|
||||||
|
{
|
||||||
|
int bh = System.Console.BufferHeight;
|
||||||
|
// On Mono 2.4.2.3 (and possibly above), the buffer value is sometimes erroneously zero (Mantis 4657)
|
||||||
|
if (bh > 0 && top >= bh)
|
||||||
|
System.Console.CursorTop = bh - 1;
|
||||||
|
}
|
||||||
|
|
||||||
if (left < 0)
|
if (left < 0)
|
||||||
|
{
|
||||||
left = 0;
|
left = 0;
|
||||||
if (left >= System.Console.BufferWidth)
|
}
|
||||||
left = System.Console.BufferWidth - 1;
|
else
|
||||||
|
{
|
||||||
|
int bw = System.Console.BufferWidth;
|
||||||
|
|
||||||
|
// On Mono 2.4.2.3 (and possibly above), the buffer value is sometimes erroneously zero (Mantis 4657)
|
||||||
|
if (bw > 0 && left >= bw)
|
||||||
|
left = bw - 1;
|
||||||
|
}
|
||||||
|
|
||||||
System.Console.CursorLeft = left;
|
System.Console.CursorLeft = left;
|
||||||
|
|
||||||
|
@ -183,7 +214,7 @@ namespace OpenSim.Framework.Console
|
||||||
System.Console.Write("{0}", prompt);
|
System.Console.Write("{0}", prompt);
|
||||||
|
|
||||||
SetCursorTop(new_y);
|
SetCursorTop(new_y);
|
||||||
SetCursorLeft(new_x);
|
SetCursorLeft(new_x);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1486,4 +1486,4 @@ namespace OpenSim.Framework
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue