Browse Source

amunits: amigalib: reworked printf() functions not use the deprecated pas2c() function

git-svn-id: trunk@30983 -
Károly Balogh 10 years ago
parent
commit
1b37964d86
1 changed files with 25 additions and 26 deletions
  1. 25 26
      packages/amunits/src/coreunits/amigalib.pas

+ 25 - 26
packages/amunits/src/coreunits/amigalib.pas

@@ -159,13 +159,11 @@ function SetSuperAttrsA(cl : pIClass; obj: pObject_; msg : APTR): ulong;
 
 }
 
-procedure printf(Fmtstr : pchar; Args : array of const);
-procedure printf(Fmtstr : string; Args : array of const);
+procedure printf(Fmtstr : pchar; const Args : array of const);
+procedure printf(Fmtstr : string; const Args : array of const);
 
 IMPLEMENTATION
 
-uses pastoc;
-
 {*  Exec support functions from amiga.lib  *}
 
 procedure BeginIO (ioRequest: pIORequest);
@@ -393,35 +391,36 @@ begin
     SetSuperAttrsA := DoSuperMethodA(cl, obj, @arr);
 end;
 
-var
-  argarray : array [0..20] of longint;
 
-function gettheconst(args : array of const): pointer;
+procedure printf(Fmtstr : pchar; const Args : array of const);
 var
-   i : longint;
-
+  i,j : longint;
+  argarray : array of longint;
+  strarray : array of RawByteString;
 begin
-
-    for i := 0 to High(args) do begin
-        case args[i].vtype of
-            vtinteger : argarray[i] := longint(args[i].vinteger);
-            vtpchar   : argarray[i] := longint(args[i].vpchar);
-            vtchar    : argarray[i] := longint(args[i].vchar);
-            vtpointer : argarray[i] := longint(args[i].vpointer);
-            vtstring  : argarray[i] := longint(pas2c(args[i].vstring^));
-        end;
+  SetLength(argarray, length(args));
+  SetLength(strarray, length(args));
+  j:=0;
+  for i := low(args) to High(args) do 
+    begin
+      case args[i].vtype of
+        vtinteger : argarray[i] := longint(args[i].vinteger);
+        vtpchar   : argarray[i] := longint(args[i].vpchar);
+        vtchar    : argarray[i] := longint(args[i].vchar);
+        vtpointer : argarray[i] := longint(args[i].vpointer);
+        vtstring  : begin
+            strarray[j]:=RawByteString(args[i].vstring^);
+            argarray[i]:=longint(PChar(strarray[j]));
+            inc(j);
+          end;
+      end;
     end;
-    gettheconst := @argarray;
-end;
-
-procedure printf(Fmtstr : pchar; Args : array of const);
-begin
-    VPrintf(Fmtstr,gettheconst(Args));
+  VPrintf(Fmtstr,@argarray[0]);
 end;
 
-procedure printf(Fmtstr : string; Args : array of const);
+procedure printf(Fmtstr : string; const Args : array of const);
 begin
-    VPrintf(pas2c(Fmtstr) ,gettheconst(Args));
+  printf(PChar(RawByteString(Fmtstr)), Args);
 end;