mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-16 17:59:25 +02:00
* fix wrong sign change handling
+ add 'H' to view current value as hexadecimal
This commit is contained in:
parent
fe82c8b418
commit
6769598ff4
@ -50,6 +50,7 @@ type
|
||||
Operand: extended;
|
||||
Memory: extended;
|
||||
DispNumber: extended;
|
||||
HexShown : boolean;
|
||||
constructor Init(var Bounds: TRect);
|
||||
constructor Load(var S: TStream);
|
||||
function CalcKey(Key: string): boolean;
|
||||
@ -162,6 +163,7 @@ begin
|
||||
EventMask := evKeyDown + evBroadcast;
|
||||
Clear;
|
||||
HelpCtx:={hcCalculatorLine}0;
|
||||
HexShown:=false;
|
||||
end;
|
||||
|
||||
constructor TCalcDisplay.Load(var S: TStream);
|
||||
@ -169,6 +171,7 @@ begin
|
||||
inherited Load(S);
|
||||
S.Read(Status, SizeOf(Status) + SizeOf(Number) + SizeOf(Sign) +
|
||||
SizeOf(_Operator) + SizeOf(Operand));
|
||||
HexShown:=false;
|
||||
end;
|
||||
|
||||
procedure TCalcDisplay.GetDisplay(var R: extended);
|
||||
@ -239,7 +242,8 @@ begin
|
||||
fldcw fpucw
|
||||
end;
|
||||
{$endif}
|
||||
ErrorBox('Error while computing math expression',nil);
|
||||
{ ErrorBox('Error while computing math expression',nil);
|
||||
was only there for debugging PM }
|
||||
{$ifdef go32v2}
|
||||
Dpmi_LongJmp(CalcSigJmp,1);
|
||||
{$else : not go32v2}
|
||||
@ -255,6 +259,7 @@ end;
|
||||
function TCalcDisplay.CalcKey(Key: string): boolean;
|
||||
var
|
||||
R,D: extended;
|
||||
X : cardinal;
|
||||
procedure CheckFirst;
|
||||
begin
|
||||
if Status = csFirst then
|
||||
@ -287,6 +292,14 @@ begin
|
||||
StoreSigFPE:=Signal(SIGFPE,@CalcSigFPE);
|
||||
{$endif HasSignal}
|
||||
if (Status = csError) and (Key <> 'C') then Key := ' ';
|
||||
if HexShown then
|
||||
begin
|
||||
GetDisplay(R);
|
||||
SetDisplay(R,false);
|
||||
HexShown := false;
|
||||
if Key = 'H' then
|
||||
Key := ' ';
|
||||
end;
|
||||
if Key='X^Y' then Key:='^';
|
||||
if length(Key)>1 then
|
||||
begin
|
||||
@ -326,8 +339,19 @@ begin
|
||||
if Length(Number) = 1 then Number := '0' else Dec(Number[0]);
|
||||
SetDisplay(StrToExtended(Number),true); { !!! }
|
||||
end;
|
||||
'H':
|
||||
begin
|
||||
GetDisplay(R);
|
||||
X:=trunc(abs(R));
|
||||
Number:=HexStr(X,8);
|
||||
HexShown:=true;
|
||||
end;
|
||||
'_', #241:
|
||||
if Sign = ' ' then Sign := '-' else Sign := ' ';
|
||||
begin
|
||||
if Sign = ' ' then Sign := '-' else Sign := ' ';
|
||||
GetDisplay(R);
|
||||
SetDisplay(-R,true);
|
||||
end;
|
||||
'+', '-', '*', '/', '=', '%', #13, '^':
|
||||
begin
|
||||
if Status = csValid then
|
||||
@ -547,7 +571,11 @@ end;
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.4 2002-01-22 13:56:04 pierre
|
||||
Revision 1.5 2002-01-22 14:56:37 pierre
|
||||
* fix wrong sign change handling
|
||||
+ add 'H' to view current value as hexadecimal
|
||||
|
||||
Revision 1.4 2002/01/22 13:56:04 pierre
|
||||
* fix multiple FPU excpetion trapping problem for unix
|
||||
|
||||
Revision 1.3 2001/11/14 23:55:38 pierre
|
||||
|
Loading…
Reference in New Issue
Block a user