| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 
 | //===-- 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 <termios.h>
#include <stdint.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
 |