www.pudn.com > PocketC.zip > PocketCLibDispatch.cpp


// Include Pilot headers
#include "PocketCLib.h"

#ifdef __cplusplus
extern "C" {
#endif

/* Dispatch table declarations */
UInt32 install_dispatcher(UInt16,SysLibTblEntryPtr);
MemPtr *gettable(void);

// The first piece of code must be the code which sets
// up the dispatch table. For any library, it looks like this: 

UInt32 start (UInt16 refnum, SysLibTblEntryPtr entryP)
{
	UInt32 ret;

	asm("
	movel %%fp@(10),%%sp@-
	movew %%fp@(8),%%sp@-
	jsr install_dispatcher(%%pc)
	movel %%d0,%0
	jmp out(%%pc)
gettable:
	lea jmptable(%%pc),%%a0
	rts
jmptable:
	dc.w 38
	dc.w 14
	dc.w 18
	dc.w 22
	dc.w 26
	dc.w 30
	dc.w 34
	jmp PocketCLibOpen(%%pc)
	jmp PocketCLibClose(%%pc)
	jmp PocketCLibSleep(%%pc)
	jmp PocketCLibWake(%%pc)
	jmp PocketCLibAddFunctions(%%pc)
	jmp PocketCLibExecuteFunction(%%pc)
	.asciz \"PocketCLib\"
.even
out:
	" : "=r" (ret) :);
	return ret;
}

    UInt32 install_dispatcher(UInt16 refnum, SysLibTblEntryPtr entryP)
    {
        MemPtr *table = gettable();
        entryP->dispatchTblP = table;
        entryP->globalsP = NULL;
        return 0;
    }

#ifdef __cplusplus 
}
#endif