From 8e9adf91de14d40444099b581737640f7b696dd3 Mon Sep 17 00:00:00 2001 From: TomW Date: Mon, 2 Nov 2015 18:05:23 +0000 Subject: [PATCH] Added command line option to start in fullscreen mode. --- src/allegro-main.c | 4 +-- src/ibm.h | 1 + src/pc.c | 18 +++++++++- src/win.c | 90 ++++++++++++++++++++++++++++++++++++++++++++-- 4 files changed, 108 insertions(+), 5 deletions(-) diff --git a/src/allegro-main.c b/src/allegro-main.c index 09316e7..cb2d526 100644 --- a/src/allegro-main.c +++ b/src/allegro-main.c @@ -48,7 +48,7 @@ uint64_t timer_read() return 0; } -int main() +int main(int argc, char *argv[]) { int frames = 0; int c, d; @@ -59,7 +59,7 @@ int main() install_int_ex(onesec, BPS_TO_TIMER(1)); midi_init(); - initpc(); + initpc(argc, argv); d = romset; for (c = 0; c < ROM_MAX; c++) diff --git a/src/ibm.h b/src/ibm.h index d1614b6..66f0703 100644 --- a/src/ibm.h +++ b/src/ibm.h @@ -478,3 +478,4 @@ void onesec(); void resetpc_cad(); +extern int start_in_fullscreen; diff --git a/src/pc.c b/src/pc.c index 0fc26a4..ecf829e 100644 --- a/src/pc.c +++ b/src/pc.c @@ -36,6 +36,7 @@ #include "vid_voodoo.h" #include "video.h" +int start_in_fullscreen = 0; int frame = 0; int cdrom_enabled; @@ -189,9 +190,10 @@ void pc_reset() // video_init(); } -void initpc() +void initpc(int argc, char *argv[]) { char *p; + int c; // allegro_init(); get_executable_name(pcempath,511); pclog("executable_name = %s\n", pcempath); @@ -199,6 +201,20 @@ void initpc() *p=0; pclog("path = %s\n", pcempath); + for (c = 1; c < argc; c++) + { + if (!strcasecmp(argv[c], "--help")) + { + printf("PCem command line options :\n\n"); + printf("-fullscreen - start in fullscreen mode\n"); + exit(-1); + } + else if (!strcasecmp(argv[c], "--fullscreen")) + { + start_in_fullscreen = 1; + } + } + keyboard_init(); mouse_init(); joystick_init(); diff --git a/src/win.c b/src/win.c index 5770a58..a3f8836 100644 --- a/src/win.c +++ b/src/win.c @@ -391,6 +391,77 @@ void get_registry_key_map() pclog("Done preparing!\n"); } +static char **argv; +static int argc; +static char *argbuf; + +static void process_command_line() +{ + char *cmdline; + int argc_max; + int i, q; + + cmdline = GetCommandLine(); + i = strlen(cmdline) + 1; + argbuf = malloc(i); + memcpy(argbuf, cmdline, i); + + argc = 0; + argc_max = 64; + argv = malloc(sizeof(char *) * argc_max); + if (!argv) + { + free(argbuf); + return; + } + + i = 0; + + /* parse commandline into argc/argv format */ + while (argbuf[i]) + { + while (argbuf[i] == ' ') + i++; + + if (argbuf[i]) + { + if ((argbuf[i] == '\'') || (argbuf[i] == '"')) + { + q = argbuf[i++]; + if (!argbuf[i]) + break; + } + else + q = 0; + + argv[argc++] = &argbuf[i]; + + if (argc >= argc_max) + { + argc_max += 64; + argv = realloc(argv, sizeof(char *) * argc_max); + if (!argv) + { + free(argbuf); + return; + } + } + + while ((argbuf[i]) && ((q) ? (argbuf[i] != q) : (argbuf[i] != ' '))) + i++; + + if (argbuf[i]) + { + argbuf[i] = 0; + i++; + } + pclog("Arg %i - %s\n",argc-1,argv[argc-1]); + } + } + + argv[argc] = NULL; +} + int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, @@ -403,6 +474,8 @@ int WINAPI WinMain (HINSTANCE hThisInstance, int c, d; LARGE_INTEGER qpc_freq; + process_command_line(); + hinstance=hThisInstance; /* The Window structure */ wincl.hInstance = hThisInstance; @@ -470,7 +543,7 @@ int WINAPI WinMain (HINSTANCE hThisInstance, ghwnd=hwnd; - initpc(); + initpc(argc, argv); vid_apis[0][vid_api].init(ghwnd); @@ -568,7 +641,20 @@ int WINAPI WinMain (HINSTANCE hThisInstance, // setrefresh(100); // ShowCursor(TRUE); - + + if (start_in_fullscreen) + { + startblit(); + mouse_close(); + vid_apis[0][vid_api].close(); + video_fullscreen = 1; + vid_apis[1][vid_api].init(ghwnd); + mouse_init(); + leave_fullscreen_flag = 0; + endblit(); + device_force_redraw(); + } + /* Run the message loop. It will run until GetMessage() returns 0 */ while (!quited) {