1/*
2 * Copyright 2007 Haiku, Inc.
3 * Copyright (c) 2003-4 Kian Duffy <myob@users.sourceforge.net>
4 * Copyright (c) 2004 Daniel Furrer <assimil8or@users.sourceforge.net>
5 * Parts Copyright (C) 1998,99 Kazuho Okui and Takashi Murai.
6 * Distributed under the terms of the MIT License.
7 * Authors:
8 *		Stefano Ceccherini <stefano.ceccherini@gmail.com>
9 *		Kian Duffy <myob@users.sourceforge.net>
10 *		Kazuho Okui
11 *		Takashi Murai
12 */
13#ifndef _SHELL_H
14#define _SHELL_H
15
16
17#include "ShellInfo.h"
18
19
20class ActiveProcessInfo;
21class ShellParameters;
22// TODO: Maybe merge TermParse and Shell classes ?
23class TerminalBuffer;
24class TermParse;
25
26
27class Shell {
28public:
29								Shell();
30	virtual						~Shell();
31
32			status_t			Open(int row, int col,
33									const ShellParameters& parameters);
34			void				Close();
35
36			const char*			TTYName() const;
37
38			ssize_t				Read(void* buffer, size_t numBytes) const;
39			ssize_t				Write(const void* buffer, size_t numBytes);
40
41			status_t			UpdateWindowSize(int row, int columns);
42
43			status_t			GetAttr(struct termios& attr) const;
44			status_t			SetAttr(const struct termios& attr);
45
46			int					FD() const;
47			pid_t				ProcessID() const
48									{ return fShellInfo.ProcessID(); }
49			const ShellInfo&	Info() const
50									{ return fShellInfo; }
51
52			bool				HasActiveProcesses() const;
53			bool				GetActiveProcessInfo(
54									ActiveProcessInfo& _info) const;
55
56	virtual	status_t			AttachBuffer(TerminalBuffer* buffer);
57	virtual void				DetachBuffer();
58
59private:
60			status_t			_Spawn(int row, int col,
61									const ShellParameters& parameters);
62
63private:
64			ShellInfo			fShellInfo;
65			int					fFd;
66			pid_t				fProcessID;
67			TermParse*			fTermParse;
68			bool				fAttached;
69};
70
71
72#endif // _SHELL_H
73