[fpc-pascal] Getting Last User Input reliably
James Richters
james.richters at productionautomation.net
Sun Dec 5 19:06:35 CET 2021
Oh I see.. it does work on DWord.. I was testing it with constants:
Writeln($FFFFFFFE+$00000006);
But I think the compiler resolved this so it would never create a overflow error..
When I do it with variables now I get the overflow and I can control it with {$Q-} and {$Q+}
Is there some way I can do {$Q-} before my check then restore it to whatever it was before after it? (for example if it was already set to {$Q-} in the compiler, I would not want to turn it back on)
Is there a way to do a temporary override for the one line?
I'm trying to figure out how to make a generic function for this that will work regardless of what is set in the compiler without changing the rest of the program.
I Thought I could put the result into a Qword then just AND it with $FFFFFFFF and put that into my DWord... that seems like it would make it work even if overflow checking was on...
But when I tried this with a little sample program, I still got the runtime error 215... I don't know why, because I was putting the answer into a Qword.
var
num1,num2:dword;
QWresult:Qword;
DWresult:Dword;
begin
num1:=8;
num2:=$FFFFFFFE;
QWresult:=QWord(num1+num2); //Generates runtime 215
DWresult:=(QWresult AND $00000000FFFFFFFF);
writeln(DWresult);
end.
But if I do
QWresult:=(QWord(num1)+QWord(num2));
It does not
So I'm wondering why
QWresult:=QWord(num1+num2);
Did not work as I expected it to.
James
More information about the fpc-pascal
mailing list