void Screen_Initialise(int *argc, char *argv[]) { int i; int j; int help_only = FALSE; for (i = j = 1; i < *argc; i++) { if (strcmp(argv[i], "-screenshots") == 0) { Screen_SetScreenshotFilenamePattern(argv[++i]); } if (strcmp(argv[i], "-showspeed") == 0) { Screen_show_atari_speed = TRUE; } else { if (strcmp(argv[i], "-help") == 0) { help_only = TRUE; Log_print("\t-screenshots <p> Set filename pattern for screenshots"); Log_print("\t-showspeed Show percentage of actual speed"); } argv[j++] = argv[i]; } } *argc = j; /* don't bother mallocing Screen_atari with just "-help" */ if (help_only) return; if (Screen_atari == NULL) { /* platform-specific code can initialize it in theory */ Screen_atari = (ULONG *) Util_malloc(Screen_HEIGHT * Screen_WIDTH); memset(Screen_atari, 0, (Screen_HEIGHT * Screen_WIDTH)); #ifdef DIRTYRECT Screen_dirty = (UBYTE *) Util_malloc(Screen_HEIGHT * Screen_WIDTH / 8); memset(Screen_dirty, 0, (Screen_HEIGHT * Screen_WIDTH)); Screen_EntireDirty(); #endif #ifdef BITPL_SCR Screen_atari_b = (ULONG *) Util_malloc(Screen_HEIGHT * Screen_WIDTH); memset(Screen_atari_b, 0, (Screen_HEIGHT * Screen_WIDTH)); Screen_atari1 = Screen_atari; Screen_atari2 = Screen_atari_b; #endif } }
/* * do some basic keyboard emulation using the joystick controller */ static int SDL_controller_kb1(void) { static int prev_up = FALSE, prev_down = FALSE, prev_a = FALSE, prev_r = FALSE, prev_left = FALSE, prev_right = FALSE, prev_b = FALSE, prev_l = FALSE; static int repdelay = REPEAT_DELAY; struct js_state *state = &sdl_js_state[0]; if (! joystick0) return(AKEY_NONE); /* no controller present */ update_SDL_joysticks(); repdelay--; if (repdelay < 0) repdelay = REPEAT_DELAY; if (!UI_is_active && (state->trig & (1 << OSK_BUTTON_UI))) { return(AKEY_UI); } if (!UI_is_active && (state->trig & (1 << OSK_BUTTON_KEYB))) { return(AKEY_KEYB); } /* provide keyboard emulation to enter file name */ if (UI_is_active && !UI_BASIC_in_kbui && (state->trig & (1 << OSK_BUTTON_KEYB))) { int keycode; update_SDL_joysticks(); UI_BASIC_in_kbui = TRUE; memcpy(atari_screen_backup, Screen_atari, Screen_HEIGHT * Screen_WIDTH); keycode = UI_BASIC_OnScreenKeyboard(NULL, -1); memcpy(Screen_atari, atari_screen_backup, Screen_HEIGHT * Screen_WIDTH); Screen_EntireDirty(); PLATFORM_DisplayScreen(); UI_BASIC_in_kbui = FALSE; return keycode; #if 0 /* @@@ 26-Mar-2013, chris: check this */ if (inject_key != AKEY_NONE) { keycode = inject_key; inject_key = AKEY_NONE; return(keycode); } else { return(AKEY_NONE); } #endif } if (UI_is_active || UI_BASIC_in_kbui) { if (!(state->port & 1)) { prev_down = FALSE; if (! prev_up) { repdelay = REPEAT_INI_DELAY; prev_up = 1; return(AKEY_UP); } else { if (! repdelay) { return(AKEY_UP); } } } else { prev_up = FALSE; } if (!(state->port & 2)) { prev_up = FALSE; if (! prev_down) { repdelay = REPEAT_INI_DELAY; prev_down = TRUE; return(AKEY_DOWN); } else { if (! repdelay) { return(AKEY_DOWN); } } } else { prev_down = FALSE; } if (!(state->port & 4)) { prev_right = FALSE; if (! prev_left) { repdelay = REPEAT_INI_DELAY; prev_left = TRUE; return(AKEY_LEFT); } else { if (! repdelay) { return(AKEY_LEFT); } } } else { prev_left = FALSE; } if (!(state->port & 8)) { prev_left = FALSE; if (! prev_right) { repdelay = REPEAT_INI_DELAY; prev_right = TRUE; return(AKEY_RIGHT); } else { if (! repdelay) { return(AKEY_RIGHT); } } } else { prev_right = FALSE; } if ((state->trig & (1 << OSK_BUTTON_TRIGGER))) { if (! prev_a) { prev_a = TRUE; return(AKEY_RETURN); } } else { prev_a = FALSE; } if ((state->trig & (1 << OSK_BUTTON_LEAVE))) { if (! prev_b) { prev_b = TRUE; b_ui_leave = TRUE; /* B must be released again */ return(AKEY_ESCAPE); } } else { prev_b = FALSE; } if ((state->trig & (1 << OSK_BUTTON_UI))) { if (! prev_l && UI_BASIC_in_kbui) { prev_l = TRUE; return(AKEY_ESCAPE); } } else { prev_l = FALSE; } if ((state->trig & (1 << OSK_BUTTON_KEYB))) { if (! prev_r) { prev_r = TRUE; return(AKEY_ESCAPE); } } else { prev_r = FALSE; } } return(AKEY_NONE); }