added tunnel effect and SDL backend
[dosdemo] / src / sdl / main.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <SDL/SDL.h>
4 #include "demo.h"
5
6 static void handle_event(SDL_Event *ev);
7
8 static int quit;
9 static long start_time;
10 static SDL_Surface *fbsurf;
11
12 int main(int argc, char **argv)
13 {
14         unsigned int sdl_flags = SDL_SWSURFACE;
15
16         SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER);
17         if(!(fbsurf = SDL_SetVideoMode(fb_width, fb_height, fb_bpp, sdl_flags))) {
18                 fprintf(stderr, "failed to set video mode %dx%d %dbpp\n", fb_width, fb_height, fb_bpp);
19                 return 1;
20         }
21         SDL_WM_SetCaption("dosdemo SDLemu", 0);
22
23         time_msec = 0;
24         if(demo_init(argc, argv) == -1) {
25                 return 1;
26         }
27         start_time = SDL_GetTicks();
28
29         while(!quit) {
30                 SDL_Event ev;
31                 while(SDL_PollEvent(&ev)) {
32                         handle_event(&ev);
33                         if(quit) goto break_evloop;
34                 }
35
36                 time_msec = SDL_GetTicks() - start_time;
37                 if(SDL_MUSTLOCK(fbsurf)) {
38                         SDL_LockSurface(fbsurf);
39                 }
40                 fb_pixels = fbsurf->pixels;
41
42                 demo_draw();
43
44                 if(SDL_MUSTLOCK(fbsurf)) {
45                         SDL_UnlockSurface(fbsurf);
46                 }
47                 SDL_Flip(fbsurf);
48         }
49
50 break_evloop:
51         demo_cleanup();
52         SDL_Quit();
53         return 0;
54 }
55
56 void demo_quit(void)
57 {
58         quit = 1;
59 }
60
61 static void handle_event(SDL_Event *ev)
62 {
63         switch(ev->type) {
64         case SDL_QUIT:
65                 quit = 1;
66                 break;
67
68         case SDL_KEYDOWN:
69         case SDL_KEYUP:
70                 demo_keyboard(ev->key.keysym.sym, ev->key.state == SDL_PRESSED ? 1 : 0);
71                 break;
72
73         default:
74                 break;
75         }
76 }