2
0
Эх сурвалжийг харах

* implemented fpc_AnsiStr_Currency and fpc_Val_Currency_AnsiStr.
* fixed fpc_ShortStr_Currency.

git-svn-id: trunk@5856 -

yury 18 жил өмнө
parent
commit
b6b9582d8e

+ 26 - 0
rtl/inc/astrings.inc

@@ -746,6 +746,23 @@ begin
 end;
 
 
+Function fpc_Val_Currency_AnsiStr(Const S : AnsiString; out Code : ValSInt): Currency; [public, alias:'FPC_VAL_CURRENCY_ANSISTR']; compilerproc;
+Var
+  SS : String;
+begin
+  if length(S) > 255 then
+    begin
+      fpc_Val_Currency_AnsiStr := 0;
+      code := 256;
+    end
+  else
+    begin
+      SS := S;
+      Val(SS,fpc_Val_Currency_AnsiStr,code);
+    end;
+end;
+
+
 Function fpc_Val_UInt_AnsiStr (Const S : AnsiString; out Code : ValSInt): ValUInt; [public, alias:'FPC_VAL_UINT_ANSISTR']; compilerproc;
 Var
   SS : ShortString;
@@ -819,6 +836,15 @@ begin
 end;
 
 
+procedure fpc_AnsiStr_Currency(c : currency;len,fr : SizeInt;out s : ansistring);[public,alias:'FPC_ANSISTR_CURRENCY']; compilerproc; {$IFNDEF VER2_0} Inline; {$ENDIF}
+var
+  ss: ShortString;
+begin
+  str(c:len:fr,ss);
+  s:=ss;
+end;
+
+
 Procedure fpc_AnsiStr_UInt(v : ValUInt;Len : SizeInt; out S : AnsiString);[Public,Alias : 'FPC_ANSISTR_VALUINT']; compilerproc; {$IFNDEF VER2_0} Inline; {$ENDIF}
 Var
   SS : ShortString;

+ 2 - 0
rtl/inc/compproc.inc

@@ -81,6 +81,7 @@ procedure fpc_chararray_uint(v : valuint;len : SizeInt;out a : array of char); c
 procedure fpc_AnsiStr_sint(v : valsint; Len : SizeInt; out S : AnsiString); compilerproc;
 procedure fpc_AnsiStr_uint(v : valuint;Len : SizeInt; out S : AnsiString); compilerproc;
 procedure fpc_AnsiStr_Float(d : ValReal;len,fr,rt : SizeInt;out s : ansistring); compilerproc;
+procedure fpc_AnsiStr_Currency(c : currency;len,fr : SizeInt;out s : ansistring); compilerproc;
 {$endif FPC_HAS_FEATURE_ANSISTRINGS}
 
 {$ifdef FPC_HAS_FEATURE_WIDESTRINGS}
@@ -117,6 +118,7 @@ Function fpc_Val_Currency_ShortStr(const s : shortstring; out Code : longint): c
 Function fpc_Val_Real_AnsiStr(Const S : AnsiString; out Code : ValSInt): ValReal; compilerproc;
 Function fpc_Val_UInt_AnsiStr (Const S : AnsiString; out Code : ValSInt): ValUInt; compilerproc;
 Function fpc_Val_SInt_AnsiStr (DestSize: SizeInt; Const S : AnsiString; out Code : ValSInt): ValSInt; compilerproc;
+Function fpc_Val_Currency_AnsiStr(Const S : AnsiString; out Code : ValSInt): Currency; compilerproc;
 {$endif FPC_HAS_FEATURE_ANSISTRINGS}
 {$ifdef FPC_HAS_FEATURE_WIDESTRINGS}
 Function fpc_Val_Real_WideStr(Const S : WideString; out Code : ValSInt): ValReal; compilerproc;

+ 7 - 5
rtl/inc/sstrings.inc

@@ -392,18 +392,20 @@ const
 var
   buf : array[1..19] of char;
   i,j,k,reslen,tlen,sign,r,point : longint;
-  ic : int64;
+  ic : qword;
 begin
   { default value for length is -32767 }
   if len=-32767 then
     len:=25;
-  ic:=PInt64(@c)^;
-  if ic >= 0 then
-    sign:=0
+  if PInt64(@c)^ >= 0 then
+    begin
+      ic:=QWord(PInt64(@c)^);
+      sign:=0;
+    end
   else
     begin
       sign:=1;
-      ic:=-ic;
+      ic:=QWord(-PInt64(@c)^);
     end;
   { converting to integer string }
   tlen:=0;