Difference between revisions of "Hostlib.resource"
Jump to navigation
Jump to search
(minor cradle correction) |
(→the unit: Added unit) |
||
| Line 22: | Line 22: | ||
<source lang="pascal"> | <source lang="pascal"> | ||
| + | |||
| + | unit aros_hostlib; | ||
| + | |||
| + | { | ||
| + | Hostlib.resource | ||
| + | } | ||
| + | |||
| + | interface | ||
| + | |||
| + | uses | ||
| + | exec; | ||
| + | |||
| + | Const | ||
| + | HOSTLIBNAME = 'hostlib.resource'; | ||
| + | |||
| + | |||
| + | type | ||
| + | pvoid = pointer; | ||
| + | |||
| + | |||
| + | function HostLib_Open(const filename: pchar; error: ppchar): pvoid; | ||
| + | function HostLib_Close(handle: pvoid; error: ppchar): integer; | ||
| + | function HostLib_GetPointer(handle: pvoid; const symbol: pchar; error: ppchar): pvoid; | ||
| + | procedure HostLib_FreeErrorStr(error: ppchar); | ||
| + | function HostLib_GetInterface(handle: pvoid; const symbols: ppchar; unresolved: PULONG): pAPTR; | ||
| + | procedure HostLib_DropInterface(interface_: pAPTR); | ||
| + | procedure HostLib_Lock; | ||
| + | procedure HostLib_Unlock; | ||
| + | |||
| + | var | ||
| + | HostLibBase : pLibrary; | ||
| + | |||
| + | |||
| + | implementation | ||
| + | |||
| + | |||
| + | function HostLib_Open(const filename: pchar; error: ppchar): pvoid; | ||
| + | type | ||
| + | TLocalCall = function(const filename: pchar; error: ppchar; LibBase: Pointer): pvoid; cdecl; | ||
| + | var | ||
| + | Call: TLocalCall; | ||
| + | begin | ||
| + | Call := TLocalCall(GetLibAdress(HostLibBase, 1)); | ||
| + | HostLib_Open := Call(filename, error, HostLibBase); | ||
| + | end; | ||
| + | |||
| + | |||
| + | function HostLib_Close(handle: pvoid; error: ppchar): integer; | ||
| + | type | ||
| + | TLocalCall = function(handle: pvoid; error: ppchar; LibBase: Pointer): integer; cdecl; | ||
| + | var | ||
| + | Call: TLocalCall; | ||
| + | begin | ||
| + | Call := TLocalCall(GetLibAdress(HostLibBase, 2)); | ||
| + | HostLib_Close := Call(handle, error, HostLibBase); | ||
| + | end; | ||
| + | |||
| + | |||
| + | function HostLib_GetPointer(handle: pvoid; const symbol: pchar; error: ppchar): pvoid; | ||
| + | type | ||
| + | TLocalCall = function(handle: pvoid; const symbol: pchar; error: ppchar; LibBase: Pointer): pvoid; cdecl; | ||
| + | var | ||
| + | Call: TLocalCall; | ||
| + | begin | ||
| + | Call := TLocalCall(GetLibAdress(HostLibBase, 3)); | ||
| + | HostLib_GetPointer := Call(handle, symbol, error, HostLibBase); | ||
| + | end; | ||
| + | |||
| + | |||
| + | procedure HostLib_FreeErrorStr(error: ppchar); | ||
| + | type | ||
| + | TLocalCall = procedure(error: ppchar; LibBase: Pointer); cdecl; | ||
| + | var | ||
| + | Call: TLocalCall; | ||
| + | begin | ||
| + | Call := TLocalCall(GetLibAdress(HostLibBase, 4)); | ||
| + | Call(error, HostLibBase); | ||
| + | end; | ||
| + | |||
| + | |||
| + | function HostLib_GetInterface(handle: pvoid; const symbols: ppchar; unresolved: PULONG): pAPTR; | ||
| + | type | ||
| + | TLocalCall = function(handle: pvoid; const symbols: ppchar; unresolved: pulong; LibBase: Pointer): pAPTR; cdecl; | ||
| + | var | ||
| + | Call: TLocalCall; | ||
| + | begin | ||
| + | Call := TLocalCall(GetLibAdress(HostLibBase, 5)); | ||
| + | HostLib_GetInterface := Call(handle, symbols, unresolved, HostLibBase); | ||
| + | end; | ||
| + | |||
| + | |||
| + | procedure HostLib_DropInterface(interface_: pAPTR); | ||
| + | type | ||
| + | TLocalCall = procedure(interface_: pAPTR; LibBase: Pointer); cdecl; | ||
| + | var | ||
| + | Call: TLocalCall; | ||
| + | begin | ||
| + | Call := TLocalCall(GetLibAdress(HostLibBase, 6)); | ||
| + | Call(interface_, HostLibBase); | ||
| + | end; | ||
| + | |||
| + | |||
| + | procedure HostLib_Lock; | ||
| + | type | ||
| + | TLocalCall = procedure(LibBase: Pointer); cdecl; | ||
| + | var | ||
| + | Call: TLocalCall; | ||
| + | begin | ||
| + | Call := TLocalCall(GetLibAdress(HostLibBase, 7)); | ||
| + | Call(HostLibBase); | ||
| + | end; | ||
| + | |||
| + | |||
| + | procedure HostLib_Unlock; | ||
| + | type | ||
| + | TLocalCall = procedure(LibBase: Pointer); cdecl; | ||
| + | var | ||
| + | Call: TLocalCall; | ||
| + | begin | ||
| + | Call := TLocalCall(GetLibAdress(HostLibBase, 8)); | ||
| + | Call(HostLibBase); | ||
| + | end; | ||
| + | |||
| + | Initialization | ||
| + | HostLibBase := OpenResource(HOSTLIBNAME); | ||
| + | |||
| + | finalization | ||
| + | // resources do not need to be closed | ||
| + | end. | ||
</source> | </source> | ||
| + | |||
=== unit documentation === | === unit documentation === | ||
Revision as of 22:44, 20 September 2014
hostlib.resource
[insert background information here]
examples
Example: 1
Example: 2
Example: 3
the unit
unit aros_hostlib;
{
Hostlib.resource
}
interface
uses
exec;
Const
HOSTLIBNAME = 'hostlib.resource';
type
pvoid = pointer;
function HostLib_Open(const filename: pchar; error: ppchar): pvoid;
function HostLib_Close(handle: pvoid; error: ppchar): integer;
function HostLib_GetPointer(handle: pvoid; const symbol: pchar; error: ppchar): pvoid;
procedure HostLib_FreeErrorStr(error: ppchar);
function HostLib_GetInterface(handle: pvoid; const symbols: ppchar; unresolved: PULONG): pAPTR;
procedure HostLib_DropInterface(interface_: pAPTR);
procedure HostLib_Lock;
procedure HostLib_Unlock;
var
HostLibBase : pLibrary;
implementation
function HostLib_Open(const filename: pchar; error: ppchar): pvoid;
type
TLocalCall = function(const filename: pchar; error: ppchar; LibBase: Pointer): pvoid; cdecl;
var
Call: TLocalCall;
begin
Call := TLocalCall(GetLibAdress(HostLibBase, 1));
HostLib_Open := Call(filename, error, HostLibBase);
end;
function HostLib_Close(handle: pvoid; error: ppchar): integer;
type
TLocalCall = function(handle: pvoid; error: ppchar; LibBase: Pointer): integer; cdecl;
var
Call: TLocalCall;
begin
Call := TLocalCall(GetLibAdress(HostLibBase, 2));
HostLib_Close := Call(handle, error, HostLibBase);
end;
function HostLib_GetPointer(handle: pvoid; const symbol: pchar; error: ppchar): pvoid;
type
TLocalCall = function(handle: pvoid; const symbol: pchar; error: ppchar; LibBase: Pointer): pvoid; cdecl;
var
Call: TLocalCall;
begin
Call := TLocalCall(GetLibAdress(HostLibBase, 3));
HostLib_GetPointer := Call(handle, symbol, error, HostLibBase);
end;
procedure HostLib_FreeErrorStr(error: ppchar);
type
TLocalCall = procedure(error: ppchar; LibBase: Pointer); cdecl;
var
Call: TLocalCall;
begin
Call := TLocalCall(GetLibAdress(HostLibBase, 4));
Call(error, HostLibBase);
end;
function HostLib_GetInterface(handle: pvoid; const symbols: ppchar; unresolved: PULONG): pAPTR;
type
TLocalCall = function(handle: pvoid; const symbols: ppchar; unresolved: pulong; LibBase: Pointer): pAPTR; cdecl;
var
Call: TLocalCall;
begin
Call := TLocalCall(GetLibAdress(HostLibBase, 5));
HostLib_GetInterface := Call(handle, symbols, unresolved, HostLibBase);
end;
procedure HostLib_DropInterface(interface_: pAPTR);
type
TLocalCall = procedure(interface_: pAPTR; LibBase: Pointer); cdecl;
var
Call: TLocalCall;
begin
Call := TLocalCall(GetLibAdress(HostLibBase, 6));
Call(interface_, HostLibBase);
end;
procedure HostLib_Lock;
type
TLocalCall = procedure(LibBase: Pointer); cdecl;
var
Call: TLocalCall;
begin
Call := TLocalCall(GetLibAdress(HostLibBase, 7));
Call(HostLibBase);
end;
procedure HostLib_Unlock;
type
TLocalCall = procedure(LibBase: Pointer); cdecl;
var
Call: TLocalCall;
begin
Call := TLocalCall(GetLibAdress(HostLibBase, 8));
Call(HostLibBase);
end;
Initialization
HostLibBase := OpenResource(HOSTLIBNAME);
finalization
// resources do not need to be closed
end.
unit documentation
[insert unit documentation here]