/** * * rct2: 0x006E3B43 */ void title_handle_keyboard_input() { rct_window *w; int key; if (gOpenRCT2Headless) { return; } if (!gConsoleOpen) { // Handle modifier keys and key scrolling gInputPlaceObjectModifier = PLACE_OBJECT_MODIFIER_NONE; if (RCT2_GLOBAL(0x009E2B64, uint32) != 1) { if (gKeysState[SDL_SCANCODE_LSHIFT] || gKeysState[SDL_SCANCODE_RSHIFT]) gInputPlaceObjectModifier |= PLACE_OBJECT_MODIFIER_SHIFT_Z; if (gKeysState[SDL_SCANCODE_LCTRL] || gKeysState[SDL_SCANCODE_RCTRL]) gInputPlaceObjectModifier |= PLACE_OBJECT_MODIFIER_COPY_Z; if (gKeysState[SDL_SCANCODE_LALT] || gKeysState[SDL_SCANCODE_RALT]) gInputPlaceObjectModifier |= 4; #ifdef __MACOSX__ if (gKeysState[SDL_SCANCODE_LGUI] || gKeysState[SDL_SCANCODE_RGUI]) { gInputPlaceObjectModifier |= 8; } #endif } } while ((key = get_next_key()) != 0) { if (key == 255) continue; // Reserve backtick for console if (key == SDL_SCANCODE_GRAVE) { if (gConfigGeneral.debugging_tools || gConsoleOpen) { window_cancel_textbox(); console_toggle(); } continue; } else if (gConsoleOpen) { console_input(key); continue; } key |= gInputPlaceObjectModifier << 8; w = window_find_by_class(WC_CHANGE_KEYBOARD_SHORTCUT); if (w != NULL) { keyboard_shortcut_set(key); } else { w = window_find_by_class(WC_TEXTINPUT); if (w != NULL) { window_text_input_key(w, key); } if (key == gShortcutKeys[SHORTCUT_SCREENSHOT]) { keyboard_shortcut_handle_command(SHORTCUT_SCREENSHOT); } } } }
datum gdbm_nextkey (GDBM_FILE dbf, datum key) { datum return_val; /* The return value. */ int elem_loc; /* The location in the bucket. */ char *find_data; /* Data pointer returned by _gdbm_findkey. */ int hash_val; /* Returned by _gdbm_findkey. */ /* Initialize the gdbm_errno variable. */ gdbm_errno = GDBM_NO_ERROR; /* Set the default return value for no next entry. */ return_val.dptr = NULL; /* Do we have a valid key? */ if (key.dptr == NULL) return return_val; /* Find the key. */ elem_loc = _gdbm_findkey (dbf, key, &find_data, &hash_val); if (elem_loc == -1) return return_val; /* Find the next key. */ get_next_key (dbf, elem_loc, &return_val); return return_val; }
int KeyGenerator::get_next_key(uint64_t& prefix, bool is_read) { int err = 0; err = get_next_key(prefix, is_read ? GEN_RANDOM : GEN_SEQ); if (0 != err && OB_NEED_RETRY != err) { TBSYS_LOG(WARN, "failed to get prefix, err=%d", err); } return err; }
datum gdbm_firstkey (GDBM_FILE dbf) { datum return_val; /* To return the first key. */ /* Set the default return value for not finding a first entry. */ return_val.dptr = NULL; /* Initialize the gdbm_errno variable. */ gdbm_errno = GDBM_NO_ERROR; /* Get the first bucket. */ _gdbm_get_bucket (dbf, 0); /* Look for first entry. */ get_next_key (dbf, -1, &return_val); return return_val; }
/* increase the key by one */ int get_next_key(int pos) { for (int i = 0; i < base; ++i) { if (key[pos] == charset[i]) { if ((i + 1) < base) { key[pos] = charset[i+1]; return 0; } else { key[pos] = charset[0]; if ((pos + 1) < keysize_max) return get_next_key(pos + 1); else return END_OF_KEYRANGE; } } } key[pos] = charset[0]; return 0; }
static int check_format(char *string) { char *str; if(string[0] != '+') { printf("invalid format string use '+%%N'\n"); return -1; } if(NULL != (str = get_next_key(string))) { switch(str[0]) { case 'N': { struct timeval tv; time64_t ns; ktime_get_timeval(&tv); ns = timeval_to_ns(&tv); printf("%lld\n", ns % MAX_NANOSECONDS); break; } default: break; } } return 0; }
void input_handle_keyboard(bool isTitle) { if (gOpenRCT2Headless) { return; } if (!gConsoleOpen) { if (!isTitle) { // Handle mouse scrolling if (input_get_state() == INPUT_STATE_NORMAL && gConfigGeneral.edge_scrolling) { if (!(gInputPlaceObjectModifier & (PLACE_OBJECT_MODIFIER_SHIFT_Z | PLACE_OBJECT_MODIFIER_COPY_Z))) { game_handle_edge_scroll(); } } } // Handle modifier keys and key scrolling gInputPlaceObjectModifier = PLACE_OBJECT_MODIFIER_NONE; const uint8 * keysState = context_get_keys_state(); if (keysState[SDL_SCANCODE_LSHIFT] || keysState[SDL_SCANCODE_RSHIFT]) { gInputPlaceObjectModifier |= PLACE_OBJECT_MODIFIER_SHIFT_Z; } if (keysState[SDL_SCANCODE_LCTRL] || keysState[SDL_SCANCODE_RCTRL]) { gInputPlaceObjectModifier |= PLACE_OBJECT_MODIFIER_COPY_Z; } if (keysState[SDL_SCANCODE_LALT] || keysState[SDL_SCANCODE_RALT]) { gInputPlaceObjectModifier |= 4; } #ifdef __MACOSX__ if (keysState[SDL_SCANCODE_LGUI] || keysState[SDL_SCANCODE_RGUI]) { gInputPlaceObjectModifier |= 8; } #endif if (!isTitle) { game_handle_key_scroll(); } } if (gConfigGeneral.use_virtual_floor) { if (gInputPlaceObjectModifier & (PLACE_OBJECT_MODIFIER_COPY_Z | PLACE_OBJECT_MODIFIER_SHIFT_Z)) virtual_floor_enable(); else virtual_floor_disable(); } // Handle key input sint32 key; while (!gOpenRCT2Headless && (key = get_next_key()) != 0) { if (key == 255) continue; // Reserve backtick for console if (key == SDL_SCANCODE_GRAVE) { if ((gConfigGeneral.debugging_tools && !context_is_input_active()) || gConsoleOpen) { window_cancel_textbox(); console_toggle(); } continue; } else if (gConsoleOpen) { input_handle_console(key); continue; } else if (!isTitle && gChatOpen) { input_handle_chat(key); continue; } key |= gInputPlaceObjectModifier << 8; rct_window * w = window_find_by_class(WC_TEXTINPUT); if (w != nullptr) { char keychar = input_scancode_to_rct_keycode(key & 0xFF); window_text_input_key(w, keychar); } else if (!gUsingWidgetTextBox) { w = window_find_by_class(WC_CHANGE_KEYBOARD_SHORTCUT); if (w != nullptr) { keyboard_shortcuts_set(key); window_close_by_class(WC_CHANGE_KEYBOARD_SHORTCUT); window_invalidate_by_class(WC_KEYBOARD_SHORTCUT_LIST); } else { keyboard_shortcut_handle(key); } } } }
/** * * rct2: 0x006E3B43 */ void game_handle_keyboard_input() { rct_window *w; sint32 key; if (!gConsoleOpen) { // Handle mouse scrolling if (_inputState == INPUT_STATE_NORMAL && gConfigGeneral.edge_scrolling) { if (!(gInputPlaceObjectModifier & (PLACE_OBJECT_MODIFIER_SHIFT_Z | PLACE_OBJECT_MODIFIER_COPY_Z))) { game_handle_edge_scroll(); } } // Handle modifier keys and key scrolling gInputPlaceObjectModifier = PLACE_OBJECT_MODIFIER_NONE; if (gKeysState[SDL_SCANCODE_LSHIFT] || gKeysState[SDL_SCANCODE_RSHIFT]) { gInputPlaceObjectModifier |= PLACE_OBJECT_MODIFIER_SHIFT_Z; } if (gKeysState[SDL_SCANCODE_LCTRL] || gKeysState[SDL_SCANCODE_RCTRL]) { gInputPlaceObjectModifier |= PLACE_OBJECT_MODIFIER_COPY_Z; } if (gKeysState[SDL_SCANCODE_LALT] || gKeysState[SDL_SCANCODE_RALT]) { gInputPlaceObjectModifier |= 4; } #ifdef __MACOSX__ if (gKeysState[SDL_SCANCODE_LGUI] || gKeysState[SDL_SCANCODE_RGUI]) { gInputPlaceObjectModifier |= 8; } #endif game_handle_key_scroll(); } // Handle key input while (!gOpenRCT2Headless && (key = get_next_key()) != 0) { if (key == 255) continue; // Reserve backtick for console if (key == SDL_SCANCODE_GRAVE) { if ((gConfigGeneral.debugging_tools && !platform_is_input_active()) || gConsoleOpen) { window_cancel_textbox(); console_toggle(); } continue; } else if (gConsoleOpen) { console_input(key); continue; } else if (gChatOpen) { chat_input(key); continue; } key |= gInputPlaceObjectModifier << 8; w = window_find_by_class(WC_CHANGE_KEYBOARD_SHORTCUT); if (w != NULL) { keyboard_shortcut_set(key); } else { w = window_find_by_class(WC_TEXTINPUT); if (w != NULL) { window_text_input_key(w, key); } else if (!gUsingWidgetTextBox) { keyboard_shortcut_handle(key); } } } }
/** * * rct2: 0x006E3B43 */ void game_handle_keyboard_input() { rct_window *w; int key; // Handle mouse scrolling if (RCT2_GLOBAL(RCT2_ADDRESS_ON_TUTORIAL, uint8) == 0) if (RCT2_GLOBAL(RCT2_ADDRESS_CONFIG_EDGE_SCROLLING, uint8) != 0) if (RCT2_GLOBAL(RCT2_ADDRESS_INPUT_STATE, uint8) == 1) if (!(RCT2_GLOBAL(RCT2_ADDRESS_PLACE_OBJECT_MODIFIER, uint8) & 3)) game_handle_edge_scroll(); // Handle modifier keys and key scrolling RCT2_GLOBAL(RCT2_ADDRESS_PLACE_OBJECT_MODIFIER, uint8) = 0; if (RCT2_GLOBAL(0x009E2B64, uint32) != 1) { if (gKeysState[SDL_SCANCODE_LSHIFT] || gKeysState[SDL_SCANCODE_RSHIFT]) RCT2_GLOBAL(RCT2_ADDRESS_PLACE_OBJECT_MODIFIER, uint8) |= 1; if (gKeysState[SDL_SCANCODE_LCTRL] || gKeysState[SDL_SCANCODE_RCTRL]) RCT2_GLOBAL(RCT2_ADDRESS_PLACE_OBJECT_MODIFIER, uint8) |= 2; if (RCT2_GLOBAL(RCT2_ADDRESS_ON_TUTORIAL, uint8) == 0) game_handle_key_scroll(); } // Handle key input while ((key = get_next_key()) != 0) { if (key == 255) continue; key |= RCT2_GLOBAL(RCT2_ADDRESS_PLACE_OBJECT_MODIFIER, uint8) << 8; w = window_find_by_id(WC_CHANGE_KEYBOARD_SHORTCUT, 0); if (w != NULL) set_shortcut(key); else if (RCT2_GLOBAL(RCT2_ADDRESS_ON_TUTORIAL, uint8) == 1) tutorial_stop(); else handle_shortcut(key); } if (RCT2_GLOBAL(RCT2_ADDRESS_ON_TUTORIAL, uint8) == 0) return; // Tutorial and the modifier key if (RCT2_GLOBAL(RCT2_ADDRESS_ON_TUTORIAL, uint8) == 1) { int eax, ebx, ecx, edx, esi, edi, ebp; RCT2_CALLFUNC_X(0x0066EEB4, &eax, &ebx, &ecx, &edx, &esi, &edi, &ebp); eax &= 0xFF; RCT2_GLOBAL(RCT2_ADDRESS_PLACE_OBJECT_MODIFIER, uint8) = eax; if (RCT2_GLOBAL(RCT2_ADDRESS_PLACE_OBJECT_MODIFIER, uint8) & 4) { window_tooltip_close(); if ((w = window_get_main()) != NULL) { RCT2_CALLPROC_X(0x006EA2AA, 0, 0, 0, 0, (int)w, RCT2_GLOBAL(0x009DEA72, uint16), 0); RCT2_GLOBAL(0x009DEA72, uint16)++; } } } else { if (!(RCT2_GLOBAL(RCT2_ADDRESS_PLACE_OBJECT_MODIFIER, uint8) & 4)) { window_tooltip_close(); if ((w = window_get_main()) != NULL) { RCT2_CALLPROC_X(0x006EA2AA, 0, 0, 0, 0, (int)w, RCT2_GLOBAL(0x009DEA72, uint16), 0); RCT2_GLOBAL(0x009DEA72, uint16)++; } } // Write tutorial input RCT2_CALLPROC_X(0x0066EEE1, RCT2_GLOBAL(RCT2_ADDRESS_PLACE_OBJECT_MODIFIER, uint8), 0, 0, 0, 0, 0, 0); } }
int NavHelp::get_previous_key( const char *help_key, navh_eHelpFile file_type, const char *file_name, bool strict, char *prev_key) { FILE *file; char line[200]; char key[80]; char key_part[4][40]; char include_file[80]; char subject[80]; char subject_part[4][40]; int key_nr; int subject_nr; int hit = 0; int sts; int i; char *s; char prev[80] = ""; if ( help_key) { cdh_ToLower( key, help_key); } // Open file file = navhelp_open_file( this, file_type, file_name); if ( !file) return NAV__NOFILE; key_nr = dcli_parse( key, " ", "", (char *)key_part, sizeof( key_part) / sizeof( key_part[0]), sizeof( key_part[0]), 0); sts = dcli_read_line( line, sizeof( line), file); while ( ODD(sts)) { if ( cdh_NoCaseStrncmp( line, "<include>", 9) == 0) { help_remove_spaces( &line[9], include_file); // Replace symbol for language if ( strncmp( include_file, "$pwr_lang/", 10) == 0) { char lng_include_file[200]; sprintf( lng_include_file, "$pwr_exe/%s/%s", Lng::get_language_str(), &include_file[10]); strcpy( include_file, lng_include_file); } if ( !noprop) { sts = get_next_key( help_key, navh_eHelpFile_Other, include_file, strict, prev_key); if ( ODD(sts)) { fclose( file); return sts; } } hit = 0; } if ( cdh_NoCaseStrncmp( line, "<topic>", 7) == 0) { if ( (s = strstr( line, "<style>")) || (s = strstr( line, "<STYLE>"))) { *s = 0; } help_remove_spaces( &line[7], subject); cdh_ToLower( subject, subject); subject_nr = dcli_parse( subject, " ", "", (char *)subject_part, sizeof( subject_part) / sizeof( subject_part[0]), sizeof( subject_part[0]), 0); if ( key_nr == subject_nr ) { for ( i = 0; i < key_nr; i++) { if ( (!strict && strncmp( subject_part[i], key_part[i], strlen(key_part[i])) == 0) || (strict && strcmp( subject_part[i], key_part[i]) == 0)) { if ( i == key_nr - 1) { hit = 1; strcpy( prev_key, prev); } } else break; } } if ( hit) break; strcpy( prev, subject); } sts = dcli_read_line( line, sizeof( line), file); } fclose( file); if ( !hit || strcmp( prev, "") == 0) return NAV__TOPICNOTFOUND; return NAV__SUCCESS; }
int main(int argc, char *argv[]) { int i; int ret; // CONTAINER *tmp; int resume = 0; struct sockaddr_in sin; int16_t port; FILE *file; char *line; char *ip; srandom(time(NULL)); ret = log4c_init(); if (ret != 0) { printf("log4c_init failed[%d]\n", ret); return ret; } mycat = log4c_category_get("six13log.log.app"); if (!mycat) { printf("log4c_category_get(\"six13log.log.app.application1\"); failed\n"); return (0); } obj_count_loger = log4c_category_get("count_obj_cate"); if (!obj_count_loger) { printf("log4c_category_get(\"six13log.log.app.application2\"); failed\n"); return (0); } for (i = 1; i < argc; ++i) { if (strcmp(argv[i], "-d") == 0) { change_to_deamon(); --argc; break; } } if (argc > 1) resume = 1; ret = load_all_config(); if (ret != 0) { log4c_category_log(mycat, LOG4C_PRIORITY_ERROR, "load all config fail[%d]\n", ret); return (-1); } ret = init_gm_system(); if (ret != 0) { log4c_category_log(mycat, LOG4C_PRIORITY_ERROR, "init gm system fail[%d]\n", ret); return (-1); } sc_interface = load_game_script(); if (!sc_interface) { log4c_category_log(mycat, LOG4C_PRIORITY_ERROR, "load script fail[%d]\n"); return (-1); } log4c_category_log(mycat, LOG4C_PRIORITY_INFO, "game_srv run"); role_rbdata_init_head(); file = fopen("../server_info.ini", "r"); if (!file) { log4c_category_log(mycat, LOG4C_PRIORITY_ERROR, "open server_info.ini failed[%d]", errno); return (-1); } line = get_first_key(file, "game_srv_key"); key = strtoul(get_value(line), NULL, 0); if (key == 0 || key == ULONG_MAX) { log4c_category_log(mycat, LOG4C_PRIORITY_ERROR, "config file wrong, no game_srv_key"); return (-1); } if (alloc_shared_mem(resume) != 0) { log4c_category_log(mycat, LOG4C_PRIORITY_ERROR, "alloc_shared_mem[%d] failed", resume); return (-1); } ret = init_all_objs(resume); if (ret != 0) { log4c_category_log(mycat, LOG4C_PRIORITY_ERROR, "init_all_objs[%d] failed[%d]", resume, ret); return (-1); } ret = create_all_static_scene(); if (ret != 0) { log4c_category_log(mycat, LOG4C_PRIORITY_ERROR, "creeate_all_static_scene[%d] failed[%d]", resume, ret); return (-1); } // test_fight(); // return (0); ret = game_event_init(); if (ret != 0) { log4c_category_log(mycat, LOG4C_PRIORITY_ERROR, "game_event_init failed[%d]", ret); return (-1); } line = get_first_key(file, "conn_srv_ip"); for (i = 0; i < MAX_CONN_SRV && line != NULL; ++i) { memset(&sin, 0, sizeof(sin)); sin.sin_family = AF_INET; conn_server[i].cb_recv = gamesrv_cb_conn_recv; ip = get_value(line); if (!ip) break; line = get_next_key(file, "conn_srv_port"); if (!line) break; port = atoi(get_value(line)); if (port <= 0) break; line = get_next_key(file, "conn_srv_ip"); sin.sin_port = htons(port); ret = evutil_inet_pton(AF_INET, ip, &sin.sin_addr); if (ret != 1) { log4c_category_log(mycat, LOG4C_PRIORITY_ERROR, "evutil_inet_pton failed[%d], ip[%s] port[%d]", ret, ip, port); return (-1); } ret = game_add_connect_event((struct sockaddr *)&sin, sizeof(sin), &conn_server[i]); if (ret < 0) { log4c_category_log(mycat, LOG4C_PRIORITY_ERROR, "game_add_connect_event to conn server failed[%d], ip[%s] port[%d]", ret, ip, port); return (-1); } conn_server[i].fd = ret; } if (i == 0) { log4c_category_log(mycat, LOG4C_PRIORITY_ERROR, "config file wrong, no conn_srv"); return (-1); } max_conn_srv = i; line = get_first_key(file, "db_srv_ip"); for (i = 0; i < MAX_ROLEDB_SRV && line != NULL; ++i) { memset(&sin, 0, sizeof(sin)); sin.sin_family = AF_INET; roledb_server[i].cb_recv = gamesrv_cb_roledb_recv; ip = get_value(line); if (!ip) break; line = get_next_key(file, "db_srv_port"); if (!line) break; port = atoi(get_value(line)); if (port <= 0) break; line = get_next_key(file, "db_srv_ip"); sin.sin_port = htons(port); ret = evutil_inet_pton(AF_INET, ip, &sin.sin_addr); if (ret != 1) { log4c_category_log(mycat, LOG4C_PRIORITY_ERROR, "evutil_inet_pton failed[%d], ip[%s] port[%d]", ret, ip, port); return (-1); } ret = game_add_connect_event((struct sockaddr *)&sin, sizeof(sin), &roledb_server[i]); if (ret < 0) { log4c_category_log(mycat, LOG4C_PRIORITY_ERROR, "game_add_connect_event to conn server failed[%d], ip[%s] port[%d]", ret, ip, port); return (-1); } roledb_server[i].fd = ret; } if (i == 0) { log4c_category_log(mycat, LOG4C_PRIORITY_ERROR, "config file wrong, no roldb_srv"); return (-1); } max_roledb_srv = i; active_roledb_srv = &roledb_server[0]; fclose(file); struct timeval t1 = {5, 0}; add_timer(t1, &log_object_timer); log_object_timer.ev_callback = cb_log_object_timer; ret = event_base_loop(base, 0); log4c_category_log(mycat, LOG4C_PRIORITY_INFO, "event_base_loop stoped[%d]", ret); /* tmp = create_container(); tmp = create_container(); tmp = create_container(); destory_container(tmp); tmp = create_container(); destory_container(tmp); tmp = create_container(); */ /* GAME_CIRCLEQ_FOREACH(tmp, pool_container_freed, base.list_free) { printf("tmp[idx] = %d:%d\n", tmp->base.list_free.idx, tmp->base.list_used.idx); } printf("\n ================== \n"); GAME_CIRCLEQ_FOREACH(tmp, pool_container_used, base.list_used) { printf("tmp[idx] = %d:%d\n", tmp->base.list_free.idx, tmp->base.list_used.idx); } */ return (0); }