SDLUtils.mod 660 B

123456789101112131415161718192021222324
  1. IMPLEMENTATION MODULE SDLUtils ;
  2. FROM SYSTEM IMPORT ADDRESS, ADR;
  3. FROM SDL2 IMPORT SDL_GetError;
  4. FROM libc IMPORT strlen, strncpy;
  5. PROCEDURE CStrToM2 (src: ADDRESS; VAR dst: ARRAY OF CHAR);
  6. VAR n: CARDINAL;
  7. BEGIN
  8. IF HIGH(dst) < 0 THEN RETURN END;
  9. IF src = NIL THEN dst[0] := 0C; RETURN END;
  10. (* strlen returns CSIZE_T; VAL converts without range check. *)
  11. n := VAL(CARDINAL, strlen(src));
  12. IF n > HIGH(dst) THEN n := HIGH(dst) END;
  13. strncpy(ADR(dst), src, n);
  14. IF n <= HIGH(dst) THEN dst[n] := 0C END
  15. END CStrToM2;
  16. PROCEDURE GetErrorString (VAR buf: ARRAY OF CHAR);
  17. BEGIN
  18. CStrToM2(SDL_GetError(), buf)
  19. END GetErrorString;
  20. END SDLUtils.