pgetevas.tpl

来自「在手机操作系统symbina上使用的一个脚本扩展语言的代码实现,可以参考用于自己」· TPL 代码 · 共 542 行

TPL
542
字号
REM pGetEvAs.tpl
REM EPOC OPL interactive test code for GETEVENT async.
REM Copyright (c) 1991-2000 Symbian Ltd. All rights reserved.

DECLARE EXTERNAL

INCLUDE "hUtils.oph"

EXTERNAL runPGetEvAs:
EXTERNAL	tkeypress:
EXTERNAL	tpointer:
EXTERNAL	tpointerpos:
EXTERNAL	ttimest:
EXTERNAL waitkeypress:(raise%,a$,l1&,l2&,l3&)

EXTERNAL checkpointerevent:(r%,wid&,type&,mod&)

EXTERNAL checkpos:(l1&,l2&,l3&)
EXTERNAL checkpointerenter:(r%,wid&)
EXTERNAL checkpointerexit:(r%,wid&)



PROC Standalone:
	REM Main procedure called when not running inside test harness.
	LOADM KhUtils$
	hLink:( "pGetEvAs", hThreadIdFromOplDoc&:, KhUserLoggingOnly%) 
	REM After standalone completion, control returns here.
	REM Start looping, think this test is finishing too soon.
	DO
		dINIT "Tests complete" :DIALOG
		print DATIM$, "I'm still alive and I should be dead."
	UNTIL 0
ENDP


const FCANCEL%=4
const FRELATIVE%=1

proc pGetEvAs:
	global filter%,mask%,status%,timeStat%
	global ev&(16)

	rem hInitTestHarness:(KhInitLocalErrorHandling%, KhInitNotUsed%)

	mask%=$7
	filter%=0
		
	print "Opler1 GetEventA32 Tests"
	rem pause 10
	print
	print "Some automated tests: please follow instructions!"
	hCall%:("runPGetEvAs")
	hSpoofSetFlagTargetApp%:(CMD$(1),KhDeleteFlag%)
	print
	print "Opler1 GetEvent32 Tests Finished OK"
	rem pause 20
endp


proc runPGetEvAs:
	tkeypress:
	tpointer:
	tpointerpos:
	ttimest:
endp	


proc tkeypress:
	external ev&(),status%
	local a%
	print
	print "Test key events"
	print "Press a key to clear previous events (Esc to skip test)"
	if get=27		rem this clears all previous events
		return
	endif
	getevent32 ev&()		rem this clears "key up" from "get"
	if ev&(1)<>&407 : raise 1 : endif
	print
	waitkeypress:(100,"a",&61,&41,&0)
	waitkeypress:(110,"h",&68,&48,&0)
	waitkeypress:(120,"Shift + w",&57,&57,&2)
	waitkeypress:(130,"6",&36,&36,&0)
	waitkeypress:(140,"!",&21,&31,&2)
	waitkeypress:(150,"Ctrl + k",&B,&4B,&4)
	waitkeypress:(160,"Esc",&1b,&4,&0)
	waitkeypress:(170,"Enter",&d,&3,&0)
	waitkeypress:(180,"Tab",&9,&2,&0)
	waitkeypress:(190,"Delete",&8,&1,&0)
	
	print "Please press Alt/Fn once"
	geteventa32 status%,ev&()
	iowaitstat status%
	if ev&(1)<>&406 : raise 9 : endif
	if ev&(4)<>&20 : raise 10 : endif
	geteventa32 status%,ev&()
	iowaitstat status%
	if ev&(1)<>&407 : raise 11 : endif
	if ev&(4)<>&0 : raise 12 : endif

	print "Please press Shift once"
	geteventa32 status%,ev&()
	iowaitstat status%
	if ev&(1)<>&406 : raise 13 : endif
	if ev&(4)<>&2 : print ev&(4) : raise 14 : endif
	geteventa32 status%,ev&()
	iowaitstat status%
	if ev&(1)<>&407 : raise 15 : endif
	if ev&(4)<>&0 : raise 16 : endif

	print "OK"
	rem pause 20
endp


