| //===-- TTYState.h ----------------------------------------------*- C++ -*-===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // Created by Greg Clayton on 3/26/07. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef __TTYState_h__ |
| #define __TTYState_h__ |
| |
| #include <stdint.h> |
| #include <termios.h> |
| |
| class TTYState { |
| public: |
| TTYState(); |
| ~TTYState(); |
| |
| bool GetTTYState(int fd, bool saveProcessGroup); |
| bool SetTTYState() const; |
| |
| bool IsValid() const { |
| return FileDescriptorValid() && TFlagsValid() && TTYStateValid(); |
| } |
| bool FileDescriptorValid() const { return m_fd >= 0; } |
| bool TFlagsValid() const { return m_tflags != -1; } |
| bool TTYStateValid() const { return m_ttystateErr == 0; } |
| bool ProcessGroupValid() const { return m_processGroup != -1; } |
| |
| protected: |
| int m_fd; // File descriptor |
| int m_tflags; |
| int m_ttystateErr; |
| struct termios m_ttystate; |
| pid_t m_processGroup; |
| }; |
| |
| class TTYStateSwitcher { |
| public: |
| TTYStateSwitcher(); |
| ~TTYStateSwitcher(); |
| |
| bool GetState(uint32_t idx, int fd, bool saveProcessGroup); |
| bool SetState(uint32_t idx) const; |
| uint32_t NumStates() const { return sizeof(m_ttystates) / sizeof(TTYState); } |
| bool ValidStateIndex(uint32_t idx) const { return idx < NumStates(); } |
| |
| protected: |
| mutable uint32_t m_currentState; |
| TTYState m_ttystates[2]; |
| }; |
| |
| #endif |