⛏️ index : haiku.git

/*
 * Copyright 2004-2010, JΓ©rΓ΄me Duval. All rights reserved.
 * Distributed under the terms of the MIT License.
 * Original code from ZipOMatic by jonas.sundstrom@kirilla.com
 */
#ifndef _EXPANDER_THREAD_H
#define _EXPANDER_THREAD_H


#include <Message.h>
#include <Volume.h>
#include <String.h>
#include <OS.h>
#include <FindDirectory.h>

#include "GenericThread.h"
#include <stdio.h>
#include <stdlib.h>


extern const char* ExpanderThreadName;


class ExpanderThread : public GenericThread {
public:
								ExpanderThread(BMessage* refs_message,
									BMessenger* messenger);
								~ExpanderThread();

			status_t			SuspendExternalExpander();
			status_t			ResumeExternalExpander();
			status_t			InterruptExternalExpander();
			status_t			WaitOnExternalExpander();

			void				PushInput(BString text);

private:
	virtual	status_t			ThreadStartup();
	virtual	status_t			ExecuteUnit();
	virtual	status_t			ThreadShutdown();

	virtual	void				ThreadStartupFailed(status_t a_status);
	virtual	void				ExecuteUnitFailed(status_t a_status);
	virtual	void				ThreadShutdownFailed(status_t a_status);

			status_t			ProcessRefs(BMessage* message);

			thread_id			PipeCommand(int argc, const char** argv,
									int& in, int& out, int& err,
									const char** envp = (const char**)environ);

			BMessenger*			fWindowMessenger;

			thread_id			fThreadId;
			int					fStdIn;
			int					fStdOut;
			int					fStdErr;
			FILE*				fExpanderOutput;
			FILE*				fExpanderError;
			char				fExpanderOutputBuffer[LINE_MAX];
};


#endif	// _EXPANDER_THREAD_H