haskell fs now take lists
[qpawn.git] / qpawn.c
blob06476d24c249bbff9be9ca21426829065325d107
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <SDL2/SDL.h>
5 // redfefine as bitfield
6 enum button {
7 A, B, X, Y, U, D, L, R, ST, SE, SL, SR };
8 enum btnstate {
9 UP, DOWN };
10 struct event {
11 enum btnstate state;
12 enum button btn; };
14 // FFI these
15 void quit();
16 void pixel(int, int);
17 void color(int, int, int);
18 void clear();
19 void draw();
20 void sleep(int);
21 struct event* events();
23 void line(int, int, int, int);
24 void rect(int, int, int, int);
27 static SDL_Window* window = 0;
28 static SDL_Renderer* renderer = 0;
30 void init()
32 if (SDL_Init(SDL_INIT_VIDEO) != 0) {
33 printf("sdl init failed");
34 quit();
35 return;
37 if (SDL_CreateWindowAndRenderer(640,480,0,&window,&renderer)!=0){
38 printf("create window&render failed");
39 quit();
40 return;
44 void quit()
46 SDL_DestroyRenderer(renderer);
47 SDL_DestroyWindow(window);
48 SDL_Quit();
51 void clear()
53 SDL_RenderClear(renderer);
56 void color(int r, int g, int b)
58 SDL_SetRenderDrawColor(renderer, r, g, b, 255);
61 void pixel(int x, int y)
63 SDL_RenderDrawPoint(renderer, x, y);
66 void draw()
68 SDL_RenderPresent(renderer);
71 void sleep(int t)
73 SDL_Delay(t * 1000);
76 void inline line(int xa, int ya, int xb, int yb)
78 SDL_RenderDrawLine(renderer, xa, ya, xb, yb);
81 void inline rect(int xa, int ya, int xb, int yb)
83 SDL_Rect r;
84 r.x = xa; r.y = ya; r.w = xb-xa; r.h = yb-ya;
85 SDL_RenderFillRect(renderer, &r);