[fpc-pascal] Procedures that work like WRITELN()

Michael Van Canneyt michael at freepascal.org
Wed Dec 27 12:40:24 CET 2023



On Wed, 27 Dec 2023, James Richters via fpc-pascal wrote:

> I wanted to write what I thought should be a simple procedure, just instead
> of calling WRITELN() with some arguments,
> call WRITELOG() with the same arguments that you would use to write to a
> file, but my WRITELOG() procedure would
> write to the screen and the file.. but I can't figure out how to pass all
> the arguments to the two WRTIELNs.
>
> So..
>
> Procedure WriteLog(Filename:String, AllOtherAurguments:????);
> Begin
>    Writeln(Filename,AllOtherAurguments);
>    Writeln(AllOtherAurguments);
> End;
>
> How can I make this work?  Since WRITELN can take any number of many kinds
> of arguments,
> how can I get them all and pass them along without knowing how many or what
> types they are?
> How does WRITELN even work when you don't know this information?
>
> I'm guessing there should be some way to do this, because WRITELN itself
> works, but how it could
> possibly work is not within my experience.
>
> The only way I could think of would be if there were versions of WRITELN
> with every combination
> of possible arguments, but that seems completely unmanageable and
> ridiculous,
> so there must be something more advanced going on, but maybe WRTELN is
> special and not something I can duplicate?

Writeln() is special. You cannot duplicate it.

What you can do is use WriteStr(), it has the same action as Writeln() but
writes to a string instead of a file.

https://www.freepascal.org/docs-html/current/rtl/system/writestr.html

Michael.


More information about the fpc-pascal mailing list