; Simple BBC News ticker client
; (c) Darren Salt
; GPL applies
; $Id: veneers.s,v 1.5 2003/05/29 01:15:48 ds Exp $

OS_ReadMonotonicTime	* &42
XWimp_CloseWindow	* &600C6
XWimp_CreateMenu	* &600D4
XWimp_CreateIcon	* &600C2
XWimp_DeleteIcon	* &600C4
XWimp_GetIconState	* &600CE
XWimp_GetPointerInfo	* &600CF
XWimp_GetWindowState	* &600CB
XWimp_GetWindowInfo	* &600CC
XWimp_OpenWindow	* &600C5
XWimp_ReportError	* &600DF
XWimp_SendMessage	* &600E7
XWimp_SetIconState	* &600CD

	MACRO
	RET
	MOVVC	r0,#0
	MOV$S	pc,lr
	MEND

	MACRO
	BLOCK	$swi
	MOV	r1,r0
	SWI	X$swi
	RET
	MEND

	AREA	|Asm$$Code$$read_monotonic_time|, CODE, READONLY
	EXPORT	read_monotonic_time
read_monotonic_time
	SWI	OS_ReadMonotonicTime
	MOV$S	pc,lr

	AREA	|Asm$$Code$$wimp_close_window|, CODE, READONLY
	EXPORT	wimp_close_window
wimp_close_window
	BLOCK	Wimp_CloseWindow

	AREA	|Asm$$Code$$wimp_create_menu|, CODE, READONLY
	EXPORT	wimp_create_menu
wimp_create_menu
	MOV	r3,r2
	MOV	r2,r1
	MOV	r1,r0
	SWI	XWimp_CreateMenu
	RET

	AREA	|Asm$$Code$$wimp_get_icon_state|, CODE, READONLY
	EXPORT	wimp_get_icon_state
wimp_get_icon_state
	TEQ	r0,#0
	STMNEIA	r2,{r0,r1}
	MOV	r1,r2
	SWI	XWimp_GetIconState
	RET

	AREA	|Asm$$Code$$wimp_get_pointer_info|, CODE, READONLY
	EXPORT	wimp_get_pointer_info
wimp_get_pointer_info
	BLOCK	Wimp_GetPointerInfo

	AREA	|Asm$$Code$$wimp_get_window_state|, CODE, READONLY
	EXPORT	wimp_get_window_state
wimp_get_window_state
	TEQ	r1,#0
	STRNE	r1,[r0]
	BLOCK	Wimp_GetWindowState

	AREA	|Asm$$Code$$wimp_get_window_info|, CODE, READONLY
	EXPORT	wimp_get_window_info
wimp_get_window_info
	TEQ	r1,#0
	STRNE	r1,[r0]
	ORR	r1,r0,#1
	SWI	XWimp_GetWindowInfo
	RET

	AREA	|Asm$$Code$$wimp_open_window|, CODE, READONLY
	EXPORT	wimp_open_window
wimp_open_window
	MOV	r2,#0
	BLOCK	Wimp_OpenWindow

	AREA	|Asm$$Code$$wimp_open_window_ext|, CODE, READONLY
	EXPORT	wimp_open_window_ext
wimp_open_window_ext
	STMFD	sp!,{r4}
	MOV	r4,r2
	MOV	r3,r1
	LDR	r2,=&4B534154
	MOV	r1,r0
	SWI	XWimp_OpenWindow
	LDMFD	sp!,{r4}
	RET

	AREA	|Asm$$Code$$wimp_report_error|, CODE, READONLY
	EXPORT	wimp_report_error
wimp_report_error
	STMFD	sp!,{r4,r5}
	MOV	r3,#0
	MOV	r4,#0
	MOV	r5,#0
	SWI	XWimp_ReportError
	MOVVS	r0,#0
	MOVVC	r0,r1
	LDMFD	sp!,{r4,r5}
	MOV$S	pc,lr

	AREA	|Asm$$Code$$wimp_report_error_ext|, CODE, READONLY
	EXPORT	wimp_report_error_ext
wimp_report_error_ext
	STMFD	sp!,{r4,r5}
	ADD	r4,sp,#8
	LDMIA	r4,{r4,r5}
	SWI	XWimp_ReportError
	MOVVS	r0,#0
	MOVVC	r0,r1
	LDMFD	sp!,{r4,r5}
	MOV$S	pc,lr

	AREA	|Asm$$Code$$wimp_send_message|, CODE, READONLY
	EXPORT	wimp_send_message
wimp_send_message
	STMFD	r13!,{r14}
	MOV	r14,#0
	STR	r14,[r1,#12]	; your_ref = 0
	SWI	XWimp_SendMessage
	LDMFD	r13!,{r14}
	RET

	AREA	|Asm$$Code$$wimp_reply_message|, CODE, READONLY
	EXPORT	wimp_reply_message
wimp_reply_message
	LDMIB	r0,{r2,r3}	; read sender, my_ref
	STR	r3,[r0,#12]	; your_ref = my_ref
	MOV	r1,r0
	MOV	r0,#17		; UserMessage
	SWI	XWimp_SendMessage
	RET

	AREA	|Asm$$Code$$wimp_set_icon_state|, CODE, READONLY
	EXPORT	wimp_set_icon_state
wimp_set_icon_state
	BLOCK	Wimp_SetIconState

	AREA	|Asm$$Code$$wimp_create_icon|, CODE, READONLY
	EXPORT	wimp_create_icon
	EXPORT	wimp_create_icon_with_priority
wimp_create_icon
	MOV	r3,#0
wimp_create_icon_with_priority
	STMIA	r0,{r1}
	MOV	r1,r0
	MOV	r0,r3
	SWI	XWimp_CreateIcon
	MOVVS	r2,#0
	TEQ	r2,#0
	STRNE	r0,[r2]
	RET

	AREA	|Asm$$Code$$wimp_delete_icon|, CODE, READONLY
	EXPORT	wimp_delete_icon
wimp_delete_icon
	STMFD	r13!,{r0,r1}
	MOV	r1,r13
	SWI	XWimp_DeleteIcon
	ADD	r13,r13,#8
	RET

	END
