/* * Copyright 2007 Haiku, Inc. * Copyright (c) 2003-4 Kian Duffy * Copyright (c) 2004 Daniel Furrer * Parts Copyright (C) 1998,99 Kazuho Okui and Takashi Murai. * Distributed under the terms of the MIT License. * Authors: * Stefano Ceccherini * Kian Duffy * Kazuho Okui * Takashi Murai */ #ifndef _SHELL_H #define _SHELL_H #include "ShellInfo.h" class ActiveProcessInfo; class ShellParameters; // TODO: Maybe merge TermParse and Shell classes ? 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 // _SHELL_H