[fpc-devel] Output flush on pipes

Martin Schreiber fpmse at bluewin.ch
Sun May 14 09:42:47 CEST 2006


On Sunday 14 May 2006 08.48, Daniƫl Mantione wrote:
> Op Sun, 14 May 2006, schreef Martin Schreiber:
> > Since some time FPC doesn't  flush output on pipes after writeln.
> > On linux I can use a pseudo terminal, what can I do on win32 to get
> > flushed output from FPC into the message window of MSEide?
>
> It is strongly recommended against to parse the compiler output, as it is
> designed for humans, not computers. The formatting of the compiler output
> can therefore change in time and can also be configured by the user in any
> language. Some people are doing it anyway, like Lazarus.
>

I do not parse the output of FPC, I display it in a message window for humans.
It is possible to continue working with MSEide while compiling (very useful 
because I must use -B the most of time with 2.0.3 because of compiler crashes 
and memory overloads). But I wish to see what's going on compiling in 
realtime.

Same problem with FPC console programs on win32, the MSEide target window uses 
a pseudo terminal on Linux -> output is flushed, on win32 I can only use 
pipes -> program output is only visible if output buffer overflows or on 
program termination.

Suggestion:
On win32 switch automatic output writeln flush only off by regular files 
(FILE_TYPE_DISK) but not by pipes (FILE_TYPE_PIPE):

rtl/win32/sysfile.inc

function do_isdevice(handle:thandle):boolean;
begin
  do_isdevice:=(getfiletype(handle)=2);
end;

change to:

function do_isdevice(handle:thandle):boolean;
var
  wo1: dword;
begin
  wo1:= getfiletype(handle);
  do_isdevice:= (wo1 = FILE_TYPE_CHAR) or (wo1 = FILE_TYPE_PIPE);
end;

Martin



More information about the fpc-devel mailing list