| 123456789101112131415161718192021222324252627282930313233343536373839 |
- IMPLEMENTATION MODULE SDLUtils ;
- FROM SYSTEM IMPORT ADDRESS, ADR;
- FROM SDL2 IMPORT SDL_GetError;
- FROM SDLEvents IMPORT SDL_PollEvent, EventQuit, EventBufferBytes;
- FROM libc IMPORT strlen, strncpy;
- PROCEDURE CStrToM2 (src: ADDRESS; VAR dst: ARRAY OF CHAR);
- VAR n: CARDINAL;
- BEGIN
- IF HIGH(dst) < 0 THEN RETURN END;
- IF src = NIL THEN dst[0] := 0C; RETURN END;
- (* strlen returns CSIZE_T; VAL converts without range check. *)
- n := VAL(CARDINAL, strlen(src));
- IF n > HIGH(dst) THEN n := HIGH(dst) END;
- strncpy(ADR(dst), src, n);
- IF n <= HIGH(dst) THEN dst[n] := 0C END
- END CStrToM2;
- PROCEDURE GetErrorString (VAR buf: ARRAY OF CHAR);
- BEGIN
- CStrToM2(SDL_GetError(), buf)
- END GetErrorString;
- PROCEDURE DrainEvents (VAR quit: BOOLEAN);
- VAR
- buf: ARRAY [0..EventBufferBytes-1] OF CHAR;
- t: CARDINAL;
- BEGIN
- WHILE SDL_PollEvent(ADR(buf)) # 0 DO
- t := VAL(CARDINAL, ORD(buf[0]))
- + VAL(CARDINAL, ORD(buf[1])) * 256
- + VAL(CARDINAL, ORD(buf[2])) * 65536
- + VAL(CARDINAL, ORD(buf[3])) * 16777216;
- IF t = EventQuit THEN quit := TRUE END
- END
- END DrainEvents;
- END SDLUtils.
|