blob: 1075015a0c322eabac13a7a6b5f42cb18ed6fd58 (
plain) (
tree)
|
|
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 = LongInt($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.
|