* fix bugs 3477, 3478, 3479

This commit is contained in:
peter 2004-12-26 13:04:30 +00:00
parent 735a5ca27c
commit cb255fffed

View File

@ -788,7 +788,11 @@ Var ChPos,OldPos,ArgPos,DoArg,Len : Longint;
Index,Width,Prec : Longint;
Left : Boolean;
Fchar : char;
{$ifdef ver1_0}
vl : int64;
{$else}
vq : qword;
{$endif}
{
ReadFormat reads the format string. It returns the type character in
@ -1064,9 +1068,10 @@ begin
// Insert(':',ToAdd,5);
end;
'X' : begin
{$ifdef ver1_0}
if Checkarg(vtinteger,false) then
begin
vl:=Args[Doarg].VInteger;
vl:=Args[Doarg].VInteger and int64($ffffffff);
index:=16;
end
else
@ -1081,21 +1086,37 @@ begin
begin
// determine minimum needed number of hex digits.
Index:=1;
{$Ifdef ver1_0}
While (DWord(1 shl (Index*4))<=DWord(Args[DoArg].VInteger)) and (index<8) do
inc(Index);
{$else}
While (qWord(1 shl (Index*4))<=qWord(vl)) and (index<16) do
inc(Index);
{$endif}
If Index>Prec then
Prec:=Index;
{$ifdef ver1_0}
ToAdd:=HexStr(int64(vl),Prec);
{$else}
ToAdd:=HexStr(qword(vl),Prec);
{$endif}
end;
{$else}
if Checkarg(vtinteger,false) then
begin
vq:=Cardinal(Args[Doarg].VInteger);
index:=16;
end
else
begin
CheckArg(vtInt64,true);
vq:=Qword(Args[DoArg].VInt64^);
index:=31;
end;
If Prec>index then
ToAdd:=HexStr(vq,index)
else
begin
// determine minimum needed number of hex digits.
Index:=1;
While (qWord(1) shl (Index*4)<=vq) and (index<16) do
inc(Index);
If Index>Prec then
Prec:=Index;
ToAdd:=HexStr(vq,Prec);
end;
{$endif}
end;
'%': ToAdd:='%';
end;
@ -2215,7 +2236,7 @@ begin
begin
HB:=((C=BC) and (BreakStr=Copy(L,P,BLen)));
If HB then
Inc(P,Blen-1)
Inc(P,Blen)
else
begin
If (P>MaxCol) then
@ -2299,7 +2320,10 @@ const
{
$Log$
Revision 1.23 2004-12-19 17:55:38 michael
Revision 1.24 2004-12-26 13:04:30 peter
* fix bugs 3477, 3478, 3479
Revision 1.23 2004/12/19 17:55:38 michael
+ Implemented wraptext
Revision 1.22 2004/12/01 10:34:46 michael