1/*
2 * Copyright 2004-2010, J��r��me Duval. All rights reserved.
3 * Distributed under the terms of the MIT License.
4 * Original code from ZipOMatic by jonas.sundstrom@kirilla.com
5 */
6#ifndef _EXPANDER_THREAD_H
7#define _EXPANDER_THREAD_H
8
9
10#include <Message.h>
11#include <Volume.h>
12#include <String.h>
13#include <OS.h>
14#include <FindDirectory.h>
15
16#include "GenericThread.h"
17#include <stdio.h>
18#include <stdlib.h>
19
20
21extern const char* ExpanderThreadName;
22
23
24class ExpanderThread : public GenericThread {
25public:
26								ExpanderThread(BMessage* refs_message,
27									BMessenger* messenger);
28								~ExpanderThread();
29
30			status_t			SuspendExternalExpander();
31			status_t			ResumeExternalExpander();
32			status_t			InterruptExternalExpander();
33			status_t			WaitOnExternalExpander();
34
35			void				PushInput(BString text);
36
37private:
38	virtual	status_t			ThreadStartup();
39	virtual	status_t			ExecuteUnit();
40	virtual	status_t			ThreadShutdown();
41
42	virtual	void				ThreadStartupFailed(status_t a_status);
43	virtual	void				ExecuteUnitFailed(status_t a_status);
44	virtual	void				ThreadShutdownFailed(status_t a_status);
45
46			status_t			ProcessRefs(BMessage* message);
47
48			thread_id			PipeCommand(int argc, const char** argv,
49									int& in, int& out, int& err,
50									const char** envp = (const char**)environ);
51
52			BMessenger*			fWindowMessenger;
53
54			thread_id			fThreadId;
55			int					fStdIn;
56			int					fStdOut;
57			int					fStdErr;
58			FILE*				fExpanderOutput;
59			FILE*				fExpanderError;
60			char				fExpanderOutputBuffer[LINE_MAX];
61};
62
63
64#endif	// _EXPANDER_THREAD_H
65