> Á ÂÉÂÌÉÁÔÅÞËÕ ÐÉÓÁÌÉ\ËÏÍÐÉÌÉÒÏ×ÁÌÉ ÂÅÚ ÏÓÏÂÙÚ ÐÒÏÂÌÅÍ ? Á ÔÏ ÎÁ ÆÏÒÕÍÅ ÎÅÔ
> ÎÅÔ ÐÏÑ×ÌÑÀÔÓÑ ÓÏÏÂÝÅÎÉÑ ÞÔÏ ÎÅ ÐÏÌÕÞÁÅÔÓÑ Õ ÎÉÈ ÞÔÏ-ÔÏ ÔÁÍ, ÎÏ ÐÏÔÏÍ
> ÐÒÏÐÁÄÁÌÉ, ×ÏÎ 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.