mirror of https://github.com/deadw00d/AROS.git
Compare commits
13 Commits
51f4427bf1
...
0f68a09f76
Author | SHA1 | Date |
---|---|---|
deadwood | 0f68a09f76 | |
deadwood | f9e636ee69 | |
deadwood | 909d02e309 | |
deadwood | f6a3ac09fd | |
deadwood | 79cb4dda5d | |
deadwood | 9147b7efe9 | |
deadwood | 3fa9a68227 | |
deadwood | 2f77bc1a8b | |
deadwood | e2aa98d630 | |
deadwood | 5a5831e3dd | |
deadwood | 2e850c9a84 | |
deadwood | 3596b78e6f | |
deadwood | 620a7acb40 |
|
@ -61,6 +61,15 @@ void abiv0_GetSysTime(struct timeval *dest, struct LibraryV0 *TimerBaseV0)
|
|||
}
|
||||
MAKE_PROXY_ARG_2(GetSysTime)
|
||||
|
||||
#include <proto/cybergraphics.h>
|
||||
#include "abiv0/include/graphics/structures.h"
|
||||
|
||||
ULONG abiv0_FillPixelArray(struct RastPortV0 *rp, UWORD destx, UWORD desty, UWORD width, UWORD height, ULONG pixel)
|
||||
{
|
||||
struct RastPort *rpnative = (struct RastPort *)*(IPTR *)&rp->longreserved;
|
||||
return FillPixelArray(rpnative, destx, desty, width, height, pixel);
|
||||
}
|
||||
MAKE_PROXY_ARG_6(FillPixelArray)
|
||||
|
||||
BPTR LoadSeg32 (CONST_STRPTR name, struct DosLibrary *DOSBase);
|
||||
struct ResidentV0 * findResident(BPTR seg, CONST_STRPTR name);
|
||||
|
@ -81,12 +90,6 @@ LONG_FUNC run_emulation()
|
|||
|
||||
init_dos(SysBaseV0);
|
||||
|
||||
BPTR cgfxseg = LoadSeg32("SYS:Libs32/partial/cybergraphics.library", DOSBase);
|
||||
struct ResidentV0 *cgfxres = findResident(cgfxseg, NULL);
|
||||
struct LibraryV0 *abiv0CyberGfxBase = shallow_InitResident32(cgfxres, cgfxseg, SysBaseV0);
|
||||
/* Remove all vectors for now (leave LibOpen) */
|
||||
for (int i = 5; i <= 38; i++) __AROS_SETVECADDRV0(abiv0CyberGfxBase, i, 0);
|
||||
|
||||
init_intuition(SysBaseV0);
|
||||
|
||||
init_graphics(SysBaseV0);
|
||||
|
@ -98,6 +101,14 @@ LONG_FUNC run_emulation()
|
|||
for (int i = 1; i <= 45; i++) __AROS_SETVECADDRV0(abiv0LayersBase, i, 0);
|
||||
__AROS_SETVECADDRV0(abiv0LayersBase, 1, (APTR32)(IPTR)proxy_Layers_OpenLib);
|
||||
|
||||
BPTR cgfxseg = LoadSeg32("SYS:Libs32/partial/cybergraphics.library", DOSBase);
|
||||
struct ResidentV0 *cgfxres = findResident(cgfxseg, NULL);
|
||||
struct LibraryV0 *abiv0CyberGfxBase = shallow_InitResident32(cgfxres, cgfxseg, SysBaseV0);
|
||||
/* Remove all vectors for now (leave LibOpen) */
|
||||
for (int i = 5; i <= 38; i++) __AROS_SETVECADDRV0(abiv0CyberGfxBase, i, 0);
|
||||
__AROS_SETVECADDRV0(abiv0CyberGfxBase, 25, (APTR32)(IPTR)proxy_FillPixelArray);
|
||||
|
||||
|
||||
|
||||
|
||||
/* Start Program */
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
#include <proto/dos.h>
|
||||
#include <aros/debug.h>
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include "../include/exec/structures.h"
|
||||
#include "../include/exec/functions.h"
|
||||
|
@ -95,8 +96,8 @@ MAKE_PROXY_ARG_4(Read)
|
|||
|
||||
LONG abiv0_Seek(BPTR file, LONG position, LONG mode, struct DosLibraryV0 *DOSBaseV0)
|
||||
{
|
||||
struct FileHandleProxy *fhp = (struct FileHandleProxy *)file;
|
||||
return Seek(fhp->native, position, mode);
|
||||
struct FileHandleProxy *fhproxy = (struct FileHandleProxy *)file;
|
||||
return Seek(fhproxy->native, position, mode);
|
||||
}
|
||||
MAKE_PROXY_ARG_4(Seek)
|
||||
|
||||
|
@ -165,6 +166,21 @@ BPTR abiv0_DupLock(BPTR lock, struct DosLibraryV0 *DOSBaseV0)
|
|||
}
|
||||
MAKE_PROXY_ARG_2(DupLock)
|
||||
|
||||
LONG abiv0_SameLock(BPTR lock1, BPTR lock2, struct DosLibraryV0 *DOSBaseV0)
|
||||
{
|
||||
struct FileLockProxy *proxy1 = (struct FileLockProxy *)lock1;
|
||||
struct FileLockProxy *proxy2 = (struct FileLockProxy *)lock2;
|
||||
return SameLock(proxy1->native, proxy2->native);
|
||||
}
|
||||
MAKE_PROXY_ARG_3(SameLock)
|
||||
|
||||
BOOL abiv0_UnLock(BPTR lock, struct DosLibraryV0 *DOSBaseV0)
|
||||
{
|
||||
struct FileLockProxy *proxy = (struct FileLockProxy *)lock;
|
||||
return UnLock(proxy->native);
|
||||
}
|
||||
MAKE_PROXY_ARG_2(UnLock)
|
||||
|
||||
struct FileInfoBlockProxy
|
||||
{
|
||||
struct FileInfoBlockV0 base;
|
||||
|
@ -224,12 +240,36 @@ LONG abiv0_Examine(BPTR lock, struct FileInfoBlockV0 *fib, struct DosLibraryV0 *
|
|||
if (res)
|
||||
{
|
||||
fibproxy->base.fib_Date = fibproxy->native->fib_Date;
|
||||
fibproxy->base.fib_Size = fibproxy->native->fib_Size;
|
||||
bug("abiv0_Examine: STUB\n");
|
||||
}
|
||||
return res;
|
||||
}
|
||||
MAKE_PROXY_ARG_3(Examine)
|
||||
|
||||
BOOL abiv0_ExamineFH(BPTR fh, struct FileInfoBlockV0 *fib, struct DosLibraryV0 *DOSBaseV0)
|
||||
{
|
||||
struct FileHandleProxy *fhproxy = (struct FileHandleProxy *)fh;
|
||||
struct FileInfoBlockProxy *fibproxy = (struct FileInfoBlockProxy *)fib;
|
||||
BOOL res = ExamineFH(fhproxy->native, fibproxy->native);
|
||||
if (res)
|
||||
{
|
||||
fibproxy->base.fib_Date = fibproxy->native->fib_Date;
|
||||
fibproxy->base.fib_Size = fibproxy->native->fib_Size;
|
||||
bug("abiv0_ExamineFH: STUB\n");
|
||||
}
|
||||
return res;
|
||||
}
|
||||
MAKE_PROXY_ARG_3(ExamineFH)
|
||||
|
||||
LONG abiv0_Flush(BPTR file, struct DosLibraryV0 *DOSBaseV0)
|
||||
{
|
||||
struct FileHandleProxy *fhproxy = (struct FileHandleProxy *)file;
|
||||
return Flush(fhproxy->native);
|
||||
|
||||
}
|
||||
MAKE_PROXY_ARG_2(Flush)
|
||||
|
||||
BPTR abiv0_CurrentDir(BPTR lock, struct DosLibraryV0 *DOSBaseV0)
|
||||
{
|
||||
struct FileLockProxy *flproxy = (struct FileLockProxy *)lock;
|
||||
|
@ -240,18 +280,75 @@ MAKE_PROXY_ARG_2(CurrentDir)
|
|||
|
||||
BOOL abiv0_ExAll(BPTR lock, struct ExAllDataV0 *buffer, LONG size, LONG type, struct ExAllControlV0 *control, struct DosLibraryV0 *DOSBaseV0)
|
||||
{
|
||||
struct ExAllControlProxy *eacproxy = (struct ExAllControlProxy *)control;
|
||||
struct FileHandleProxy *fhproxy = (struct FileHandleProxy *)lock;
|
||||
|
||||
if (type != ED_DATE) asm("int3"); // Copying assumes ED_DATE sizes of structures!!!!
|
||||
|
||||
if (eacproxy->base.eac_LastKey == 0)
|
||||
{
|
||||
eacproxy->native->eac_LastKey = 0;
|
||||
eacproxy->base.eac_LastKey = 0xbaadf00d;
|
||||
}
|
||||
|
||||
APTR buffernative = AllocMem(size, MEMF_CLEAR);
|
||||
|
||||
BOOL res = ExAll(fhproxy->native, buffernative , size, type, eacproxy->native);
|
||||
eacproxy->base.eac_Entries = eacproxy->native->eac_Entries;
|
||||
|
||||
if (eacproxy->native->eac_Entries > 0)
|
||||
{
|
||||
struct ExAllData *eadnativeit = (struct ExAllData *)buffernative;
|
||||
struct ExAllDataV0 *writeit = buffer;
|
||||
APTR writenext = NULL;
|
||||
APTR writename = NULL;
|
||||
for (; eadnativeit != NULL; eadnativeit = eadnativeit->ed_Next)
|
||||
{
|
||||
int namelen = strlen(eadnativeit->ed_Name) + 1;
|
||||
writename = (APTR)writeit + 8; // only up to ED_DATE
|
||||
if (eadnativeit->ed_Next == NULL)
|
||||
writenext = NULL;
|
||||
else
|
||||
writenext = writename + namelen;
|
||||
|
||||
writeit->ed_Next = (APTR32)(IPTR)writenext;
|
||||
writeit->ed_Name = (APTR32)(IPTR)writename;
|
||||
writeit->ed_Type = eadnativeit->ed_Type;
|
||||
writeit->ed_Size = eadnativeit->ed_Size;
|
||||
writeit->ed_Prot = eadnativeit->ed_Prot;
|
||||
writeit->ed_Days = eadnativeit->ed_Days;
|
||||
writeit->ed_Mins = eadnativeit->ed_Mins;
|
||||
writeit->ed_Ticks = eadnativeit->ed_Ticks;
|
||||
// ed_Comment, ed_OwnerUID, ed_OwnerGUI missing
|
||||
CopyMem(eadnativeit->ed_Name, writename, namelen);
|
||||
|
||||
writeit = (struct ExAllDataV0 *)writenext;
|
||||
}
|
||||
}
|
||||
|
||||
bug("abiv0_ExAll: STUB\n");
|
||||
return FALSE;
|
||||
FreeMem(buffernative, size);
|
||||
return res;
|
||||
}
|
||||
MAKE_PROXY_ARG_6(ExAll)
|
||||
|
||||
SIPTR abiv0_IoErr(struct DosLibraryV0 *DOSBaseV0)
|
||||
{
|
||||
bug("abiv0_IoErr: STUB\n");
|
||||
return ERROR_NO_MORE_ENTRIES;
|
||||
// possibly copy Result2 to task proxy as well
|
||||
return IoErr();
|
||||
}
|
||||
MAKE_PROXY_ARG_1(IoErr)
|
||||
|
||||
struct IntDosBaseV0
|
||||
{
|
||||
struct DosLibraryV0 pub;
|
||||
APTR32 debugBase;
|
||||
BYTE rootNode[108] __attribute__((aligned(4)));
|
||||
BYTE errors[8] __attribute__((aligned(4)));
|
||||
struct SignalSemaphoreV0 segsem;
|
||||
struct ListV0 segdata;
|
||||
};
|
||||
|
||||
BPTR LoadSeg32 (CONST_STRPTR name, struct DosLibrary *DOSBase);
|
||||
APTR abiv0_DOS_OpenLibrary(CONST_STRPTR name, ULONG version, struct ExecBaseV0 *SysBaseV0);
|
||||
|
||||
|
@ -283,6 +380,8 @@ void init_dos(struct ExecBaseV0 *SysBaseV0)
|
|||
::"m"(SysBaseV0), "m"(seginitlist[1]) : "%rax", "%rcx");
|
||||
|
||||
abiv0DOSBase->dl_UtilityBase = (APTR32)(IPTR)abiv0_DOS_OpenLibrary("utility.library", 0L, SysBaseV0);
|
||||
NEWLISTV0(&((struct IntDosBaseV0 *)abiv0DOSBase)->segdata);
|
||||
abiv0_InitSemaphore(&((struct IntDosBaseV0 *)abiv0DOSBase)->segsem, SysBaseV0);
|
||||
|
||||
__AROS_SETVECADDRV0(abiv0DOSBase, 158, (APTR32)(IPTR)proxy_PutStr);
|
||||
__AROS_SETVECADDRV0(abiv0DOSBase, 9, dosfunctable[8]); // Input
|
||||
|
@ -316,4 +415,16 @@ void init_dos(struct ExecBaseV0 *SysBaseV0)
|
|||
__AROS_SETVECADDRV0(abiv0DOSBase, 22, (APTR32)(IPTR)proxy_IoErr);
|
||||
__AROS_SETVECADDRV0(abiv0DOSBase, 39, (APTR32)(IPTR)proxy_FreeDosObject);
|
||||
__AROS_SETVECADDRV0(abiv0DOSBase, 108, (APTR32)(IPTR)proxy_FreeDeviceProc);
|
||||
__AROS_SETVECADDRV0(abiv0DOSBase, 123, dosfunctable[122]); // CompareDates
|
||||
__AROS_SETVECADDRV0(abiv0DOSBase, 65, (APTR32)(IPTR)proxy_ExamineFH);
|
||||
__AROS_SETVECADDRV0(abiv0DOSBase, 60, (APTR32)(IPTR)proxy_Flush);
|
||||
__AROS_SETVECADDRV0(abiv0DOSBase, 25, dosfunctable[ 24]); // LoadSeg // This is tricky becaused on LoadSeg32
|
||||
__AROS_SETVECADDRV0(abiv0DOSBase, 126, dosfunctable[125]); // InternalLoadSeg
|
||||
__AROS_SETVECADDRV0(abiv0DOSBase, 26, dosfunctable[ 25]); // UnLoadSeg // This is tricky becaused on LoadSeg32
|
||||
__AROS_SETVECADDRV0(abiv0DOSBase, 127, dosfunctable[126]); // InternalUnLoadSeg
|
||||
__AROS_SETVECADDRV0(abiv0DOSBase, 136, dosfunctable[135]); // StrToLong
|
||||
__AROS_SETVECADDRV0(abiv0DOSBase, 134, dosfunctable[133]); // FindArg
|
||||
__AROS_SETVECADDRV0(abiv0DOSBase, 146, dosfunctable[145]); // PathPart
|
||||
__AROS_SETVECADDRV0(abiv0DOSBase, 70, (APTR32)(IPTR)proxy_SameLock);
|
||||
__AROS_SETVECADDRV0(abiv0DOSBase, 15, (APTR32)(IPTR)proxy_UnLock);
|
||||
}
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
#include <string.h>
|
||||
|
||||
#include "../include/exec/structures.h"
|
||||
#include "../include/exec/proxy_structures.h"
|
||||
#include "../include/exec/functions.h"
|
||||
#include "../include/aros/cpu.h"
|
||||
#include "../include/aros/proxy.h"
|
||||
|
@ -51,6 +52,12 @@ APTR abiv0_CreatePool(ULONG requirements, ULONG puddleSize, ULONG threshSize, st
|
|||
}
|
||||
MAKE_PROXY_ARG_4(CreatePool)
|
||||
|
||||
void abiv0_DeletePool(APTR poolHeader, struct ExecBaseV0 *SysBaseV0)
|
||||
{
|
||||
DeletePool(poolHeader);
|
||||
}
|
||||
MAKE_PROXY_ARG_2(DeletePool)
|
||||
|
||||
APTR abiv0_AllocPooled(APTR poolHeader, ULONG memSize, struct ExecBaseV0 *SysBaseV0)
|
||||
{
|
||||
return AllocPooled(poolHeader, memSize);
|
||||
|
@ -220,6 +227,12 @@ asm("int3");
|
|||
}
|
||||
MAKE_PROXY_ARG_2(OpenResource)
|
||||
|
||||
void abiv0_CacheClearE(APTR address, IPTR length, ULONG caches, struct ExecBaseV0 *SysBaseV0)
|
||||
{
|
||||
CacheClearE(address, length, caches);
|
||||
}
|
||||
MAKE_PROXY_ARG_4(CacheClearE)
|
||||
|
||||
LONG abiv0_OpenDevice(CONST_STRPTR devName, ULONG unitNumber, struct IORequestV0 *iORequest)
|
||||
{
|
||||
if (strcmp(devName, "timer.device") == 0)
|
||||
|
@ -241,13 +254,68 @@ asm("int3");
|
|||
}
|
||||
MAKE_PROXY_ARG_4(OpenDevice)
|
||||
|
||||
void abiv0_CloseDevice(struct IORequestV0 *iORequest, struct ExecBaseV0 *SysBaseV0)
|
||||
{
|
||||
bug("abiv0_CloseDevice: STUB\n");
|
||||
}
|
||||
MAKE_PROXY_ARG_2(CloseDevice)
|
||||
|
||||
struct MsgPortV0 * abiv0_CreateMsgPort(struct ExecBaseV0 *SysBaseV0)
|
||||
{
|
||||
bug("abiv0_CreateMsgPort: STUB\n");
|
||||
return (struct MsgPortV0 *)0x6;
|
||||
struct MsgPortProxy *proxy = abiv0_AllocMem(sizeof(struct MsgPortProxy), MEMF_CLEAR, SysBaseV0);
|
||||
struct MsgPort *native = CreateMsgPort();
|
||||
|
||||
proxy->base.mp_SigBit = native->mp_SigBit;
|
||||
NEWLISTV0(&proxy->base.mp_MsgList);
|
||||
|
||||
proxy->native = native;
|
||||
|
||||
return (struct MsgPortV0 *)proxy;
|
||||
}
|
||||
MAKE_PROXY_ARG_1(CreateMsgPort)
|
||||
|
||||
void abiv0_DeleteMsgPort(struct MsgPortV0 * port, struct ExecBaseV0 *SysBaseV0)
|
||||
{
|
||||
struct MsgPortProxy *proxy = (struct MsgPortProxy *)port;
|
||||
DeleteMsgPort(proxy->native);
|
||||
}
|
||||
MAKE_PROXY_ARG_2(DeleteMsgPort)
|
||||
struct MessageV0 * abiv0_GetMsg(struct MsgPortV0 *port, struct ExecBaseV0 *SysBaseV0)
|
||||
{
|
||||
struct MsgPortProxy *proxy = (struct MsgPortProxy *)port;
|
||||
struct Message *msg = GetMsg(proxy->native);
|
||||
|
||||
if (proxy->translate)
|
||||
{
|
||||
return proxy->translate(msg);
|
||||
}
|
||||
|
||||
if (msg)
|
||||
{
|
||||
bug("abiv0_GetMsg: STUB\n");
|
||||
asm("int3");
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
MAKE_PROXY_ARG_2(GetMsg)
|
||||
|
||||
void abiv0_ReplyMsg(struct MessageV0 *message, struct ExecBaseV0 *SysBaseV0)
|
||||
{
|
||||
if (message)
|
||||
{
|
||||
struct Message *native = (struct Message *)*(IPTR*)&message->mn_Node;
|
||||
ReplyMsg(native);
|
||||
}
|
||||
}
|
||||
MAKE_PROXY_ARG_2(ReplyMsg)
|
||||
|
||||
ULONG abiv0_Wait(ULONG signalSet, struct ExecBaseV0 *SysBaseV0)
|
||||
{
|
||||
return Wait(signalSet);
|
||||
}
|
||||
MAKE_PROXY_ARG_2(Wait)
|
||||
|
||||
LONG abiv0_DoIO(struct IORequestV0 *IORequest, struct ExecBaseV0 *SysBaseV0)
|
||||
{
|
||||
bug("abiv0_DoIO: STUB\n");
|
||||
|
@ -255,9 +323,36 @@ bug("abiv0_DoIO: STUB\n");
|
|||
}
|
||||
MAKE_PROXY_ARG_2(DoIO)
|
||||
|
||||
void abiv0_SendIO(struct IORequestV0 *iORequest, struct ExecBaseV0 *SysBaseV0)
|
||||
{
|
||||
bug("abiv0_SendIO: STUB\n");
|
||||
}
|
||||
MAKE_PROXY_ARG_2(SendIO)
|
||||
|
||||
struct IORequestV0 *abiv0_CheckIO(struct IORequestV0 *iORequest, struct ExecBaseV0 *SysBaseV0)
|
||||
{
|
||||
bug("abiv0_CheckIO: STUB\n");
|
||||
return NULL;
|
||||
}
|
||||
MAKE_PROXY_ARG_2(CheckIO)
|
||||
|
||||
LONG abiv0_AbortIO(struct IORequestV0 *iORequest, struct ExecBaseV0 *SysBaseV0)
|
||||
{
|
||||
bug("abiv0_AbortIO: STUB\n");
|
||||
return 0;
|
||||
}
|
||||
MAKE_PROXY_ARG_2(AbortIO)
|
||||
|
||||
LONG abiv0_WaitIO(struct IORequestV0 *iORequest, struct ExecBaseV0 *SysBaseV0)
|
||||
{
|
||||
bug("abiv0_WaitIO: STUB\n");
|
||||
return 0;
|
||||
}
|
||||
MAKE_PROXY_ARG_2(WaitIO)
|
||||
|
||||
MAKE_PROXY_ARG_6(MakeLibrary)
|
||||
MAKE_PROXY_ARG_2(AddResource)
|
||||
MAKE_PROXY_ARG_2(InitSemaphore)
|
||||
|
||||
void abiv0_CopyMem(APTR source, APTR dest, ULONG size)
|
||||
{
|
||||
|
@ -311,7 +406,7 @@ struct ExecBaseV0 *init_exec()
|
|||
__AROS_SETVECADDRV0(abiv0SysBase,184, (APTR32)(IPTR)proxy_SetTaskStorageSlot);
|
||||
__AROS_SETVECADDRV0(abiv0SysBase,185, (APTR32)(IPTR)proxy_GetTaskStorageSlot);
|
||||
__AROS_SETVECADDRV0(abiv0SysBase, 83, (APTR32)(IPTR)proxy_OpenResource);
|
||||
__AROS_SETVECADDRV0(abiv0SysBase, 93, execfunctable[92]); // InitSemaphore
|
||||
__AROS_SETVECADDRV0(abiv0SysBase, 93, (APTR32)(IPTR)proxy_InitSemaphore);
|
||||
__AROS_SETVECADDRV0(abiv0SysBase, 33, (APTR32)(IPTR)proxy_AllocMem);
|
||||
__AROS_SETVECADDRV0(abiv0SysBase, 14, (APTR32)(IPTR)proxy_MakeLibrary);
|
||||
__AROS_SETVECADDRV0(abiv0SysBase,104, (APTR32)(IPTR)proxy_CopyMem);
|
||||
|
@ -344,6 +439,21 @@ struct ExecBaseV0 *init_exec()
|
|||
__AROS_SETVECADDRV0(abiv0SysBase,149, (APTR32)(IPTR)proxy_AllocVecPooled);
|
||||
__AROS_SETVECADDRV0(abiv0SysBase, 76, (APTR32)(IPTR)proxy_DoIO);
|
||||
__AROS_SETVECADDRV0(abiv0SysBase,119, (APTR32)(IPTR)proxy_FreePooled);
|
||||
__AROS_SETVECADDRV0(abiv0SysBase,107, (APTR32)(IPTR)proxy_CacheClearE);
|
||||
__AROS_SETVECADDRV0(abiv0SysBase, 39, execfunctable[38]); // Insert
|
||||
__AROS_SETVECADDRV0(abiv0SysBase, 44, execfunctable[43]); // RemTail
|
||||
__AROS_SETVECADDRV0(abiv0SysBase, 43, execfunctable[42]); // RemHead
|
||||
__AROS_SETVECADDRV0(abiv0SysBase, 62, (APTR32)(IPTR)proxy_GetMsg);
|
||||
__AROS_SETVECADDRV0(abiv0SysBase, 53, (APTR32)(IPTR)proxy_Wait);
|
||||
__AROS_SETVECADDRV0(abiv0SysBase, 63, (APTR32)(IPTR)proxy_ReplyMsg);
|
||||
__AROS_SETVECADDRV0(abiv0SysBase,117, (APTR32)(IPTR)proxy_DeletePool);
|
||||
__AROS_SETVECADDRV0(abiv0SysBase,112, (APTR32)(IPTR)proxy_DeleteMsgPort);
|
||||
__AROS_SETVECADDRV0(abiv0SysBase, 75, (APTR32)(IPTR)proxy_CloseDevice);
|
||||
__AROS_SETVECADDRV0(abiv0SysBase,110, execfunctable[109]); // DeleteIORequest
|
||||
__AROS_SETVECADDRV0(abiv0SysBase, 77, (APTR32)(IPTR)proxy_SendIO);
|
||||
__AROS_SETVECADDRV0(abiv0SysBase, 78, (APTR32)(IPTR)proxy_CheckIO);
|
||||
__AROS_SETVECADDRV0(abiv0SysBase, 80, (APTR32)(IPTR)proxy_AbortIO);
|
||||
__AROS_SETVECADDRV0(abiv0SysBase, 79, (APTR32)(IPTR)proxy_WaitIO);
|
||||
|
||||
return abiv0SysBase;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
/*
|
||||
Copyright (C) 1995-2001, The AROS Development Team. All rights reserved.
|
||||
|
||||
Desc: Initialize a SignalSemaphore
|
||||
*/
|
||||
|
||||
#include "../include/exec/structures.h"
|
||||
|
||||
#define NT_SIGNALSEM 15
|
||||
|
||||
void abiv0_InitSemaphore(struct SignalSemaphoreV0 *sigSem, struct ExecBaseV0 *SysBaseV0)
|
||||
{
|
||||
|
||||
/* Clear list of wait messages */
|
||||
sigSem->ss_WaitQueue.mlh_Head = (APTR32)(IPTR)&sigSem->ss_WaitQueue.mlh_Tail;
|
||||
sigSem->ss_WaitQueue.mlh_Tail = NULL;
|
||||
sigSem->ss_WaitQueue.mlh_TailPred = (APTR32)(IPTR)&sigSem->ss_WaitQueue.mlh_Head;
|
||||
|
||||
/* Set type of Semaphore */
|
||||
sigSem->ss_Link.ln_Type = NT_SIGNALSEM;
|
||||
|
||||
/* Semaphore is currently unused */
|
||||
sigSem->ss_NestCount = 0;
|
||||
|
||||
/* Semaphore has no owner yet */
|
||||
sigSem->ss_Owner = 0;
|
||||
|
||||
/* Semaphore has no queue */
|
||||
sigSem->ss_QueueCount = -1;
|
||||
|
||||
} /* InitSemaphore */
|
||||
|
|
@ -14,6 +14,12 @@
|
|||
|
||||
struct ExecBaseV0 *Gfx_SysBaseV0;
|
||||
|
||||
struct RegionProxy
|
||||
{
|
||||
struct RegionV0 base;
|
||||
struct Region *native;
|
||||
};
|
||||
|
||||
struct LibraryV0 *abiv0_Gfx_OpenLib(ULONG version, struct LibraryV0 *GfxBaseV0)
|
||||
{
|
||||
return GfxBaseV0;
|
||||
|
@ -45,6 +51,12 @@ bug("abiv0_OpenFont: STUB\n");
|
|||
}
|
||||
MAKE_PROXY_ARG_3(OpenFont)
|
||||
|
||||
void abiv0_CloseFont(APTR textFont, struct GfxBaseV0 *GfxBaseV0)
|
||||
{
|
||||
bug("abiv0_CloseFont: STUB\n");
|
||||
}
|
||||
MAKE_PROXY_ARG_3(CloseFont)
|
||||
|
||||
LONG abiv0_ObtainBestPenA(struct ColorMapV0 *cm, ULONG r, ULONG g, ULONG b, struct TagItemV0 *tags, struct LibraryV0 *GfxBaseV0)
|
||||
{
|
||||
struct ColorMapProxy *proxy = (struct ColorMapProxy *)cm;
|
||||
|
@ -75,6 +87,91 @@ asm("int3");
|
|||
}
|
||||
MAKE_PROXY_ARG_6(ObtainBestPenA)
|
||||
|
||||
void abiv0_ReleasePen(struct ColorMapV0 *cm, ULONG n, struct GfxBaseV0 *GfxBaseV0)
|
||||
{
|
||||
struct ColorMapProxy *proxy = (struct ColorMapProxy *)cm;
|
||||
ReleasePen(proxy->native, n);
|
||||
}
|
||||
MAKE_PROXY_ARG_3(ReleasePen)
|
||||
|
||||
void abiv0_SetDrMd(struct RastPortV0 *rp, ULONG drawMode, struct GfxBaseV0 *GfxBaseV0)
|
||||
{
|
||||
struct RastPort *rpnative = (struct RastPort *)*(IPTR *)&rp->longreserved;
|
||||
SetDrMd(rpnative, drawMode);
|
||||
}
|
||||
MAKE_PROXY_ARG_3(SetDrMd)
|
||||
|
||||
void abiv0_SetAPen(struct RastPortV0 *rp, ULONG pen, struct GfxBaseV0 *GfxBaseV0)
|
||||
{
|
||||
struct RastPort *rpnative = (struct RastPort *)*(IPTR *)&rp->longreserved;
|
||||
SetAPen(rpnative, pen);
|
||||
}
|
||||
MAKE_PROXY_ARG_3(SetAPen)
|
||||
|
||||
void abiv0_RectFill(struct RastPortV0 * rp, LONG xMin, LONG yMin, LONG xMax, LONG yMax, struct GfxBaseV0 *GfxBaseV0)
|
||||
{
|
||||
struct RastPort *rpnative = (struct RastPort *)*(IPTR *)&rp->longreserved;
|
||||
RectFill(rpnative, xMin, yMin, xMax, yMax);
|
||||
}
|
||||
MAKE_PROXY_ARG_6(RectFill)
|
||||
|
||||
void abiv0_Move(struct RastPortV0 *rp, WORD x, WORD y, struct GfxBaseV0 *GfxBaseV0)
|
||||
{
|
||||
struct RastPort *rpnative = (struct RastPort *)*(IPTR *)&rp->longreserved;
|
||||
Move(rpnative, x, y);
|
||||
}
|
||||
MAKE_PROXY_ARG_4(Move)
|
||||
|
||||
void abiv0_Draw(struct RastPortV0 *rp, WORD x, WORD y, struct GfxBaseV0 *GfxBaseV0)
|
||||
{
|
||||
struct RastPort *rpnative = (struct RastPort *)*(IPTR *)&rp->longreserved;
|
||||
Draw(rpnative, x, y);
|
||||
}
|
||||
MAKE_PROXY_ARG_4(Draw)
|
||||
|
||||
void abiv0_Text(struct RastPortV0 *rp, CONST_STRPTR string, ULONG count, struct GfxBaseV0 *GfxBaseV0)
|
||||
{
|
||||
struct RastPort *rpnative = (struct RastPort *)*(IPTR *)&rp->longreserved;
|
||||
Text(rpnative, string, count);
|
||||
}
|
||||
MAKE_PROXY_ARG_4(Text)
|
||||
|
||||
LONG abiv0_WritePixel(struct RastPortV0 *rp, LONG x, LONG y, struct GfxBaseV0 *GfxBaseV0)
|
||||
{
|
||||
struct RastPort *rpnative = (struct RastPort *)*(IPTR *)&rp->longreserved;
|
||||
return WritePixel(rpnative, x, y);
|
||||
}
|
||||
MAKE_PROXY_ARG_4(WritePixel)
|
||||
|
||||
struct RegionV0 *abiv0_NewRegion(struct GfxBaseV0 *GfxBaseV0)
|
||||
{
|
||||
struct RegionProxy *proxy = abiv0_AllocMem(sizeof(struct RegionProxy), MEMF_CLEAR, Gfx_SysBaseV0);
|
||||
proxy->native = NewRegion();
|
||||
return (struct RegionV0 *)proxy;
|
||||
}
|
||||
MAKE_PROXY_ARG_1(NewRegion)
|
||||
|
||||
BOOL abiv0_OrRectRegion(struct RegionV0 *Reg, struct Rectangle *Rect, struct GfxBaseV0 *GfxBaseV0)
|
||||
{
|
||||
struct RegionProxy *proxy = (struct RegionProxy *)Reg;
|
||||
return OrRectRegion(proxy->native, Rect);
|
||||
}
|
||||
MAKE_PROXY_ARG_3(OrRectRegion)
|
||||
|
||||
void abiv0_DisposeRegion(struct RegionV0 *region, struct GfxBaseV0 *GfxBaseV0)
|
||||
{
|
||||
struct RegionProxy *proxy = (struct RegionProxy *)region;
|
||||
return DisposeRegion(proxy->native);
|
||||
}
|
||||
MAKE_PROXY_ARG_2(DisposeRegion)
|
||||
|
||||
BOOL abiv0_ClearRectRegion(struct RegionV0 *Reg, struct Rectangle *Rect, struct GfxBaseV0 *GfxBaseV0)
|
||||
{
|
||||
struct RegionProxy *proxy = (struct RegionProxy *)Reg;
|
||||
return ClearRectRegion(proxy->native, Rect);
|
||||
}
|
||||
MAKE_PROXY_ARG_3(ClearRectRegion)
|
||||
|
||||
struct LibraryV0 *shallow_InitResident32(struct ResidentV0 *resident, BPTR segList, struct ExecBaseV0 *SysBaseV0);
|
||||
BPTR LoadSeg32 (CONST_STRPTR name, struct DosLibrary *DOSBase);
|
||||
struct ResidentV0 * findResident(BPTR seg, CONST_STRPTR name);
|
||||
|
@ -93,6 +190,7 @@ void init_graphics(struct ExecBaseV0 *SysBaseV0)
|
|||
for (int i = 1; i <= 201; i++) __AROS_SETVECADDRV0(abiv0GfxBase, i, 0);
|
||||
abiv0GfxBase->ExecBase = (APTR32)(IPTR)SysBaseV0;
|
||||
*(ULONG *)((IPTR)abiv0GfxBase + 0x4b0) = (APTR32)(IPTR)abiv0_DOS_OpenLibrary("utility.library", 0L, SysBaseV0);
|
||||
NEWLISTV0(&abiv0GfxBase->TextFonts);
|
||||
|
||||
__AROS_SETVECADDRV0(abiv0GfxBase, 1, (APTR32)(IPTR)proxy_Gfx_OpenLib);
|
||||
__AROS_SETVECADDRV0(abiv0GfxBase, 12, (APTR32)(IPTR)proxy_OpenFont);
|
||||
|
@ -101,4 +199,23 @@ void init_graphics(struct ExecBaseV0 *SysBaseV0)
|
|||
__AROS_SETVECADDRV0(abiv0GfxBase, 140, (APTR32)(IPTR)proxy_ObtainBestPenA);
|
||||
__AROS_SETVECADDRV0(abiv0GfxBase, 33, graphicsjmp[202 - 33]); // InitRastPort
|
||||
__AROS_SETVECADDRV0(abiv0GfxBase, 11, graphicsjmp[202 - 11]); // SetFont
|
||||
__AROS_SETVECADDRV0(abiv0GfxBase, 134, graphicsjmp[202 - 134]); // WeighTAMatch
|
||||
__AROS_SETVECADDRV0(abiv0GfxBase, 136, graphicsjmp[202 - 136]); // ExtendFont
|
||||
__AROS_SETVECADDRV0(abiv0GfxBase, 80, graphicsjmp[202 - 80]); // AddFont
|
||||
__AROS_SETVECADDRV0(abiv0GfxBase, 9, graphicsjmp[202 - 9]); // TextLength
|
||||
__AROS_SETVECADDRV0(abiv0GfxBase, 59, (APTR32)(IPTR)proxy_SetDrMd);
|
||||
__AROS_SETVECADDRV0(abiv0GfxBase, 57, (APTR32)(IPTR)proxy_SetAPen);
|
||||
__AROS_SETVECADDRV0(abiv0GfxBase, 51, (APTR32)(IPTR)proxy_RectFill);
|
||||
__AROS_SETVECADDRV0(abiv0GfxBase, 86, (APTR32)(IPTR)proxy_NewRegion);
|
||||
__AROS_SETVECADDRV0(abiv0GfxBase, 85, (APTR32)(IPTR)proxy_OrRectRegion);
|
||||
__AROS_SETVECADDRV0(abiv0GfxBase, 89, (APTR32)(IPTR)proxy_DisposeRegion);
|
||||
__AROS_SETVECADDRV0(abiv0GfxBase, 40, (APTR32)(IPTR)proxy_Move);
|
||||
__AROS_SETVECADDRV0(abiv0GfxBase, 41, (APTR32)(IPTR)proxy_Draw);
|
||||
__AROS_SETVECADDRV0(abiv0GfxBase, 14, graphicsjmp[202 - 14]); // AskSoftStyle
|
||||
__AROS_SETVECADDRV0(abiv0GfxBase, 15, graphicsjmp[202 - 15]); // SetSoftStyle
|
||||
__AROS_SETVECADDRV0(abiv0GfxBase, 10, (APTR32)(IPTR)proxy_Text);
|
||||
__AROS_SETVECADDRV0(abiv0GfxBase, 87, (APTR32)(IPTR)proxy_ClearRectRegion);
|
||||
__AROS_SETVECADDRV0(abiv0GfxBase, 54, (APTR32)(IPTR)proxy_WritePixel);
|
||||
__AROS_SETVECADDRV0(abiv0GfxBase, 158, (APTR32)(IPTR)proxy_ReleasePen);
|
||||
__AROS_SETVECADDRV0(abiv0GfxBase, 13, (APTR32)(IPTR)proxy_CloseFont);
|
||||
}
|
||||
|
|
|
@ -39,4 +39,13 @@
|
|||
#define COPY_ARG_6 \
|
||||
" movl 24(%%rsp), %%r9d\n"
|
||||
|
||||
#define ALIGN_STACK64 \
|
||||
" push %%r12\n" \
|
||||
" movq %%rsp, %%r12\n" \
|
||||
" andq $-16, %%rsp\n" \
|
||||
|
||||
#define RESTORE_STACK64 \
|
||||
" movq %%r12, %%rsp\n" \
|
||||
" popq %%r12\n" \
|
||||
|
||||
#endif
|
||||
|
|
|
@ -23,7 +23,9 @@ void dummy_##fname() \
|
|||
EXTER_PROXY(fname) \
|
||||
ENTER64 \
|
||||
COPY_ARG_1 \
|
||||
ALIGN_STACK64 \
|
||||
CALL_IMPL64(fname) \
|
||||
RESTORE_STACK64 \
|
||||
ENTER32 \
|
||||
LEAVE_PROXY \
|
||||
}
|
||||
|
@ -36,7 +38,9 @@ void dummy_##fname() \
|
|||
ENTER64 \
|
||||
COPY_ARG_1 \
|
||||
COPY_ARG_2 \
|
||||
ALIGN_STACK64 \
|
||||
CALL_IMPL64(fname) \
|
||||
RESTORE_STACK64 \
|
||||
ENTER32 \
|
||||
LEAVE_PROXY \
|
||||
}
|
||||
|
@ -50,7 +54,9 @@ void dummy_##fname() \
|
|||
COPY_ARG_1 \
|
||||
COPY_ARG_2 \
|
||||
COPY_ARG_3 \
|
||||
ALIGN_STACK64 \
|
||||
CALL_IMPL64(fname) \
|
||||
RESTORE_STACK64 \
|
||||
ENTER32 \
|
||||
LEAVE_PROXY \
|
||||
}
|
||||
|
@ -65,7 +71,9 @@ void dummy_##fname() \
|
|||
COPY_ARG_2 \
|
||||
COPY_ARG_3 \
|
||||
COPY_ARG_4 \
|
||||
ALIGN_STACK64 \
|
||||
CALL_IMPL64(fname) \
|
||||
RESTORE_STACK64 \
|
||||
ENTER32 \
|
||||
LEAVE_PROXY \
|
||||
}
|
||||
|
@ -81,7 +89,9 @@ void dummy_##fname() \
|
|||
COPY_ARG_3 \
|
||||
COPY_ARG_4 \
|
||||
COPY_ARG_5 \
|
||||
ALIGN_STACK64 \
|
||||
CALL_IMPL64(fname) \
|
||||
RESTORE_STACK64 \
|
||||
ENTER32 \
|
||||
LEAVE_PROXY \
|
||||
}
|
||||
|
@ -98,7 +108,9 @@ void dummy_##fname() \
|
|||
COPY_ARG_4 \
|
||||
COPY_ARG_5 \
|
||||
COPY_ARG_6 \
|
||||
ALIGN_STACK64 \
|
||||
CALL_IMPL64(fname) \
|
||||
RESTORE_STACK64 \
|
||||
ENTER32 \
|
||||
LEAVE_PROXY \
|
||||
}
|
||||
|
|
|
@ -15,5 +15,6 @@ void abiv0_AddLibrary(struct LibraryV0 *library, struct ExecBaseV0 *SysBaseV0);
|
|||
void abiv0_Enqueue(struct ListV0 *list, struct NodeV0 *node, struct ExecBaseV0 *SysBaseV0);
|
||||
struct NodeV0 * abiv0_FindName(struct ListV0 *list, CONST_STRPTR name, struct ExecBaseV0 *SysBaseV0);
|
||||
struct LibraryV0 * abiv0_OpenLibrary(CONST_STRPTR libName, ULONG version, struct ExecBaseV0 *SysBaseV0);
|
||||
void abiv0_InitSemaphore(struct SignalSemaphoreV0 *sigSem, struct ExecBaseV0 *SysBaseV0);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
#ifndef ABIV0_EXEC_PROXY_STRUCTURES_H
|
||||
#define ABIV0_EXEC_PROXY_STRUCTURES_H
|
||||
|
||||
#include "./structures.h"
|
||||
|
||||
struct MsgPortProxy
|
||||
{
|
||||
struct MsgPortV0 base;
|
||||
struct MsgPort *native;
|
||||
struct MessageV0 *(*translate)(struct Message *);
|
||||
};
|
||||
|
||||
#endif
|
|
@ -176,6 +176,12 @@ struct TextAttrV0
|
|||
UBYTE ta_Flags;
|
||||
};
|
||||
|
||||
struct RegionV0
|
||||
{
|
||||
struct Rectangle bounds;
|
||||
APTR32 RegionRectangle;
|
||||
};
|
||||
|
||||
struct GfxBaseV0
|
||||
{
|
||||
struct LibraryV0 LibNode; /* Standard Library Node */
|
||||
|
|
|
@ -49,6 +49,85 @@ struct ScreenV0
|
|||
APTR32 UserData;
|
||||
};
|
||||
|
||||
struct WindowV0
|
||||
{
|
||||
APTR32 NextWindow;
|
||||
|
||||
WORD LeftEdge;
|
||||
WORD TopEdge;
|
||||
WORD Width;
|
||||
WORD Height;
|
||||
|
||||
WORD MouseX; /* ABI_V0 compatibility */
|
||||
WORD MouseY; /* ABI_V0 compatibility */
|
||||
|
||||
WORD MinWidth;
|
||||
WORD MinHeight;
|
||||
UWORD MaxWidth;
|
||||
UWORD MaxHeight;
|
||||
|
||||
ULONG Flags;
|
||||
|
||||
APTR32 MenuStrip;
|
||||
APTR32 Title;
|
||||
APTR32 FirstRequest;
|
||||
APTR32 DMRequest;
|
||||
|
||||
WORD ReqCount;
|
||||
|
||||
APTR32 WScreen;
|
||||
APTR32 RPort;
|
||||
|
||||
BYTE BorderLeft;
|
||||
BYTE BorderTop;
|
||||
BYTE BorderRight;
|
||||
BYTE BorderBottom;
|
||||
APTR32 BorderRPort;
|
||||
|
||||
APTR32 FirstGadget;
|
||||
APTR32 Parent;
|
||||
APTR32 Descendant;
|
||||
|
||||
APTR32 Pointer;
|
||||
BYTE PtrHeight;
|
||||
BYTE PtrWidth;
|
||||
BYTE XOffset;
|
||||
BYTE YOffset;
|
||||
|
||||
ULONG IDCMPFlags;
|
||||
APTR32 UserPort;
|
||||
APTR32 WindowPort;
|
||||
APTR32 MessageKey;
|
||||
|
||||
UBYTE DetailPen;
|
||||
UBYTE BlockPen;
|
||||
APTR32 CheckMark;
|
||||
APTR32 ScreenTitle;
|
||||
|
||||
WORD GZZMouseX;
|
||||
WORD GZZMouseY;
|
||||
WORD GZZWidth;
|
||||
WORD GZZHeight;
|
||||
|
||||
APTR32 ExtData;
|
||||
APTR32 UserData;
|
||||
|
||||
APTR32 WLayer;
|
||||
APTR32 IFont;
|
||||
|
||||
ULONG MoreFlags;
|
||||
|
||||
WORD RelLeftEdge; // relative coordinates of the window
|
||||
WORD RelTopEdge; // to its parent window. If it is
|
||||
// a window on the screen then these
|
||||
// are the same as LeftEdge and TopEdge.
|
||||
|
||||
APTR32 firstchild; // pointer to first child
|
||||
APTR32 prevchild; // if window is a child of a window
|
||||
APTR32 nextchild; // then they are concatenated here.
|
||||
APTR32 parent; // parent of this window
|
||||
};
|
||||
|
||||
struct DrawInfoV0
|
||||
{
|
||||
UWORD dri_Version; /* see below */
|
||||
|
@ -79,4 +158,24 @@ struct DrawInfoV0
|
|||
ULONG dri_Reserved[3];
|
||||
};
|
||||
|
||||
/***** Intuition Message *****/
|
||||
|
||||
struct IntuiMessageV0
|
||||
{
|
||||
struct MessageV0 ExecMessage;
|
||||
|
||||
ULONG Class;
|
||||
UWORD Code;
|
||||
UWORD Qualifier;
|
||||
APTR32 IAddress;
|
||||
|
||||
WORD MouseX;
|
||||
WORD MouseY;
|
||||
ULONG Seconds;
|
||||
ULONG Micros;
|
||||
|
||||
APTR32 IDCMPWindow;
|
||||
APTR32 SpecialLink;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -6,11 +6,13 @@
|
|||
#include <string.h>
|
||||
|
||||
#include "../include/exec/structures.h"
|
||||
#include "../include/exec/proxy_structures.h"
|
||||
#include "../include/exec/functions.h"
|
||||
#include "../include/aros/cpu.h"
|
||||
#include "../include/aros/proxy.h"
|
||||
#include "../include/intuition/structures.h"
|
||||
#include "../include/graphics/proxy_structures.h"
|
||||
#include "../include/utility/structures.h"
|
||||
|
||||
struct ExecBaseV0 *Intuition_SysBaseV0;
|
||||
|
||||
|
@ -20,6 +22,12 @@ struct ScreenProxy
|
|||
struct Screen *native;
|
||||
};
|
||||
|
||||
struct WindowProxy
|
||||
{
|
||||
struct WindowV0 base;
|
||||
struct Window *native;
|
||||
};
|
||||
|
||||
struct LibraryV0 *abiv0_Intuition_OpenLib(ULONG version, struct LibraryV0 *IntuitionBaseV0)
|
||||
{
|
||||
return IntuitionBaseV0;
|
||||
|
@ -55,6 +63,13 @@ bug("abiv0_LockPubScreen: STUB\n");
|
|||
}
|
||||
MAKE_PROXY_ARG_2(LockPubScreen)
|
||||
|
||||
void abiv0_UnlockPubScreen(UBYTE *name, struct ScreenV0 *screen, struct LibraryV0 *IntuitionBaseV0)
|
||||
{
|
||||
struct ScreenProxy *proxy = (struct ScreenProxy *)screen;
|
||||
UnlockPubScreen(name, proxy->native);
|
||||
}
|
||||
MAKE_PROXY_ARG_3(UnlockPubScreen)
|
||||
|
||||
void abiv0_ScreenDepth(struct ScreenV0 *screen, ULONG flags, APTR reserved, struct LibraryV0 *IntuitionBaseV0)
|
||||
{
|
||||
bug("abiv0_ScreenDepth: STUB\n");
|
||||
|
@ -71,12 +86,189 @@ struct DrawInfoV0 *abiv0_GetScreenDrawInfo(struct ScreenV0 *screen, struct Libra
|
|||
struct DrawInfoV0 *ret = abiv0_AllocMem(sizeof(struct DrawInfoV0), MEMF_CLEAR, Intuition_SysBaseV0);
|
||||
ret->dri_Pens = (APTR32)(IPTR)abiv0_AllocMem(NUMDRIPENS * sizeof(UWORD), MEMF_CLEAR, Intuition_SysBaseV0);
|
||||
CopyMem(dri->dri_Pens, (APTR)(IPTR)ret->dri_Pens, NUMDRIPENS * sizeof(UWORD));
|
||||
ret->dri_Font = proxy->base.Font;
|
||||
|
||||
bug("abiv0_GetScreenDrawInfo: STUB\n");
|
||||
return ret;
|
||||
}
|
||||
MAKE_PROXY_ARG_2(GetScreenDrawInfo)
|
||||
|
||||
void abiv0_FreeScreenDrawInfo(struct ScreenV0 *screen, struct DrawInfoV0 *drawInfo, struct LibraryV0 *IntuitionBaseV0)
|
||||
{
|
||||
bug("abiv0_FreeScreenDrawInfo: STUB\n");
|
||||
}
|
||||
MAKE_PROXY_ARG_3(FreeScreenDrawInfo)
|
||||
|
||||
static struct TagItemV0 *LibNextTagItemV0(struct TagItemV0 **tagListPtr)
|
||||
{
|
||||
if (!(*tagListPtr))
|
||||
return NULL;
|
||||
|
||||
while(1)
|
||||
{
|
||||
switch(((*tagListPtr)->ti_Tag))
|
||||
{
|
||||
case TAG_MORE:
|
||||
asm("int3");
|
||||
if (!((*tagListPtr) = (struct TagItemV0 *)(IPTR)(*tagListPtr)->ti_Data))
|
||||
return NULL;
|
||||
continue;
|
||||
|
||||
case TAG_IGNORE:
|
||||
break;
|
||||
|
||||
case TAG_END:
|
||||
(*tagListPtr) = 0;
|
||||
return NULL;
|
||||
|
||||
case TAG_SKIP:
|
||||
asm("int3");
|
||||
(*tagListPtr) += (*tagListPtr)->ti_Data + 1;
|
||||
continue;
|
||||
|
||||
default:
|
||||
return (*tagListPtr)++;
|
||||
|
||||
}
|
||||
|
||||
(*tagListPtr)++;
|
||||
}
|
||||
}
|
||||
|
||||
static struct TagItem *CloneTagItemsV02Native(const struct TagItemV0 *tagList)
|
||||
{
|
||||
struct TagItem *newList;
|
||||
LONG numTags = 1;
|
||||
|
||||
struct TagItemV0 *tmp;
|
||||
|
||||
tmp = (struct TagItemV0 *)tagList;
|
||||
while (LibNextTagItemV0 (&tmp) != NULL)
|
||||
numTags++;
|
||||
|
||||
newList = AllocMem(sizeof(struct TagItem) * numTags, MEMF_CLEAR);
|
||||
|
||||
LONG pos = 0;
|
||||
tmp = (struct TagItemV0 *)tagList;
|
||||
while (LibNextTagItemV0 (&tmp) != NULL)
|
||||
{
|
||||
newList[pos].ti_Tag = tmp->ti_Tag;
|
||||
newList[pos].ti_Data = tmp->ti_Data;
|
||||
pos++;
|
||||
}
|
||||
|
||||
return newList;
|
||||
|
||||
}
|
||||
|
||||
struct WindowV0 *g_v0window;
|
||||
struct Window *g_nativewindow;
|
||||
|
||||
struct WindowV0 *abiv0_OpenWindowTagList(APTR /*struct NewWindowV0 **/newWindow, struct TagItemV0 *tagList, struct LibraryV0 *IntuitionBaseV0)
|
||||
{
|
||||
if (newWindow != NULL) asm("int3");
|
||||
|
||||
struct TagItem *tagListNative = CloneTagItemsV02Native(tagList);
|
||||
struct Window *wndnative = OpenWindowTagList(NULL, tagListNative);
|
||||
|
||||
struct WindowProxy *proxy = abiv0_AllocMem(sizeof(struct WindowProxy), MEMF_CLEAR, Intuition_SysBaseV0);
|
||||
struct RastPortV0 *rpv0 = abiv0_AllocMem(sizeof(struct RastPortV0), MEMF_CLEAR, Intuition_SysBaseV0);
|
||||
|
||||
*((IPTR *)&rpv0->longreserved) = (IPTR)wndnative->RPort;
|
||||
proxy->base.RPort = (APTR32)(IPTR)rpv0;
|
||||
|
||||
proxy->base.BorderLeft = wndnative->BorderLeft;
|
||||
proxy->base.BorderTop = wndnative->BorderTop;
|
||||
proxy->base.BorderRight = wndnative->BorderRight;
|
||||
proxy->base.BorderBottom = wndnative->BorderBottom;
|
||||
proxy->base.Width = wndnative->Width;
|
||||
proxy->base.Height = wndnative->Height;
|
||||
proxy->base.MaxHeight = wndnative->MaxHeight;
|
||||
proxy->base.MinHeight = wndnative->MinHeight;
|
||||
proxy->base.MaxWidth = wndnative->MaxWidth;
|
||||
proxy->base.MinWidth = wndnative->MinWidth;
|
||||
proxy->base.GZZHeight = wndnative->GZZHeight;
|
||||
proxy->base.GZZWidth = wndnative->GZZWidth;
|
||||
|
||||
proxy->native = wndnative;
|
||||
|
||||
g_v0window = &proxy->base;
|
||||
g_nativewindow = wndnative;
|
||||
|
||||
bug("abiv0_OpenWindowTagList: STUB\n");
|
||||
return (struct WindowV0 *)proxy;
|
||||
}
|
||||
MAKE_PROXY_ARG_3(OpenWindowTagList)
|
||||
|
||||
BOOL abiv0_WindowLimits(struct WindowV0 *window, WORD MinWidth, WORD MinHeight, UWORD MaxWidth, UWORD MaxHeight, struct LibraryV0 *IntuitionBaseV0)
|
||||
{
|
||||
struct WindowProxy *proxy = (struct WindowProxy *)window;
|
||||
return WindowLimits(proxy->native, MinWidth, MinHeight, MaxWidth, MaxHeight);
|
||||
}
|
||||
MAKE_PROXY_ARG_6(WindowLimits)
|
||||
|
||||
void abiv0_ClearMenuStrip(struct WindowV0 *window, struct LibraryV0 *IntuitionBaseV0)
|
||||
{
|
||||
struct WindowProxy *proxy = (struct WindowProxy *)window;
|
||||
return ClearMenuStrip(proxy->native);
|
||||
}
|
||||
MAKE_PROXY_ARG_2(ClearMenuStrip)
|
||||
|
||||
void abiv0_CloseWindow(struct Window *window, struct LibraryV0 *IntuitionBaseV0)
|
||||
{
|
||||
struct WindowProxy *proxy = (struct WindowProxy *)window;
|
||||
return CloseWindow(proxy->native);
|
||||
}
|
||||
MAKE_PROXY_ARG_2(CloseWindow)
|
||||
|
||||
static struct MessageV0 *Intuition_Translate(struct Message *native)
|
||||
{
|
||||
struct IntuiMessage *imsg = (struct IntuiMessage *)native;
|
||||
|
||||
if (native == NULL)
|
||||
return NULL;
|
||||
|
||||
if (imsg->Class == IDCMP_CLOSEWINDOW || imsg->Class == IDCMP_INTUITICKS || imsg->Class == IDCMP_MOUSEMOVE ||
|
||||
imsg->Class == IDCMP_REFRESHWINDOW || imsg->Class == IDCMP_MOUSEBUTTONS || imsg->Class == IDCMP_NEWSIZE ||
|
||||
imsg->Class == IDCMP_CHANGEWINDOW)
|
||||
{
|
||||
struct IntuiMessageV0 *v0msg = abiv0_AllocMem(sizeof(struct IntuiMessageV0), MEMF_CLEAR, Intuition_SysBaseV0);
|
||||
|
||||
v0msg->Class = imsg->Class;
|
||||
if (imsg->IDCMPWindow == g_nativewindow)
|
||||
v0msg->IDCMPWindow = (APTR32)(IPTR)g_v0window;
|
||||
|
||||
v0msg->Code = imsg->Code;
|
||||
v0msg->Qualifier = imsg->Qualifier;
|
||||
v0msg->MouseX = imsg->MouseX;
|
||||
v0msg->MouseY = imsg->MouseY;
|
||||
v0msg->Seconds = imsg->Seconds;
|
||||
v0msg->Micros = imsg->Micros;
|
||||
|
||||
/* Store original message in Node of v0msg for now */
|
||||
*((IPTR *)&v0msg->ExecMessage.mn_Node) = (IPTR)imsg;
|
||||
|
||||
return (struct MessageV0 *)v0msg;
|
||||
}
|
||||
|
||||
bug("Intuition_Translate - missing code for class %d\n", imsg->Class);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
BOOL abiv0_ModifyIDCMP(struct WindowV0 *window, ULONG flags, struct LibraryV0 *IntuitionBaseV0)
|
||||
{
|
||||
struct WindowProxy *winproxy = (struct WindowProxy *)window;
|
||||
struct MsgPortProxy *msgpproxy = (struct MsgPortProxy *)(IPTR)winproxy->base.UserPort;
|
||||
if (msgpproxy != NULL)
|
||||
{
|
||||
winproxy->native->UserPort = msgpproxy->native;
|
||||
msgpproxy->translate = Intuition_Translate;
|
||||
}
|
||||
return ModifyIDCMP(winproxy->native, flags);
|
||||
}
|
||||
MAKE_PROXY_ARG_2(ModifyIDCMP);
|
||||
|
||||
struct LibraryV0 *shallow_InitResident32(struct ResidentV0 *resident, BPTR segList, struct ExecBaseV0 *SysBaseV0);
|
||||
BPTR LoadSeg32 (CONST_STRPTR name, struct DosLibrary *DOSBase);
|
||||
struct ResidentV0 * findResident(BPTR seg, CONST_STRPTR name);
|
||||
|
@ -123,6 +315,15 @@ void init_intuition(struct ExecBaseV0 *SysBaseV0)
|
|||
__AROS_SETVECADDRV0(abiv0IntuitionBase, 131, (APTR32)(IPTR)proxy_ScreenDepth);
|
||||
__AROS_SETVECADDRV0(abiv0IntuitionBase, 115, (APTR32)(IPTR)proxy_GetScreenDrawInfo);
|
||||
__AROS_SETVECADDRV0(abiv0IntuitionBase, 107, intuitionjmp[165 - 107]); // DisposeObject
|
||||
__AROS_SETVECADDRV0(abiv0IntuitionBase, 116, (APTR32)(IPTR)proxy_FreeScreenDrawInfo);
|
||||
__AROS_SETVECADDRV0(abiv0IntuitionBase, 101, (APTR32)(IPTR)proxy_OpenWindowTagList);
|
||||
__AROS_SETVECADDRV0(abiv0IntuitionBase, 53, (APTR32)(IPTR)proxy_WindowLimits);
|
||||
__AROS_SETVECADDRV0(abiv0IntuitionBase, 25, (APTR32)(IPTR)proxy_ModifyIDCMP);
|
||||
__AROS_SETVECADDRV0(abiv0IntuitionBase, 9, (APTR32)(IPTR)proxy_ClearMenuStrip);
|
||||
__AROS_SETVECADDRV0(abiv0IntuitionBase, 12, (APTR32)(IPTR)proxy_CloseWindow);
|
||||
__AROS_SETVECADDRV0(abiv0IntuitionBase, 86, (APTR32)(IPTR)proxy_UnlockPubScreen);
|
||||
__AROS_SETVECADDRV0(abiv0IntuitionBase, 119, intuitionjmp[165 - 119]); // FreeClass
|
||||
__AROS_SETVECADDRV0(abiv0IntuitionBase, 118, intuitionjmp[165 - 118]); // RemoveClass
|
||||
|
||||
/* Call CLASSESINIT_LIST */
|
||||
ULONG pos = 1;
|
||||
|
|
|
@ -11,6 +11,7 @@ FILES := AoA loadseg32 internalloadseg32 internalloadseg_elf32 internalloadseg_s
|
|||
abiv0/exec/findname \
|
||||
abiv0/exec/openlibrary \
|
||||
abiv0/exec/addresource \
|
||||
abiv0/exec/initsemaphore \
|
||||
abiv0/graphics/graphics_init \
|
||||
abiv0/intuition/intuition_init \
|
||||
abiv0/dos/dos_init \
|
||||
|
|
Loading…
Reference in New Issue