X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2Fcorlib%2FSystem%2FConsoleDriver.cs;h=c8d5e721bd012ff7e6bf6957c32ae809434b7529;hb=d899b02874a476290f6e8cd54d40e0eaba2ecf04;hp=af50fb8cfa0e4f81fc38ad5ca7862c4e240c35f5;hpb=da4f9e9b2afb23791029d0bb09d78b868aabd870;p=mono.git diff --git a/mcs/class/corlib/System/ConsoleDriver.cs b/mcs/class/corlib/System/ConsoleDriver.cs index af50fb8cfa0..c8d5e721bd0 100644 --- a/mcs/class/corlib/System/ConsoleDriver.cs +++ b/mcs/class/corlib/System/ConsoleDriver.cs @@ -27,32 +27,52 @@ // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // -#if NET_2_0 +#if MONO_FEATURE_CONSOLE using System.IO; using System.Runtime.CompilerServices; namespace System { - class ConsoleDriver { + static class ConsoleDriver { internal static IConsoleDriver driver; static bool is_console; static bool called_isatty; static ConsoleDriver () { + // Put the actual new statements into separate methods to avoid initalizing + // three classes when only one is needed. if (!IsConsole) { - driver = new NullConsoleDriver (); + driver = CreateNullConsoleDriver (); } else if (Environment.IsRunningOnWindows) { - driver = new WindowsConsoleDriver (); + driver = CreateWindowsConsoleDriver (); } else { - driver = new TermInfoDriver (Environment.GetEnvironmentVariable ("TERM")); + string term = Environment.GetEnvironmentVariable ("TERM"); + + // Perhaps we should let the Terminfo driver return a + // success/failure flag based on the terminal properties + if (term == "dumb"){ + is_console = false; + driver = CreateNullConsoleDriver (); + } else + driver = CreateTermInfoDriver (term); } } - public static bool Echo { - get { return driver.Echo; } - set { driver.Echo = value; } + [MethodImplAttribute (MethodImplOptions.NoInlining)] + static IConsoleDriver CreateNullConsoleDriver () { + return new NullConsoleDriver (); } + [MethodImplAttribute (MethodImplOptions.NoInlining)] + static IConsoleDriver CreateWindowsConsoleDriver () { + return new WindowsConsoleDriver (); + } + + [MethodImplAttribute (MethodImplOptions.NoInlining)] + static IConsoleDriver CreateTermInfoDriver (string term) { + return new TermInfoDriver (term); + } + public static bool Initialized { get { return driver.Initialized; } } @@ -157,6 +177,24 @@ namespace System { set { driver.WindowWidth = value; } } + public static bool IsErrorRedirected { + get { + return !Isatty (MonoIO.ConsoleError); + } + } + + public static bool IsOutputRedirected { + get { + return !Isatty (MonoIO.ConsoleOutput); + } + } + + public static bool IsInputRedirected { + get { + return !Isatty (MonoIO.ConsoleInput); + } + } + public static void Beep (int frequency, int duration) { driver.Beep (frequency, duration); @@ -245,19 +283,13 @@ namespace System { internal static extern int InternalKeyAvailable (int ms_timeout); [MethodImplAttribute(MethodImplOptions.InternalCall)] - internal static extern bool TtySetup (string teardown, out byte verase, out byte vsusp, out byte intr); + unsafe internal static extern bool TtySetup (string keypadXmit, string teardown, out byte [] control_characters, out int *address); [MethodImplAttribute(MethodImplOptions.InternalCall)] internal static extern bool SetEcho (bool wantEcho); [MethodImplAttribute(MethodImplOptions.InternalCall)] internal static extern bool SetBreak (bool wantBreak); - - [MethodImplAttribute(MethodImplOptions.InternalCall)] - internal static extern bool GetTtySize (IntPtr handle, out int width, out int height); - - [MethodImplAttribute(MethodImplOptions.InternalCall)] - internal static extern void Suspend (); } } #endif