On Sun, 28 Aug 2022, James Richters via fpc-pascal wrote:

I'm generating a report where I wish to display some Boolean values.  I
thought I would try BoolToStr, as according to:
https://www.freepascal.org/docs-html/rtl/sysutils/booltostr.html it states:

Description
BoolToStr converts the boolean B to one of the strings 'TRUE' or 'FALSE'

So it should do exactly what I want. output the text string 'TRUE' or
'FALSE'  depending on the Boolean state,
but that is not what happens:

Uses Sysutils;
Begin
Writeln(BooltoStr(True));
Writeln(BooltoStr(False));
End.

Running "i:\booltostr.exe "
-1
0

Why true is -1 instead of 1 is beyond me, but anyway, I would consider this
BoolToInt, not BoolToStr,  I want the Strings 'TRUE' or 'FALSE' as indicated
in the documentation

I will adapt the documentation to be more precies.

You can use

BoolToStr(b,'TRUE','FALSE')

or BoolToStr(b,True)

in which case it will use the BoolStrs arrays to determine the strings.

-1 and 0 are the Delphi values, which, I agree,  are not very intuitive.


And BoolToInt should always output 0 or 1, not matter what operating system
you are on.. I don't understand the -1.  I guess some Windows API's use -1
for true.. I still don't understand.
Maybe there should be a BoolToBit that could always be 0 or 1 regardless of
the operating system.

As said, the 0 and -1 are for Delphi compatibility.

Use

Ord(Boolean)

It will give you 0 and 1.

Michael.
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to