<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-15">
<META content="MSHTML 6.00.6000.16674" name=GENERATOR></HEAD>
<BODY style="MARGIN: 4px 4px 1px">
<DIV>Hi Rodney:</DIV>
<DIV> </DIV>
<DIV>Thanks for your reply.</DIV>
<DIV> </DIV>
<DIV>The issue is that for cm3 on Windows you can specify -gui as a command line option.  This option causes the program to be built as a Windows GUI-mode application, rather than as a console application.  For a GUI-mode application, the Stdio file handles are NIL because it has no console.</DIV>
<DIV> </DIV>
<DIV>Seemingly, to prevent a lot of errors when trying to read/write Stdio, some folks introduced the idea of a lazy console post cm3 v4.1.  What happens now "under the covers" is that on a GUI-mode program the Stdio file handles are allocated as Lazy Consoles.  Then, whenever Stdio.stdout/stderr/stdin is used, the underlying code realizes the first use and magically allocates a new console window on the fly.  This console window pops up on the screen on top of your GUI-mode window.</DIV>
<DIV> </DIV>
<DIV>My objection is that this behavior is not documented in any interface and the programmer has no way to control the behavior.  I want to make such control possible.</DIV>
<DIV> </DIV>
<DIV>Hope this explanation helps a bit.</DIV>
<DIV> </DIV>
<DIV>Regards,</DIV>
<DIV>Randy<BR><BR>>>> "rodney.bates" <rodney.bates@wichita.edu> 6/18/2008 10:36 AM >>><BR>I don't understand well enough what it means for a console<BR>to be lazily-allocated, but I wonder if it makes any sense to<BR>allow client code, by assignments to Stdio.stdout_Islazy, to <BR>change this property in general.  Why would a FileWr.T ever<BR>be lazy, for example?  Can't the cases where the lazy property <BR>needs to be controlled by client code be enclosed inside procedures<BR>that do it in a thread-safe way?<BR><BR>>4.  Modify Stdio implementation to properly initialize the new<BR>>variables during module initialization.<BR>>This change will be transparent to all clients.<BR>><BR>>Now, with these changes, it will be possible for a client to know<BR>>whether stdout, stderr, and/or stdin represent lazily allocated<BR>>consoles or not, then act accordingly.<BR>><BR>>For example, if I want to make sure messages written to stdout are<BR>>recorded even for a GUI-app, but I don't want a popup, I could do the<BR>>following:<BR>>    IF (Stdio.stdOut_IsLazy) OR (Stdio.stdout = NIL)<BR>>    THEN<BR>>       Stdio.stdout := FileWr.Open("myLogFile.txt");<BR>>       Stdio.stdOut_IsLazy := FALSE;<BR>>    END;<BR>>Now the above code fragment does show the possibility of a race<BR>>condition in multi-threaded code.<BR>><BR><BR>Rodney Bates<BR>Retired assistant professor<BR>Computer Science<BR><BR><BR></DIV></BODY></HTML>