//
// (C) Ximian, Inc. http://www.ximian.com
// (C) 2004,2005 Novell, Inc. (http://www.novell.com)
-//
+// Copyright 2013 Xamarin Inc. (http://www.xamarin.com)
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
namespace System
{
- public static class Console
+ public static partial class Console
{
#if !NET_2_1
private class WindowsConsole
}
}
#endif
+
internal static TextWriter stdout;
private static TextWriter stderr;
private static TextReader stdin;
inputEncoding = outputEncoding = Encoding.Default;
}
- stderr = new UnexceptionalStreamWriter (OpenStandardError (0), outputEncoding);
- ((StreamWriter)stderr).AutoFlush = true;
- stderr = TextWriter.Synchronized (stderr, true);
+ SetupStreams (inputEncoding, outputEncoding);
+ }
+ static void SetupStreams (Encoding inputEncoding, Encoding outputEncoding)
+ {
#if !NET_2_1
if (!Environment.IsRunningOnWindows && ConsoleDriver.IsConsole) {
StreamWriter w = new CStreamWriter (OpenStandardOutput (0), outputEncoding);
w.AutoFlush = true;
stdout = TextWriter.Synchronized (w, true);
+
+ w = new CStreamWriter (OpenStandardOutput (0), outputEncoding);
+ w.AutoFlush = true;
+ stderr = TextWriter.Synchronized (w, true);
+
stdin = new CStreamReader (OpenStandardInput (0), inputEncoding);
} else {
#endif
+// FULL_AOT_RUNTIME is used (instead of MONOTOUCH) since we only want this code when running on
+// iOS (simulator or devices) and *not* when running tools (e.g. btouch #12179) that needs to use
+// the mscorlib.dll shipped with Xamarin.iOS
+#if MONOTOUCH && FULL_AOT_RUNTIME
+ stdout = new NSLogWriter ();
+#else
stdout = new UnexceptionalStreamWriter (OpenStandardOutput (0), outputEncoding);
((StreamWriter)stdout).AutoFlush = true;
+#endif
stdout = TextWriter.Synchronized (stdout, true);
+
+#if MONOTOUCH && FULL_AOT_RUNTIME
+ stderr = new NSLogWriter ();
+#else
+ stderr = new UnexceptionalStreamWriter (OpenStandardError (0), outputEncoding);
+ ((StreamWriter)stderr).AutoFlush = true;
+#endif
+ stderr = TextWriter.Synchronized (stderr, true);
+
stdin = new UnexceptionalStreamReader (OpenStandardInput (0), inputEncoding);
stdin = TextReader.Synchronized (stdin);
#if !NET_2_1
}
#endif
+#if MONODROID
+ if (LogcatTextWriter.IsRunningOnAndroid ()) {
+ stdout = TextWriter.Synchronized (new LogcatTextWriter ("mono-stdout", stdout));
+ stderr = TextWriter.Synchronized (new LogcatTextWriter ("mono-stderr", stderr));
+ }
+#endif // MONODROID
+
GC.SuppressFinalize (stdout);
GC.SuppressFinalize (stderr);
GC.SuppressFinalize (stdin);
private static Stream Open (IntPtr handle, FileAccess access, int bufferSize)
{
-#if MOONLIGHT
- if (SecurityManager.SecurityEnabled && !Debugger.IsAttached && Environment.GetEnvironmentVariable ("MOONLIGHT_ENABLE_CONSOLE") == null)
- return new NullStream ();
-#endif
try {
return new FileStream (handle, access, false, bufferSize, false, bufferSize == 0);
} catch (IOException) {
public static Encoding InputEncoding {
get { return inputEncoding; }
- set { inputEncoding = value; }
+ set {
+ inputEncoding = value;
+ SetupStreams (inputEncoding, outputEncoding);
+ }
}
public static Encoding OutputEncoding {
get { return outputEncoding; }
- set { outputEncoding = value; }
+ set {
+ outputEncoding = value;
+ SetupStreams (inputEncoding, outputEncoding);
+ }
}
public static ConsoleColor BackgroundColor {
set { ConsoleDriver.WindowWidth = value; }
}
+#if NET_4_5
+ public static bool IsErrorRedirected {
+ get {
+ return ConsoleDriver.IsErrorRedirected;
+ }
+ }
+
+ public static bool IsOutputRedirected {
+ get {
+ return ConsoleDriver.IsOutputRedirected;
+ }
+ }
+
+ public static bool IsInputRedirected {
+ get {
+ return ConsoleDriver.IsInputRedirected;
+ }
+ }
+#endif
+
public static void Beep ()
{
Beep (1000, 500);