proc tpointer:
	external ev&(),status%
	local id%,wid&,i%
	cls
	print "Test pointer events"
	print "Press a key to clear previous events (Esc to skip test)"
	if get=27		rem this clears all previous events
		return
	endif
	getevent32 ev&()		rem this clears "key up" from "get"
	if ev&(1)<>&407 : raise 1 : endif	
	print
	print "For the following tests, move events will be filtered out so "
	print "tests will work on Opler1"
	pointerfilter 2,7
	print
	
	print "Please click the left mouse button/pen"
	geteventa32 status%,ev&()
	iowaitstat status%
	if ev&(1)=&409
		geteventa32 status%,ev&()
		iowaitstat status%
	endif
	checkpointerevent:(2,&1,&0,&0)
	geteventa32 status%,ev&()
	iowaitstat status%
	i%=0
	while ev&(1)=&408 and ev&(4)=6
		geteventa32 status%,ev&()
		iowaitstat status%
		i%=i%+1
		if i%>5 : raise 100 : endif
	endwh
	checkpointerevent:(6,&1,&1,&0)
	
	rem pause 10
	print "Please drag the pen/mouse"
	geteventa32 status%,ev&()
	iowaitstat status%
	if ev&(1)=&409
		geteventa32 status%,ev&()
		iowaitstat status%
	endif
	checkpointerevent:(10,&1,&0,&0)
	geteventa32 status%,ev&()
	iowaitstat status%
	while ev&(4)=6
		checkpointerevent:(14,&1,&6,&0)
		geteventa32 status%,ev&()
		iowaitstat status%
	endwh
	checkpointerevent:(18,&1,&1,&0)
	
	id%=gcreate (320,0,320,gheight,1,1)
	gborder 2
	pointerfilter 2,7
	wid&=id%
	rem pause 10
	print "Please click the left mouse button"
	print "/pen in the new window"
	geteventa32 status%,ev&()
	iowaitstat status%
	checkpointerenter:(24,wid&)
	geteventa32 status%,ev&()
	iowaitstat status%
	checkpointerevent:(26,wid&,&0,&0)
	geteventa32 status%,ev&()
	iowaitstat status%
	i%=0
	while ev&(1)=&408 and ev&(4)=6
		geteventa32 status%,ev&()
		iowaitstat status%
		i%=i%+1
		if i%>5 : raise 200 : endif
	endwh
	checkpointerevent:(30,wid&,&1,&0)

	rem pause 10
	print "Please drag the mouse/pen"
	print "back to the main window"
	geteventa32 status%,ev&()
	iowaitstat status%
	if ev&(1)=&409
		geteventa32 status%,ev&()
		iowaitstat status%
	endif
	checkpointerevent:(34,wid&,&0,&0)
	geteventa32 status%,ev&()
	iowaitstat status%
	while ev&(4)=6
		checkpointerevent:(38,wid&,&6,&0)
		geteventa32 status%,ev&()
		iowaitstat status%
	endwh
	checkpointerexit:(42,wid&)
	geteventa32 status%,ev&()
	iowaitstat status%
	checkpointerenter:(44,&1)
	geteventa32 status%,ev&()
	iowaitstat status%
	while ev&(4)=6
		checkpointerevent:(46,&1,&6,&0)
		geteventa32 status%,ev&()
		iowaitstat status%
	endwh
	checkpointerevent:(50,&1,&1,&0)
	gclose id%
	
	rem pause 10
	print "Please double click"
	geteventa32 status%,ev&()
	iowaitstat status%
	if ev&(1)=&409
		geteventa32 status%,ev&()
		iowaitstat status%
	endif
	checkpointerevent:(54,&1,&0,&0)
	geteventa32 status%,ev&()
	iowaitstat status%
	i%=0
	while ev&(1)=&408 and ev&(4)=6
		geteventa32 status%,ev&()
		iowaitstat status%
		i%=i%+1
		if i%>5 : raise 300 : endif
	endwh
	checkpointerevent:(58,&1,&1,&0)
	geteventa32 status%,ev&()
	iowaitstat status%
	if ev&(1)=&409
		geteventa32 status%,ev&()
		iowaitstat status%
	endif
	checkpointerevent:(62,&1,&0,&80000)
	geteventa32 status%,ev&()
	iowaitstat status%
	i%=0
	while ev&(1)=&408 and ev&(4)=6
		geteventa32 status%,ev&()
		iowaitstat status%
		i%=i%+1
		if i%>5 : raise 400 : endif
	endwh
	checkpointerevent:(66,&1,&1,&0)	
	
	rem pause 10
	print
	print "Please click on system and then return to OPL"
	geteventa32 status%,ev&()
	iowaitstat status%
	while ev&(1)<>&402
		geteventa32 status%,ev&()
		iowaitstat status%
	endwh
	if ev&(1)<>&402 : raise 76 : endif
	geteventa32 status%,ev&()
	iowaitstat status%
	if ev&(1)<>&401 : raise 77 : endif
		
	print "OK"
	rem pause 20
endp


