#ifndef _SHELL_H
#define _SHELL_H
#include "ShellInfo.h"
class ActiveProcessInfo;
class ShellParameters;
class TerminalBuffer;
class TermParse;
class Shell {
public:
Shell();
virtual ~Shell();
status_t Open(int row, int col,
const ShellParameters& parameters);
void Close();
const char* TTYName() const;
ssize_t Read(void* buffer, size_t numBytes) const;
ssize_t Write(const void* buffer, size_t numBytes);
status_t UpdateWindowSize(int row, int columns);
status_t GetAttr(struct termios& attr) const;
status_t SetAttr(const struct termios& attr);
int FD() const;
pid_t ProcessID() const
{ return fShellInfo.ProcessID(); }
const ShellInfo& Info() const
{ return fShellInfo; }
int Encoding() const
{ return fShellInfo.Encoding(); }
void SetEncoding(int encoding)
{ fShellInfo.SetEncoding(encoding); }
bool HasActiveProcesses() const;
bool GetActiveProcessInfo(
ActiveProcessInfo& _info) const;
virtual status_t AttachBuffer(TerminalBuffer* buffer);
virtual void DetachBuffer();
private:
status_t _Spawn(int row, int col,
const ShellParameters& parameters);
private:
ShellInfo fShellInfo;
int fFd;
pid_t fProcessID;
TermParse* fTermParse;
bool fAttached;
};
#endif