Simba/Units/RUTIS/Rutis_EXT_Common.pas

606 lines
20 KiB
Plaintext

Unit Rutis_EXT_Common;
Interface
{$i Delphi_Versions.inc}
{$IFDEF FPC}
{$mode objfpc}{$H+}
{$ENDIF}
Uses
lclintf, Forms, Math, Dialogs, SysUtils,
Rutis_Stack, Rutis_Defs, Rutis_Classes, TypInfo;
Type
PObject = ^TObject;
PSearchRec = ^TSearchRec;
PClass = ^TClass;
Procedure RegisterEXTMethods(Engine : TRutisEngineBase);
Implementation
//==============================================================================
//======== Strings
//==============================================================================
{$REGION 'Strings'}
Procedure _ToStr(Params : PRutisParamInfoArray; Result : PRutisParamInfo);
Begin
Case Params^[0].IntType Of
// intCardinal : PAnsiString(Result^.Data)^ := IntToStr(GetPCardinal(Params^[0].Data));
// intInteger : PAnsiString(Result^.Data)^ := IntToStr(GetPInteger(Params^[0].Data));
// intExtended : PAnsiString(Result^.Data)^ := FloatToStr(GetPExtended(Params^[0].Data));
intCardinal : SetPAnsiString(Result^.Data, IntToStr(GetPCardinal(Params^[0].Data)));
intInteger : SetPAnsiString(Result^.Data, IntToStr(GetPInteger(Params^[0].Data)));
intExtended : SetPAnsiString(Result^.Data, FloatToStr(GetPExtended(Params^[0].Data)));
// intCardinal : PAnsiString(Result^.Data)^ := IntToStr(PCardinal(Params^[0].Data)^);
// intInteger : PAnsiString(Result^.Data)^ := IntToStr(PInteger(Params^[0].Data)^);
// intExtended : PAnsiString(Result^.Data)^ := FloatToStr(PExtended(Params^[0].Data)^);
End;
End;
Procedure _ToInt(Params : PRutisParamInfoArray; Result : PRutisParamInfo);
Begin
Try
SetPInteger(Result^.Data, StrToInt(AnsiString(GetPPointer(Params^[0].Data))));
Except
SetPInteger(Result^.Data, 0);
End;
End;
Procedure _ToFloat(Params : PRutisParamInfoArray; Result : PRutisParamInfo);
Begin
Try
SetPExtended(Result^.Data, StrToFloat(AnsiString(GetPPointer(Params^[0].Data))));
Except
SetPExtended(Result^.Data, 0);
End;
End;
Procedure _SetDecimalSeparator(Params : PRutisParamInfoArray; Result : PRutisParamInfo);
Begin
DecimalSeparator := PAnsiChar(Params^[0].Data)^;
End;
Procedure _GetDecimalSeparator(Params : PRutisParamInfoArray; Result : PRutisParamInfo);
Begin
PAnsiChar(Result^.Data)^ := DecimalSeparator;
End;
Procedure _Chr(Params : PRutisParamInfoArray; Result : PRutisParamInfo);
Begin
PAnsiChar(Result^.Data)^ := Chr(PByte(Params^[0].Data)^);
End;
Procedure _Ord(Params : PRutisParamInfoArray; Result : PRutisParamInfo);
Begin
PByte(Result^.Data)^ := Ord(PAnsiChar(Params^[0].Data)^);
End;
Procedure _UpperCase(Params : PRutisParamInfoArray; Result : PRutisParamInfo);
Begin
SetPAnsiString(Result^.Data, UpperCase(AnsiString(GetPPointer(Params^[0].Data))));
End;
Procedure _LowerCase(Params : PRutisParamInfoArray; Result : PRutisParamInfo);
Begin
SetPAnsiString(Result^.Data, LowerCase(AnsiString(GetPPointer(Params^[0].Data))));
End;
Procedure _StringReplace(Params : PRutisParamInfoArray; Result : PRutisParamInfo);
Type PReplaceFlags = ^TReplaceFlags;
Begin
PAnsiString(Result^.Data)^ := StringReplace(
AnsiString(GetPPointer(Params^[0].Data)),
AnsiString(GetPPointer(Params^[1].Data)),
AnsiString(GetPPointer(Params^[2].Data)),
{$ifdef WinCe}unaligned({$endif}PReplaceFlags(Params^[3].Data)^{$ifdef WinCe}){$endif});
End;
Procedure _ExtractFilePath(Params : PRutisParamInfoArray; Result : PRutisParamInfo);
Begin
SetPAnsiString(Result^.Data, ExtractFilePath(AnsiString(GetPPointer(Params^[0].Data))));
End;
Procedure _ExtractFileName(Params : PRutisParamInfoArray; Result : PRutisParamInfo);
Begin
SetPAnsiString(Result^.Data, ExtractFileName(AnsiString(GetPPointer(Params^[0].Data))));
End;
Procedure _ExtractFileExt(Params : PRutisParamInfoArray; Result : PRutisParamInfo);
Begin
SetPAnsiString(Result^.Data, ExtractFileExt(AnsiString(GetPPointer(Params^[0].Data))));
End;
Procedure _ExpandFileName(Params : PRutisParamInfoArray; Result : PRutisParamInfo);
Begin
SetPAnsiString(Result^.Data, ExpandFileName(AnsiString(GetPPointer(Params^[0].Data))));
End;
{$ENDREGION}
//======== Internal ========
{$REGION 'Internal'}
Procedure _InheritsClass(Params : PRutisParamInfoArray; Result : PRutisParamInfo);
var
AObject : TObject;
AClass : TClass;
Begin
AObject := TObject(GetPPointer(Params^[0].Data));
If AObject = nil then exit;
AClass := TClass(GetPPointer(Params^[1].Data));
If AClass = nil then exit;
PBoolean(Result^.Data)^ := AObject is AClass;
End;
{$ENDREGION}
//======== Files ========
{$REGION 'Files'}
Procedure _FileExists(Params : PRutisParamInfoArray; Result : PRutisParamInfo);
Begin
PBoolean(Result^.Data)^ := FileExists(AnsiString(GetPPointer(Params^[0].Data)));
End;
Procedure _FindFirst(Params : PRutisParamInfoArray; Result : PRutisParamInfo);
Begin
SetPInteger(Result^.Data, FindFirst(
AnsiString(GetPPointer(Params^[0].Data)),
GetPInteger(Params^[1].Data),
PSearchRec(Params^[2].Data)^));
End;
Procedure _FindNext(Params : PRutisParamInfoArray; Result : PRutisParamInfo);
Begin
SetPInteger(Result^.Data, FindNext(PSearchRec(Params^[0].Data)^));
End;
Procedure _FindClose(Params : PRutisParamInfoArray; Result : PRutisParamInfo);
Begin
FindClose(PSearchRec(Params^[0].Data)^);
End;
{$ENDREGION}
//==============================================================================
//======== Windows
//==============================================================================
{$REGION 'Windows'}
Procedure _Sleep(Params : PRutisParamInfoArray; Result : PRutisParamInfo);
Begin
Sleep(GetPInteger(Params^[0].Data));
End;
Procedure _Delay(Params : PRutisParamInfoArray; Result : PRutisParamInfo);
Var
GTC : Cardinal;
Begin
GTC := GetTickCount + GetPInteger(Params^[0].Data);
While GTC >= GetTickCount Do
Begin
//Application.ProcessMessages;
sleep(1);
End;
End;
Procedure _RVal(Params : PRutisParamInfoArray; Result : PRutisParamInfo);
Begin
PByte(Result^.Data)^ := GetRValue(GetPCardinal(Params^[0].Data));
End;
Procedure _GVal(Params : PRutisParamInfoArray; Result : PRutisParamInfo);
Begin
PByte(Result^.Data)^ := GetRValue(GetPCardinal(Params^[0].Data));
End;
Procedure _BVal(Params : PRutisParamInfoArray; Result : PRutisParamInfo);
Begin
PByte(Result^.Data)^ := GetRValue(GetPCardinal(Params^[0].Data));
End;
Procedure _RGB(Params : PRutisParamInfoArray; Result : PRutisParamInfo);
Begin
SetPCardinal(Result^.Data, Cardinal(rgb(PByte(Params^[0].Data)^, PByte(Params^[1].Data)^, PByte(Params^[2].Data)^)));
End;
{$ifndef FPC}
Procedure _DynCallDLLProc(Params : PRutisParamInfoArray; Result : PRutisParamInfo);
Type
TPointerArray = Array Of Pointer;
PPointerArray = ^TPointerArray;
Var
DLLName : PAnsiString;
ProcName : PAnsiString;
ProcParams : TPointerArray;
HasResult : Boolean;
ProcResult : Cardinal;
Begin
DLLName := PAnsiString(Params^[0].Data);
ProcName := PAnsiString(Params^[1].Data);
HasResult := PBoolean(Params^[2].Data)^;
ProcParams := PPointerArray(PPointer(Params^[3].Data))^;
If length(ProcParams) > 100 Then exit;
If not DynamicDllCall(DLLName^, ProcName^, HasResult, ProcResult, ProcParams) Then
Begin
//ShowMessage('Function could not be found!');
PCardinal(Result^.Data)^ := 0;
End
Else
Begin
PCardinal(Result^.Data)^ := ProcResult;
End;
End;
{$endif}
Procedure _GetTickCount(Params : PRutisParamInfoArray; Result : PRutisParamInfo);
Begin
SetPCardinal(Result^.Data, GetTickCount);
End;
Procedure _GetAsyncKeyState(Params : PRutisParamInfoArray; Result : PRutisParamInfo);
Begin
// XXX TODO FIXME OMG
//PBoolean(Result^.Data)^ := Boolean(GetAsyncKeyState(GetPWord(Params^[0].Data)) <> 0);
End;
{$ifndef WINCE}
Procedure _Beep(Params : PRutisParamInfoArray; Result : PRutisParamInfo);
Begin
// XXX TO FIXME OMG
//Windows.Beep(GetPCardinal(Params^[0].Data), GetPCardinal(Params^[1].Data));
End;
{$endif WINCE}
Procedure _InputDlg(Params : PRutisParamInfoArray; Result : PRutisParamInfo);
Var
str : AnsiString;
StrOut : Pointer;
Begin
str := AnsiString(GetPPointer(Params^[1].Data));
If not InputQuery('Input', AnsiString(GetPPointer(Params^[0].Data)), str) Then
SetPAnsiString(Result^.Data, '')
else
SetPAnsiString(Result^.Data, Str);
End;
{$ENDREGION}
//==============================================================================
//======== Properties
//==============================================================================
{$REGION 'Properties'}
Procedure _SetIntProperty(Params : PRutisParamInfoArray; Result : PRutisParamInfo);
Var
Obj : TObject;
PropInfo : PPropInfo;
PropName : AnsiString;
Begin
Obj := TObject(GetPPointer(Params^[0].Data));
PropName := AnsiString(GetPPointer(Params^[1].Data));
Try
PropInfo := GetPropInfo(Obj, PropName);
If PropInfo <> nil Then
SetOrdProp(Obj, PropInfo, GetPInteger(Params^[2].Data));
Except
End;
End;
Procedure _GetIntProperty(Params : PRutisParamInfoArray; Result : PRutisParamInfo);
Var
Obj : TObject;
PropInfo : PPropInfo;
PropName : AnsiString;
Begin
Obj := TObject(GetPPointer(Params^[0].Data));
PropName := AnsiString(GetPPointer(Params^[1].Data));
Try
PropInfo := GetPropInfo(Obj, PropName);
If PropInfo <> nil Then
SetPInteger(Result^.Data, GetOrdProp(Obj, PropInfo));
Except
End;
End;
Procedure _SetBoolProperty(Params : PRutisParamInfoArray; Result : PRutisParamInfo);
Var
Obj : TObject;
PropInfo : PPropInfo;
PropName : AnsiString;
Begin
Obj := TObject(GetPPointer(Params^[0].Data));
PropName := AnsiString(GetPPointer(Params^[1].Data));
Try
PropInfo := GetPropInfo(Obj, PropName);
If PropInfo <> nil Then
SetOrdProp(Obj, PropInfo, PByte(Params^[2].Data)^);
Except
End;
End;
Procedure _GetBoolProperty(Params : PRutisParamInfoArray; Result : PRutisParamInfo);
Var
Obj : TObject;
PropInfo : PPropInfo;
PropName : AnsiString;
Begin
Obj := TObject(GetPPointer(Params^[0].Data));
PropName := AnsiString(GetPPointer(Params^[1].Data));
Try
PropInfo := GetPropInfo(Obj, PropName);
If PropInfo <> nil Then
PByte(Result^.Data)^ := GetOrdProp(Obj, PropInfo);
Except
End;
End;
Procedure _SetStrProperty(Params : PRutisParamInfoArray; Result : PRutisParamInfo);
Var
Obj : TObject;
PropInfo : PPropInfo;
PropName : AnsiString;
Begin
Obj := TObject(GetPPointer(Params^[0].Data));
PropName := AnsiString(GetPPointer(Params^[1].Data));
Try
PropInfo := GetPropInfo(Obj, PropName);
If PropInfo <> nil Then
SetStrProp(Obj, PropInfo, AnsiString(GetPPointer(Params^[2].Data)));
Except
End;
End;
Procedure _GetStrProperty(Params : PRutisParamInfoArray; Result : PRutisParamInfo);
Var
Obj : TObject;
PropInfo : PPropInfo;
PropName : AnsiString;
Begin
Obj := TObject(GetPPointer(Params^[0].Data));
PropName := AnsiString(GetPPointer(Params^[1].Data));
Try
PropInfo := GetPropInfo(Obj, PropName);
If PropInfo <> nil Then
SetPAnsiString(Result^.Data, GetStrProp(Obj, PropInfo));
Except
End;
End;
{$ENDREGION}
//==============================================================================
//======== Math
//==============================================================================
{$REGION 'Maths'}
Procedure _Round(Params : PRutisParamInfoArray; Result : PRutisParamInfo);
Begin
SetPInteger(Result^.Data, round(GetPSingle(Params^[0].Data)));
End;
Procedure _abs(Params : PRutisParamInfoArray; Result : PRutisParamInfo);
Begin
Case Params^[0].IntType Of
intInteger : SetPInteger(Result^.Data, abs(GetPInteger(Params^[0].Data)));
intSingle : SetPSingle(Result^.Data, abs(GetPSingle(Params^[0].Data)));
intDouble : SetPDouble(Result^.Data, abs(GetPDouble(Params^[0].Data)));
End;
End;
Procedure _RandomF(Params : PRutisParamInfoArray; Result : PRutisParamInfo);
Begin
SetPDouble(Result^.Data, random);
End;
Procedure _Random(Params : PRutisParamInfoArray; Result : PRutisParamInfo);
Begin
SetPInteger(Result^.Data, random(GetPInteger(Params^[0].Data)));
End;
Procedure _sqr(Params : PRutisParamInfoArray; Result : PRutisParamInfo);
Var d : Single;
Begin
d := GetPSingle(Params^[0].Data);
SetPSingle(Result^.Data, d * d);
End;
Procedure _sqrt(Params : PRutisParamInfoArray; Result : PRutisParamInfo);
Begin
SetPSingle(Result^.Data, sqrt(GetPSingle(Params^[0].Data)));
End;
Procedure _sqrtvari(Params : PVariantArray; Result : PVariant);
Begin
Result^ := sqrt(Params^[0]);
End;
Procedure _Sin(Params : PRutisParamInfoArray; Result : PRutisParamInfo);
Begin
SetPSingle(Result^.Data, Sin(GetPSingle(Params^[0].Data)));
End;
Procedure _Cos(Params : PRutisParamInfoArray; Result : PRutisParamInfo);
Begin
SetPSingle(Result^.Data, Cos(GetPSingle(Params^[0].Data)));
End;
Procedure _ArcSin(Params : PRutisParamInfoArray; Result : PRutisParamInfo);
Begin
SetPSingle(Result^.Data, ArcSin(GetPSingle(Params^[0].Data)));
End;
Procedure _ArcCos(Params : PRutisParamInfoArray; Result : PRutisParamInfo);
Begin
SetPSingle(Result^.Data, ArcCos(GetPSingle(Params^[0].Data)));
End;
Procedure _Arctan2(Params : PRutisParamInfoArray; Result : PRutisParamInfo);
Begin
SetPSingle(Result^.Data, Arctan2(GetPSingle(Params^[0].Data), GetPSingle(Params^[1].Data)));
End;
{$ENDREGION}
//==============================================================================
//==============================================================================
Procedure RegisterEXTMethods(Engine : TRutisEngineBase);
Begin
//======== Strings ========
{$REGION 'Strings'}
Engine.RegExtMethod('IntToStr',{$IfDef FPC}@{$EndIf}_ToStr, ['Integer'], 'String');
Engine.RegExtMethod('FloatToStr',{$IfDef FPC}@{$EndIf}_ToStr, ['Extended'], 'String');
Engine.RegExtMethod('StrToInt',{$IfDef FPC}@{$EndIf}_ToInt, ['String'], 'Integer');
Engine.RegExtMethod('StrToFloat',{$IfDef FPC}@{$EndIf}_ToFloat, ['String'], 'Extended');
Engine.RegExtMethod('DecimalSeparator',{$IfDef FPC}@{$EndIf}_GetDecimalSeparator, [], 'Char');
Engine.RegExtMethod('DecimalSeparator',{$IfDef FPC}@{$EndIf}_SetDecimalSeparator, ['Char'], '');
Engine.RegExtMethod('Chr',{$IfDef FPC}@{$EndIf}_Chr, ['Byte'], 'AnsiChar');
Engine.RegExtMethod('Ord',{$IfDef FPC}@{$EndIf}_Ord, ['AnsiChar'], 'Byte');
Engine.RegExtMethod('UpperCase',{$IfDef FPC}@{$EndIf}_UpperCase, ['AnsiString'], 'AnsiString');
Engine.RegExtMethod('LowerCase',{$IfDef FPC}@{$EndIf}_LowerCase, ['AnsiString'], 'AnsiString');
Engine.RegExtMethod('StringReplace',{$IfDef FPC}@{$EndIf}_LowerCase, ['AnsiString', 'AnsiString', 'AnsiString', 'Cardinal'], 'AnsiString');
Engine.RegExtMethod('ExtractFilePath',{$IfDef FPC}@{$EndIf}_ExtractFilePath, ['AnsiString'], 'AnsiString');
Engine.RegExtMethod('ExtractFileName',{$IfDef FPC}@{$EndIf}_ExtractFileName, ['AnsiString'], 'AnsiString');
Engine.RegExtMethod('ExtractFileExt',{$IfDef FPC}@{$EndIf}_ExtractFileExt, ['AnsiString'], 'AnsiString');
Engine.RegExtMethod('ExpandFileName',{$IfDef FPC}@{$EndIf}_ExpandFileName, ['AnsiString'], 'AnsiString');
{$ENDREGION}
//======== Internal ========
{$REGION 'Internal'}
Engine.RegExtMethod('InheritsClass',{$IfDef FPC}@{$EndIf}_InheritsClass, ['TObject', 'TClass'], 'Boolean');
{$ENDREGION}
//======== MATHS ========
{$REGION 'Maths'}
Engine.RegExtMethod('Round',{$IfDef FPC}@{$EndIf}_Round, ['Single'], 'Integer');
Engine.RegExtMethod('abs_int',{$IfDef FPC}@{$EndIf}_abs, ['Integer'], 'Integer',
'Makes an integer value positive');
Engine.RegExtMethod('abs',{$IfDef FPC}@{$EndIf}_abs, ['Double'], 'Double',
'Makes a float value positive');
Engine.RegExtMethod('RandomF',{$IfDef FPC}@{$EndIf}_RandomF, [], 'Double',
'Returns a random float value in the Intervall [0..1]');
Engine.RegExtMethod('Random',{$IfDef FPC}@{$EndIf}_Random, ['Integer'], 'Integer',
'Returns a random Integer number in the Intervall [0..a-1]');
Engine.RegExtMethod('sin',{$IfDef FPC}@{$EndIf}_sin, ['Single'], 'Single');
Engine.RegExtMethod('cos',{$IfDef FPC}@{$EndIf}_cos, ['Single'], 'Single');
Engine.RegExtMethod('Arcsin',{$IfDef FPC}@{$EndIf}_Arcsin, ['Single'], 'Single');
Engine.RegExtMethod('Arccos',{$IfDef FPC}@{$EndIf}_Arccos, ['Single'], 'Single');
Engine.RegExtMethod('Arctan2',{$IfDef FPC}@{$EndIf}_Arctan2, ['Single', 'Single'], 'Single',
'Returns the Angle of an triangle with the two given sides');
Engine.RegExtMethod('sqr',{$IfDef FPC}@{$EndIf}_sqr, ['Single'], 'Single');
Engine.RegExtMethod('sqrt',{$IfDef FPC}@{$EndIf}_sqrt, ['Single'], 'Single',
'Returns the squareroot of the value');
Engine.RegExtMethodV('sqrtvari',{$IfDef FPC}@{$EndIf}_sqrtvari, ['Single'], 'Single',
'for testing only');
{$ENDREGION}
//======== Properties ========
{$REGION 'Properties'}
Engine.RegExtMethod('SetIntProperty',{$IfDef FPC}@{$EndIf}_SetIntProperty, ['TObject', 'String', 'Integer'], '',
'Sets the (Integer) property value for an Object' + sLineBreak +
'#1 : Control' + sLineBreak +
'#2 : Property-Name' + sLineBreak +
'#3 : New Value for Property');
Engine.RegExtMethod('GetIntProperty',{$IfDef FPC}@{$EndIf}_GetIntProperty, ['TObject', 'String'], 'Integer',
'Returns the (Integer) property value for an Object' + sLineBreak +
'#1 : Control' + sLineBreak +
'#2 : Property-Name' + sLineBreak +
'Returns : Value of Property');
Engine.RegExtMethod('SetStrProperty',{$IfDef FPC}@{$EndIf}_SetStrProperty, ['TObject', 'String', 'String'], '',
'Sets the (String) property value for an Object' + sLineBreak +
'#1 : Control' + sLineBreak +
'#2 : Property-Name' + sLineBreak +
'#3 : New Value for Property');
Engine.RegExtMethod('GetStrProperty',{$IfDef FPC}@{$EndIf}_GetStrProperty, ['TObject', 'String'], 'String',
'Returns the (String) property value for an Object' + sLineBreak +
'#1 : Control' + sLineBreak +
'#2 : Property-Name' + sLineBreak +
'Returns : Value of Property');
Engine.RegExtMethod('SetBoolProperty',{$IfDef FPC}@{$EndIf}_SetBoolProperty, ['TObject', 'String', 'Boolean'], '',
'Sets the (Boolean) property value for an Object' + sLineBreak +
'#1 : Control' + sLineBreak +
'#2 : Property-Name' + sLineBreak +
'#3 : New Value for Property');
Engine.RegExtMethod('GetBoolProperty',{$IfDef FPC}@{$EndIf}_GetBoolProperty, ['TObject', 'String'], 'Boolean',
'Returns the (Boolean) property value for an Object' + sLineBreak +
'#1 : Control' + sLineBreak +
'#2 : Property-Name' + sLineBreak +
'Returns : Value of Property');
{$ENDREGION}
//======== Files ========
{$REGION 'Files'}
Engine.RegExtMethod('FileExists',{$IfDef FPC}@{$EndIf}_FileExists, ['AnsiString'], 'Boolean');
Engine.RegExtMethod('FindFirst',{$IfDef FPC}@{$EndIf}_FindFirst, ['AnsiString', 'Integer', 'PSearchRec'], 'Integer');
Engine.RegExtMethod('FindNext',{$IfDef FPC}@{$EndIf}_FindNext, ['PSearchRec'], 'Integer');
Engine.RegExtMethod('FindClose',{$IfDef FPC}@{$EndIf}_FindClose, ['PSearchRec'], '');
{$ENDREGION}
//======== Windows ========
{$REGION 'Windows'}
{$ifndef FPC}
Engine.RegExtMethod('CallDLLProc',{$IfDef FPC}@{$EndIf}_DynCallDLLProc, ['String', 'String', 'Boolean', 'Pointer'], 'Cardinal',
'Executes a DLL Method');
{$endif}
Engine.RegExtMethod('GetAsyncKeyState',{$IfDef FPC}@{$EndIf}_GetAsyncKeyState, ['Word'], 'Boolean',
'Checks whether a certain key is pressed' + sLineBreak + 'Returns true, if the key was pressed since the last call of GetAsyncKeyState for this key');
Engine.RegExtMethod('GetTickCount',{$IfDef FPC}@{$EndIf}_GetTickCount, [], 'Cardinal',
'Returns the current System-Time in milli-seconds');
{$ifndef WINCE}
Engine.RegExtMethod('Beep',{$IfDef FPC}@{$EndIf}_Beep, ['Cardinal', 'Cardinal'], '');
{$endif WINCE}
Engine.RegExtMethod('Sleep',{$IfDef FPC}@{$EndIf}_Sleep, ['Integer'], '');
Engine.RegExtMethod('Delay',{$IfDef FPC}@{$EndIf}_Delay, ['Integer'], '',
'Delays the execution of the script for a certain time');
Engine.RegExtMethod('InputDlg',{$IfDef FPC}@{$EndIf}_InputDlg, ['String', 'String'], 'String',
'Shows an Input-Dialog for the user' + sLineBreak +
'#1: Question' + sLineBreak +
'#2: Default value' + sLineBreak +
'Returns the string the user has entered or '' if the' + sLineBreak + 'user has pressed the Cancel-Button');
Engine.RegExtMethod('RVal',{$IfDef FPC}@{$EndIf}_RVal, ['Cardinal'], 'Byte',
'Extracts the Red-Component of a TColor value');
Engine.RegExtMethod('GVal',{$IfDef FPC}@{$EndIf}_GVal, ['Cardinal'], 'Byte',
'Extracts the Green-Component of a TColor value');
Engine.RegExtMethod('BVal',{$IfDef FPC}@{$EndIf}_BVal, ['Cardinal'], 'Byte',
'Extracts the Blue-Component of a TColor value');
Engine.RegExtMethod('RGB',{$IfDef FPC}@{$EndIf}_RGB, ['Byte', 'Byte', 'Byte'], 'Cardinal',
'Creates a TColor Value out of the red, green and blue components');
{$ENDREGION}
End;
Initialization
randomize;
End.