MODULE test_key ; (* m2SDL test: push synthetic SDL_Event buffers through SDL_PushEvent and check PollM2Event decodes type 0300H (key down, sym at offset 20) and 0100H (quit). *) FROM SYSTEM IMPORT ADDRESS, ADR; FROM SDL2 IMPORT SDL_Init, SDL_Quit, SDLInitEvents; FROM SDLEvents IMPORT SDL_PushEvent, EventKeyDown, EventQuit; FROM SDLUtils IMPORT PollM2Event, M2Event, evKey, evQuit; FROM libc IMPORT printf; VAR buf: ARRAY [0..55] OF CHAR; ev: M2Event; i: INTEGER; PROCEDURE ZeroBuf; VAR j: INTEGER; BEGIN FOR j := 0 TO 55 DO buf[j] := 0C END END ZeroBuf; PROCEDURE Put32 (off: CARDINAL; v: CARDINAL); BEGIN buf[off] := CHR(v MOD 256); buf[off+1] := CHR(v DIV 256 MOD 256); buf[off+2] := CHR(v DIV 65536 MOD 256); buf[off+3] := CHR(v DIV 16777216 MOD 256) END Put32; PROCEDURE Fail (msg: ARRAY OF CHAR); BEGIN printf("FAIL test_key: %s\n", msg); HALT(1) END Fail; BEGIN IF SDL_Init(SDLInitEvents) # 0 THEN printf("FAIL test_key: SDL_Init events\n"); HALT(1) END; (* key down, sym "q" = 113. *) ZeroBuf; Put32(0, EventKeyDown); Put32(20, 113); IF SDL_PushEvent(ADR(buf)) # 1 THEN Fail("push key") END; (* quit. *) ZeroBuf; Put32(0, EventQuit); IF SDL_PushEvent(ADR(buf)) # 1 THEN Fail("push quit") END; IF NOT PollM2Event(ev) THEN Fail("poll 1 empty") END; IF ORD(ev.kind) # ORD(evKey) THEN Fail("ev1 not key") END; IF NOT ev.pressed THEN Fail("ev1 not pressed") END; IF ev.sym # 113 THEN Fail("ev1 sym") END; IF NOT PollM2Event(ev) THEN Fail("poll 2 empty") END; IF ORD(ev.kind) # ORD(evQuit) THEN Fail("ev2 not quit") END; IF PollM2Event(ev) THEN Fail("queue not drained") END; SDL_Quit; printf("PASS test_key\n") END test_key.