// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. final int _STDIO_HANDLE_TYPE_TERMINAL = 0; final int _STDIO_HANDLE_TYPE_PIPE = 1; final int _STDIO_HANDLE_TYPE_FILE = 2; final int _STDIO_HANDLE_TYPE_SOCKET = 3; final int _STDIO_HANDLE_TYPE_OTHER = -1; InputStream _stdin; OutputStream _stdout; OutputStream _stderr; InputStream _getStdioInputStream() { switch (_getStdioHandleType(0)) { case _STDIO_HANDLE_TYPE_TERMINAL: case _STDIO_HANDLE_TYPE_PIPE: case _STDIO_HANDLE_TYPE_SOCKET: Socket s = new _Socket._internalReadOnly(); _getStdioHandle(s, 0); return s.inputStream; case _STDIO_HANDLE_TYPE_FILE: return new _FileInputStream.fromStdio(0); default: throw new FileIOException("Unsupported stdin type"); } } OutputStream _getStdioOutputStream(int fd) { assert(fd == 1 || fd == 2); switch (_getStdioHandleType(fd)) { case _STDIO_HANDLE_TYPE_TERMINAL: case _STDIO_HANDLE_TYPE_PIPE: case _STDIO_HANDLE_TYPE_SOCKET: Socket s = new _Socket._internalWriteOnly(); _getStdioHandle(s, fd); return s.outputStream; case _STDIO_HANDLE_TYPE_FILE: return new _FileOutputStream.fromStdio(fd); default: throw new FileIOException("Unsupported stdin type"); } } InputStream get stdin() { if (_stdin == null) { _stdin = _getStdioInputStream(); } return _stdin; } OutputStream get stdout() { if (_stdout == null) { _stdout = _getStdioOutputStream(1); } return _stdout; } OutputStream get stderr() { if (_stderr == null) { _stderr = _getStdioOutputStream(2); } return _stderr; } _getStdioHandle(Socket socket, int num) native "Socket_GetStdioHandle"; _getStdioHandleType(int num) native "File_GetStdioHandleType";