| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- 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.
|