X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=pipe.h;h=a8b086bd55783bc2142efc292adeff20a869c6b0;hb=8c255c15cc55a2e5254152c8e07a8ab45b22b7af;hp=b13f5135ce0719656df83d5bfa7fa0d0e4d5b49b;hpb=64f72f31685ea1dff12b19b22cfaf7a53ccc079f;p=polyglot.git diff --git a/pipe.h b/pipe.h index b13f513..a8b086b 100644 --- a/pipe.h +++ b/pipe.h @@ -4,30 +4,55 @@ // includes #include - +#include +#include +#include // constants -const int LINE_INPUT_MAX_CHAR = 4096; +const int LINE_INPUT_MAX_CHAR = 10*4096; + +// defines + +#define PIPE_EOF 1 +#define PIPE_ACTIVE 2 // types struct PipeStruct { - HANDLE hInput, hOutput; + + HANDLE hInput, hOutput; + FILE *fpInput; HANDLE hProcess; - BOOL bConsole; - int nBytesLeft; - int nReadEnd; - char szBuffer[LINE_INPUT_MAX_CHAR]; - - void Open(const char *szExecFile = NULL); - void Close(void) const; - void ReadInput(void); - bool CheckInput(void); - bool GetBuffer(char *szLineStr); - bool LineInput(char *szLineStr); - void LineOutput(const char *szLineStr) const; -}; // pipe + HANDLE hThread; + HANDLE hEvent; + BOOL bConsole; + BOOL bPipe; + + CRITICAL_SECTION CriticalSection; + + volatile DWORD state; + volatile char * lpFeedEnd; + volatile int nReadEnd; + char lpBuffer[LINE_INPUT_MAX_CHAR]; + char lpReadBuffer[LINE_INPUT_MAX_CHAR]; + + void Open(const char *szExecFile = NULL); + void Close(void) const; + void Kill(void) const; + bool EOF_(void); + void set_EOF_(void); + bool Active(void); + void set_Active(void); + void ReadInput(void); + int ReadData(void); + bool GetBuffer(char *szLineStr); + void LineInput(char *szLineStr); + void LineOutput(const char *szLineStr) const; + +}; + +// pipe #endif #endif