//
// (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
private static TextWriter stderr;
private static TextReader stdin;
-#if NET_4_5
- static TextWriter console_stdout;
- static TextWriter console_stderr;
- static TextReader console_stdin;
-#endif
-
static Console ()
{
-#if NET_2_1
- Encoding inputEncoding;
- Encoding outputEncoding;
-#endif
-
if (Environment.IsRunningOnWindows) {
//
// On Windows, follow the Windows tradition
// UTF-8 ZWNBSP (zero-width non-breaking space).
//
int code_page = 0;
- Encoding.InternalCodePage (ref code_page);
+ EncodingHelper.InternalCodePage (ref code_page);
if (code_page != -1 && ((code_page & 0x0fffffff) == 3 // UTF8Encoding.UTF8_CODE_PAGE
|| ((code_page & 0x10000000) != 0)))
- inputEncoding = outputEncoding = Encoding.UTF8Unmarked;
+ inputEncoding = outputEncoding = EncodingHelper.UTF8Unmarked;
else
inputEncoding = outputEncoding = Encoding.Default;
}
{
#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
-#if FULL_AOT_RUNTIME
- Type nslogwriter = Type.GetType ("MonoTouch.Foundation.NSLogWriter, monotouch, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null");
- stdout = (TextWriter) Activator.CreateInstance (nslogwriter);
-#else
- stdout = new UnexceptionalStreamWriter (OpenStandardOutput (0), outputEncoding);
- ((StreamWriter)stdout).AutoFlush = true;
+ stdout = TextWriter.Synchronized (new CStreamWriter (OpenStandardOutput (0), outputEncoding, true) { AutoFlush = true });
+ stderr = TextWriter.Synchronized (new CStreamWriter (OpenStandardError (0), outputEncoding, true) { AutoFlush = true });
+ } else
#endif
- stdout = TextWriter.Synchronized (stdout, true);
+ {
+ stdin = TextReader.Synchronized (new UnexceptionalStreamReader (OpenStandardInput (0), inputEncoding));
-#if FULL_AOT_RUNTIME
- stderr = (TextWriter) Activator.CreateInstance (nslogwriter);
+#if MONOTOUCH
+ stdout = new NSLogWriter ();
+ 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 NET_4_5
- console_stderr = stderr;
- console_stdout = stdout;
- console_stdin = stdin;
-#endif
+ stdout = TextWriter.Synchronized (new UnexceptionalStreamWriter (OpenStandardOutput (0), outputEncoding) { AutoFlush = true });
+ stderr = TextWriter.Synchronized (new UnexceptionalStreamWriter (OpenStandardError (0), outputEncoding) { AutoFlush = true });
#if MONODROID
- if (LogcatTextWriter.IsRunningOnAndroid ()) {
- stdout = TextWriter.Synchronized (new LogcatTextWriter ("mono-stdout", stdout));
- stderr = TextWriter.Synchronized (new LogcatTextWriter ("mono-stderr", stderr));
+ if (LogcatTextWriter.IsRunningOnAndroid ()) {
+ stdout = TextWriter.Synchronized (new LogcatTextWriter ("mono-stdout", stdout));
+ stderr = TextWriter.Synchronized (new LogcatTextWriter ("mono-stderr", stderr));
+ }
+#endif // MONODROID
+#endif // MONOTOUCH
}
-#endif // MONODROID
GC.SuppressFinalize (stdout);
GC.SuppressFinalize (stderr);
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);
+ // TODO: Should use __ConsoleStream from reference sources
+ return new FileStream (handle, access, false, bufferSize, false, true);
} catch (IOException) {
- return new NullStream ();
+ return Stream.Null;
}
}
#endif
-#if !NET_2_1
// FIXME: Console should use these encodings when changed
static Encoding inputEncoding;
static Encoding outputEncoding;
}
}
+#if !NET_2_1
public static ConsoleColor BackgroundColor {
get { return ConsoleDriver.BackgroundColor; }
set { ConsoleDriver.BackgroundColor = value; }
set { ConsoleDriver.WindowWidth = value; }
}
-#if NET_4_5
public static bool IsErrorRedirected {
get {
- return stderr != console_stderr || ConsoleDriver.IsErrorRedirected;
+ return ConsoleDriver.IsErrorRedirected;
}
}
public static bool IsOutputRedirected {
get {
- return stdout != console_stdout || ConsoleDriver.IsOutputRedirected;
+ return ConsoleDriver.IsOutputRedirected;
}
}
public static bool IsInputRedirected {
get {
- return stdin != console_stdin || ConsoleDriver.IsInputRedirected;
+ return ConsoleDriver.IsInputRedirected;
}
}
-#endif
public static void Beep ()
{