RFC: gfortran on Windows - handling of no console / pausing before end-of-program console destruction
Tobias Burnus
burnus@net-b.de
Tue Apr 23 16:02:00 GMT 2013
The following email is motivated by Lahey/GNU Fortran. Their gfortran
version is modified to do:
"We added a couple of things to the compiler mainly to support
situations where the program has no console, or where the console is
created to run the program and is destroyed when the program terminates.
In the first case, changes were made to the Fortran runtime to test for
the existence of a console, and if there is none, publish errors via
message box. In the second case, we implemented an awkward "pause"
compiler feature that notifies the user that the program has terminated
execution, and to allow the user to inspect results before the console
is destroyed. This feature was partially written into the Fortran
runtime and partially in the mingw runtime, and only works when there is
a console present."
Question to our Windows users: Does such a change or something similar
makes sense? (For MinGW/MinGW-w64 only - or also for Cygwin/Cygwin64?)
What kind of behaviour do you expect here?
I think the "no console - show message box" feature should be relatively
simple. At least I'd expect that something like
if (!GetConsoleWindow())
MessageBox(NULL, "no console", "Information",
MB_OK|MB_ICONINFORMATION);
would do the work. (I probably missed something and it won't be that
simple.)
Pausing is more complicated (as already indicated in the text above). I
think the hard part is to know whether the console is destroyed after
the program exits or not - and that's probably the reason that
MinGW(-w64?) has/have been modified.
Thus, what do you think of either of the two features?
* * *
Thinking myself of the second feature, I recall some program (a TeX
editor?) which fired off a console to run another program - the console
popped up for a second - and one was back in the editor. In that case, I
didn't want to see the console at all - and in particular, I didn't want
to manually close it (which wasn't needed). Thus, the feature might not
always be wanted. (In my case, I think the program did not even write
anything to the "con".)
Thus, it might well be that one does not want to have neither feature -
at least not in a simple minded implementation. For instance, the
message box could be restricted to the case where one tries to read from
stdin or writes to stdout (or stderr, which is the same under
MinGW[-w64]). Similarly, for the pausing before the console is
destructed. (I don't know how Lahey's old compiler handled that nor how
Lahey/GNU Fortran does it.) - And regarding the message-box code:
Warning and continuing (at least if there is no stdin code) or erroring
and exiting would be possible solutions. [I have no idea how gfortran
currently reacts to this.]
Tobias
PS: If we would like to have the feature, Lahey will cleanup their
patch, do the copyright assignment formalities and submit it. For the
MinGW/MinGW-w64 (Cygwin/Cygwin64?) change, it might be more difficult,
unless we find a way which does not require to modify those libraries.
More information about the Fortran
mailing list