> Á ÂÉÂÌÉÁÔÅÞËÕ ÐÉÓÁÌÉ\ËÏÍÐÉÌÉÒÏ×ÁÌÉ ÂÅÚ ÏÓÏÂÙÚ ÐÒÏÂÌÅÍ ? Á ÔÏ ÎÁ ÆÏÒÕÍÅ ÎÅÔ
> ÎÅÔ ÐÏÑ×ÌÑÀÔÓÑ ÓÏÏÂÝÅÎÉÑ ÞÔÏ ÎÅ ÐÏÌÕÞÁÅÔÓÑ Õ ÎÉÈ ÞÔÏ-ÔÏ ÔÁÍ, ÎÏ ÐÏÔÏÍ
> ÐÒÏÐÁÄÁÌÉ, ×ÏÎ ArtGal ÔÏÖÅÔ ÎÅÄÁ×ÎÏ ×ÏÐÒÏÓÏÍ ÚÁÄÁ×ÁÌÓÑ.
>
> ÅÓÌÉ ÅÓÔØ ÏÔÌÉÞÉÑ ÏÔ ÄÅÌØÆÏ×ÏÊ ÍÏÖÎÏ ÐÒÉÍÅÒÞÉË ÄÌÑ ÎÁÒÏÄÁ ÈÏÔØ ÎÁ ÏÄÎÕ
> ÐÒÏÓÔÅÎØËÕÀ ÆÕÎËÃÉÀ ÄÌÑ ÏÂÝÅÓÔ×ÅÎÎÏÓÔÉ ?

âÅÚ ÐÒÏÂÌÅÍ. âÁÎÁÌØÎÙÊ FreePascal. õ KDV ÎÁ ÓÁÊÔÅ ×ÚÑÌÉ ÚÁ ÐÒÉÍÅÒ.

unit bglmath;
{$mode objfpc}
{$PACKRECORDS C}

interface

  function roundfloat(var Value, RoundToNearest: Double):
Double;cdecl;export;
  function doubleabs(var Value: Double): Double; cdecl; export;
  function integerabs(var Value: Integer): Integer; cdecl; export;
  function truncate(var Value: Double): Integer; cdecl; export;
  function doubleplus(var Value: Double): double; cdecl; export;
  function doublesqr(var Value: Double): double; cdecl; export;
  function doublesqrt(var Value: Double): Double; cdecl; export;

implementation

function roundfloat(var Value, RoundToNearest: Double): Double;cdecl;export;
        function kround(d:Double):Int64;//LongInt;
        begin
          if d >=0 then Result:=Trunc(d+0.5000001) else
Result:=Trunc(d-0.5000001);
        end;
var
Factor: Extended;
begin
  Factor := Int(Exp(RoundToNearest * Ln(10)));
  Result := kround(Factor * Value) / Factor;
end;

function doublesqr(var Value: Double): Double; cdecl; export;
begin
  result := sqr(Value);
end;

function doublesqrt(var Value: Double): Double; cdecl; export;
begin
  result:=Sqrt(Value);
end;

function doubleabs(var Value: Double): Double; cdecl; export;
begin
  result := Abs(Value);
end;

function integerabs(var Value: Integer): Integer; cdecl; export;
begin
  result := Abs(Value);
end;

function truncate(var Value: Double): Integer; cdecl; export;
begin
  result := Trunc(Value);
end;

function doubleplus(var Value: Double): double; cdecl; export;
begin
  if Value>=0 then result:=value else result:=0.00;
end;

end.


unit bglstr;
{$mode objfpc}
{$PACKRECORDS C}
{H+}
interface
uses linux,strings,bgldatetime,objects,sysutils;


const
  rus_chars:pChar = #197#210#211#206#208#192#205#202#213#209
                +#194#204#229#243#232#238#240#224#234#245#241#236;
  lat_chars:pChar = 'ETYOPAHKXCBMeyuopakxcm';
  small_chars:pChar =
#113#119#101#114#116#121#117#105#111#112#97#115#100#102#103
+#104#106#107#108#122#120#99#118#98#110#109#233#246#243#234
+#229#237#227#248#249#231#245#250#244#251#226#224#239#240#238
+#235#228#230#253#255#247#241#236#232#242#252#225#254#184
;
  cap_chars:pChar =
#81#87#69#82#84#89#85#73#79#80#65#83#68#70#71#72#74#75#76#90
+#88#67#86#66#78#77#201#214#211#202#197#205#195#216#217#199
+#213#218#212#219#194#192#207#208#206#203#196#198#221#223#215
+#209#204#200#210#220#193#222#168
;
   cp1251:pChar =
#233#246#243#234#229#237#227#248#249#231#245#250#244#251#226
+#224#239#240#238#235#228#230#253#255#247#241#236#232#242#252
+#225#254#184#201#214#211#202#197#205#195#216#217#199#213#218
+#212#219#194#192#207#208#206#203#196#198#221#223#215#209#204
+#200#210#220#193#222#168
;

WordChars: TCharSet =
['0'..'9', 'A'..'Z', 'a'..'z'];

  function makeresultstring(Source, OptionalDest: PChar; Len: DWORD): PChar;
  function findtokenstartingat(st: String; var i: Integer;TokenChars:
TCharSet; TokenCharsInToken: Boolean): String;

  function replace_it(CString: PChar;scr: PChar;dest: PChar):PChar;
  function rupper(CString: PChar): PChar;cdecl;export;
  function rlower(CString: PChar): PChar;cdecl;export;
  function character(var Number: Integer): PChar; cdecl; export;
  function crlf: PChar; cdecl; export;
  function findnthword(sz: PChar; var i: Integer): PChar; cdecl; export;
  function findword(sz: PChar; var i: Integer): PChar; cdecl; export;
  function alltrim(sz: PChar): PChar; cdecl; export;
  function stringlength(sz: PChar): Integer; cdecl; export;
  function substr(szSubStr, szStr: PChar): Integer; cdecl; export;
  function copysubstr(sz: PChar;var index:integer;var count:integer): PChar;
