X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Fsdl%2Fmain.c;fp=src%2Fsdl%2Fmain.c;h=38822f386d93f3a991de45dd551e7785afafd2b8;hb=77c1d84c258ca14e1bba06ab711426668ff24290;hp=0000000000000000000000000000000000000000;hpb=8a64d603ee67cd98070360b40938e123ea845154;p=dosdemo diff --git a/src/sdl/main.c b/src/sdl/main.c new file mode 100644 index 0000000..38822f3 --- /dev/null +++ b/src/sdl/main.c @@ -0,0 +1,76 @@ +#include +#include +#include +#include "demo.h" + +static void handle_event(SDL_Event *ev); + +static int quit; +static long start_time; +static SDL_Surface *fbsurf; + +int main(int argc, char **argv) +{ + unsigned int sdl_flags = SDL_SWSURFACE; + + SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER); + if(!(fbsurf = SDL_SetVideoMode(fb_width, fb_height, fb_bpp, sdl_flags))) { + fprintf(stderr, "failed to set video mode %dx%d %dbpp\n", fb_width, fb_height, fb_bpp); + return 1; + } + SDL_WM_SetCaption("dosdemo SDLemu", 0); + + time_msec = 0; + if(demo_init(argc, argv) == -1) { + return 1; + } + start_time = SDL_GetTicks(); + + while(!quit) { + SDL_Event ev; + while(SDL_PollEvent(&ev)) { + handle_event(&ev); + if(quit) goto break_evloop; + } + + time_msec = SDL_GetTicks() - start_time; + if(SDL_MUSTLOCK(fbsurf)) { + SDL_LockSurface(fbsurf); + } + fb_pixels = fbsurf->pixels; + + demo_draw(); + + if(SDL_MUSTLOCK(fbsurf)) { + SDL_UnlockSurface(fbsurf); + } + SDL_Flip(fbsurf); + } + +break_evloop: + demo_cleanup(); + SDL_Quit(); + return 0; +} + +void demo_quit(void) +{ + quit = 1; +} + +static void handle_event(SDL_Event *ev) +{ + switch(ev->type) { + case SDL_QUIT: + quit = 1; + break; + + case SDL_KEYDOWN: + case SDL_KEYUP: + demo_keyboard(ev->key.keysym.sym, ev->key.state == SDL_PRESSED ? 1 : 0); + break; + + default: + break; + } +}