Home | History | Annotate | Download | only in source
      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 
     29     bool    IsValid() const { return FileDescriptorValid() && TFlagsValid() && TTYStateValid(); }
     30     bool    FileDescriptorValid() const { return m_fd >= 0; }
     31     bool    TFlagsValid() const { return m_tflags != -1; }
     32     bool    TTYStateValid() const { return m_ttystateErr == 0; }
     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;
     53     uint32_t NumStates() const { return sizeof(m_ttystates)/sizeof(TTYState); }
     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