;
; iface.s
;
; Interface to DLLManager SWIs
;
;  1994 Straylight
;

;----- Standard stuff -------------------------------------------------------

		GET	libs:header
		GET	libs:swis

;----- Main code ------------------------------------------------------------

		AREA	|DLL$$Code|,CODE,READONLY

; os_error *dll_find(char *name,int version,dll *d)

		EXPORT	dll_find
dll_find
		MOV	ip,lr
		SWI	XDLL_Find
		STRVC	a1,[a3]
		MOVVC	a1,#0
		MOVS	pc,ip

; os_error *dll_findFromTable(dll_table *table,int entries)

		EXPORT	dll_findFromTable
dll_findFromTable
		MOV	ip,lr
		ADD	a2,a1,a2,LSL #2
		SWI	XDLL_FindFromTable
		MOVVC	a1,#0
		MOVS	pc,ip

; os_error *dll_load(void *buffer,char *name)

		EXPORT	dll_load
dll_load
		MOV	ip,lr
		SWI	XDLL_Load
		MOVVC	a1,#0
		MOVS	pc,ip

; os_error *dll_lose(dll d)

		EXPORT	dll_lose
dll_lose
		MOV	ip,lr
		SWI	XDLL_Lose
		MOVVC	a1,#0
		MOVS	pc,ip

; os_error *dll_appDying(void)

		EXPORT	dll_appDying
dll_appDying
		MOV	ip,lr
		SWI	XDLL_AppDying
		MOVVC	a1,#0
		MOVS	pc,ip

; os_error *dll_giveCLibData(void *data)

		EXPORT	dll_giveCLibData
dll_giveCLibData
		MOV	ip,lr
		SWI	XDLL_GiveCLibData
		MOVVC	a1,#0
		MOVS	pc,ip
		LTORG

; os_error *dll_findCLibData(void **p)

		EXPORT	dll_findCLibData
dll_findCLibData
		MOV	ip,lr
		MOV	a2,a1
		SWI	XDLL_FindCLibData
		STRVC	a1,[a2]
		MOVVC	a1,#0
		MOVS	pc,ip

; os_error *dll_instanceVars(void *buffer,int *size,int *magic)

		EXPORT	dll_instanceVars
dll_instanceVars
		MOV	ip,lr
		MOV	a4,v1
		LDR	v1,[a3]
		SWI	XDLL_InstanceVars
		STRVC	v1,[a3]
		STRVC	a1,[a2]
		MOVVC	a1,#0
		MOV	v1,a4
		MOVS	pc,ip

; os_error *dll_setInstanceVars(dll d,void *workspace)

		EXPORT	dll_setInstanceVars
dll_setInstanceVars
		MOV	ip,lr
		SWI	XDLL_SetInstanceVars
		MOVVC	a1,#0
		MOVS	pc,ip

; os_error *dll_appData(void)

		EXPORT	dll_appData
dll_appData
		MOV	ip,lr
		MOV	a1,sl
		SWI	XDLL_AppData
		MOVVC	a1,#0
		MOVS	pc,ip

; os_error *dll_readStackPtr(int *sp)

		EXPORT	dll_readStackPtr
dll_readStackPtr
		MOV	ip,lr
		MOV	a2,a1
		SWI	XDLL_ReadStackPtr
		STRVC	a1,[a2]
		MOVVC	a1,#0
		MOVS	pc,ip

; os_error *dll_setStackPtr(int sp)

		EXPORT	dll_setStackPtr
dll_setStackPtr
		MOV	ip,lr
		MOV	a2,sl
		SWI	XDLL_SetStackPtr
		MOVVC	a1,#0
		MOVS	pc,ip

; os_error *dll_nameApp(char *name)

		EXPORT	dll_nameApp
dll_nameApp
		MOV	ip,lr
		SWI	XDLL_NameApp
		MOVVC	a1,#0
		MOVS	pc,ip

; os_error *dll_info(dll d,dll_info *i)

		EXPORT	dll_info
dll_info	STMFD	sp!,{v1,lr}
		MOV	ip,a2
		SWI	XDLL_Info
		STMVCIA	ip,{a1-a4,v1}
		MOVVC	a1,#0
		LDMFD	sp!,{v1,pc}^

; os_error *dll_findEntry(dll d,char *name,void (**entry)())

		EXPORT	dll_findEntry
dll_findEntry
		MOV	ip,lr
		SWI	XDLL_FindEntry
		STRVC	a1,[a3]
		MOVVC	a1,#0
		MOVS	pc,ip

; os_error *dll_saveHandle(int *handle)

		EXPORT	dll_saveHandle
dll_saveHandle
		MOV	ip,lr
		MOV	a2,a1
		SWI	XDLL_SaveHandle
		STRVC	a1,[a2]
		MOVVC	a1,#0
		MOVS	pc,ip

; os_error *dll_restoreHandle(int *handle)

		EXPORT	dll_restoreHandle
dll_restoreHandle
		MOV	ip,lr
		LDR	a1,[a1]
		SWI	XDLL_RestoreHandle
		MOVVC	a1,#0
		MOVS	pc,ip

; os_error *dll_findInstanceVars(dll d,void **addr)

		EXPORT	dll_findInstanceVars
dll_findInstanceVars
		MOV	ip,lr
		SWI	XDLL_FindInstanceVars
		STRVC	a1,[a2]
		MOVVC	a1,#0
		MOVS	pc,ip

; os_error *dll_registerAppEntryTable(void (**btable)(),char *names)

		EXPORT	dll_registerAppEntryTable
dll_registerAppEntryTable
		MOV	ip,lr
		SWI	XDLL_RegisterAppEntryTable
		MOVVC	a1,#0
		MOVS	pc,ip

; os_error *dll_findAppEntry(char *name,void (**func)())

		EXPORT	dll_findAppEntry
dll_findAppEntry
		MOV	ip,lr
		SWI	XDLL_FindAppEntry
		STRVC	a1,[a2]
		MOVVC	a1,#0
		MOVS	pc,ip

; os_error *dll_setExtensionTable(void (**btable)(),char *names)

		EXPORT	dll_setExtensionTable
dll_setExtensionTable
		MOV	ip,lr
		SWI	XDLL_SetExtensionTable
		MOVVC	a1,#0
		MOVS	pc,ip

;----- That's all, folks ----------------------------------------------------

		END
