#ifndef plat_h #define plat_h #include "error.h" #include "memory.h" #include "render.h" #ifdef assert #undef assert #endif #define assert(expr) \ imp_assert( \ expr, \ #expr, \ __FILE__, \ __LINE__ \ ) int imp_assert( int val, const char* expr, const char* file, int line ); void print(const char* fmt, ...); void print_err(const char* fmt, ...); void print_war(const char* fmt, ...); void pbreak(Error code); typedef struct File File; typedef enum { file_flags_write = 1 << 0, file_flags_read = 1 << 1, file_flags_read_write = 1 << 2, file_flags_create = 1 << 3 } File_Flags; typedef enum { file_whence_begin, file_whence_end, file_whence_cur } File_Whence; File* file_open(const char* name, File_Flags flags); void file_close(File* file); void file_read(File* file, void* buffer, int size); void file_write(File* file, const void* buffer, int size); void file_seek(File* file, int offset, File_Whence whence); int file_size(File* file); int file_exists(const char* name); typedef struct { int mpf; int fps; unsigned long pt, ct; unsigned long now, next; } FPS; void init_fps(FPS* f, int mpf); void fps_begin(FPS* f); void fps_end(FPS* f); void fps_update(FPS* f); typedef struct { int w, h, s, o, mpf; int fps; int mx, my; int dmx, dmy; Error err; Colour* fb; Heap* heap; } App; App* new_app(Heap* mem, int w, int h, const char* n); void deinit_app(App* a); void app_begin(App* a); void app_end(App* a); void cfg_mouse(App* a, int show); #endif