proc tpointerpos:
	external ev&(),status%,timestat%
	local i%,t1&,t2&,timeout%,arg2%,timechan%
	cls
	pointerfilter 2,7
	print "Test pointer positions"
	print "Press a key to clear previous events (Esc to skip test)"
	if get=27		rem this clears all previous events
		return
	endif
	getevent32 ev&()		rem this clears "key up" from "get"
	if ev&(1)<>&407 : raise 1 : endif	
	print
	
	gat 50,50
	gcircle 2
	print "Please click in the circle - top right"
	geteventa32 status%,ev&()
	iowaitstat status%
	if ev&(1)=&409
		geteventa32 status%,ev&()
		iowaitstat status%
	endif
	checkpointerevent:(1,&1,&0,&0)
	checkpos:(&32,&32,&2)
	geteventa32 status%,ev&()
	iowaitstat status%
	i%=0
	while ev&(1)=&408 and ev&(4)=6
		geteventa32 status%,ev&()
		iowaitstat status%
		i%=i%+1
		if i%>5 : raise 100 : endif
	endwh
	checkpointerevent:(6,&1,&1,&0)
	checkpos:(&32,&32,&2)

	gat 500,200
	gcircle 2
	print "Please click in the circle - bottom left"
	geteventa32 status%,ev&()
	iowaitstat status%
	if ev&(1)=&409
		geteventa32 status%,ev&()
		iowaitstat status%
	endif
	checkpointerevent:(11,&1,&0,&0)
	checkpos:(&1f4,&c8,&2)
	geteventa32 status%,ev&()
	iowaitstat status%
	i%=0
	while ev&(1)=&408 and ev&(4)=6
		geteventa32 status%,ev&()
		iowaitstat status%
		i%=i%+1
		if i%>5 : raise 200 : endif
	endwh
	checkpointerevent:(16,&1,&1,&0)
	checkpos:(&1f4,&c8,&2)
	
	REM Moved this from TTimest:
	print "Please hold down mouse button/pen for approximately 3 secs"	
	pointerfilter 7,7
	getevent32 ev&()    rem gets pen down
	if ev&(1)<>$408 : raise 13 : endif
	if ev&(4)<>0 : raise 14 : endif
	t1&=ev&(2)
	
	geteventa32 status%,ev&()    rem gets pen up
	timeOut%=33
	ioa(timeChan%,FRELATIVE%,timeStat%,timeOut%,arg2%)
	iowait
	if status%=-46
		print "Time out!"
		print "(Still waiting for keypress)"
	else
		if ev&(1)<>$408 : raise 15 : endif
		if ev&(4)<>1 : raise 16 : endif
		t2&=ev&(2)	
		t2&=(t2&-t1&)/1000000
		print t2&;" secs apart"	
		if t2&<3 : print "Too quick!" : endif
	endif
	iow(timeChan%,FCANCEL%,#0,#0)
	iowaitstat timeStat%
	ioclose(timeChan%)
	
	print "OK"
	rem pause 20
endp


proc ttimest:
	external ev&(),status%,timestat%
	local unusedSafety%
	local debug$(255)
	local t1&,t2&,timeOut&,timeChan%,mode%
	cls
	print "Test time stamps"
	print "Press a key to clear previous events (Esc to skip test)"
	if get=27
		return
	endif
	getevent32 ev&()
	if ev&(1)<>$407 : raise 100 : endif
	print	

	mode%=-1
	ioopen(timeChan%,"TIM:",mode%)
	
	print "Please press two keys, approximately 2 secs apart"	
	rem first key
	getevent32 ev&()    rem gets key down
	if ev&(1)<>$406 : raise 1 : endif
	t1&=ev&(2)
	getevent32 ev&()    rem gets key press
	if (ev&(1) and $400)<>0 : print hex$(ev&(1)) : raise 2 : endif
	getevent32 ev&()    rem gets key up
	if ev&(1)<>$407 : raise 3 : endif
	
	rem wait for second key
	geteventa32 status%,ev&()    rem gets key down
	timeOut&=23		rem allow a little extra time
	ioc(timeChan%,FRELATIVE%,timeStat%,timeOut&,unusedSafety%)
	iowait

	if status%=-46
		print "Timestat% must have completed:",timeStat%
		debug$="Time out! (Still waiting for keypress)"
		print debug$
	else
		rem status<>KErrFilePending%
		if ev&(1)<>$406 : raise 4 : endif
		t2&=ev&(2)	
		t2&=(t2&-t1&)/1000000
		print t2&;" secs apart"
		if t2&<2 : print "Too quick!" : endif
	endif
	iow(timeChan%,FCANCEL%,#0,#0)
	REM Or IOCANCEL(timeChan%)
	iowaitstat timeStat%

	getevent32 ev&()    rem gets key press
	IF LEN(debug$)
		hLog%:(KhLogAlways%,debug$)
	ENDIF
	if (ev&(1) and $400)<>0
		hLog%:(KhLogAlways%,"tTimest: EV&(1)=&"+HEX$(ev&(1)))
		raise 5
	endif
	getevent32 ev&()    rem gets key up
	if ev&(1)<>$407 : raise 6 : endif
		
	print "Please press two keys, approximately 5 secs apart"	
	rem first key
	getevent32 ev&()    rem gets key down
	if ev&(1)<>$406 : raise 7 : endif
	t1&=ev&(2)
	getevent32 ev&()    rem gets key press
	if (ev&(1) and $400)<>0 : print hex$(ev&(1)) : raise 8 : endif
	getevent32 ev&()    rem gets key up
	if ev&(1)<>$407 : raise 9 : endif
	
	rem wait for second key
	geteventa32 status%,ev&()    rem gets key down
	timeOut&=53
	ioC(timeChan%,FRELATIVE%,timeStat%,timeOut&)
	iowait
	if status%=-46
		print "Time out!"
		print "(Still waiting for keypress)"
	else
		if ev&(1)<>$406 : raise 10 : endif
		t2&=ev&(2)	
		t2&=(t2&-t1&)/1000000
		print t2&;" secs apart"
		if t2&<5 : print "Too quick!" : endif
	endif
	iow(timeChan%,FCANCEL%,#0,#0)
	iowaitstat timeStat%
	getevent32 ev&()    rem gets key press
	if (ev&(1) and $400)<>0 : print hex$(ev&(1)) : raise 11 : endif
	getevent32 ev&()    rem gets key up
	if ev&(1)<>$407 : raise 12 : endif
	
	
	print "OK"
	rem pause 20
	IOCLOSE(timeChan%)
endp


proc waitkeypress:(r%,keyp$,key&,sc&,mod&)
	external ev&(),status%
	print "Please press ";keyp$;" once"
	
	if mod&<>0
		geteventa32 status%,ev&()
		iowaitstat status%
		if ev&(1)<>&406 : raise r%+1 : endif
	endif
	
	geteventa32 status%,ev&()
	iowaitstat status%
	if ev&(1)<>&406 : print ev&(1) : raise r%+2 : endif
	
	geteventa32 status%,ev&()
	iowaitstat status%
	if (ev&(1) AND $400)<>0 : print "Incorrect event ";hex$(ev&(1)) : raise r%+3 : endif
	if ev&(1)<>key& : print "Incorrect key ";hex$(ev&(1)) : raise r%+4 : endif
	if ev&(3)<>sc& : print "Incorrect scan code ";hex$(ev&(3)) : raise r%+5 : endif
	if ev&(4)<>mod& : print "Incorrect modifier ";hex$(ev&(4)) : raise r%+6 : endif
	if ev&(5)<>&0 : print "Incorrect repeats ";hex$(ev&(5)) : raise r%+7 : endif
	geteventa32 status%,ev&()
	iowaitstat status%
	if ev&(1)<>&407 : raise r%+8: endif
	
	if mod&<>0
		geteventa32 status%,ev&()
		iowaitstat status%
		if ev&(1)<>&407 : raise r%+9 : endif
	endif
endp


proc checkpointerevent:(r%,wid&,type&,mod&)
	external ev&()
	if (ev&(1) AND $fff)<>$408 : print "Incorrect event ";hex$(ev&(1)) : raise r% : endif
	if ev&(3)<>wid& : print "Incorrect window id ";hex$(ev&(3)) : raise r%+1 : endif
	if ev&(4)<>type& : print "Incorrect type ";hex$(ev&(4)) : raise r%+2 : endif
	if ev&(5)<>mod& : print "Incorrect modifier ";hex$(ev&(5)) : raise r%+3  : endif
endp


proc checkpointerenter:(r%,wid&)
	external ev&()
	if (ev&(1) AND $fff)<>$409 : print "Incorrect event ";hex$(ev&(1)) : raise r% : endif
	if ev&(3)<>wid& : print "Incorrect window id ";hex$(ev&(3)) : raise r%+1 : endif	
endp


proc checkpointerexit:(r%,wid&)
	external ev&()
	if (ev&(1) AND $fff)<>$40A : print "Incorrect event ";hex$(ev&(1)) : raise r% : endif
	if ev&(3)<>wid& : print "Incorrect window id ";hex$(ev&(3)) : raise r%+1 : endif	
endp


proc checkpos:(x&,y&,r&)
	external ev&()
	local dis&
	dis&=(ev&(6)-x&)*(ev&(6)-x&)+(ev&(7)-y&)*(ev&(7)-y&)
	if dis&>=r&*r&
		print "Outside the circle!" : print "Square root of ";dis&;" from centre!"
	else
		print "Inside the circle - OK"
	endif
endp

REM End of pGetEvAs.tpl

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?