MODULE test_key ; (* m2SDL3 test: push synthetic SDL_Event buffers through SDL_PushEvent and check PollM2Event decodes type 0300H (key down, keycode at offset 28) and 0100H (quit). SDL3 events are 128 bytes; pushes return BOOLEAN. *) FROM SYSTEM IMPORT ADDRESS, ADR; FROM SDL3 IMPORT SDL_Init, SDL_Quit, SDLInitEvents; FROM SDL3Events IMPORT SDL_PushEvent, SDL_PollEvent, EventKeyDown, EventQuit, EventWindowCloseRequested, EventBufferBytes; FROM SDL3Utils IMPORT PollM2Event, M2Event, evKey, evQuit; FROM libc IMPORT printf; VAR buf: ARRAY [0..EventBufferBytes-1] OF CHAR; ev: M2Event; PROCEDURE ZeroBuf; VAR j: INTEGER; BEGIN FOR j := 0 TO EventBufferBytes - 1 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 NOT SDL_Init(SDLInitEvents) THEN printf("FAIL test_key: SDL_Init events\n"); HALT(1) END; (* key down, keycode "q" = 113 at offset 28. *) ZeroBuf; Put32(0, EventKeyDown); Put32(28, 113); IF NOT SDL_PushEvent(ADR(buf)) THEN Fail("push key") END; (* window close request must also decode as quit. *) ZeroBuf; Put32(0, EventWindowCloseRequested); IF NOT SDL_PushEvent(ADR(buf)) THEN Fail("push close") END; (* quit. *) ZeroBuf; Put32(0, EventQuit); IF NOT SDL_PushEvent(ADR(buf)) 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 NOT PollM2Event(ev) THEN Fail("poll 3 empty") END; IF ORD(ev.kind) # ORD(evQuit) THEN Fail("ev3 not quit") END; IF PollM2Event(ev) THEN Fail("queue not drained") END; SDL_Quit; printf("PASS test_key\n") END test_key.