diff options
author | Melanie Thielker | 2009-02-13 20:49:23 +0000 |
---|---|---|
committer | Melanie Thielker | 2009-02-13 20:49:23 +0000 |
commit | a8f3d625cb3ac61b00c01e3f5af015b3d6c88105 (patch) | |
tree | c46694a2db0d4da6f161a7e1303d218182b7596d /OpenSim | |
parent | * Change static field "initialized" in RestInterregionComms to an instance field (diff) | |
download | opensim-SC-a8f3d625cb3ac61b00c01e3f5af015b3d6c88105.zip opensim-SC-a8f3d625cb3ac61b00c01e3f5af015b3d6c88105.tar.gz opensim-SC-a8f3d625cb3ac61b00c01e3f5af015b3d6c88105.tar.bz2 opensim-SC-a8f3d625cb3ac61b00c01e3f5af015b3d6c88105.tar.xz |
Guard the values used to set the cursor position in the real time console
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Framework/Console/ConsoleBase.cs | 52 | ||||
-rw-r--r-- | OpenSim/Region/Application/OpenSimBase.cs | 18 |
2 files changed, 54 insertions, 16 deletions
diff --git a/OpenSim/Framework/Console/ConsoleBase.cs b/OpenSim/Framework/Console/ConsoleBase.cs index 0f0b3a6..bd19800 100644 --- a/OpenSim/Framework/Console/ConsoleBase.cs +++ b/OpenSim/Framework/Console/ConsoleBase.cs | |||
@@ -554,13 +554,39 @@ namespace OpenSim.Framework.Console | |||
554 | WriteNewLine(DeriveColor(sender), sender, ConsoleColor.Gray, format, args); | 554 | WriteNewLine(DeriveColor(sender), sender, ConsoleColor.Gray, format, args); |
555 | } | 555 | } |
556 | 556 | ||
557 | private int SetCursorTop(int top) | ||
558 | { | ||
559 | if (top >= 0 && top < System.Console.BufferHeight) | ||
560 | { | ||
561 | System.Console.CursorTop = top; | ||
562 | return top; | ||
563 | } | ||
564 | else | ||
565 | { | ||
566 | return System.Console.CursorTop; | ||
567 | } | ||
568 | } | ||
569 | |||
570 | private int SetCursorLeft(int left) | ||
571 | { | ||
572 | if (left >= 0 && left < System.Console.BufferWidth) | ||
573 | { | ||
574 | System.Console.CursorLeft = left; | ||
575 | return left; | ||
576 | } | ||
577 | else | ||
578 | { | ||
579 | return System.Console.CursorLeft; | ||
580 | } | ||
581 | } | ||
582 | |||
557 | private void WriteNewLine(ConsoleColor senderColor, string sender, ConsoleColor color, string format, params object[] args) | 583 | private void WriteNewLine(ConsoleColor senderColor, string sender, ConsoleColor color, string format, params object[] args) |
558 | { | 584 | { |
559 | lock (cmdline) | 585 | lock (cmdline) |
560 | { | 586 | { |
561 | if (y != -1) | 587 | if (y != -1) |
562 | { | 588 | { |
563 | System.Console.CursorTop = y; | 589 | y=SetCursorTop(y); |
564 | System.Console.CursorLeft = 0; | 590 | System.Console.CursorLeft = 0; |
565 | 591 | ||
566 | int count = cmdline.Length; | 592 | int count = cmdline.Length; |
@@ -569,7 +595,7 @@ namespace OpenSim.Framework.Console | |||
569 | while (count-- > 0) | 595 | while (count-- > 0) |
570 | System.Console.Write(" "); | 596 | System.Console.Write(" "); |
571 | 597 | ||
572 | System.Console.CursorTop = y; | 598 | y=SetCursorTop(y); |
573 | System.Console.CursorLeft = 0; | 599 | System.Console.CursorLeft = 0; |
574 | } | 600 | } |
575 | WritePrefixLine(senderColor, sender); | 601 | WritePrefixLine(senderColor, sender); |
@@ -585,7 +611,7 @@ namespace OpenSim.Framework.Console | |||
585 | { | 611 | { |
586 | if (y != -1) | 612 | if (y != -1) |
587 | { | 613 | { |
588 | System.Console.CursorTop = y; | 614 | y=SetCursorTop(y); |
589 | System.Console.CursorLeft = 0; | 615 | System.Console.CursorLeft = 0; |
590 | 616 | ||
591 | int count = cmdline.Length; | 617 | int count = cmdline.Length; |
@@ -594,7 +620,7 @@ namespace OpenSim.Framework.Console | |||
594 | while (count-- > 0) | 620 | while (count-- > 0) |
595 | System.Console.Write(" "); | 621 | System.Console.Write(" "); |
596 | 622 | ||
597 | System.Console.CursorTop = y; | 623 | y=SetCursorTop(y); |
598 | System.Console.CursorLeft = 0; | 624 | System.Console.CursorLeft = 0; |
599 | } | 625 | } |
600 | WriteConsoleLine(color, format, args); | 626 | WriteConsoleLine(color, format, args); |
@@ -695,7 +721,7 @@ namespace OpenSim.Framework.Console | |||
695 | System.Console.WriteLine(" "); | 721 | System.Console.WriteLine(" "); |
696 | } | 722 | } |
697 | 723 | ||
698 | System.Console.CursorTop = y; | 724 | y=SetCursorTop(y); |
699 | System.Console.CursorLeft = 0; | 725 | System.Console.CursorLeft = 0; |
700 | 726 | ||
701 | if (echo) | 727 | if (echo) |
@@ -703,8 +729,8 @@ namespace OpenSim.Framework.Console | |||
703 | else | 729 | else |
704 | System.Console.Write("{0}", prompt); | 730 | System.Console.Write("{0}", prompt); |
705 | 731 | ||
706 | System.Console.CursorLeft = new_x; | 732 | SetCursorLeft(new_x); |
707 | System.Console.CursorTop = new_y; | 733 | SetCursorTop(new_y); |
708 | } | 734 | } |
709 | } | 735 | } |
710 | 736 | ||
@@ -715,7 +741,7 @@ namespace OpenSim.Framework.Console | |||
715 | { | 741 | { |
716 | if (y != -1) | 742 | if (y != -1) |
717 | { | 743 | { |
718 | System.Console.CursorTop = y; | 744 | y = SetCursorTop(y); |
719 | System.Console.CursorLeft = 0; | 745 | System.Console.CursorLeft = 0; |
720 | 746 | ||
721 | int count = cmdline.Length + prompt.Length; | 747 | int count = cmdline.Length + prompt.Length; |
@@ -723,7 +749,7 @@ namespace OpenSim.Framework.Console | |||
723 | while (count-- > 0) | 749 | while (count-- > 0) |
724 | System.Console.Write(" "); | 750 | System.Console.Write(" "); |
725 | 751 | ||
726 | System.Console.CursorTop = y; | 752 | y = SetCursorTop(y); |
727 | System.Console.CursorLeft = 0; | 753 | System.Console.CursorLeft = 0; |
728 | 754 | ||
729 | } | 755 | } |
@@ -754,7 +780,7 @@ namespace OpenSim.Framework.Console | |||
754 | return; | 780 | return; |
755 | } | 781 | } |
756 | 782 | ||
757 | System.Console.CursorTop = y; | 783 | y = SetCursorTop(y); |
758 | System.Console.CursorLeft = 0; | 784 | System.Console.CursorLeft = 0; |
759 | 785 | ||
760 | int count = cmdline.Length + prompt.Length; | 786 | int count = cmdline.Length + prompt.Length; |
@@ -762,7 +788,7 @@ namespace OpenSim.Framework.Console | |||
762 | while (count-- > 0) | 788 | while (count-- > 0) |
763 | System.Console.Write(" "); | 789 | System.Console.Write(" "); |
764 | 790 | ||
765 | System.Console.CursorTop = y; | 791 | y = SetCursorTop(y); |
766 | System.Console.CursorLeft = 0; | 792 | System.Console.CursorLeft = 0; |
767 | 793 | ||
768 | System.Console.WriteLine(text); | 794 | System.Console.WriteLine(text); |
@@ -915,7 +941,7 @@ namespace OpenSim.Framework.Console | |||
915 | cp--; | 941 | cp--; |
916 | 942 | ||
917 | System.Console.CursorLeft = 0; | 943 | System.Console.CursorLeft = 0; |
918 | System.Console.CursorTop = y; | 944 | y = SetCursorTop(y); |
919 | 945 | ||
920 | System.Console.Write("{0}{1} ", prompt, cmdline); | 946 | System.Console.Write("{0}{1} ", prompt, cmdline); |
921 | 947 | ||
@@ -963,7 +989,7 @@ namespace OpenSim.Framework.Console | |||
963 | break; | 989 | break; |
964 | case ConsoleKey.Enter: | 990 | case ConsoleKey.Enter: |
965 | System.Console.CursorLeft = 0; | 991 | System.Console.CursorLeft = 0; |
966 | System.Console.CursorTop = y; | 992 | y = SetCursorTop(y); |
967 | 993 | ||
968 | System.Console.WriteLine("{0}{1}", prompt, cmdline); | 994 | System.Console.WriteLine("{0}{1}", prompt, cmdline); |
969 | 995 | ||
diff --git a/OpenSim/Region/Application/OpenSimBase.cs b/OpenSim/Region/Application/OpenSimBase.cs index f4e28be..914bd7e 100644 --- a/OpenSim/Region/Application/OpenSimBase.cs +++ b/OpenSim/Region/Application/OpenSimBase.cs | |||
@@ -154,7 +154,9 @@ namespace OpenSim | |||
154 | protected override List<string> GetHelpTopics() | 154 | protected override List<string> GetHelpTopics() |
155 | { | 155 | { |
156 | List<string> topics = base.GetHelpTopics(); | 156 | List<string> topics = base.GetHelpTopics(); |
157 | topics.AddRange(SceneManager.CurrentOrFirstScene.GetCommanders().Keys); | 157 | Scene s = SceneManager.CurrentOrFirstScene; |
158 | if (s != null && s.GetCommanders() != null) | ||
159 | topics.AddRange(s.GetCommanders().Keys); | ||
158 | 160 | ||
159 | return topics; | 161 | return topics; |
160 | } | 162 | } |
@@ -204,8 +206,15 @@ namespace OpenSim | |||
204 | "Execute subcommand for plugin '" + topic + "'", | 206 | "Execute subcommand for plugin '" + topic + "'", |
205 | null); | 207 | null); |
206 | 208 | ||
207 | ICommander commander = | 209 | ICommander commander = null; |
208 | SceneManager.CurrentOrFirstScene.GetCommanders()[topic]; | 210 | |
211 | Scene s = SceneManager.CurrentOrFirstScene; | ||
212 | |||
213 | if (s != null && s.GetCommanders() != null) | ||
214 | { | ||
215 | if (s.GetCommanders().ContainsKey(topic)) | ||
216 | commander = s.GetCommanders()[topic]; | ||
217 | } | ||
209 | 218 | ||
210 | if (commander == null) | 219 | if (commander == null) |
211 | continue; | 220 | continue; |
@@ -227,6 +236,9 @@ namespace OpenSim | |||
227 | 236 | ||
228 | private void HandleCommanderHelp(string module, string[] cmd) | 237 | private void HandleCommanderHelp(string module, string[] cmd) |
229 | { | 238 | { |
239 | // Only safe for the interactive console, since it won't | ||
240 | // let us come here unless both scene and commander exist | ||
241 | // | ||
230 | ICommander moduleCommander = SceneManager.CurrentOrFirstScene.GetCommander(cmd[1]); | 242 | ICommander moduleCommander = SceneManager.CurrentOrFirstScene.GetCommander(cmd[1]); |
231 | if (moduleCommander != null) | 243 | if (moduleCommander != null) |
232 | m_console.Notice(moduleCommander.Help); | 244 | m_console.Notice(moduleCommander.Help); |