Am 27.12.2023 um 12:25 schrieb James Richters via fpc-pascal:
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?
Write(Ln) is a compiler intrinsic and thus can behave in ways that are
not possible for ordinary functions.
Your only ways are either to use "array of const" like "Format" does or
write a text file driver as is done in the StreamIO unit which allows to
assign a Stream to a TextFile that can in turn be used as the file
parameter of Write(Ln). You can implement any other output through this.
Regards,
Sven
_______________________________________________
fpc-pascal maillist - fpc-pascal@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal