From ed96400df1823759a178bed5e9dd5f5f85ae3b85 Mon Sep 17 00:00:00 2001 From: Raymond Date: Wed, 3 Feb 2010 23:13:09 +0000 Subject: [PATCH] Made a start with getting plugins to work correctly, therefore added TEIOS_Exported... git-svn-id: http://www.villavu.com/repositories/merlijn/mufasa@512 3f818213-9676-44b0-a9b4-5e4c4e03d09d --- .../Units/MMLAddon/PSInc/Wrappers/window.inc | 10 ++ trunk/Units/MMLAddon/PSInc/pscompile.inc | 1 + .../MMLAddon/PSInc/psexportedmethods.inc | 2 + trunk/Units/MMLAddon/mmlpsthread.pas | 1 + trunk/Units/MMLCore/iomanager.pas | 154 ++++++++++++++++++ 5 files changed, 168 insertions(+) diff --git a/trunk/Units/MMLAddon/PSInc/Wrappers/window.inc b/trunk/Units/MMLAddon/PSInc/Wrappers/window.inc index c6bfaff..8ab890d 100644 --- a/trunk/Units/MMLAddon/PSInc/Wrappers/window.inc +++ b/trunk/Units/MMLAddon/PSInc/Wrappers/window.inc @@ -61,6 +61,16 @@ begin CurrThread.Client.IOManager.GetKeyMouseTarget(result); end; +function ExportImageTarget : TEIOS_Exported; +begin; + result := CurrThread.Client.IOManager.ExportImageTarget; +end; + +function ExportKeyMouseTarget : TEIOS_Exported; +begin; + result := CurrThread.Client.IOManager.ExportKeyMouseTarget; +end; + procedure FreeTarget(idx: integer); extdecl; begin CurrThread.Client.IOManager.FreeTarget(idx); diff --git a/trunk/Units/MMLAddon/PSInc/pscompile.inc b/trunk/Units/MMLAddon/PSInc/pscompile.inc index 58478aa..7454d90 100644 --- a/trunk/Units/MMLAddon/PSInc/pscompile.inc +++ b/trunk/Units/MMLAddon/PSInc/pscompile.inc @@ -41,6 +41,7 @@ Sender.Comp.AddTypeS('TPointArrayArray','Array of TPointArray'); Sender.Comp.AddTypeS('TBmpMirrorStyle','(MirrorWidth,MirrorHeight,MirrorLine)'); Sender.Comp.AddTypeS('TMask','record White, Black : TPointArray; WhiteHi,BlackHi : integer; W,H : integer;end;'); Sender.Comp.addtypeS('PPoint','record R,T : extended; end;'); +Sender.Comp.AddTypeS('TEIOS_Exported','record int1,int2,int3,int4,int5,int6,int7,int8,int9,int10,int11,int12,int13,int14:integer; end;'); Sender.Comp.AddTypes('TDTMPointDef', 'record x, y, Color, Tolerance, AreaSize, AreaShape: integer; end;'); Sender.Comp.AddTypes('TDTMPointDefArray', 'Array Of TDTMPointDef;'); diff --git a/trunk/Units/MMLAddon/PSInc/psexportedmethods.inc b/trunk/Units/MMLAddon/PSInc/psexportedmethods.inc index 849f862..a4ce04d 100644 --- a/trunk/Units/MMLAddon/PSInc/psexportedmethods.inc +++ b/trunk/Units/MMLAddon/PSInc/psexportedmethods.inc @@ -79,6 +79,8 @@ AddFunction(@SetImageTarget,'procedure SetImageTarget(idx: integer);'); AddFunction(@SetKeyMouseTarget,'procedure SetKeyMouseTarget(idx: integer);'); AddFunction(@GetImageTarget,'function GetImageTarget: integer;'); AddFunction(@GetKeyMouseTarget,'function GetKeyMouseTarget: integer;'); +AddFunction(@ExportImageTarget,'function ExportImageTarget : TEIOS_Exported;'); +AddFunction(@ExportKeyMouseTarget,'function ExportKeyMouseTarget : TEIOS_Exported;'); AddFunction(@FreeTarget,'procedure FreeTarget(idx: integer);'); AddFunction(@SetDesktopAsClient,'procedure SetDesktopAsClient'); AddFunction(@ActivateClient, 'procedure ActivateClient;'); diff --git a/trunk/Units/MMLAddon/mmlpsthread.pas b/trunk/Units/MMLAddon/mmlpsthread.pas index 97fac2b..f8d4594 100644 --- a/trunk/Units/MMLAddon/mmlpsthread.pas +++ b/trunk/Units/MMLAddon/mmlpsthread.pas @@ -174,6 +174,7 @@ uses uPSC_extctrls, //Compile-libs uPSUtils, fontloader, + IOmanager,//TEIOS_Exported IniFiles,//Silly INI files uPSR_std, uPSR_controls,uPSR_classes,uPSR_graphics,uPSR_stdctrls,uPSR_forms, uPSR_extctrls, //Runtime-libs diff --git a/trunk/Units/MMLCore/iomanager.pas b/trunk/Units/MMLCore/iomanager.pas index d7dc3e5..b3b2110 100644 --- a/trunk/Units/MMLCore/iomanager.pas +++ b/trunk/Units/MMLCore/iomanager.pas @@ -207,6 +207,28 @@ interface function FindClient(name:string): integer; end; + {Basically like TEIOS_Client, only this is exported to some plugin, whilst TEIOS_Client is Imported + Not all functions have to be 'set', it depends on the kind of target (Image/KeyMouse) } + TEIOS_Exported = packed record + Target : Pointer; + + GetTargetDimensions: procedure(target: pointer; var w, h: integer); stdcall; + GetColor : function(target: pointer;x,y : integer) : integer; stdcall; + ReturnData : function(target: pointer;xs, ys, width, height: Integer): TRetData; stdcall; + FreeReturnData : procedure(target: pointer); stdcall; + + GetMousePosition: procedure(target: pointer; var x,y: integer); stdcall; + MoveMouse: procedure(target: pointer; x,y: integer); stdcall; + HoldMouse: procedure(target: pointer; x,y: integer; left: boolean); stdcall; + ReleaseMouse: procedure(target: pointer; x,y: integer; left: boolean); stdcall; + + SendString: procedure(target: pointer; str: PChar); stdcall; + HoldKey: procedure(target: pointer; key: integer); stdcall; + ReleaseKey: procedure(target: pointer; key: integer); stdcall; + IsKeyHeld: function(target: pointer; key: integer): boolean; stdcall; + GetKeyCode : function(target : pointer; C : char) : integer; stdcall; + end; + { This class specifies the object that will go in the ThreadVar to give the script access | to targets. This class is abstract, i.e., the actual os-specific Implementation of | TIOManager is in one of the os units. @@ -255,6 +277,8 @@ interface function GetImageTarget: TTarget; overload; function GetKeyMouseTarget: TTarget; overload; + function ExportImageTarget : TEIOS_Exported; overload; + function ExportKeyMouseTarget : TEIOS_Exported; overload; procedure GetImageTarget(var idx: integer); overload; procedure GetKeyMouseTarget(var idx: integer); overload; @@ -285,6 +309,23 @@ interface property Stopping: Boolean Read FStopping write SetState; end; + {These wrappers are for an exported TEIOS_Exported. This is done so a plugin can acces the current target and use its methodes} + procedure TEIOS_Exported_GetTargetDimensions(target: pointer; var w, h: integer); stdcall; + function TEIOS_Exported_GetColor (target: pointer;x,y : integer) : integer; stdcall; + function TEIOS_Exported_ReturnData (target: pointer;xs, ys, width, height: Integer): TRetData; stdcall; + procedure TEIOS_Exported_FreeReturnData(target: pointer); stdcall; + + procedure TEIOS_Exported_GetMousePosition(target: pointer; var x,y: integer); stdcall; + procedure TEIOS_Exported_MoveMouse(target: pointer; x,y: integer); stdcall; + procedure TEIOS_Exported_HoldMouse(target: pointer; x,y: integer; left: boolean); stdcall; + procedure TEIOS_Exported_ReleaseMouse(target: pointer; x,y: integer; left: boolean); stdcall; + + procedure TEIOS_Exported_SendString(target: pointer; str: PChar); stdcall; + procedure TEIOS_Exported_HoldKey(target: pointer; key: integer); stdcall; + procedure TEIOS_Exported_ReleaseKey(target: pointer; key: integer); stdcall; + function TEIOS_Exported_IsKeyHeld(target: pointer; key: integer): boolean; stdcall; + function TEIOS_Exported_GetKeyCode(target : pointer; C : char) : integer; stdcall; + implementation uses FileUtil, @@ -293,6 +334,7 @@ implementation var eios_controller: TEIOS_Controller; + //***implementation*** TIOManager constructor TIOManager_Abstract.Create(plugin_dir: string); @@ -392,6 +434,37 @@ begin result := keymouse; end; +function TIOManager_Abstract.ExportImageTarget: TEIOS_Exported; +begin + FillChar(result,sizeof(TEIOS_Exported),0); + with result do + begin + Target:= image; + GetTargetDimensions:= @TEIOS_Exported_GetTargetDimensions; + GetColor:= @TEIOS_Exported_GetColor; + ReturnData := @TEIOS_Exported_ReturnData; + FreeReturnData:= @TEIOS_Exported_FreeReturnData; + end; +end; + +function TIOManager_Abstract.ExportKeyMouseTarget: TEIOS_Exported; +begin + with result do + begin + Target:= KeyMouse; + GetMousePosition := @TEIOS_Exported_GetMousePosition; + MoveMouse := @TEIOS_Exported_MoveMouse; + HoldMouse := @TEIOS_Exported_HoldMouse; + ReleaseMouse := @TEIOS_Exported_ReleaseMouse; + + SendString := @TEIOS_Exported_SendString; + HoldKey := @TEIOS_Exported_HoldKey; + ReleaseKey := @TEIOS_Exported_ReleaseKey; + IsKeyHeld := @TEIOS_Exported_IsKeyHeld; + GetKeyCode := @TEIOS_Exported_GetKeyCode; + end; +end; + function TIOManager_Abstract.SetBothTargets(target: TTarget): integer; begin if IsFrozen then @@ -844,6 +917,87 @@ begin result:= plugs[i].client end; +//***implementation*** TEIS_Exported wrappers + +procedure TEIOS_Exported_GetTargetDimensions(target: pointer; var w, + h: integer); stdcall; +begin + TTarget(Target).GetTargetDimensions(w,h); +end; + +function TEIOS_Exported_GetColor(target: pointer;x, y: integer): integer; stdcall; +begin + result := TTarget(Target).GetColor(x,y); +end; + +function TEIOS_Exported_ReturnData(target: pointer;xs, ys, width, height: Integer): TRetData; + stdcall; +begin + result := TTarget(Target).ReturnData(xs,ys,width,height); +end; + +procedure TEIOS_Exported_FreeReturnData(target: pointer); stdcall; +begin + TTarget(target).FreeReturnData; +end; + + +procedure TEIOS_Exported_GetMousePosition(target: pointer; var x, y: integer + ); stdcall; +begin + TTarget(Target).GetMousePosition(x,y); +end; + +procedure TEIOS_Exported_MoveMouse(target: pointer; x, y: integer); stdcall; +begin + TTarget(Target).MoveMouse(x,y); +end; + +procedure TEIOS_Exported_HoldMouse(target: pointer; x, y: integer; + left: boolean); stdcall; +begin + if left then + TTarget(Target).HoldMouse(x,y,mouse_left) + else + TTarget(Target).HoldMouse(x,y,mouse_right); +end; + +procedure TEIOS_Exported_ReleaseMouse(target: pointer; x, y: integer; + left: boolean); stdcall; +begin + if left then + TTarget(Target).ReleaseMouse(x,y,mouse_left) + else + TTarget(Target).ReleaseMouse(x,y,mouse_right); +end; + +procedure TEIOS_Exported_SendString(target: pointer; str: PChar); stdcall; +begin + TTarget(Target).SendString(str); +end; + +procedure TEIOS_Exported_HoldKey(target: pointer; key: integer); stdcall; +begin + TTarget(Target).HoldKey(key); +end; + +procedure TEIOS_Exported_ReleaseKey(target: pointer; key: integer); stdcall; +begin + TTarget(Target).ReleaseKey(key); +end; + +function TEIOS_Exported_IsKeyHeld(target: pointer; key: integer): boolean; + stdcall; +begin + result := TTarget(Target).IsKeyHeld(key); +end; + +function TEIOS_Exported_GetKeyCode(target: pointer; C: char): integer; + stdcall; +begin + result := TTarget(target).GetKeyCode(c); +end; + initialization eios_controller:= TEIOS_Controller.Create; finalization