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