'Declare the SmartWare functions.
PUBLIC TIMERPROC(1) CREATE_TIMER(2) DELETE_TIMER(1)

'Declare the callback address variables.
PUBLIC TIMERCALLBACK MYTIMER ME

'This is a public counter.
PUBLIC COUNTER

MAIN

	LOCAL X

	'Reset counter.
	COUNTER = 0
	X = 0

	'Create a timer callback.
	TIMERCALLBACK = CALLBACK_CREATE("TIMERPROC",4,4)

	'Create Timer.
	MYTIMER = CREATE_TIMER(TIMERCALLBACK,2000)

	MESSAGE "Press a key to stop program...."

	'Do not rearrange this part.  Deleting the callback first will GPF
	'SmartWare if the timer is still running!	

	'STOP MYTIMER!
	DELETE_TIMER(MYTIMER)	

	'Cleanup our callback.
	CALLBACK_DELETE(TIMERCALLBACK)
	
END MAIN


FUNCTION TIMERPROC(X)

	COUNTER = COUNTER + 1
	GRAPHICS WINDOW TITLE "Timer Counter: "|STR(COUNTER)
	RETURN 0

END FUNCTION

FUNCTION CREATE_TIMER(TimerCallBackProc, INTERVAL)

	LOCAL USER RESULT

	DLL LOAD "user32.dll" USER
		DLL CALL USER FUNCTION "GetActiveWindow"
		ME = GETREG(AX)		
		DLL CALL USER FUNCTION "SetTimer" STACK "LLLL" ME 50 INTERVAL TimerCallBackProc
		RESULT = GETREG(AX)
	DLL UNLOAD USER

	RETURN RESULT

END FUNCTION

FUNCTION DELETE_TIMER(ATIMER)


	LOCAL USER RESULT

	DLL LOAD "user32.dll" USER
		DLL CALL USER FUNCTION "KillTimer" STACK "LL" ME 50
		RESULT = GETREG(AX)
	DLL UNLOAD USER

	RETURN RESULT

END FUNCTION

