X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Fdos%2Fmain.c;h=4a3dc1a79e962c5cac42e1420a78e628be1f6c81;hb=03eaea2400647375400c3bc4d927c399e142a901;hp=ca57152fd8edf9fbc64609824b07b20c7cc99749;hpb=0cf749b80f7732e66fbb78815e3752985b845d17;p=eradicate diff --git a/src/dos/main.c b/src/dos/main.c index ca57152..4a3dc1a 100644 --- a/src/dos/main.c +++ b/src/dos/main.c @@ -8,15 +8,14 @@ #include "logger.h" #include "cdpmi.h" -static void draw(void); - static struct video_mode *vmode; - +static int quit; int main(int argc, char **argv) { + void *fb_buf; struct video_mode *vmodes; - int vmidx; + int vmidx, status = 0; init_logger("game.log"); @@ -38,42 +37,49 @@ int main(int argc, char **argv) fb_width = vmode->xsz; fb_height = vmode->ysz; - fb_size = (vmode->xsz * vmode->bpp / 8) * vmode->ysz; + fb_size = vmode->pitch * vmode->ysz; + + if(!(fb_buf = malloc(fb_size + vmode->pitch * 2))) { + fprintf(stderr, "failed to allocate framebuffer\n"); + status = -1; + goto break_evloop; + } + fb_pixels = (uint16_t*)((char*)fb_buf + vmode->pitch); + + if(init(argc, argv) == -1) { + status = -1; + goto break_evloop; + } reset_timer(); for(;;) { int key; - while((key = kb_getkey()) != -1) { - if(key == 27) goto break_evloop; + if(key_event) { + while((key = kb_getkey()) != -1) { + key_event(key, 1); + } + } else { + while((key = kb_getkey()) != -1) { + if(key == 27) goto break_evloop; + } } + if(quit) goto break_evloop; time_msec = get_msec(); draw(); } break_evloop: + free(fb_buf); + cleanup(); set_text_mode(); cleanup_video(); kb_shutdown(); - return 0; -} - -static void draw(void) -{ - int i, j; - uint16_t *pptr = vmem; - - for(i=0; i> 4) & 1) == ((j >> 4) & 1); - *pptr++ = chess ? 0xff00 : 0x00ff; - } - } + return status; } -void swap_buffers(void *pixels) +void game_quit(void) { - wait_vsync(); - memcpy(vmem, pixels, fb_size); + quit = 1; }