123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- {
- This file is part of the Free Pascal run time library.
- Copyright (c) 2005-2015 Karoly Balogh
- abox.lib implementation for MorphOS/PowerPC
- MorphOS port was done on a free Pegasos II/G4 machine
- provided by Genesi
- See the file COPYING.FPC, included in this distribution,
- for details about the copyright.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- **********************************************************************}
- {$INLINE ON}
- unit amigalib
- deprecated 'Unit will be removed. Functions are moved to intuition, utility unit.';
- interface
- function DoMethod(obj : longword; const msg : array of LongWord): longword; inline;
- function DoMethod(obj : pointer; const msg : array of LongWord): longword; inline;
- function DoMethodA(obj : longword; msg1 : Pointer): longword; inline;
- function DoSuperMethod(class_: longword; obj : longword; const msg : array of LongWord): longword; inline;
- function DoSuperMethodA(class_: longword; obj : longword; msg1 : Pointer): longword; inline;
- function DoSuperMethodA(class_: pointer; obj : pointer; msg1 : Pointer): longword; inline;
- function DoSuperNew(class_: pointer; obj: pointer; const tags: array of LongWord): longword;
- { This procedure is used to pop Dispatcher arguments from the EmulHandle }
- procedure DISPATCHERARG(var cl; var obj; var msg);
- function HookEntry: PtrUInt;
- implementation
- uses
- exec, intuition, utility;
- function DoMethod(obj : longword; const msg : array of LongWord): longword; inline;
- begin
- DoMethod := Intuition.DoMethod(PObject_(Obj), Msg);
- end;
- function DoMethod(obj : pointer; const msg : array of LongWord): longword; inline;
- begin
- DoMethod := Intuition.DoMethod(PObject_(Obj), Msg);
- end;
- function DoMethodA(obj : longword; msg1 : Pointer): longword; inline;
- begin
- DoMethodA := Intuition.DoMethodA(PObject_(Obj), msg1);
- end;
- function DoSuperMethod(class_: longword; obj : longword; const msg : array of LongWord): longword; inline;
- begin
- DoSuperMethod := Intuition.DoSuperMethod(PIClass(Class_), PObject_(Obj), Msg);
- end;
- function DoSuperMethodA(class_: longword; obj : longword; msg1 : Pointer): longword; inline;
- begin
- DoSuperMethodA := Intuition.DoSuperMethodA(PIClass(class_), PObject_(obj), msg1);
- end;
- function DoSuperMethodA(class_: pointer; obj : pointer; msg1 : Pointer): longword; inline;
- begin
- DoSuperMethodA := Intuition.DoSuperMethodA(PIClass(class_), PObject_(Obj), Msg1);
- end;
- function DoSuperNew(class_: pointer; obj: pointer; const tags: array of LongWord): longword;
- begin
- DoSuperNew := Intuition.DoSuperNew(PIClass(class_), PObject_(Obj), Tags);
- end;
- { This procedure is used to pop Dispatcher arguments from the EmulHandle }
- procedure DISPATCHERARG(var cl; var obj; var msg);
- begin
- with GetEmulHandle^ do
- begin
- PtrUInt(cl) := reg[regA0];
- PtrUInt(obj) := reg[regA2];
- PtrUInt(msg) := reg[regA1];
- end;
- end;
- {
- // assembler implementation, kept for reference
- asm
- lwz r6,32(r2) // REG_a0
- stw r6,(r3) // cl
- lwz r6,40(r2) // REG_a2
- stw r6,(r4) // obj
- lwz r6,36(r2) // REG_a1
- stw r6,(r5) // msg
- end;}
- type
- THookSubEntryFunc = function(a, b, c: Pointer): PtrUInt;
- function HookEntry: PtrUInt;
- var
- hook: PHook;
- begin
- hook := REG_A0;
- HookEntry := THookSubEntryFunc(hook^.h_SubEntry)(hook, REG_A2, REG_A1);
- end;
- end.
|