cdecl; export;
  function replacestr_it(S, Srch, Replace: PChar): PChar; cdecl; export;
  function conv(sz: PChar): PChar; cdecl; export;

implementation



function MakeResultString(Source, OptionalDest: PChar; Len: DWORD): PChar;
begin
  result := OptionalDest;
  if (Len = 0) then
    Len := StrLen(Source) + 1;
  if (result = nil) then result := ib_util_malloc(Len);
  if (Source <> result) then begin
    if (Source = nil) or (Len = 1) then
      result[0] := #0
    else
      Move(Source^, result^, Len);
  end;
end;

function findtokenstartingat(st: String; var i: Integer;TokenChars:
TCharSet; TokenCharsInToken: Boolean): String;
var
  Len, j: Integer;
begin
  if (i < 1) then i := 1;
  j := i; Len := Length(st);
  while (j <= Len) and
        ((TokenCharsInToken and (not (st[j] in TokenChars))) or
         ((not TokenCharsInToken) and (st[j] in TokenChars))) do Inc(j);
  i := j;
  while (j <= Len) and
        (((not TokenCharsInToken) and (not (st[j] in TokenChars))) or
         (TokenCharsInToken and (st[j] in TokenChars))) do Inc(j);
  if (i > Len) then
    result := ''
  else
    result := Copy(st, i, j - i);
  i := j;
end;

function replace_it(CString: PChar;scr: PChar;dest: PChar):PChar;
var i,j:integer;
begin
  i:=0;
  while (CString[i]<>#0) do
  begin
    j:=0;
    while (scr[j]<>#0) do
    begin
       if CString[i]=scr[j]
       then
       begin
         CString[i]:=dest[j];
         Break;
       end;
       inc(j);
    end;
    inc(i);
  end;
  result:=CString;
end;

function rupper(CString: PChar): PChar;cdecl;export;
begin
  result:=replace_it(CString,small_chars,cap_chars);
end;

function rlower(CString: PChar): PChar;cdecl;export;
begin
  result:=replace_it(CString,cap_chars,small_chars);
end;

function Character(var Number: Integer): PChar; cdecl; export;
var
  c: array[0..1] of Char;
begin
  c[0] := Char(Number);
  c[1] := #0;
  result := MakeResultString(@c, nil, 2);
end;

function crlf: PChar; cdecl; export;
begin
  result := MakeResultString(#13 + #10, nil, 3);
end;

function findnthword(sz: PChar; var i: Integer): PChar; cdecl; export;
var
  j, Len: Integer;
  str, res: String;
begin
  str := String(sz);
  res := '';
  Len := Length(str);
  j := 1;
  while (j <= Len) and
        (i > 0) do begin
    res := FindTokenStartingAt(String(sz), i, WordChars, True);
    Dec(i);
  end;
  result := MakeResultString(PChar(Trim(res)), nil, 0);
end;

function findword(sz: PChar; var i: Integer): PChar; cdecl; export;
begin
  Inc(i);
  result := MakeResultString(PChar(Trim(FindTokenStartingAt(String(sz), i,
WordChars, True))), nil, 0);
end;

function alltrim(sz: PChar): PChar; cdecl; export;
begin
  result := MakeResultString(PChar(Trim(String(sz))), nil, 0);
end;

function conv(sz: PChar): PChar; cdecl; export;
var i,j:integer;
    d,s,re:ansistring;
    s1,s2:string;
begin
 s1:='ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890- .+';
 s2:='èRáOïIUåTYA5L6KS9WQóôE0î2P7GF1MòHë8DXJé4';
 re:=ansiString(sz);
 d:='';
 for i:=1 to length(re) do
   for j:=1 to length(s1) do
    begin
      if re[i]=s1[j] then
        begin
          d:=s2[j]+d;
        end;
    end;
  result := MakeResultString(PChar(Trim(String(d))), nil, 0);
end;

function stringlength(sz: PChar): Integer; cdecl; export;
begin
  result := StrLen(sz);
end;

function substr(szSubStr, szStr: PChar): Integer; cdecl; export;
begin
 result := Pos(String(szSubStr), String(szStr)) - 1;
end;

function copysubstr(sz: PChar;var index:integer;var count:integer): PChar;
cdecl; export;
var s:ansistring;
begin
  s:=copy(ansiString(sz),index,count);
  result:=MakeResultString(PChar(s), nil, 0);
end;

function replacestr_it(S, Srch, Replace: PChar): PChar; cdecl; export;
var
  I: Integer;
  Source: ansistring;
  FS, FSrch, FReplace,FResult:ansistring;
begin
  FS := ansistring(S);
  FSrch:= ansistring(Srch);
  FReplace:= ansistring(Replace);
  FResult := '';
  repeat
    I := Pos(FSrch, FS);
    if I > 0 then begin
      FResult := FResult + Copy(FS, 1, I - 1) + FReplace;
      FS := Copy(FS, I + Length(FSrch), MaxInt);
    end
    else FResult := FResult + FS;
  until I <= 0;
  result:=MakeResultString(PChar(fresult), nil, 0);
end;

end.



Ответить