diff options
author | whiteshark0 <whiteshark0@b956fd51-792f-4845-bead-9b4dfca2ff2c> | 2007-10-03 12:43:01 +0000 |
---|---|---|
committer | whiteshark0 <whiteshark0@b956fd51-792f-4845-bead-9b4dfca2ff2c> | 2007-10-03 12:43:01 +0000 |
commit | fdb75fa47dd72522b705e94be5a201c4e1a731cb (patch) | |
tree | ef1c31e621aea90f749283e8e82c7a89075887e2 | |
parent | 2e7eca65cf05d8090ef58381d576d5218edd9654 (diff) | |
download | usdx-fdb75fa47dd72522b705e94be5a201c4e1a731cb.tar.gz usdx-fdb75fa47dd72522b705e94be5a201c4e1a731cb.tar.xz usdx-fdb75fa47dd72522b705e94be5a201c4e1a731cb.zip |
New plugin SDK added
Some more debug information for windows builds (Does this work in lazarus?)
git-svn-id: svn://svn.code.sf.net/p/ultrastardx/svn/trunk@466 b956fd51-792f-4845-bead-9b4dfca2ff2c
-rw-r--r-- | Game/Code/Classes/ULog.pas | 16 | ||||
-rw-r--r-- | Game/Code/Classes/UPluginInterface.pas | 179 | ||||
-rw-r--r-- | Game/Code/UltraStar.dpr | 10 | ||||
-rw-r--r-- | Game/Code/switches.inc | 29 | ||||
-rw-r--r-- | Modis/SDK/UPluginDefs.pas | 107 |
5 files changed, 324 insertions, 17 deletions
diff --git a/Game/Code/Classes/ULog.pas b/Game/Code/Classes/ULog.pas index 7c93c6e9..7e464b57 100644 --- a/Game/Code/Classes/ULog.pas +++ b/Game/Code/Classes/ULog.pas @@ -188,6 +188,11 @@ begin FileErrorO := false; end; end; + {$DEFINE DEBUG} //How can i check if this is set in *.dpr file o0 + //If Debug => Write to Console Output + {$IFDEF DEBUG} + WriteLn('Error: ' + Text);
+ {$ENDIF} end; procedure TLog.LogVoice(SoundNr: integer); @@ -219,10 +224,13 @@ end; procedure TLog.LogStatus(Log1, Log2: string); begin //Just for Debugging - //Comment for Release - //LogAnalyze (Log2 + ': ' + Log1); - - LogError(Log2 + ': ' + Log1); + //Comment for Release + //LogError(Log2 + ': ' + Log1); + + //If Debug => Write to Console Output + {$IFDEF DEBUG} + WriteLn(Log2 + ': ' + Log1);
+ {$ENDIF} end; procedure TLog.LogError(Log1, Log2: string); diff --git a/Game/Code/Classes/UPluginInterface.pas b/Game/Code/Classes/UPluginInterface.pas new file mode 100644 index 00000000..6d17d51d --- /dev/null +++ b/Game/Code/Classes/UPluginInterface.pas @@ -0,0 +1,179 @@ +unit uPluginInterface;
+{*********************
+ uPluginInterface
+ Unit fills a TPluginInterface Structur with Method Pointers
+ Unit Contains all Functions called directly by Plugins
+*********************}
+
+interface
+uses uPluginDefs;
+
+//---------------
+// Procedure that Sets the PluginInterface Record
+//---------------
+ Procedure Init_PluginInterface;
+
+//---------------
+// Methods for Plugin
+//---------------
+ {******** Hook specific Methods ********}
+ {Function Creates a new Hookable Event and Returns the Handle
+ or 0 on Failure. (Name already exists)}
+ Function CreateHookableEvent (EventName: PChar): THandle; stdcall;
+
+ {Function Destroys an Event and Unhooks all Hooks to this Event.
+ 0 on success, not 0 on Failure}
+ Function DestroyHookableEvent (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}
+ Function NotivyEventHooks (hEvent: THandle; wParam, lParam: dWord): integer; stdcall;
+
+ {Function Hooks an Event by Name.
+ Returns Hook Handle on Success, otherwise 0}
+ Function HookEvent (EventName: PChar; HookProc: TUS_Hook): THandle; stdcall;
+
+ {Function Removes the Hook from the Chain
+ Returns 0 on Success}
+ Function UnHookEvent (hHook: THandle): Integer; stdcall;
+
+ {Function Returns Non Zero if a Event with the given Name Exists,
+ otherwise 0}
+ Function EventExists (EventName: PChar): Integer; stdcall;
+
+ {******** Service specific Methods ********}
+ {Function Creates a new Service and Returns the Services Handle
+ or 0 on Failure. (Name already exists)}
+ Function CreateService (ServiceName: PChar; ServiceProc: TUS_Service): THandle; stdcall;
+
+ {Function Destroys a Service.
+ 0 on success, not 0 on Failure}
+ Function DestroyService (hService: THandle): integer; stdcall;
+
+ {Function Calls a Services Proc
+ Returns Services Return Value or SERVICE_NOT_FOUND on Failure}
+ Function CallService (ServiceName: PChar; wParam, lParam: dWord): integer; stdcall;
+
+ {Function Returns Non Zero if a Service with the given Name Exists,
+ otherwise 0}
+ Function ServiceExists (ServiceName: PChar): Integer; stdcall;
+
+var
+ PluginInterface: TUS_PluginInterface;
+
+implementation
+
+//---------------
+// Procedure that Sets the PluginInterface Record
+//---------------
+Procedure Init_PluginInterface;
+begin
+ PluginInterface.CreateHookableEvent := CreateHookableEvent;
+ PluginInterface.DestroyHookableEvent := DestroyHookableEvent;
+ PluginInterface.NotivyEventHooks := NotivyEventHooks;
+ PluginInterface.HookEvent := HookEvent;
+ PluginInterface.UnHookEvent := UnHookEvent;
+ PluginInterface.EventExists := EventExists;
+
+ PluginInterface.CreateService := CreateService;
+ PluginInterface.DestroyService := DestroyService;
+ PluginInterface.CallService := CallService;
+ PluginInterface.ServiceExists := ServiceExists;
+end;
+
+
+{******** Hook specific Methods ********}
+//---------------
+// Function Creates a new Hookable Event and Returns the Handle
+// or 0 on Failure. (Name already exists)
+//---------------
+Function CreateHookableEvent (EventName: PChar): THandle; stdcall;
+begin
+
+end;
+
+//---------------
+// Function Destroys an Event and Unhooks all Hooks to this Event.
+// 0 on success, not 0 on Failure
+//---------------
+Function DestroyHookableEvent (hEvent: THandle): integer; stdcall;
+begin
+
+end;
+
+//---------------
+// 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
+//---------------
+Function NotivyEventHooks (hEvent: THandle; wParam, lParam: dWord): integer; stdcall;
+begin
+
+end;
+
+//---------------
+// Function Hooks an Event by Name.
+// Returns Hook Handle on Success, otherwise 0
+//---------------
+Function HookEvent (EventName: PChar; HookProc: TUS_Hook): THandle; stdcall;
+begin
+
+end;
+
+//---------------
+// Function Removes the Hook from the Chain
+// Returns 0 on Success
+//---------------
+Function UnHookEvent (hHook: THandle): Integer; stdcall;
+begin
+
+end;
+
+//---------------
+// Function Returns Non Zero if a Event with the given Name Exists,
+// otherwise 0
+//---------------
+Function EventExists (EventName: PChar): Integer; stdcall;
+begin
+
+end;
+
+ {******** Service specific Methods ********}
+//---------------
+// Function Creates a new Service and Returns the Services Handle
+// or 0 on Failure. (Name already exists)
+//---------------
+Function CreateService (ServiceName: PChar; ServiceProc: TUS_Service): THandle; stdcall;
+begin
+
+end;
+
+//---------------
+// Function Destroys a Service.
+// 0 on success, not 0 on Failure
+//---------------
+Function DestroyService (hService: THandle): integer; stdcall;
+begin
+
+end;
+
+//---------------
+// Function Calls a Services Proc
+// Returns Services Return Value or SERVICE_NOT_FOUND on Failure
+//---------------
+Function CallService (ServiceName: PChar; wParam, lParam: dWord): integer; stdcall;
+begin
+
+end;
+
+//---------------
+// Function Returns Non Zero if a Service with the given Name Exists,
+// otherwise 0
+//---------------
+Function ServiceExists (ServiceName: PChar): Integer; stdcall;
+begin
+
+end;
+
+end.
diff --git a/Game/Code/UltraStar.dpr b/Game/Code/UltraStar.dpr index ea1ccdf4..b9fa0530 100644 --- a/Game/Code/UltraStar.dpr +++ b/Game/Code/UltraStar.dpr @@ -1,6 +1,7 @@ program UltraStar;
{$DEFINE TRANSLATE}
+{$DEFINE DEBUG} //Remove b4 release
{$R 'UltraStar.res' 'UltraStar.rc'}
{$I switches.inc}
@@ -97,6 +98,14 @@ uses USingScores in 'Classes\USingScores.pas',
USingNotes in 'Classes\USingNotes.pas',
+ //New Plugin and Core Management
+ {ULists in 'Classes\ULists.pas', //maybe drop this
+ UHooks in 'Classes\UHooks.pas', //80 % - Whiteshark is about to work on this
+ UServices in 'Classes\UServices.pas', //20 % - Whiteshark is about to work on this
+ UCore in 'Classes\UCore.pas',
+ UCoreModule in 'Classes\UCoreModule.pas', }
+ UPluginInterface in 'Classes\UPluginInterface.pas', //Some changes to work with unwriten classes, need to be done
+
//------------------------------
//Includes - Video Support
//------------------------------
@@ -148,6 +157,7 @@ uses //Includes - Modi SDK
//------------------------------
ModiSDK in '..\..\Modis\SDK\ModiSDK.pas',
+ UPluginDefs in '..\..\Modis\SDK\UPluginDefs.pas', //New Plugin SDK
//------------------------------
//Includes - Delphi
diff --git a/Game/Code/switches.inc b/Game/Code/switches.inc index a895712a..fda3cd75 100644 --- a/Game/Code/switches.inc +++ b/Game/Code/switches.inc @@ -1,13 +1,16 @@ -{$IFDEF FPC} - {$UNDEF UseSerialPort} - {$UNDEF UseMIDIPort} -{$ELSE} - {$UNDEF UseSerialPort} - {$DEFINE UseMIDIPort} -{$ENDIF} - -{$IFDEF win32} - {$DEFINE UseBASS} -{$ELSE} - {$UNDEF UseBASS} -{$ENDIF} +{$IFDEF FPC}
+ {$UNDEF UseSerialPort}
+ {$UNDEF UseMIDIPort}
+{$ELSE}
+ {$DEFINE UseSerialPort}
+ {$DEFINE UseMIDIPort}
+{$ENDIF}
+
+{$IFDEF win32}
+ {$DEFINE UseBASS}
+ {$IFDEF DEBUG}
+ {$APPTYPE CONSOLE}
+ {$ENDIF}
+{$ELSE}
+ {$UNDEF UseBASS}
+{$ENDIF}
\ No newline at end of file diff --git a/Modis/SDK/UPluginDefs.pas b/Modis/SDK/UPluginDefs.pas new file mode 100644 index 00000000..7428ae2e --- /dev/null +++ b/Modis/SDK/UPluginDefs.pas @@ -0,0 +1,107 @@ +unit uPluginDefs;
+{*********************
+ uPluginDefs
+ Some Basic Structures and Functions used to communicate with Plugins
+ Usable as Delphi Plugin SDK
+*********************}
+
+interface
+
+type
+ DWORD = LongWord;
+
+ //----------------
+ // TUS_PluginInfo - Some Infos from Plugin to Core.
+ // Send when Plugininfo procedure is Called
+ //----------------
+ PUS_PluginInfo = ^TUS_PluginInfo;
+ TUS_PluginInfo = record
+ cbSize: Integer; //Size of this record (usefull if record will be extended in the future)
+
+ Name: PChar; //Name of the Plugin
+ Version: DWord; //Version of the Plugin
+ Description: PChar; //Description, what does this Plugin do
+ Author: PChar; //Author of this Plugin
+ AuthorEmail: PChar; //Authors Email
+ Homepage: PChar; //Homepage of Plugin/Author
+ end;
+
+ //----------------
+ // 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 Notivier gets the Return Value
+ // Return Value Should not be -1
+ //----------------
+ TUS_Hook = Function (wParam, lParam: DWord): integer; stdcall;
+ TUS_Hook_of_Object = Function (wParam, lParam: DWord): 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, lParam: DWord): integer; stdcall;
+ TUS_Service_of_Object = Function (wParam, lParam: DWord): 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, lParam: dWord): 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, lParam: dWord): integer; stdcall;
+
+ {Function Returns Non Zero if a Service with the given Name Exists,
+ otherwise 0}
+ ServiceExists: Function (ServiceName: PChar): Integer; stdcall;
+ end;
+
+//----------------
+// Some Default Constants
+//----------------
+const
+ {Returned if Service is not Found from CallService}
+ SERVICE_NOT_FOUND=$80000000;
+
+
+implementation
+
+end.
|