www.pudn.com > sn068s.zip > DOS.C
//#define NO_GUI /* DOS platform-specific code */ #include#include #include #include #include #include #include #include void __crt0_load_environment_file(char *_app_name){} char **__crt0_glob_function(char *_arg){ return 0; } #ifdef DEBUG int _crt0_startup_flags = _CRT0_FLAG_FILL_DEADBEEF; #endif #include #define GUI_DEFAULT 1 BEGIN_COLOR_DEPTH_LIST COLOR_DEPTH_8 COLOR_DEPTH_15 COLOR_DEPTH_16 END_COLOR_DEPTH_LIST #include "platform.h" #include "helper.h" #include "romload.h" #include "sound.h" #include "cpu.h" #include "guicore.h" char cfg_name[MAXPATH]; char home_dir[MAXPATH]; char dat_name[MAXPATH]; void LoadConfig_Old(void) { const char default_keymap[] = "2D 27 29 2B 5 4 17 13 11 1 41 42"; char keymapbuf[41]; SCREEN_MODE = get_config_int(NULL, "screenmode", 2); if (SCREEN_MODE > 8) SCREEN_MODE = 0; /* 1-10,15,20,30,60 */ FRAME_SKIP_MAX = get_config_int(NULL, "maxframeskip", 60); if (FRAME_SKIP_MAX > 60) FRAME_SKIP_MAX = 60; else if (FRAME_SKIP_MAX > 30 && FRAME_SKIP_MAX < 60) FRAME_SKIP_MAX = 30; else if (FRAME_SKIP_MAX > 20 && FRAME_SKIP_MAX < 30) FRAME_SKIP_MAX = 20; else if (FRAME_SKIP_MAX > 15 && FRAME_SKIP_MAX < 20) FRAME_SKIP_MAX = 15; else if (FRAME_SKIP_MAX > 10 && FRAME_SKIP_MAX < 15) FRAME_SKIP_MAX = 10; else if (FRAME_SKIP_MAX < 1) FRAME_SKIP_MAX = 1; /* 0-10,15,20,30,60 */ FRAME_SKIP_MIN = get_config_int(NULL, "minframeskip", 0); if (FRAME_SKIP_MIN > 60) FRAME_SKIP_MIN = 60; else if (FRAME_SKIP_MIN > 30 && FRAME_SKIP_MIN < 60) FRAME_SKIP_MIN = 30; else if (FRAME_SKIP_MIN > 20 && FRAME_SKIP_MIN < 30) FRAME_SKIP_MIN = 20; else if (FRAME_SKIP_MIN > 15 && FRAME_SKIP_MIN < 20) FRAME_SKIP_MIN = 15; else if (FRAME_SKIP_MIN > 10 && FRAME_SKIP_MIN < 15) FRAME_SKIP_MIN = 10; if (FRAME_SKIP_MIN > FRAME_SKIP_MAX) FRAME_SKIP_MIN = FRAME_SKIP_MAX; JOYSTICK_ENABLED = get_config_int(NULL, "joystick", 0); if (JOYSTICK_ENABLED > 2 || (JOYSTICK_ENABLED == 2 && !mouse_available)) JOYSTICK_ENABLED = 0; JOYSTICK_ENABLED2 = get_config_int(NULL, "joystick2", 0); if (JOYSTICK_ENABLED2 > 2 || (JOYSTICK_ENABLED2 == 2 && !mouse_available)) JOYSTICK_ENABLED2 = 0; SPC_ENABLED = get_config_int(NULL, "emulatespc", 1); memset(save_extension, 0, MAXEXT); strncpy(save_extension, get_config_string(NULL, "saveextension", "SRM"), MAXEXT - 1); memset(save_dir, 0, MAXPATH); strncpy(save_dir, get_config_string(NULL, "savedirectory", ""), MAXPATH - 1); sound_enabled = get_config_int(NULL, "outputsound", 2); if (sound_enabled > 2) sound_enabled = 0; memset(keymapbuf, 0, 41); strncpy(keymapbuf, get_config_string(NULL, "snes_pad_1_keys", default_keymap), 40); if ( sscanf(keymapbuf, "%X%X%X%X%X%X%X%X%X%X%X%X", &KEY_UP_1, &KEY_DOWN_1, &KEY_LEFT_1, &KEY_RIGHT_1, &KEY_A_1, &KEY_B_1, &KEY_X_1, &KEY_Y_1, &KEY_L_1, &KEY_R_1, &KEY_SELECT_1, &KEY_START_1) < 12) { sscanf(default_keymap, "%X%X%X%X%X%X%X%X%X%X%X%X", &KEY_UP_1, &KEY_DOWN_1, &KEY_LEFT_1, &KEY_RIGHT_1, &KEY_A_1, &KEY_B_1, &KEY_X_1, &KEY_Y_1, &KEY_L_1, &KEY_R_1, &KEY_SELECT_1, &KEY_START_1); } strncpy(keymapbuf, get_config_string(NULL, "snes_pad_2_keys", default_keymap), 40); if ( sscanf(keymapbuf, "%X%X%X%X%X%X%X%X%X%X%X%X", &KEY_UP_2, &KEY_DOWN_2, &KEY_LEFT_2, &KEY_RIGHT_2, &KEY_A_2, &KEY_B_2, &KEY_X_2, &KEY_Y_2, &KEY_L_2, &KEY_R_2, &KEY_SELECT_2, &KEY_START_2) < 12) { sscanf(default_keymap, "%X%X%X%X%X%X%X%X%X%X%X%X", &KEY_UP_2, &KEY_DOWN_2, &KEY_LEFT_2, &KEY_RIGHT_2, &KEY_A_2, &KEY_B_2, &KEY_X_2, &KEY_Y_2, &KEY_L_2, &KEY_R_2, &KEY_SELECT_2, &KEY_START_2); } } static float cfg_version; static int cfg_changed; /* Allegro internal var */ extern int _sound_hq; void LoadConfigCurrent(void) { char default_keymap[] = "2D 27 29 2B 5 4 17 13 11 1 41 42"; char keymapbuf[41]; SCREEN_MODE = get_config_int("display", "screenmode", 2); if (SCREEN_MODE > 8) SCREEN_MODE = 0; display_process = (DISPLAY_PROCESS) get_config_int("display", "process", SDP_NONE); if ((unsigned) display_process >= NUM_DISPLAY_PROCESSES) display_process = SDP_NONE; stretch_x = get_config_int("display", "stretch_x", 0); stretch_y = get_config_int("display", "stretch_y", 0); /* 1-10,15,20,30,60 */ FRAME_SKIP_MAX = get_config_int("display", "maxframeskip", 60); if (FRAME_SKIP_MAX > 60) FRAME_SKIP_MAX = 60; else if (FRAME_SKIP_MAX > 30 && FRAME_SKIP_MAX < 60) FRAME_SKIP_MAX = 30; else if (FRAME_SKIP_MAX > 20 && FRAME_SKIP_MAX < 30) FRAME_SKIP_MAX = 20; else if (FRAME_SKIP_MAX > 15 && FRAME_SKIP_MAX < 20) FRAME_SKIP_MAX = 15; else if (FRAME_SKIP_MAX > 10 && FRAME_SKIP_MAX < 15) FRAME_SKIP_MAX = 10; else if (FRAME_SKIP_MAX < 1) FRAME_SKIP_MAX = 1; /* 0-10,15,20,30,60 */ FRAME_SKIP_MIN = get_config_int("display", "minframeskip", 0); if (FRAME_SKIP_MIN > 60) FRAME_SKIP_MIN = 60; else if (FRAME_SKIP_MIN > 30 && FRAME_SKIP_MIN < 60) FRAME_SKIP_MIN = 30; else if (FRAME_SKIP_MIN > 20 && FRAME_SKIP_MIN < 30) FRAME_SKIP_MIN = 20; else if (FRAME_SKIP_MIN > 15 && FRAME_SKIP_MIN < 20) FRAME_SKIP_MIN = 15; else if (FRAME_SKIP_MIN > 10 && FRAME_SKIP_MIN < 15) FRAME_SKIP_MIN = 10; if (FRAME_SKIP_MIN > FRAME_SKIP_MAX) FRAME_SKIP_MIN = FRAME_SKIP_MAX; memset(save_extension, 0, MAXEXT); strncpy(save_extension, get_config_string("paths", "saveextension", "SRM"), MAXEXT - 1); memset(save_dir, 0, MAXPATH); strncpy(save_dir, get_config_string("paths", "savedirectory", ""), MAXPATH - 1); SPC_ENABLED = get_config_int("hardware", "emulatespc", 1); sound_enabled = get_config_int("hardware", "outputsound", 2); if (sound_enabled > 2) sound_enabled = 0; sound_bits = get_config_int("audio", "sound_bits", 16); if (sound_bits != 8) sound_bits = 16; _sound_hq = get_config_int("audio", "sound_hq", 1); if (_sound_hq < 0 || _sound_hq > 2) _sound_hq = 1; JOYSTICK_ENABLED = get_config_int("input", "joystick", 0); if (JOYSTICK_ENABLED > 2 || (JOYSTICK_ENABLED == 2 && !mouse_available)) JOYSTICK_ENABLED = 0; JOYSTICK_ENABLED2 = get_config_int("input", "joystick2", 0); if (JOYSTICK_ENABLED2 > 2 || (JOYSTICK_ENABLED2 == 2 && !mouse_available)) JOYSTICK_ENABLED2 = 0; memset(keymapbuf, 0, 41); strncpy(keymapbuf, get_config_string("input", "snes_pad_1_keys", default_keymap), 40); if ( sscanf(keymapbuf, "%X%X%X%X%X%X%X%X%X%X%X%X", &KEY_UP_1, &KEY_DOWN_1, &KEY_LEFT_1, &KEY_RIGHT_1, &KEY_A_1, &KEY_B_1, &KEY_X_1, &KEY_Y_1, &KEY_L_1, &KEY_R_1, &KEY_SELECT_1, &KEY_START_1) < 12) { sscanf(default_keymap, "%X%X%X%X%X%X%X%X%X%X%X%X", &KEY_UP_1, &KEY_DOWN_1, &KEY_LEFT_1, &KEY_RIGHT_1, &KEY_A_1, &KEY_B_1, &KEY_X_1, &KEY_Y_1, &KEY_L_1, &KEY_R_1, &KEY_SELECT_1, &KEY_START_1); } strncpy(keymapbuf, get_config_string("input", "snes_pad_2_keys", default_keymap), 40); if ( sscanf(keymapbuf, "%X%X%X%X%X%X%X%X%X%X%X%X", &KEY_UP_2, &KEY_DOWN_2, &KEY_LEFT_2, &KEY_RIGHT_2, &KEY_A_2, &KEY_B_2, &KEY_X_2, &KEY_Y_2, &KEY_L_2, &KEY_R_2, &KEY_SELECT_2, &KEY_START_2) < 12) { sscanf(default_keymap, "%X%X%X%X%X%X%X%X%X%X%X%X", &KEY_UP_2, &KEY_DOWN_2, &KEY_LEFT_2, &KEY_RIGHT_2, &KEY_A_2, &KEY_B_2, &KEY_X_2, &KEY_Y_2, &KEY_L_2, &KEY_R_2, &KEY_SELECT_2, &KEY_START_2); } } int LoadConfig(void) { cfg_version = get_config_float("base", "version", 0); if (((int) (cfg_version * 8192)) != ((int) (SNEESE_VERSION * 8192))) { char c_expected, c_pressed; srand(rawclock()); printf("Have you read and agreed to the license in the readme.txt file?\n"); while (c_expected = rand(), !isalnum(c_expected) || !isascii(c_expected) || isspace(c_expected)); c_expected = toupper(c_expected); printf("Press \'%c\' to agree, any other key to exit.\n", c_expected); printf("Usage of this program constitutes agreement with the license.\n"); remove_keyboard(); c_pressed = getch(); install_keyboard(); if (toupper(c_pressed) != c_expected) { cfg_version = 0; return 1; } //handle old version cfg files if (cfg_version == 0) { LoadConfig_Old(); display_process = SDP_NONE; stretch_x = 0; stretch_y = 0; } else { LoadConfigCurrent(); } cfg_version = SNEESE_VERSION; cfg_changed = (0 - 1); } else { LoadConfigCurrent(); } return 0; } void SaveConfig(void) { FILE *cfg = fopen(cfg_name, "wb"); if (cfg == NULL) return; fprintf(cfg,"# SNEeSe Configuration file\r\n"); fprintf(cfg,"\r\n"); fprintf(cfg,"# Do not edit [base] section, or all settings may be lost!\r\n"); fprintf(cfg,"\r\n"); fprintf(cfg, "[base]\r\n"); fprintf(cfg, "version=%s\r\n", SNEESE_VERSION_STR); fprintf(cfg, "\r\n"); fprintf(cfg, "# Important paths and file-related settings\r\n"); fprintf(cfg, "[paths]\r\n"); fprintf(cfg, "saveextension=%s\r\n", save_extension); fprintf(cfg, "savedirectory=%s\r\n", save_dir); fprintf(cfg, "\r\n"); fprintf(cfg, "# Display settings\r\n"); fprintf(cfg, "[display]\r\n"); fprintf(cfg, "# Available screen modes:\r\n"); fprintf(cfg, "# 0:320x200x256 VGA 1:320x200x256 VGA FIT 2:320x240x256 MODE-X\r\n"); fprintf(cfg, "# 3:256x239x256 VGA 4:320x200x16b VESA2 5:320x240x16b VESA2\r\n"); fprintf(cfg, "# 6:640x480x16b VESA2 7:640x480x16b VESA2 FIT 8:320x240x256 VESA2\r\n"); fprintf(cfg, "screenmode=%d\r\n", SCREEN_MODE); fprintf(cfg, "\r\n"); fprintf(cfg, "# Available screen processing methods:\r\n"); fprintf(cfg, "# 0:none\r\n"); fprintf(cfg, "process=%d\r\n", (int) display_process); fprintf(cfg, "\r\n"); fprintf(cfg, "# Stretch in horizontal (x) or vertical (y) directions:\r\n"); fprintf(cfg, "# 0:no stretch 1:stretch\r\n"); fprintf(cfg, "stretch_x=%d\r\n", stretch_x); fprintf(cfg, "stretch_y=%d\r\n", stretch_y); fprintf(cfg, "\r\n"); fprintf(cfg, "# These specify how many frames to skip.\r\n"); fprintf(cfg, "# maxframeskip sets the maximum number of frames that will be skipped before\r\n"); fprintf(cfg, "# a frame is drawn.\r\n"); fprintf(cfg, "# minframeskip sets the number of frames that will always be skipped before\r\n"); fprintf(cfg, "# a frame is drawn. a min skip of 0 tells SNEeSe to wait for at least one\r\n"); fprintf(cfg, "# timer tick (50/60Hz) to have passed before emulating a frame (to slow\r\n"); fprintf(cfg, "# down machines that are running too fast)\r\n"); fprintf(cfg, "# 'minframeskip' will never be above 'maxframeskip' - when loaded,\r\n"); fprintf(cfg, "# 'maxframeskip' has precedence over 'minframeskip'.\r\n"); fprintf(cfg, "# Setting 'minframeskip' and 'maxframeskip' to the same number effectively\r\n"); fprintf(cfg, "# disables all speed-throttling.\r\n"); fprintf(cfg, "minframeskip=%d\r\n", FRAME_SKIP_MIN); fprintf(cfg, "maxframeskip=%d\r\n", FRAME_SKIP_MAX); fprintf(cfg, "\r\n"); fprintf(cfg, "# Emulated hardware options\r\n"); fprintf(cfg, "[hardware]\r\n"); fprintf(cfg, "# The following option selects emulation of SPC (1) or APU skip (0).\r\n"); fprintf(cfg, "emulatespc=%d\r\n", SPC_ENABLED); fprintf(cfg, "# The following option selects whether to: (0) disable sound;\r\n"); fprintf(cfg, "# (1) generate mono sound; (2) generate stereo sound.\r\n"); fprintf(cfg, "# This option is ignored if SPC is disabled (emulatespc=0).\r\n"); fprintf(cfg, "outputsound=%d\r\n", sound_enabled); fprintf(cfg, "\r\n"); fprintf(cfg, "# Audio output options\r\n"); fprintf(cfg, "[audio]\r\n"); fprintf(cfg, "# The following option selects size of audio samples output.\r\n"); fprintf(cfg, "# Valid values: 8 or 16 (default).\r\n"); fprintf(cfg, "sound_bits=%d\r\n", sound_bits); fprintf(cfg, "# The following option selects Allegro mixing quality.\r\n"); fprintf(cfg, "# 0 = fast 8-bit, 1 (default) = 16-bit, 2 = 16-bit interpolated.\r\n"); fprintf(cfg, "sound_hq=%d\r\n", _sound_hq); fprintf(cfg, "\r\n"); fprintf(cfg, "# Input and controller options\r\n"); fprintf(cfg, "[input]\r\n"); fprintf(cfg, "# You can select joystick or keyboard (0-keyboard,1-joystick)\r\n"); fprintf(cfg, "# joystick2 is used to enable joystick for controller 2\r\n"); fprintf(cfg, "# enabling for both currently uses the same joystick for\r\n"); fprintf(cfg, "# both, not the desired effect!\r\n"); fprintf(cfg, "# Mouse can be selected (for those roms that use one!!) by using\r\n"); fprintf(cfg, "# value 2 e.g. joystick = 2.\r\n"); fprintf(cfg, "joystick=%d\r\n", JOYSTICK_ENABLED); fprintf(cfg, "joystick2=%d\r\n", JOYSTICK_ENABLED2); fprintf(cfg, "\r\n"); fprintf(cfg, "# Here you will find the keyboard definitions for controller 1\r\n"); fprintf(cfg, "# the numbers you see are scan codes, use the \"Define Keys\"\r\n"); fprintf(cfg, "# option in the GUI to alter the keys, it's far easier!\r\n"); fprintf(cfg, "\r\n"); fprintf(cfg, "# Up Down Left Right A B X Y L R Select Start\r\n"); fprintf(cfg,"snes_pad_1_keys=%X %X %X %X %X %X %X %X %X %X %X %X\r\n", KEY_UP_1, KEY_DOWN_1, KEY_LEFT_1, KEY_RIGHT_1, KEY_A_1, KEY_B_1, KEY_X_1, KEY_Y_1, KEY_L_1, KEY_R_1, KEY_SELECT_1, KEY_START_1); fprintf(cfg, "\r\n"); fprintf(cfg, "# Player 2's keys are found here, see above.\r\n"); fprintf(cfg, "snes_pad_2_keys=%X %X %X %X %X %X %X %X %X %X %X %X\r\n", KEY_UP_2, KEY_DOWN_2, KEY_LEFT_2, KEY_RIGHT_2, KEY_A_2, KEY_B_2, KEY_X_2, KEY_Y_2, KEY_L_2, KEY_R_2, KEY_SELECT_2, KEY_START_2); fclose(cfg); } void cmdhelp(void) { const char syntax[] = "Usage: SNEeSe [switches] [romname.ext] [switches]\n" "switches:\n" " -fl Force LoROM memory map\n" " -fh Force HiROM memory map\n" " -fi Force interleaved ROM (only supported for HiROM)\n" " -fn Force non-interleaved ROM\n" " -fvn Force NTSC video standard\n" " -fvp Force PAL video standard\n" " -h Copier header exists\n" " -n No copier header\n" " -m# Set screen mode\n" " -ds Disable sound\n" " -s Enable sound (stereo)\n" " -sm Enable sound (mono)\n" " -saveext RAM Set extension for save RAM files\n" " -savedir .\\saves Set save directory\n" " -fps Start with frames-per-second (FPS) counter enabled\n" " -gui Enable GUI\n" " -cli Disable GUI\n"; printf("%s", syntax); } /* Perform platform-specific initialization */ int platform_init(int argc, char **argv) { char f_drive[MAXDRIVE], f_dir[MAXDIR], f_file[MAXFILE], f_ext[MAXEXT]; /* Ensure stdout is not buffered */ setvbuf(stdout, NULL, _IONBF, 0); allegro_init(); if (cpu_family < 4) { printf("SNEeSe requires a 486 or better!\n"); return 1; } /* This helps SNEeSe find it's home directory, for .cfg/.dat file, * when started from a different directory * (ie, drag-and-drop via Windows Explorer) */ fnsplit(argv[0], f_drive, f_dir, f_file, f_ext); if (!strlen(f_drive) && !strlen(f_dir)) { if (getcwd(home_dir, MAXPATH - 1) == NULL) { printf("Failure getting current directory!\n"); printf("Report this immediately!\n"); return 1; } fnsplit(home_dir, f_drive, f_dir, f_file, f_ext); } else { fnmerge(home_dir, f_drive, f_dir, "", ""); chdir(home_dir); } fnmerge(cfg_name, f_drive, f_dir, "sneese", "cfg"); fnmerge(dat_name, f_drive, f_dir, "sneese", "dat"); set_config_file(cfg_name); /* Yup, config files exist */ mouse_available = install_mouse(); if (mouse_available == -1) mouse_available = 0; install_keyboard(); install_key_release_callback(); // joy_type = JOY_TYPE_6BUTTON; // initialise_joystick(); #ifndef NO_GUI #if GUI_DEFAULT GUI_ENABLED = 1; #else GUI_ENABLED = 0; #endif #endif return 0; } int parse_args(int argc, char **argv, char **names, int maxnames) { /* Start: command line parser */ char *tv; int tc; int numnames; numnames = 0; for (tc = 1; tc < argc; tc++) { int i; tv = argv[tc]; if ((*tv == '-') || (*tv == '/')) { switch (*(tv + 1)) { #ifndef NO_GUI case 'c': case 'C': if (!stricmp(tv + 1, "cli")) /* Disable enabled GUI */ { GUI_ENABLED = 0; } else { printf("Invalid switch: %s\n", tv); cmdhelp(); return 1; } break; #endif case 'd': case 'D': if (!stricmp(tv + 1, "ds")) { sound_enabled = 0; } else { printf("Invalid switch: %s\n", tv); cmdhelp(); return 1; } break; case 'm': case 'M': if (sscanf(tv + 2, "%u", &i) != 1) cmdhelp(); if (i > 8) cmdhelp(); SCREEN_MODE = i; cfg_changed = -1; break; case 'f': case 'F': switch (strlen(tv + 1)) { case 2: switch(*(tv + 2)) { case 'l': case 'L': /* Force LoROM */ ROM_memory_map = HiROM; break; case 'h': case 'H': /* Force HiROM */ ROM_memory_map = LoROM; break; case 'n': case 'N': /* Force non-interleaved */ ROM_interleaved = Off; break; case 'i': case 'I': /* Force interleaved */ ROM_interleaved = On; break; default: printf("Invalid switch: %s\n", tv); cmdhelp(); return 1; } break; case 3: switch(*(tv + 2)) { case 'v': case 'V': /* Force video standard */ switch(*(tv + 3)) { case 'n': case 'N': /* Force NTSC video standard */ ROM_video_standard = NTSC_video; break; case 'p': case 'P': /* Force PAL video standard */ ROM_video_standard = PAL_video; break; default: printf("Invalid switch: %s\n", tv); cmdhelp(); return 1; } break; case 'p': case 'P': /* FPS counter */ switch(*(tv + 3)) { case 's': case 'S': /* FPS counter */ FPS_ENABLED = (0 - 1); break; default: printf("Invalid switch: %s\n", tv); cmdhelp(); return 1; } break; default: printf("Invalid switch: %s\n", tv); cmdhelp(); return 1; } break; default: printf("Invalid switch: %s\n", tv); cmdhelp(); return 1; } break; case 'n': case 'N': /* Force no header */ if (strlen(tv + 1) != 1) { printf("Invalid switch: %s\n", tv); cmdhelp(); return 1; } ROM_has_header = Off; break; case 'h': case 'H': /* Force header */ if (strlen(tv + 1) != 1) { printf("Invalid switch: %s\n", tv); cmdhelp(); return 1; } ROM_has_header = On; break; case '?': if (strlen(tv + 1) != 1) { printf("Invalid switch: %s\n", tv); } cmdhelp(); return 1; #ifndef NO_GUI case 'g': case 'G': if (!stricmp(tv + 1, "gui")) /* Enable disabled GUI */ { GUI_ENABLED = (0 - 1); } else { printf("Invalid switch: %s\n", tv); cmdhelp(); return 1; } break; #endif case 's': case 'S': if (!stricmp(tv + 1, "savedir")) { if (tc + 1 >= argc) { printf("Invalid switch: %s\n", tv); cmdhelp(); return 1; } if (strlen(argv[tc + 1]) > MAXPATH - 1) { printf("Path too long: %s\n", argv[tc + 1]); cmdhelp(); return 1; } memset(save_dir, 0, MAXPATH); strcpy(save_dir, argv[++tc]); cfg_changed = -1; } else if (!stricmp(tv + 1, "saveext")) { if (tc + 1 >= argc) { printf("Invalid switch: %s\n", tv); cmdhelp(); return 1; } if (strlen(argv[tc + 1]) > MAXEXT - 1) { printf("Extension too long: %s\n", argv[tc + 1]); cmdhelp(); return 1; } memset(save_extension, 0, MAXEXT); strcpy(save_extension, argv[++tc]); cfg_changed = -1; } else if (!stricmp(tv + 1, "sm")) { sound_enabled = 1; } else if (!stricmp(tv + 1, "s")) { sound_enabled = 2; } else { printf("Invalid switch: %s\n", tv); cmdhelp(); return 1; } break; default: printf("Invalid switch: %s\n", tv); cmdhelp(); return 1; } } else { if (numnames < maxnames) names[numnames++] = tv; else { cmdhelp(); return 1; } } } #ifndef NO_GUI if (!GUI_ENABLED) { if (numnames == 0) { if (cfg_changed == 0) cmdhelp(); if (cfg_changed != 0) { printf("Configuration updated\n"); SaveConfig(); } return 1; } } #endif if (numnames < maxnames) names[numnames] = NULL; return 0; /* End: command line parser */ } unsigned char *platform_get_gfx_buffer( int depth, int width, int height, int hslack, int vslack) { int needed_w, needed_h; needed_w = width + hslack; needed_h = height + vslack * 2 + (hslack ? 1 : 0); Internal_Bitmap = create_bitmap_ex(depth, needed_w, needed_h); if (!Internal_Bitmap) { printf("Failure creating internal render bitmap!\n"); return 0; } Internal_Bitmap_blitsrc = create_sub_bitmap(Internal_Bitmap, hslack, vslack, width, height); if (!Internal_Bitmap_blitsrc) { printf("Failure creating internal render bitmap!\n"); return 0; } return (unsigned char *) Internal_Bitmap_blitsrc->line[0]; }