1 //===-- TTYState.h ----------------------------------------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // Created by Greg Clayton on 3/26/07. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #ifndef __TTYState_h__ 15 #define __TTYState_h__ 16 17 #include <termios.h> 18 #include <stdint.h> 19 20 class TTYState 21 { 22 public: 23 TTYState(); 24 ~TTYState(); 25 26 bool GetTTYState (int fd, bool saveProcessGroup); 27 bool SetTTYState () const; 28 IsValid()29 bool IsValid() const { return FileDescriptorValid() && TFlagsValid() && TTYStateValid(); } FileDescriptorValid()30 bool FileDescriptorValid() const { return m_fd >= 0; } TFlagsValid()31 bool TFlagsValid() const { return m_tflags != -1; } TTYStateValid()32 bool TTYStateValid() const { return m_ttystateErr == 0; } ProcessGroupValid()33 bool ProcessGroupValid() const { return m_processGroup != -1; } 34 35 protected: 36 int m_fd; // File descriptor 37 int m_tflags; 38 int m_ttystateErr; 39 struct termios m_ttystate; 40 pid_t m_processGroup; 41 42 }; 43 44 45 class TTYStateSwitcher 46 { 47 public: 48 TTYStateSwitcher(); 49 ~TTYStateSwitcher(); 50 51 bool GetState(uint32_t idx, int fd, bool saveProcessGroup); 52 bool SetState(uint32_t idx) const; NumStates()53 uint32_t NumStates() const { return sizeof(m_ttystates)/sizeof(TTYState); } ValidStateIndex(uint32_t idx)54 bool ValidStateIndex(uint32_t idx) const { return idx < NumStates(); } 55 56 protected: 57 mutable uint32_t m_currentState; 58 TTYState m_ttystates[2]; 59 }; 60 61 #endif