aboutsummaryrefslogtreecommitdiffstats
path: root/Modis/SDK/UPluginDefs.pas
diff options
context:
space:
mode:
Diffstat (limited to 'Modis/SDK/UPluginDefs.pas')
-rw-r--r--Modis/SDK/UPluginDefs.pas195
1 files changed, 195 insertions, 0 deletions
diff --git a/Modis/SDK/UPluginDefs.pas b/Modis/SDK/UPluginDefs.pas
new file mode 100644
index 00000000..68b35446
--- /dev/null
+++ b/Modis/SDK/UPluginDefs.pas
@@ -0,0 +1,195 @@
+unit uPluginDefs;
+{*********************
+ uPluginDefs
+ Some Basic Structures and Functions used to communicate with Plugins
+ Usable as Delphi Plugin SDK
+*********************}
+
+interface
+
+{$IFDEF FPC}
+ {$MODE Delphi}
+{$ENDIF}
+
+{$I switches.inc}
+
+type
+ DWORD = LongWord;
+
+ //Compatibility with 64 Bit Systems
+ {$IFDEF CPU32}
+ TwParam = Integer;
+ TlParam = Pointer; //lParam is Used for 32 Bit addresses DWord is large enough
+ {$ELSE}
+ TwParam = Int64;
+ TlParam = Pointer; //lParam used for 64Bit addresses in 64 Bit Systems(FreePascal)
+ {$ENDIF}
+ //wParam is mainly used for Ordninals
+ //lParam is mainly used for Pointers
+
+ //----------------
+ // TUS_PluginInfo - Some Infos from Plugin to Core.
+ // Send when Plugininfo procedure is Called
+ // ---
+ // Version Structure:
+ // First Byte: Head Revison
+ // Second Byte: Sub Revison
+ // Third Byte: Sub Revision 2
+ // Fourth Byte: Letter (For Bug Fix releases. 0 or 'a' .. 'z')
+ //----------------
+ PUS_PluginInfo = ^TUS_PluginInfo;
+ TUS_PluginInfo = record
+ cbSize: Integer; //Size of this record (usefull if record will be extended in the future)
+
+ Name: Array [0..31] of Char; //Name of the Plugin
+ Version: DWord; //Version of the Plugin
+ Description: Array [0..127] of Char; //Description, what does this Plugin do
+ Author: Array [0..31] of Char; //Author of this Plugin
+ AuthorEmail: Array [0..63] of Char; //Authors Email
+ Homepage: Array [0..63] of Char; //Homepage of Plugin/Author
+ end;
+ AUS_PluginInfo = Array of TUS_PluginInfo;
+ PAUS_PluginInfo = ^AUS_PluginInfo;
+
+ //----------------
+ // TUS_Hook - Structure of the Hook Function
+ // Return 0 if the Hook should be continue,
+ // or a non zero Value, if the Hook should be Interuped
+ // In this Case the Caller of the Notifier gets the Return Value
+ // Return Value Should not be -1
+ //----------------
+ TUS_Hook = Function (wParam: TwParam; lParam: TlParam): integer; stdcall;
+ TUS_Hook_of_Object = Function (wParam: TwParam; lParam: TlParam): integer of Object;
+
+ //----------------
+ // TUS_Service - Structure of the Service Function
+ // This Function is called if the Registered Service is Called
+ // Return Value Should not be SERVICE_NOT_FOUND
+ //----------------
+ TUS_Service = Function (wParam: TwParam; lParam: TlParam): integer; stdcall;
+ TUS_Service_of_Object = Function (wParam: TwParam; lParam: TlParam): integer of Object;
+
+ //----------------
+ // TUS_PluginInterface - Structure that Includes all Methods callable
+ // from the Plugins
+ //----------------
+ PUS_PluginInterface = ^TUS_PluginInterface;
+ TUS_PluginInterface = record
+ {******** Hook specific Methods ********}
+ {Function Creates a new Hookable Event and Returns the Handle
+ or 0 on Failure. (Name already exists)}
+ CreateHookableEvent: Function (EventName: PChar): THandle; stdcall;
+
+ {Function Destroys an Event and Unhooks all Hooks to this Event.
+ 0 on success, not 0 on Failure}
+ DestroyHookableEvent: Function (hEvent: THandle): integer; stdcall;
+
+ {Function start calling the Hook Chain
+ 0 if Chain is called until the End, -1 if Event Handle is not valid
+ otherwise Return Value of the Hook that breaks the Chain}
+ NotivyEventHooks: Function (hEvent: THandle; wParam: TwParam; lParam: TlParam): integer; stdcall;
+
+ {Function Hooks an Event by Name.
+ Returns Hook Handle on Success, otherwise 0}
+ HookEvent: Function (EventName: PChar; HookProc: TUS_Hook): THandle; stdcall;
+
+ {Function Removes the Hook from the Chain
+ Returns 0 on Success}
+ UnHookEvent: Function (hHook: THandle): Integer; stdcall;
+
+ {Function Returns Non Zero if a Event with the given Name Exists,
+ otherwise 0}
+ EventExists: Function (EventName: PChar): Integer; stdcall;
+
+ {******** Service specific Methods ********}
+ {Function Creates a new Service and Returns the Services Handle
+ or 0 on Failure. (Name already exists)}
+ CreateService: Function (ServiceName: PChar; ServiceProc: TUS_Service): THandle; stdcall;
+
+ {Function Destroys a Service.
+ 0 on success, not 0 on Failure}
+ DestroyService: Function (hService: THandle): integer; stdcall;
+
+ {Function Calls a Services Proc
+ Returns Services Return Value or SERVICE_NOT_FOUND on Failure}
+ CallService: Function (ServiceName: PChar; wParam: TwParam; lParam: TlParam): integer; stdcall;
+
+ {Function Returns Non Zero if a Service with the given Name Exists,
+ otherwise 0}
+ ServiceExists: Function (ServiceName: PChar): Integer; stdcall;
+ end;
+
+ //----------------
+ //TModuleInfo: Info about Modules. Result of Core/GetModuleInfo
+ //----------------
+ PModuleInfo = ^TModuleInfo;
+ TModuleInfo = record
+ Name: String;
+ Version: LongWord;
+ Description: String;
+ end;
+ AModuleInfo = array of TModuleInfo;
+
+ //----------------
+ // Procs that should be exported by Plugin Dlls
+ //----------------
+ //Procedure is called to check if this is USDx Plugin
+ //Info is Pointer to this Plugins Info. Size is already set. Don't write over this limit
+ Proc_PluginInfo = procedure (Info: PUS_PluginInfo); stdcall;
+
+ //Called on Plugins Load. If Non Zero is Returned => abort Loading
+ //PInterface is Pointer to PluginInterface
+ Func_Load = function (const PInterface: PUS_PluginInterface): Integer; stdcall;
+
+ //Called on Plugins Init. If Non Zero is Returned => abort Loading
+ //PInterface is Pointer to PluginInterface
+ Func_Init = function (const PInterface: PUS_PluginInterface): Integer; stdcall;
+
+ //Called on Plugins Deinit.
+ //PInterface is Pointer to PluginInterface
+ Proc_DeInit = procedure (const PInterface: PUS_PluginInterface); stdcall;
+
+//----------------
+// Some Default Constants
+//----------------
+const
+ {Returned if Service is not found from CallService}
+ SERVICE_NOT_FOUND=$80000000;
+
+ //for use in Service 'Core/ShowMessage' lParam(Symbol)
+ CORE_SM_NOSYMBOL= 0;
+ CORE_SM_ERROR = 1;
+ CORE_SM_WARNING = 2;
+ CORE_SM_INFO = 3;
+
+
+//----------------
+// Some Functions to Handle Version DWords
+//----------------
+Function MakeVersion(const HeadRevision, SubVersion, SubVersion2: Byte; Letter: Char): DWord;
+Function VersiontoSting(const Version: DWord): String;
+
+
+implementation
+
+//--------------
+// MakeVersion - Converts 4 Values to a valid Version DWord
+//--------------
+Function MakeVersion(const HeadRevision, SubVersion, SubVersion2: Byte; Letter: Char): DWord;
+begin
+ If (letter < 'a') or (Letter > 'z') then
+ letter := chr(0);
+
+ Result := (HeadRevision shl 24) or (SubVersion shl 16) or (SubVersion2 shl 8) or Ord(Letter);
+end;
+
+//--------------
+// VersiontoString - Returns some beauty '1.0.2a' like String
+//--------------
+Function VersiontoSting(const Version: DWord): String;
+begin // to-do : Write VersiontoString without SysUtils depencies
+ //Result := InttoStr((ver and $FF000000) shr 24);
+ Result := '1.0.1'
+end;
+
+end.