On 20.03.2015 21:18, vfclists . wrote:


On 20 March 2015 at 19:34, Sven Barth <pascaldra...@googlemail.com
<mailto:pascaldra...@googlemail.com>> wrote:

    Am 20.03.2015 19:19 schrieb "vfclists ." <vfcli...@gmail.com
    <mailto:vfcli...@gmail.com>>:


     >
     >
     >
     > On 20 March 2015 at 18:01, leledumbo <leledumbo_c...@yahoo.co.id
    <mailto:leledumbo_c...@yahoo.co.id>> wrote:
     >>
     >> > Where is the 'write'  function defined and how is it different
    from
     >> 'writeln'?
     >> >
     >> > I can see a lot of fpc_writeXXX and other xxxxWrite functions,
    but no
     >> > 'write' itself
     >>
     >> those fpc_writeXXX ARE the actual write. Write(Ln) is NOT a
    function as like
     >> others whose implementation you can clearly see. It's rather a
    command for
     >> the compiler to translate to the correct fpc_writeXXX call. So,
    if you:
     >>
     >> WriteLn(123,' is an integer');
     >>
     >> the compiler will translate it to:
     >>
     >> fpc_write_text_shortint(123);
     >> fpc_write_text_shortstring('is an integer');
     >> fpc_writeln_end;
     >>
     >> The same case applies to Read(Ln). AFAIK Pascal's I/O is part of the
     >> language, not the RTL.
     >>
     >>
     >
     > Where does the output go? Is it for stdout, strderr  or the console?

    It depends.

    Write('foobar');

    Will write to whatever Textfile is contained in Output and

    Write(xyz, 'foobar');

    Will write to the xyz Textfile. And these Textfiles can basically be
    anything. By default Output simply writes to StdOut (there's also a
    variable for StdErr, but I have forgotten how it's called...), but
    you could also use an implementation that writes to a TStream or one
    which uses sockets. It's quite flexible...

    Regards,
    Sven


How do you ensure own implementation overrides the system's
implementation, does the compiler take care of that automatically, or
will you have to name your function differently?

There is no need to ensure that. Here is an example:

=== code begin ===

var
  f, oldout: TextFile;
begin
  Writeln('Hello Output as StdOut');

  oldout := Output;

  Assign(Output, 'test.txt');
  Rewrite(Output);

  Writeln('Hello Output as file');

  Close(f);

  Output := oldout;

  Writeln('Hello Output as StdOut again');
end.

=== code end ===

To see how such a TextFile is implemented you can take a look at unit StreamIO which is part of FPC's units.

(Though I wonder why "Assign(f, 'test.txt'); Output := f; Writeln('Hello Output as file');" does not work :/ )

Regards,
Sven
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to