diff --git a/rtl/objpas/sysutils/sysstr.inc b/rtl/objpas/sysutils/sysstr.inc index e01d66e638..1eda0ce847 100644 --- a/rtl/objpas/sysutils/sysstr.inc +++ b/rtl/objpas/sysutils/sysstr.inc @@ -128,7 +128,7 @@ begin while (result=0) and (Iquote then exit; inc(p); - + setlength(result,(Q-P)+1); R:=@Result[1]; i := 0; - while P <> Q do + while P <> Q do begin - R^:=P^; + R^:=P^; inc(R); if (P^ = Quote) then begin P := P + 1; if (p^ <> Quote) then begin - dec(R); - break; + dec(R); + break; end; - end; + end; P := P + 1; end ; src:=p; @@ -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 @@ -910,8 +914,8 @@ var Code: word; inc(chpos); If Fmt[Chpos]='%' then begin - Result:='%'; - exit; // VP fix + Result:='%'; + exit; // VP fix end; ReadIndex; ReadLeft; @@ -984,11 +988,11 @@ begin 'D' : begin if Checkarg(vtinteger,false) then Str(Args[Doarg].VInteger,ToAdd) - {$IFNDEF VIRTUALPASCAL} + {$IFNDEF VIRTUALPASCAL} else if CheckArg(vtInt64,true) then Str(Args[DoArg].VInt64^,toadd) - {$ENDIF} - ; + {$ENDIF} + ; Width:=Abs(width); Index:=Prec-Length(ToAdd); If ToAdd[1]<>'-' then @@ -1000,15 +1004,15 @@ begin 'U' : begin if Checkarg(vtinteger,false) then Str(cardinal(Args[Doarg].VInteger),ToAdd) - {$IFNDEF VIRTUALPASCAL} + {$IFNDEF VIRTUALPASCAL} else if CheckArg(vtInt64,true) then Str(qword(Args[DoArg].VInt64^),toadd) - {$ENDIF} - ; + {$ENDIF} + ; Width:=Abs(width); Index:=Prec-Length(ToAdd); - ToAdd:=StringOfChar('0',Index)+ToAdd - end; + ToAdd:=StringOfChar('0',Index)+ToAdd + end; 'E' : begin CheckArg(vtExtended,true); ToAdd:=FloatToStrF(Args[doarg].VExtended^,ffexponent,Prec,3); @@ -1064,38 +1068,55 @@ begin // Insert(':',ToAdd,5); end; 'X' : begin +{$ifdef ver1_0} if Checkarg(vtinteger,false) then - begin - vl:=Args[Doarg].VInteger; - index:=16; - end - else - begin + begin + vl:=Args[Doarg].VInteger and int64($ffffffff); + index:=16; + end + else + begin CheckArg(vtInt64,true); - vl:=Args[DoArg].VInt64^; - index:=31; - end; + vl:=Args[DoArg].VInt64^; + index:=31; + end; If Prec>index then ToAdd:=HexStr(vl,index) else 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; @@ -2186,8 +2207,8 @@ Var C,LQ,BC : Char; P,BLen,Len : Integer; HB,IBC : Boolean; - -begin + +begin Result:=''; L:=Line; Blen:=Length(BreakStr); @@ -2211,12 +2232,12 @@ begin LQ:=C; If (LQ<>#0) then Inc(P) - else + else begin HB:=((C=BC) and (BreakStr=Copy(L,P,BLen))); If HB then - Inc(P,Blen-1) - else + Inc(P,Blen) + else begin If (P>MaxCol) then IBC:=C in BreakChars; @@ -2237,7 +2258,7 @@ function WrapText(const Line: string; MaxCol: Integer): string; begin Result:=WrapText(Line,sLineBreak, [' ', '-', #9], MaxCol); end; - + { Case Translation Tables @@ -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