MODULE event_loop ; (* m2SDL3 example: event loop until window close or 5 seconds. Quit arrives as EventQuit or EventWindowCloseRequested; both decode to evQuit via SDL3Utils.PollM2Event, so DrainEvents is enough for a close-button loop. *) FROM SDL3 IMPORT SDL_Init, SDL_Quit, SDL_Delay, SDL_GetTicks, SDLInitVideo, SDLInitEvents; FROM SDL3Video IMPORT SDL_CreateWindow, SDL_DestroyWindow; FROM SDL3Utils IMPORT DrainEvents; FROM libc IMPORT printf; FROM SYSTEM IMPORT ADDRESS; VAR win: ADDRESS; start, now: LONGCARD; quit: BOOLEAN; BEGIN IF NOT SDL_Init(SDLInitVideo + SDLInitEvents) THEN printf("SDL_Init failed\n"); HALT(1) END; win := SDL_CreateWindow("Close me, or wait 5s", 640, 480, 0); IF win = NIL THEN printf("CreateWindow failed\n"); SDL_Quit; HALT(1) END; quit := FALSE; start := SDL_GetTicks(); WHILE NOT quit DO DrainEvents(quit); now := SDL_GetTicks(); IF now - start > 5000 THEN quit := TRUE END; SDL_Delay(16) END; SDL_DestroyWindow(win); SDL_Quit; printf("bye\n") END event_loop.