From 59c75594f24dde7cbd07ed9ca57c86f9a9e8b82f Mon Sep 17 00:00:00 2001 From: Jerome St-Louis Date: Thu, 29 Aug 2013 05:42:01 -0400 Subject: [PATCH] documentor, ecere: Fix for documentor closing when being debugged --- ecere/src/com/instance.c | 44 ++++++++++++++++++++++++++++++++++++++++++-- ecere/src/sys/File.ec | 18 ++++++++++++++++++ 2 files changed, 60 insertions(+), 2 deletions(-) diff --git a/ecere/src/com/instance.c b/ecere/src/com/instance.c index 2b1cd9c..5c8bbeb 100644 --- a/ecere/src/com/instance.c +++ b/ecere/src/com/instance.c @@ -50,8 +50,48 @@ typedef unsigned long long uint64; #define MAX_FILENAME 274 #define MAX_EXTENSION 17 -FILE *eC_stdin(void) { return stdin; } -FILE *eC_stdout(void) { return stdout; } +#if defined(__WIN32__) +intptr_t stdinHandle, stdoutHandle; +int osfStdin, osfStdout; +FILE * fStdIn, * fStdOut; +#endif + +FILE *eC_stdin(void) { +#if defined(__WIN32__) + if(!fStdIn) + { + stdinHandle = (intptr_t)GetStdHandle(STD_INPUT_HANDLE); + osfStdin = _open_osfhandle(stdinHandle, _O_TEXT); + if(osfStdin != -1) + fStdIn = _fdopen( osfStdin, "rb"); + else + fStdIn = stdin; + setvbuf( fStdIn, NULL, _IONBF, 0 ); + } + return fStdIn; +#else +return stdin; +#endif +} + +FILE *eC_stdout(void) +{ +#if 0 //defined(__WIN32__) + if(!fStdOut) + { + stdoutHandle = (intptr_t)GetStdHandle(STD_OUTPUT_HANDLE); + osfStdout = _open_osfhandle(stdoutHandle, _O_TEXT); + if(osfStdout != -1) + fStdOut = _fdopen( osfStdout, "wb"); + else + fStdOut = stdout; + setvbuf( fStdOut, NULL, _IONBF, 0 ); + } + return fStdOut; +#else + return stdout; +#endif +} FILE *eC_stderr(void) { return stderr; } void __ecereNameSpace__ecere__com__eSystem_Delete(void * memory); diff --git a/ecere/src/sys/File.ec b/ecere/src/sys/File.ec index 462bed5..68030c6 100644 --- a/ecere/src/sys/File.ec +++ b/ecere/src/sys/File.ec @@ -821,10 +821,28 @@ public: } } +#if defined(__WIN32__) +default extern intptr_t stdinHandle; +default extern intptr_t stdoutHandle; +#endif + public class ConsoleFile : File { input = eC_stdin(); output = eC_stdout(); + +#if defined(__WIN32__) + void CloseInput() + { + CloseHandle((HANDLE)stdinHandle); + } + /* + void CloseOutput() + { + CloseHandle((HANDLE)stdoutHandle); + }*/ +#endif + ~ConsoleFile() { input = null; -- 1.8.3.1