124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- TTYState.h ----------------------------------------------*- C++ -*-===// 224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// The LLVM Compiler Infrastructure 424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source 624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details. 724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===// 924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Created by Greg Clayton on 3/26/07. 1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===// 1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef __TTYState_h__ 1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define __TTYState_h__ 1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <termios.h> 1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <stdint.h> 1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass TTYState 2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner TTYState(); 2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ~TTYState(); 2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool GetTTYState (int fd, bool saveProcessGroup); 2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool SetTTYState () const; 2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool IsValid() const { return FileDescriptorValid() && TFlagsValid() && TTYStateValid(); } 3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool FileDescriptorValid() const { return m_fd >= 0; } 3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool TFlagsValid() const { return m_tflags != -1; } 3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool TTYStateValid() const { return m_ttystateErr == 0; } 3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool ProcessGroupValid() const { return m_processGroup != -1; } 3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected: 3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int m_fd; // File descriptor 3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int m_tflags; 3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int m_ttystateErr; 3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner struct termios m_ttystate; 4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner pid_t m_processGroup; 4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass TTYStateSwitcher 4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner TTYStateSwitcher(); 4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ~TTYStateSwitcher(); 5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool GetState(uint32_t idx, int fd, bool saveProcessGroup); 5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool SetState(uint32_t idx) const; 5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t NumStates() const { return sizeof(m_ttystates)/sizeof(TTYState); } 5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool ValidStateIndex(uint32_t idx) const { return idx < NumStates(); } 5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected: 5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner mutable uint32_t m_currentState; 5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner TTYState m_ttystates[2]; 5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif