// Copyright (c) 2013, 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. #include "platform/globals.h" #if defined(TARGET_OS_LINUX) #include // NOLINT #include // NOLINT #include // NOLINT #include "bin/stdio.h" #include "bin/fdutils.h" #include "platform/signal_blocker.h" namespace dart { namespace bin { int Stdin::ReadByte() { int c = NO_RETRY_EXPECTED(getchar()); if (c == EOF) { c = -1; } return c; } bool Stdin::GetEchoMode() { struct termios term; VOID_NO_RETRY_EXPECTED(tcgetattr(STDIN_FILENO, &term)); return (term.c_lflag & ECHO) != 0; } void Stdin::SetEchoMode(bool enabled) { struct termios term; VOID_NO_RETRY_EXPECTED(tcgetattr(STDIN_FILENO, &term)); if (enabled) { term.c_lflag |= ECHO|ECHONL; } else { term.c_lflag &= ~(ECHO|ECHONL); } VOID_NO_RETRY_EXPECTED(tcsetattr(STDIN_FILENO, TCSANOW, &term)); } bool Stdin::GetLineMode() { struct termios term; VOID_NO_RETRY_EXPECTED(tcgetattr(STDIN_FILENO, &term)); return (term.c_lflag & ICANON) != 0; } void Stdin::SetLineMode(bool enabled) { struct termios term; VOID_NO_RETRY_EXPECTED(tcgetattr(STDIN_FILENO, &term)); if (enabled) { term.c_lflag |= ICANON; } else { term.c_lflag &= ~(ICANON); } VOID_NO_RETRY_EXPECTED(tcsetattr(STDIN_FILENO, TCSANOW, &term)); } bool Stdout::GetTerminalSize(int size[2]) { struct winsize w; if (NO_RETRY_EXPECTED(ioctl(STDOUT_FILENO, TIOCGWINSZ, &w)) == 0 && (w.ws_col != 0 || w.ws_row != 0)) { size[0] = w.ws_col; size[1] = w.ws_row; return true; } return false; } } // namespace bin } // namespace dart #endif // defined(TARGET_OS_LINUX)