documentor, ecere: Fix for documentor closing when being debugged
authorJerome St-Louis <jerome@ecere.com>
Thu, 29 Aug 2013 09:42:01 +0000 (05:42 -0400)
committerJerome St-Louis <jerome@ecere.com>
Thu, 29 Aug 2013 09:42:01 +0000 (05:42 -0400)
ecere/src/com/instance.c
ecere/src/sys/File.ec

index 2b1cd9c..5c8bbeb 100644 (file)
@@ -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);
index 462bed5..68030c6 100644 (file)
@@ -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;