[prev in list] [next in list] [prev in thread] [next in thread] 

List:       squeak-vm-dev
Subject:    Re: [Vm-dev] Identify console executable and standard one
From:       Alistair Grant <akgrant0710 () gmail ! com>
Date:       2018-04-27 11:25:23
Message-ID: CA+GUGJ04Xpj2NMy_3q=cMFg=mBSdkROZ9FE7LH+FP1Yf=1FMDw () mail ! gmail ! com
[Download RAW message or body]

 
Hi Ben,

Thanks very much for the links.


On 27 April 2018 at 12:39, Ben Coman <btc@openinworld.com> wrote:
> 
> 
> 
> On 16 April 2018 at 21:17, Alistair Grant <akgrant0710@gmail.com> wrote:
> > 
> > 
> > Hi Eliot & Subbu,
> > 
> > On 16 April 2018 at 05:50, K K Subbu <kksubbu.ml@gmail.com> wrote:
> > > 
> > > On Sunday 15 April 2018 11:42 PM, Eliot Miranda wrote:
> > > > > 
> > > > > 
> > > > > On Windows in sqFileStdioHandlesInto() in sqWin32FilePrims.c:
> > > > > 
> > > > > files[0].sessionID = thisSession;
> > > > > files[0].file = GetStdHandle(STD_INPUT_HANDLE);
> > > > > files[0].writable = false;
> > > > > files[0].lastOp = 0; /* unused on win32 */
> > > > > files[0].isStdioStream = GetConsoleMode(files[0].file, &mode) != 0;
> > > > > AddHandleToTable(win32Files, files[0].file);
> > > > 
> > > > 
> > > > This could be causing problems, because AFAIA
> > > > GetConsoleMode(files[0].file, &mode) is no longer reliable.  Can you test?
> > > 
> > > 
> > > I believe _isatty(fd) from io.h is the syscall on Windows:
> > > 
> > > https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/isatty
> > > 
> > > HTH .. Subbu
> > 
> > Right, _isatty sounds like the more sensible call.  Just looking at
> > the docs, the return value of GetConsoleMode() is simply whether it
> > succeeded or not.
> > 
> > However, in some quick tests it appears that both _isatty() and
> > GetConsoleMode() return the correct value when called from a cmd.exe
> > terminal window (I guess GetConsoleMode() fails if there isn't a
> > terminal).  They both fail when called from a cygwin shell (mintty).
> > It looks like vim (yes, the text editor) has some MIT licensed code
> > that does the check correctly from within mintty.
> 
> 
> 
> I've was reading around this topic to see if I could find anything useful.
> I haven't really got my head around it yet to tell what is directly related,
> but here is the most interesting links I found...
> 
> How can I tell whether my console program was launched from Explorer or from a \
> command prompt? https://blogs.msdn.microsoft.com/oldnewthing/20160125-00/?p=92922
> 
> What Is conhost.exe and Why Is It Running?
> https://www.howtogeek.com/howto/4996/what-is-conhost.exe-and-why-is-it-running/
> 
> GetConsoleMode fails when input piped
> http://comp.os.ms-windows.programmer.win32.narkive.com/xiPamaWm/getconsolemode-fails-when-input-piped
>  
> Both isatty() and GetConsoleScreenBufferInfo() fail with mintty 2.1.5 in MSYS2 \
> [okay with Cygwin] https://github.com/mintty/mintty/issues/482

This is the one that says that Windows Consoles and MinTTY terminals
are basically incompatible.



> MSVC's native _isatty() thinks Cygwin Bash is a pipe, not an interactive shell, \
> because it just uses GetFileType() deep under the hood.

This is how Vincent's code checks to see if we're running in a MinTTY
terminal.  It looks for a pipe with a particular name.



> https://stackoverflow.com/questions/45223868/how-do-i-play-nice-with-cygwin
> 
> ReadConsole and WriteConsole can only be used with console handles;
> ReadConsole and WriteConsole fail if used with a standard handle that has been \
> redirected and is no longer a console handle. ReadFile and WriteFile can be used \
> with other handles (such as files or pipes). \
> https://docs.microsoft.com/en-us/windows/console/high-level-console-input-and-output-functions
>  
> "GetConsoleMode error: 6" when running under Unix emulation environments such as \
> cygwin and msys. What this means is that GetConsoleMode is being called on an \
> invalid file handle (STD_INPUT_HANDLE). \
> https://lists.osuosl.org/pipermail/darcs-users/2004-June/002104.html 
> Windows: Improve terminal detection mechanism
> https://phabricator.haskell.org/D2809
> https://github.com/git/git/blob/0767172b9068b225c06fd7ce66422e5936ec60a2/compat/winansi.c#L534-L571
>  https://fossies.org/linux/vim/src/iscygpty.c
> https://hackage.haskell.org/package/base-4.6.0.0/src/cbits/consUtils.c
> 
> Cunningly conquering communicated console caveats. Comprende, mon Capitán?
> http://archives.miloush.net/michkap/archive/2010/05/07/10008232.html
> 
> What does CreateFile("CONIN$" ..) do?
> https://stackoverflow.com/questions/377152/what-does-createfileconin-do?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa
>  
> The CreateFile function enables a process to get a handle to its console's input \
> buffer and active screen buffer, even if STDIN and STDOUT have been redirected. To \
> open a handle to a console's input buffer, specify the CONIN$ value in a call to \
> CreateFile https://docs.microsoft.com/en-us/windows/console/console-handles
> 
> Where do writes to stdout go when launched from a cygwin shell, no redirection
> https://stackoverflow.com/questions/4028353/where-do-writes-to-stdout-go-when-launched-from-a-cygwin-shell-no-redirection
>  
> 
> How to create a Windows program that works both as a GUI and console application
> https://www.tillett.info/2013/05/13/how-to-create-a-windows-program-that-works-as-both-as-a-gui-and-console-application/
> 


It will take me a while to read through the rest. :-)

Thanks again,
Alistair


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic