Report generated at: Sat Dec 24 02:44:48 CET 2011
| Total number of functions | 3400 |
| Number of low risk functions | 3154 |
| Number of moderate risk functions | 170 |
| Number of high risk functions | 67 |
| Number of untestable functions | 9 |
Used ranges:
| Cyclomatic Complexity | Risk Evaluation | |
| 0 - 10 | Simple module, without much risk | |
| 11 - 20 | More complex module, moderate risk | |
| 21 - 50 | Complex module, high risk | |
| greater than 50 | Untestable module, very high risk |
| Function Name |
Cyclomatic
Complexity |
Number of
Statements |
Number of
Lines |
Source File | |
| ↓ | lw6_process_non_run_options | 230 | 529 | 947 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/lw6-options.c |
int
lw6_process_non_run_options (int argc, char *argv[], int *run_game)
{
int i;
int ret = 1;
char *path = NULL;
char *value = NULL;
char *log_file = NULL;
char *pid_file = NULL;
char *input = NULL;
char *output = NULL;
(*run_game) = 1;
for (i = 1; i < argc; ++i)
{
/*
* Syntax check, done now to let "/?" pass
*/
if (!check_arg (argv[i]))
{
lw6sys_log_clear (NULL);
lw6sys_log (LW6SYS_LOG_ERROR, _("unknown option \"%s\""), argv[i]);
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_DAEMON, argv[i]))
{
/*
* DAEMON mode is one of the first check we make for we want to switch
* into this mode as soon as possible.
*/
pid_file = lw6sys_daemon_pid_file (argc, argv);
if (pid_file)
{
if (lw6sys_daemon_start (pid_file))
{
// OK
}
else
{
lw6sys_log (LW6SYS_LOG_ERROR, _("unable to start daemon"));
(*run_game) = 0;
}
LW6SYS_FREE (pid_file);
}
}
else if (lw6sys_arg_match (LW6DEF_HELP, argv[i]) ||
lw6sys_arg_match ("h", argv[i])
|| lw6sys_arg_match ("?", argv[i]))
{
lw6_print_help ();
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_VERSION, argv[i]) ||
lw6sys_arg_match ("v", argv[i]))
{
lw6_print_version ();
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_COPYRIGHT, argv[i]) ||
lw6sys_arg_match (LW6DEF_COPYLEFT, argv[i]) ||
lw6sys_arg_match (LW6DEF_COPY, argv[i]) ||
lw6sys_arg_match ("c", argv[i]))
{
lw6_print_long_copyright ();
(*run_game) = 0;
}
/*
* Some other low-level options
*/
else if (lw6sys_arg_match (LW6DEF_TEST, argv[i]))
{
log_file = lw6cfg_unified_get_log_file (argc, argv);
if (log_file)
{
lw6sys_log_clear (log_file);
ret = lw6sys_test_exec (argc, argv, 1) && lw6sys_test (1)
&& lw6glb_test (1)
&& lw6map_test (1)
&& lw6ker_test (1) && lw6pil_test (1) && DYN_TEST
&& lw6bot_test (1) && lw6sim_test (1) && lw6cns_test (1)
&& lw6hlp_test (1) && lw6cfg_test (1) && lw6ldr_test (1)
&& lw6tsk_test (1) && lw6gui_test (1) && lw6vox_test (1)
&& lw6gfx_test (1) && lw6dsp_test (1) && lw6snd_test (1)
&& lw6img_test (1) && lw6net_test (1) && lw6nod_test (1)
&& lw6cnx_test (1) && lw6msg_test (1) && lw6cli_test (1)
&& lw6srv_test (1) && lw6dat_test (1) && lw6p2p_test (1)
&& lw6scm_test (1) && lw6_test (1);
if (ret)
{
lw6sys_log (LW6SYS_LOG_NOTICE, _("all tests SUCCESSFULL!"));
}
else
{
lw6sys_log (LW6SYS_LOG_ERROR,
_
("test FAILED, see log file \"%s\" for details"),
log_file);
}
LW6SYS_FREE (log_file);
}
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_CHECK, argv[i]))
{
log_file = lw6cfg_unified_get_log_file (argc, argv);
if (log_file)
{
lw6sys_log_clear (log_file);
ret = lw6sys_test_exec (argc, argv, 0) && lw6sys_test (0)
&& lw6glb_test (0)
&& lw6map_test (0)
&& lw6ker_test (0) && lw6pil_test (0) && DYN_TEST
&& lw6bot_test (0) && lw6sim_test (0) && lw6cns_test (0)
&& lw6hlp_test (0) && lw6cfg_test (0) && lw6ldr_test (0)
&& lw6tsk_test (0) && lw6gui_test (0) && lw6vox_test (0)
&& lw6gfx_test (0) && lw6dsp_test (0) && lw6snd_test (0)
&& lw6img_test (0) && lw6net_test (0) && lw6nod_test (0)
&& lw6cnx_test (0) && lw6msg_test (0) && lw6cli_test (0)
&& lw6srv_test (0) && lw6dat_test (0) && lw6p2p_test (0)
&& lw6scm_test (0) && lw6_test (0);
if (ret)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_
("all tests SUCCESSFULL! (check-only mode)"));
}
else
{
/*
* Here only a warning, not an erro which can require
* interactive operation to finish
*/
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("check FAILED, see log file \"%s\" for details"),
log_file);
}
LW6SYS_FREE (log_file);
}
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_BENCH, argv[i]))
{
float bench_result = 0.0f;
lw6sys_log_clear (NULL);
ret = lw6pil_bench (&bench_result, NULL);
lw6_print_bench (bench_result);
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_RESET, argv[i]))
{
lw6cfg_reset (argc, argv);
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_DEFAULTS, argv[i]))
{
lw6cfg_reset (argc, argv);
}
else if (lw6sys_arg_match (LW6DEF_PEDIGREE, argv[i]))
{
lw6_print_pedigree ();
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_HOST, argv[i]))
{
lw6_print_host ();
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_AUDIT, argv[i]))
{
lw6_print_audit (argc, argv);
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_MODULES, argv[i]))
{
lw6_print_modules ();
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_LIST, argv[i]))
{
lw6_print_list ();
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_ABOUT, argv[i]))
{
value = lw6sys_arg_get_value (argc, argv, LW6DEF_ABOUT);
if (value)
{
lw6_print_about (value);
LW6SYS_FREE (value);
}
(*run_game) = 0;
}
/*
* Specific list
*/
else if (lw6sys_arg_match (LW6DEF_LIST_QUICK, argv[i]))
{
lw6_print_list_quick ();
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_LIST_DOC, argv[i]))
{
lw6_print_list_doc ();
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_LIST_SHOW, argv[i]))
{
lw6_print_list_show ();
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_LIST_PATH, argv[i]))
{
lw6_print_list_path ();
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_LIST_PLAYERS, argv[i]))
{
lw6_print_list_players ();
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_LIST_INPUT, argv[i]))
{
lw6_print_list_input ();
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_LIST_GRAPHICS, argv[i]))
{
lw6_print_list_graphics ();
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_LIST_SOUND, argv[i]))
{
lw6_print_list_sound ();
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_LIST_NETWORK, argv[i]))
{
lw6_print_list_network ();
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_LIST_MAP, argv[i]))
{
lw6_print_list_map ();
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_LIST_MAP_RULES, argv[i]))
{
lw6_print_list_map_rules ();
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_LIST_MAP_HINTS, argv[i]))
{
lw6_print_list_map_hints ();
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_LIST_MAP_STYLE, argv[i]))
{
lw6_print_list_map_style ();
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_LIST_MAP_TEAMS, argv[i]))
{
lw6_print_list_map_teams ();
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_LIST_FUNCS, argv[i]))
{
lw6_print_list_funcs ();
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_LIST_HOOKS, argv[i]))
{
lw6_print_list_hooks ();
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_LIST_ADVANCED, argv[i]))
{
lw6_print_list_advanced ();
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_LIST_ALIASES, argv[i]))
{
lw6_print_list_aliases ();
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_LIST_TEAM_COLORS, argv[i]))
{
lw6_print_list_team_colors ();
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_LIST_WEAPONS, argv[i]))
{
lw6_print_list_weapons ();
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_EXAMPLE_RULES_XML, argv[i]))
{
lw6ldr_print_example_rules_xml (stdout);
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_EXAMPLE_HINTS_XML, argv[i]))
{
lw6ldr_print_example_hints_xml (stdout);
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_EXAMPLE_STYLE_XML, argv[i]))
{
lw6ldr_print_example_style_xml (stdout);
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_EXAMPLE_TEAMS_XML, argv[i]))
{
lw6ldr_print_example_teams_xml (stdout);
(*run_game) = 0;
}
/*
* Show any build_XXX LW specific value
*/
else if (lw6sys_arg_match (LW6DEF_SHOW_BUILD_PACKAGE_TARNAME, argv[i]))
{
printf ("%s\n", lw6sys_build_get_package_tarname ());
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_BUILD_PACKAGE_NAME, argv[i]))
{
printf ("%s\n", lw6sys_build_get_package_name ());
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_BUILD_PACKAGE_STRING, argv[i]))
{
printf ("%s\n", lw6sys_build_get_package_string ());
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_BUILD_VERSION, argv[i]))
{
printf ("%s\n", lw6sys_build_get_version ());
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_BUILD_CODENAME, argv[i]))
{
printf ("%s\n", lw6sys_build_get_codename ());
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_BUILD_STAMP, argv[i]))
{
printf ("%s\n", lw6sys_build_get_stamp ());
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_BUILD_MD5SUM, argv[i]))
{
printf ("%s\n", lw6sys_build_get_md5sum ());
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_BUILD_COPYRIGHT, argv[i]))
{
printf ("%s\n", lw6sys_build_get_copyright ());
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_BUILD_LICENSE, argv[i]))
{
printf ("%s\n", lw6sys_build_get_license ());
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_BUILD_HOME_URL, argv[i]))
{
printf ("%s\n", lw6sys_build_get_home_url ());
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_BUILD_BUGS_URL, argv[i]))
{
printf ("%s\n", lw6sys_build_get_bugs_url ());
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_BUILD_CONFIGURE_ARGS, argv[i])
|| lw6sys_arg_match (LW6DEF_CONFIGURE_ARGS, argv[i]))
{
printf ("%s\n", lw6sys_build_get_configure_args ());
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_BUILD_GCC_VERSION, argv[i]))
{
printf ("%s\n", lw6sys_build_get_gcc_version ());
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_BUILD_CFLAGS, argv[i])
|| lw6sys_arg_match (LW6DEF_CFLAGS, argv[i]))
{
printf ("%s\n", lw6sys_build_get_cflags ());
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_BUILD_LDFLAGS, argv[i])
|| lw6sys_arg_match (LW6DEF_LDFLAGS, argv[i]))
{
printf ("%s\n", lw6sys_build_get_ldflags ());
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_BUILD_HOSTNAME, argv[i]))
{
printf ("%s\n", lw6sys_build_get_hostname ());
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_BUILD_DATE, argv[i]))
{
printf ("%s\n", lw6sys_build_get_date ());
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_BUILD_TIME, argv[i]))
{
printf ("%s\n", lw6sys_build_get_time ());
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_BUILD_HOST_CPU, argv[i]))
{
printf ("%s\n", lw6sys_build_get_host_cpu ());
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_BUILD_ENDIANNESS, argv[i]))
{
printf ("%s\n", lw6sys_build_get_endianness ());
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_BUILD_POINTER_SIZE, argv[i]))
{
printf ("%d\n", lw6sys_build_get_pointer_size ());
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_BUILD_X86, argv[i]))
{
printf ("%d\n", lw6sys_build_is_x86 ());
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_BUILD_HOST_OS, argv[i]))
{
printf ("%s\n", lw6sys_build_get_host_os ());
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_BUILD_GNU, argv[i]))
{
printf ("%d\n", lw6sys_build_is_gnu ());
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_BUILD_UNIX, argv[i]))
{
printf ("%d\n", lw6sys_build_is_unix ());
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_BUILD_MS_WINDOWS, argv[i]))
{
printf ("%d\n", lw6sys_build_is_ms_windows ());
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_BUILD_MAC_OS_X, argv[i]))
{
printf ("%d\n", lw6sys_build_is_mac_os_x ());
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_BUILD_GP2X, argv[i]))
{
printf ("%d\n", lw6sys_build_is_gp2x ());
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_BUILD_TOP_SRCDIR, argv[i]))
{
printf ("%s\n", lw6sys_build_get_top_srcdir ());
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_BUILD_PREFIX, argv[i]))
{
printf ("%s\n", lw6sys_build_get_prefix ());
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_BUILD_DATADIR, argv[i]))
{
printf ("%s\n", lw6sys_build_get_datadir ());
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_BUILD_LIBDIR, argv[i]))
{
printf ("%s\n", lw6sys_build_get_libdir ());
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_BUILD_INCLUDEDIR, argv[i]))
{
printf ("%s\n", lw6sys_build_get_includedir ());
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_BUILD_LOCALEDIR, argv[i]))
{
printf ("%s\n", lw6sys_build_get_localedir ());
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_BUILD_DOCDIR, argv[i]))
{
printf ("%s\n", lw6sys_build_get_docdir ());
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_BUILD_ENABLE_CONSOLE, argv[i]))
{
printf ("%s\n", lw6sys_build_get_enable_console ());
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_BUILD_ENABLE_GTK, argv[i]))
{
printf ("%s\n", lw6sys_build_get_enable_gtk ());
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_BUILD_ENABLE_MOD_GL, argv[i]))
{
printf ("%s\n", lw6sys_build_get_enable_mod_gl ());
(*run_game) = 0;
}
else
if (lw6sys_arg_match (LW6DEF_SHOW_BUILD_ENABLE_MOD_CSOUND, argv[i]))
{
printf ("%s\n", lw6sys_build_get_enable_mod_csound ());
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_BUILD_ENABLE_MOD_OGG, argv[i]))
{
printf ("%s\n", lw6sys_build_get_enable_mod_ogg ());
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_BUILD_ENABLE_MOD_HTTP, argv[i]))
{
printf ("%s\n", lw6sys_build_get_enable_mod_http ());
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_BUILD_ENABLE_OPENMP, argv[i]))
{
printf ("%s\n", lw6sys_build_get_enable_openmp ());
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_BUILD_ENABLE_OPTIMIZE, argv[i]))
{
printf ("%s\n", lw6sys_build_get_enable_optimize ());
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_BUILD_ENABLE_ALLINONE, argv[i]))
{
printf ("%s\n", lw6sys_build_get_enable_allinone ());
(*run_game) = 0;
}
else
if (lw6sys_arg_match (LW6DEF_SHOW_BUILD_ENABLE_FULLSTATIC, argv[i]))
{
printf ("%s\n", lw6sys_build_get_enable_fullstatic ());
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_BUILD_ENABLE_PARANOID, argv[i]))
{
printf ("%s\n", lw6sys_build_get_enable_paranoid ());
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_BUILD_ENABLE_GPROF, argv[i]))
{
printf ("%s\n", lw6sys_build_get_enable_gprof ());
(*run_game) = 0;
}
else
if (lw6sys_arg_match (LW6DEF_SHOW_BUILD_ENABLE_INSTRUMENT, argv[i]))
{
printf ("%s\n", lw6sys_build_get_enable_instrument ());
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_BUILD_ENABLE_PROFILER, argv[i]))
{
printf ("%s\n", lw6sys_build_get_enable_profiler ());
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_BUILD_ENABLE_GCOV, argv[i]))
{
printf ("%s\n", lw6sys_build_get_enable_gcov ());
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_BUILD_ENABLE_VALGRIND, argv[i]))
{
printf ("%s\n", lw6sys_build_get_enable_valgrind ());
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_BUILD_BIN_ID, argv[i]))
{
printf ("%d\n", lw6sys_build_get_bin_id ());
(*run_game) = 0;
}
/*
* Show any interesting default path
*/
else if (lw6sys_arg_match (LW6DEF_SHOW_DEFAULT_USER_DIR, argv[i]))
{
path = lw6sys_get_default_user_dir ();
if (path)
{
printf ("%s\n", path);
LW6SYS_FREE (path);
path = NULL;
}
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_DEFAULT_CONFIG_FILE, argv[i]))
{
path = lw6sys_get_default_config_file ();
if (path)
{
printf ("%s\n", path);
LW6SYS_FREE (path);
path = NULL;
}
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_DEFAULT_LOG_FILE, argv[i]))
{
path = lw6sys_get_default_log_file ();
if (path)
{
printf ("%s\n", path);
LW6SYS_FREE (path);
path = NULL;
}
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_DEFAULT_PREFIX, argv[i]))
{
path = lw6sys_get_default_prefix ();
if (path)
{
printf ("%s\n", path);
LW6SYS_FREE (path);
path = NULL;
}
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_DEFAULT_MOD_DIR, argv[i]))
{
path = lw6sys_get_default_mod_dir ();
if (path)
{
printf ("%s\n", path);
LW6SYS_FREE (path);
path = NULL;
}
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_DEFAULT_DATA_DIR, argv[i]))
{
path = lw6sys_get_default_data_dir ();
if (path)
{
printf ("%s\n", path);
LW6SYS_FREE (path);
path = NULL;
}
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_DEFAULT_MUSIC_DIR, argv[i]))
{
path = lw6sys_get_default_music_dir ();
if (path)
{
printf ("%s\n", path);
LW6SYS_FREE (path);
path = NULL;
}
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_DEFAULT_MUSIC_PATH, argv[i]))
{
path = lw6sys_get_default_music_path ();
if (path)
{
printf ("%s\n", path);
LW6SYS_FREE (path);
path = NULL;
}
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_DEFAULT_MAP_DIR, argv[i]))
{
path = lw6sys_get_default_map_dir ();
if (path)
{
printf ("%s\n", path);
LW6SYS_FREE (path);
path = NULL;
}
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_DEFAULT_MAP_PATH, argv[i]))
{
path = lw6sys_get_default_map_path ();
if (path)
{
printf ("%s\n", path);
LW6SYS_FREE (path);
path = NULL;
}
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_DEFAULT_SCRIPT_FILE, argv[i]))
{
path = lw6sys_get_default_script_file ();
if (path)
{
printf ("%s\n", path);
LW6SYS_FREE (path);
path = NULL;
}
(*run_game) = 0;
}
/*
* Show any interesting path
*/
else if (lw6sys_arg_match (LW6DEF_SHOW_CWD, argv[i]))
{
path = lw6sys_get_cwd (argc, argv);
if (path)
{
printf ("%s\n", path);
LW6SYS_FREE (path);
path = NULL;
}
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_RUN_DIR, argv[i]))
{
path = lw6sys_get_run_dir (argc, argv);
if (path)
{
printf ("%s\n", path);
LW6SYS_FREE (path);
path = NULL;
}
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_USER_DIR, argv[i]))
{
path = lw6cfg_unified_get_user_dir (argc, argv);
if (path)
{
printf ("%s\n", path);
LW6SYS_FREE (path);
path = NULL;
}
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_CONFIG_FILE, argv[i]))
{
path = lw6sys_get_config_file (argc, argv);
if (path)
{
printf ("%s\n", path);
LW6SYS_FREE (path);
path = NULL;
}
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_LOG_FILE, argv[i]))
{
path = lw6cfg_unified_get_log_file (argc, argv);
if (path)
{
printf ("%s\n", path);
LW6SYS_FREE (path);
path = NULL;
}
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_PREFIX, argv[i]))
{
path = lw6sys_get_prefix (argc, argv);
if (path)
{
printf ("%s\n", path);
LW6SYS_FREE (path);
path = NULL;
}
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_MOD_DIR, argv[i]))
{
path = lw6sys_get_mod_dir (argc, argv);
if (path)
{
printf ("%s\n", path);
LW6SYS_FREE (path);
path = NULL;
}
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_DATA_DIR, argv[i]))
{
path = lw6sys_get_data_dir (argc, argv);
if (path)
{
printf ("%s\n", path);
LW6SYS_FREE (path);
path = NULL;
}
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_MUSIC_DIR, argv[i]))
{
path = lw6sys_get_music_dir (argc, argv);
if (path)
{
printf ("%s\n", path);
LW6SYS_FREE (path);
path = NULL;
}
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_MUSIC_PATH, argv[i]))
{
path = lw6cfg_unified_get_music_path (argc, argv);
if (path)
{
printf ("%s\n", path);
LW6SYS_FREE (path);
path = NULL;
}
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_MAP_DIR, argv[i]))
{
path = lw6sys_get_map_dir (argc, argv);
if (path)
{
printf ("%s\n", path);
LW6SYS_FREE (path);
path = NULL;
}
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_MAP_PATH, argv[i]))
{
path = lw6cfg_unified_get_map_path (argc, argv);
if (path)
{
printf ("%s\n", path);
LW6SYS_FREE (path);
path = NULL;
}
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SHOW_SCRIPT_FILE, argv[i]))
{
path = lw6sys_get_script_file (argc, argv);
if (path)
{
printf ("%s\n", path);
LW6SYS_FREE (path);
path = NULL;
}
(*run_game) = 0;
}
/*
* Decode/encode debugging routines
*/
else if (lw6sys_arg_match (LW6DEF_BASE64_ENCODE, argv[i]))
{
input = lw6sys_stream_file_to_str (stdin);
if (input)
{
output = lw6glb_base64_encode_str (input);
if (output)
{
lw6sys_stream_str_to_file (stdout, output);
LW6SYS_FREE (output);
printf ("\n");
}
LW6SYS_FREE (input);
}
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_BASE64_DECODE, argv[i]))
{
input = lw6sys_stream_file_to_str (stdin);
if (input)
{
output = lw6glb_base64_decode_str (input);
if (output)
{
lw6sys_stream_str_to_file (stdout, output);
LW6SYS_FREE (output);
}
LW6SYS_FREE (input);
}
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_Z_ENCODE, argv[i]))
{
input = lw6sys_stream_file_to_str (stdin);
if (input)
{
output = lw6msg_z_encode (input, 0);
if (output)
{
lw6sys_stream_str_to_file (stdout, output);
LW6SYS_FREE (output);
printf ("\n");
}
LW6SYS_FREE (input);
}
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_Z_DECODE, argv[i]))
{
input = lw6sys_stream_file_to_str (stdin);
if (input)
{
output = lw6msg_z_decode (input);
if (output)
{
lw6sys_stream_str_to_file (stdout, output);
LW6SYS_FREE (output);
}
LW6SYS_FREE (input);
}
(*run_game) = 0;
}
/*
* Simulate fights for statistics
*/
else if (lw6sys_arg_match (LW6DEF_SIMULATE_BASIC, argv[i]))
{
lw6sim_results_t results;
lw6sim_simulate_basic (argc, argv, &results);
lw6sim_print (&results, stdout);
(*run_game) = 0;
}
else if (lw6sys_arg_match (LW6DEF_SIMULATE_FULL, argv[i]))
{
lw6sim_results_t results;
lw6sim_simulate_full (argc, argv, &results);
lw6sim_print (&results, stdout);
(*run_game) = 0;
}
}
return ret;
}
|
|||||
| ↓ | get_rules_int_ptr | 145 | 290 | 724 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/map/map-rules.c |
static int32_t *
get_rules_int_ptr (lw6map_rules_t * rules, char *key)
{
int32_t *ret = NULL;
char *formatted_key = NULL;
if (rules && key)
{
formatted_key = lw6sys_keyword_as_key (key);
if (formatted_key)
{
if (!strcmp (formatted_key, LW6DEF_TOTAL_TIME))
{
ret = &(rules->total_time);
}
else if (!strcmp (formatted_key, LW6DEF_RESPAWN_TEAM))
{
ret = &(rules->respawn_team);
}
else if (!strcmp (formatted_key, LW6DEF_RESPAWN_POSITION_MODE))
{
ret = &(rules->respawn_position_mode);
}
else if (!strcmp (formatted_key, LW6DEF_RESPAWN_DELAY))
{
ret = &(rules->respawn_delay);
}
else if (!strcmp (formatted_key, LW6DEF_MOVES_PER_ROUND))
{
ret = &(rules->moves_per_round);
}
else if (!strcmp (formatted_key, LW6DEF_SPREADS_PER_ROUND))
{
ret = &(rules->spreads_per_round);
}
else if (!strcmp (formatted_key, LW6DEF_ROUNDS_PER_SEC))
{
ret = &(rules->rounds_per_sec);
}
else if (!strcmp (formatted_key, LW6DEF_FIGHTER_ATTACK))
{
ret = &(rules->fighter_attack);
}
else if (!strcmp (formatted_key, LW6DEF_FIGHTER_DEFENSE))
{
ret = &(rules->fighter_defense);
}
else if (!strcmp (formatted_key, LW6DEF_FIGHTER_NEW_HEALTH))
{
ret = &(rules->fighter_new_health);
}
else if (!strcmp (formatted_key, LW6DEF_FIGHTER_REGENERATE))
{
ret = &(rules->fighter_regenerate);
}
else if (!strcmp (formatted_key, LW6DEF_SIDE_ATTACK_FACTOR))
{
ret = &(rules->side_attack_factor);
}
else if (!strcmp (formatted_key, LW6DEF_SIDE_DEFENSE_FACTOR))
{
ret = &(rules->side_defense_factor);
}
else if (!strcmp (formatted_key, LW6DEF_NB_MOVE_TRIES))
{
ret = &(rules->nb_move_tries);
}
else if (!strcmp (formatted_key, LW6DEF_NB_ATTACK_TRIES))
{
ret = &(rules->nb_attack_tries);
}
else if (!strcmp (formatted_key, LW6DEF_NB_DEFENSE_TRIES))
{
ret = &(rules->nb_defense_tries);
}
else if (!strcmp (formatted_key, LW6DEF_VERTICAL_MOVE))
{
ret = &(rules->vertical_move);
}
else if (!strcmp (formatted_key, LW6DEF_SPREAD_MODE))
{
ret = &(rules->spread_mode);
}
else if (!strcmp (formatted_key, LW6DEF_SINGLE_ARMY_SIZE))
{
ret = &(rules->single_army_size);
}
else if (!strcmp (formatted_key, LW6DEF_TOTAL_ARMIES_SIZE))
{
ret = &(rules->total_armies_size);
}
else if (!strcmp (formatted_key, LW6DEF_MAX_NB_TEAMS))
{
ret = &(rules->max_nb_teams);
}
else if (!strcmp (formatted_key, LW6DEF_MAX_NB_CURSORS))
{
ret = &(rules->max_nb_cursors);
}
else if (!strcmp (formatted_key, LW6DEF_MAX_NB_NODES))
{
ret = &(rules->max_nb_nodes);
}
else if (!strcmp (formatted_key, LW6DEF_EXP))
{
ret = &(rules->exp);
}
else if (!strcmp (formatted_key, LW6DEF_HIGHEST_TEAM_COLOR_ALLOWED))
{
ret = &(rules->highest_team_color_allowed);
}
else if (!strcmp (formatted_key, LW6DEF_HIGHEST_WEAPON_ALLOWED))
{
ret = &(rules->highest_weapon_allowed);
}
else if (!strcmp (formatted_key, LW6DEF_X_POLARITY))
{
ret = &(rules->x_polarity);
}
else if (!strcmp (formatted_key, LW6DEF_Y_POLARITY))
{
ret = &(rules->y_polarity);
}
else if (!strcmp (formatted_key, LW6DEF_Z_POLARITY))
{
ret = &(rules->z_polarity);
}
else if (!strcmp (formatted_key, LW6DEF_MAX_ZONE_SIZE))
{
ret = &(rules->max_zone_size);
}
else if (!strcmp (formatted_key, LW6DEF_ROUND_DELTA))
{
ret = &(rules->round_delta);
}
else if (!strcmp (formatted_key, LW6DEF_MAX_ROUND_DELTA))
{
ret = &(rules->max_round_delta);
}
else if (!strcmp (formatted_key, LW6DEF_MAX_CURSOR_POT))
{
ret = &(rules->max_cursor_pot);
}
else if (!strcmp (formatted_key, LW6DEF_CURSOR_POT_INIT))
{
ret = &(rules->cursor_pot_init);
}
else if (!strcmp (formatted_key, LW6DEF_MAX_CURSOR_POT_OFFSET))
{
ret = &(rules->max_cursor_pot_offset);
}
else if (!strcmp (formatted_key, LW6DEF_START_RED_X))
{
ret = &(rules->start_x[LW6MAP_TEAM_COLOR_RED]);
}
else if (!strcmp (formatted_key, LW6DEF_START_GREEN_X))
{
ret = &(rules->start_x[LW6MAP_TEAM_COLOR_GREEN]);
}
else if (!strcmp (formatted_key, LW6DEF_START_BLUE_X))
{
ret = &(rules->start_x[LW6MAP_TEAM_COLOR_BLUE]);
}
else if (!strcmp (formatted_key, LW6DEF_START_YELLOW_X))
{
ret = &(rules->start_x[LW6MAP_TEAM_COLOR_YELLOW]);
}
else if (!strcmp (formatted_key, LW6DEF_START_CYAN_X))
{
ret = &(rules->start_x[LW6MAP_TEAM_COLOR_CYAN]);
}
else if (!strcmp (formatted_key, LW6DEF_START_MAGENTA_X))
{
ret = &(rules->start_x[LW6MAP_TEAM_COLOR_MAGENTA]);
}
else if (!strcmp (formatted_key, LW6DEF_START_ORANGE_X))
{
ret = &(rules->start_x[LW6MAP_TEAM_COLOR_ORANGE]);
}
else if (!strcmp (formatted_key, LW6DEF_START_LIGHTBLUE_X))
{
ret = &(rules->start_x[LW6MAP_TEAM_COLOR_LIGHTBLUE]);
}
else if (!strcmp (formatted_key, LW6DEF_START_PURPLE_X))
{
ret = &(rules->start_x[LW6MAP_TEAM_COLOR_PURPLE]);
}
else if (!strcmp (formatted_key, LW6DEF_START_PINK_X))
{
ret = &(rules->start_x[LW6MAP_TEAM_COLOR_PINK]);
}
else if (!strcmp (formatted_key, LW6DEF_START_RED_Y))
{
ret = &(rules->start_y[LW6MAP_TEAM_COLOR_RED]);
}
else if (!strcmp (formatted_key, LW6DEF_START_GREEN_Y))
{
ret = &(rules->start_y[LW6MAP_TEAM_COLOR_GREEN]);
}
else if (!strcmp (formatted_key, LW6DEF_START_BLUE_Y))
{
ret = &(rules->start_y[LW6MAP_TEAM_COLOR_BLUE]);
}
else if (!strcmp (formatted_key, LW6DEF_START_YELLOW_Y))
{
ret = &(rules->start_y[LW6MAP_TEAM_COLOR_YELLOW]);
}
else if (!strcmp (formatted_key, LW6DEF_START_CYAN_Y))
{
ret = &(rules->start_y[LW6MAP_TEAM_COLOR_CYAN]);
}
else if (!strcmp (formatted_key, LW6DEF_START_MAGENTA_Y))
{
ret = &(rules->start_y[LW6MAP_TEAM_COLOR_MAGENTA]);
}
else if (!strcmp (formatted_key, LW6DEF_START_ORANGE_Y))
{
ret = &(rules->start_y[LW6MAP_TEAM_COLOR_ORANGE]);
}
else if (!strcmp (formatted_key, LW6DEF_START_LIGHTBLUE_Y))
{
ret = &(rules->start_y[LW6MAP_TEAM_COLOR_LIGHTBLUE]);
}
else if (!strcmp (formatted_key, LW6DEF_START_PURPLE_Y))
{
ret = &(rules->start_y[LW6MAP_TEAM_COLOR_PURPLE]);
}
else if (!strcmp (formatted_key, LW6DEF_START_PINK_Y))
{
ret = &(rules->start_y[LW6MAP_TEAM_COLOR_PINK]);
}
else if (!strcmp (formatted_key, LW6DEF_START_POSITION_MODE))
{
ret = &(rules->start_position_mode);
}
else if (!strcmp (formatted_key, LW6DEF_COLOR_CONFLICT_MODE))
{
ret = &(rules->color_conflict_mode);
}
else if (!strcmp (formatted_key, LW6DEF_SPREAD_THREAD))
{
ret = &(rules->spread_thread);
}
else if (!strcmp (formatted_key, LW6DEF_GLUE_POWER))
{
ret = &(rules->glue_power);
}
else if (!strcmp (formatted_key, LW6DEF_BOOST_POWER))
{
ret = &(rules->boost_power);
}
else if (!strcmp (formatted_key, LW6DEF_DANGER_POWER))
{
ret = &(rules->danger_power);
}
else if (!strcmp (formatted_key, LW6DEF_MEDICINE_POWER))
{
ret = &(rules->medicine_power);
}
else if (!strcmp (formatted_key, LW6DEF_FRAGS_MODE))
{
ret = &(rules->frags_mode);
}
else if (!strcmp (formatted_key, LW6DEF_FRAGS_TO_DISTRIBUTE))
{
ret = &(rules->frags_to_distribute);
}
else if (!strcmp (formatted_key, LW6DEF_FRAGS_FADE_OUT))
{
ret = &(rules->frags_fade_out);
}
else if (!strcmp (formatted_key, LW6DEF_USE_TEAM_PROFILES))
{
ret = &(rules->use_team_profiles);
}
else
if (!strcmp (formatted_key, LW6DEF_TEAM_PROFILE_RED_AGGRESSIVE))
{
ret = &(rules->team_profile_aggressive[LW6MAP_TEAM_COLOR_RED]);
}
else
if (!strcmp (formatted_key, LW6DEF_TEAM_PROFILE_GREEN_AGGRESSIVE))
{
ret =
&(rules->team_profile_aggressive[LW6MAP_TEAM_COLOR_GREEN]);
}
else
if (!strcmp (formatted_key, LW6DEF_TEAM_PROFILE_BLUE_AGGRESSIVE))
{
ret = &(rules->team_profile_aggressive[LW6MAP_TEAM_COLOR_BLUE]);
}
else
if (!strcmp
(formatted_key, LW6DEF_TEAM_PROFILE_YELLOW_AGGRESSIVE))
{
ret =
&(rules->team_profile_aggressive[LW6MAP_TEAM_COLOR_YELLOW]);
}
else
if (!strcmp (formatted_key, LW6DEF_TEAM_PROFILE_CYAN_AGGRESSIVE))
{
ret = &(rules->team_profile_aggressive[LW6MAP_TEAM_COLOR_CYAN]);
}
else
if (!strcmp
(formatted_key, LW6DEF_TEAM_PROFILE_MAGENTA_AGGRESSIVE))
{
ret =
&(rules->team_profile_aggressive[LW6MAP_TEAM_COLOR_MAGENTA]);
}
else
if (!strcmp
(formatted_key, LW6DEF_TEAM_PROFILE_ORANGE_AGGRESSIVE))
{
ret =
&(rules->team_profile_aggressive[LW6MAP_TEAM_COLOR_ORANGE]);
}
else
if (!strcmp
(formatted_key, LW6DEF_TEAM_PROFILE_LIGHTBLUE_AGGRESSIVE))
{
ret =
&(rules->team_profile_aggressive
[LW6MAP_TEAM_COLOR_LIGHTBLUE]);
}
else
if (!strcmp
(formatted_key, LW6DEF_TEAM_PROFILE_PURPLE_AGGRESSIVE))
{
ret =
&(rules->team_profile_aggressive[LW6MAP_TEAM_COLOR_PURPLE]);
}
else
if (!strcmp (formatted_key, LW6DEF_TEAM_PROFILE_PINK_AGGRESSIVE))
{
ret = &(rules->team_profile_aggressive[LW6MAP_TEAM_COLOR_PINK]);
}
else
if (!strcmp (formatted_key, LW6DEF_TEAM_PROFILE_RED_VULNERABLE))
{
ret = &(rules->team_profile_vulnerable[LW6MAP_TEAM_COLOR_RED]);
}
else
if (!strcmp (formatted_key, LW6DEF_TEAM_PROFILE_GREEN_VULNERABLE))
{
ret =
&(rules->team_profile_vulnerable[LW6MAP_TEAM_COLOR_GREEN]);
}
else
if (!strcmp (formatted_key, LW6DEF_TEAM_PROFILE_BLUE_VULNERABLE))
{
ret = &(rules->team_profile_vulnerable[LW6MAP_TEAM_COLOR_BLUE]);
}
else
if (!strcmp
(formatted_key, LW6DEF_TEAM_PROFILE_YELLOW_VULNERABLE))
{
ret =
&(rules->team_profile_vulnerable[LW6MAP_TEAM_COLOR_YELLOW]);
}
else
if (!strcmp (formatted_key, LW6DEF_TEAM_PROFILE_CYAN_VULNERABLE))
{
ret = &(rules->team_profile_vulnerable[LW6MAP_TEAM_COLOR_CYAN]);
}
else
if (!strcmp
(formatted_key, LW6DEF_TEAM_PROFILE_MAGENTA_VULNERABLE))
{
ret =
&(rules->team_profile_vulnerable[LW6MAP_TEAM_COLOR_MAGENTA]);
}
else
if (!strcmp
(formatted_key, LW6DEF_TEAM_PROFILE_ORANGE_VULNERABLE))
{
ret =
&(rules->team_profile_vulnerable[LW6MAP_TEAM_COLOR_ORANGE]);
}
else
if (!strcmp
(formatted_key, LW6DEF_TEAM_PROFILE_LIGHTBLUE_VULNERABLE))
{
ret =
&(rules->team_profile_vulnerable
[LW6MAP_TEAM_COLOR_LIGHTBLUE]);
}
else
if (!strcmp
(formatted_key, LW6DEF_TEAM_PROFILE_PURPLE_VULNERABLE))
{
ret =
&(rules->team_profile_vulnerable[LW6MAP_TEAM_COLOR_PURPLE]);
}
else
if (!strcmp (formatted_key, LW6DEF_TEAM_PROFILE_PINK_VULNERABLE))
{
ret = &(rules->team_profile_vulnerable[LW6MAP_TEAM_COLOR_PINK]);
}
else if (!strcmp (formatted_key, LW6DEF_TEAM_PROFILE_RED_MOBILE))
{
ret = &(rules->team_profile_mobile[LW6MAP_TEAM_COLOR_RED]);
}
else if (!strcmp (formatted_key, LW6DEF_TEAM_PROFILE_GREEN_MOBILE))
{
ret = &(rules->team_profile_mobile[LW6MAP_TEAM_COLOR_GREEN]);
}
else if (!strcmp (formatted_key, LW6DEF_TEAM_PROFILE_BLUE_MOBILE))
{
ret = &(rules->team_profile_mobile[LW6MAP_TEAM_COLOR_BLUE]);
}
else if (!strcmp (formatted_key, LW6DEF_TEAM_PROFILE_YELLOW_MOBILE))
{
ret = &(rules->team_profile_mobile[LW6MAP_TEAM_COLOR_YELLOW]);
}
else if (!strcmp (formatted_key, LW6DEF_TEAM_PROFILE_CYAN_MOBILE))
{
ret = &(rules->team_profile_mobile[LW6MAP_TEAM_COLOR_CYAN]);
}
else
if (!strcmp (formatted_key, LW6DEF_TEAM_PROFILE_MAGENTA_MOBILE))
{
ret = &(rules->team_profile_mobile[LW6MAP_TEAM_COLOR_MAGENTA]);
}
else if (!strcmp (formatted_key, LW6DEF_TEAM_PROFILE_ORANGE_MOBILE))
{
ret = &(rules->team_profile_mobile[LW6MAP_TEAM_COLOR_ORANGE]);
}
else
if (!strcmp (formatted_key, LW6DEF_TEAM_PROFILE_LIGHTBLUE_MOBILE))
{
ret =
&(rules->team_profile_mobile[LW6MAP_TEAM_COLOR_LIGHTBLUE]);
}
else if (!strcmp (formatted_key, LW6DEF_TEAM_PROFILE_PURPLE_MOBILE))
{
ret = &(rules->team_profile_mobile[LW6MAP_TEAM_COLOR_PURPLE]);
}
else if (!strcmp (formatted_key, LW6DEF_TEAM_PROFILE_PINK_MOBILE))
{
ret = &(rules->team_profile_mobile[LW6MAP_TEAM_COLOR_PINK]);
}
else if (!strcmp (formatted_key, LW6DEF_TEAM_PROFILE_RED_FAST))
{
ret = &(rules->team_profile_fast[LW6MAP_TEAM_COLOR_RED]);
}
else if (!strcmp (formatted_key, LW6DEF_TEAM_PROFILE_GREEN_FAST))
{
ret = &(rules->team_profile_fast[LW6MAP_TEAM_COLOR_GREEN]);
}
else if (!strcmp (formatted_key, LW6DEF_TEAM_PROFILE_BLUE_FAST))
{
ret = &(rules->team_profile_fast[LW6MAP_TEAM_COLOR_BLUE]);
}
else if (!strcmp (formatted_key, LW6DEF_TEAM_PROFILE_YELLOW_FAST))
{
ret = &(rules->team_profile_fast[LW6MAP_TEAM_COLOR_YELLOW]);
}
else if (!strcmp (formatted_key, LW6DEF_TEAM_PROFILE_CYAN_FAST))
{
ret = &(rules->team_profile_fast[LW6MAP_TEAM_COLOR_CYAN]);
}
else if (!strcmp (formatted_key, LW6DEF_TEAM_PROFILE_MAGENTA_FAST))
{
ret = &(rules->team_profile_fast[LW6MAP_TEAM_COLOR_MAGENTA]);
}
else if (!strcmp (formatted_key, LW6DEF_TEAM_PROFILE_ORANGE_FAST))
{
ret = &(rules->team_profile_fast[LW6MAP_TEAM_COLOR_ORANGE]);
}
else
if (!strcmp (formatted_key, LW6DEF_TEAM_PROFILE_LIGHTBLUE_FAST))
{
ret = &(rules->team_profile_fast[LW6MAP_TEAM_COLOR_LIGHTBLUE]);
}
else if (!strcmp (formatted_key, LW6DEF_TEAM_PROFILE_PURPLE_FAST))
{
ret = &(rules->team_profile_fast[LW6MAP_TEAM_COLOR_PURPLE]);
}
else if (!strcmp (formatted_key, LW6DEF_TEAM_PROFILE_PINK_FAST))
{
ret = &(rules->team_profile_fast[LW6MAP_TEAM_COLOR_PINK]);
}
else if (!strcmp (formatted_key, LW6DEF_TEAM_PROFILE_RED_WEAPON_ID))
{
ret = &(rules->team_profile_weapon_id[LW6MAP_TEAM_COLOR_RED]);
}
else
if (!strcmp (formatted_key, LW6DEF_TEAM_PROFILE_GREEN_WEAPON_ID))
{
ret = &(rules->team_profile_weapon_id[LW6MAP_TEAM_COLOR_GREEN]);
}
else
if (!strcmp (formatted_key, LW6DEF_TEAM_PROFILE_BLUE_WEAPON_ID))
{
ret = &(rules->team_profile_weapon_id[LW6MAP_TEAM_COLOR_BLUE]);
}
else
if (!strcmp (formatted_key, LW6DEF_TEAM_PROFILE_YELLOW_WEAPON_ID))
{
ret =
&(rules->team_profile_weapon_id[LW6MAP_TEAM_COLOR_YELLOW]);
}
else
if (!strcmp (formatted_key, LW6DEF_TEAM_PROFILE_CYAN_WEAPON_ID))
{
ret = &(rules->team_profile_weapon_id[LW6MAP_TEAM_COLOR_CYAN]);
}
else
if (!strcmp
(formatted_key, LW6DEF_TEAM_PROFILE_MAGENTA_WEAPON_ID))
{
ret =
&(rules->team_profile_weapon_id[LW6MAP_TEAM_COLOR_MAGENTA]);
}
else
if (!strcmp (formatted_key, LW6DEF_TEAM_PROFILE_ORANGE_WEAPON_ID))
{
ret =
&(rules->team_profile_weapon_id[LW6MAP_TEAM_COLOR_ORANGE]);
}
else
if (!strcmp
(formatted_key, LW6DEF_TEAM_PROFILE_LIGHTBLUE_WEAPON_ID))
{
ret =
&(rules->team_profile_weapon_id[LW6MAP_TEAM_COLOR_LIGHTBLUE]);
}
else
if (!strcmp (formatted_key, LW6DEF_TEAM_PROFILE_PURPLE_WEAPON_ID))
{
ret =
&(rules->team_profile_weapon_id[LW6MAP_TEAM_COLOR_PURPLE]);
}
else
if (!strcmp (formatted_key, LW6DEF_TEAM_PROFILE_PINK_WEAPON_ID))
{
ret = &(rules->team_profile_weapon_id[LW6MAP_TEAM_COLOR_PINK]);
}
else
if (!strcmp
(formatted_key, LW6DEF_TEAM_PROFILE_RED_WEAPON_ALTERNATE_ID))
{
ret =
&(rules->team_profile_weapon_alternate_id
[LW6MAP_TEAM_COLOR_RED]);
}
else
if (!strcmp
(formatted_key,
LW6DEF_TEAM_PROFILE_GREEN_WEAPON_ALTERNATE_ID))
{
ret =
&(rules->team_profile_weapon_alternate_id
[LW6MAP_TEAM_COLOR_GREEN]);
}
else
if (!strcmp
(formatted_key, LW6DEF_TEAM_PROFILE_BLUE_WEAPON_ALTERNATE_ID))
{
ret =
&(rules->team_profile_weapon_alternate_id
[LW6MAP_TEAM_COLOR_BLUE]);
}
else
if (!strcmp
(formatted_key,
LW6DEF_TEAM_PROFILE_YELLOW_WEAPON_ALTERNATE_ID))
{
ret =
&(rules->team_profile_weapon_alternate_id
[LW6MAP_TEAM_COLOR_YELLOW]);
}
else
if (!strcmp
(formatted_key, LW6DEF_TEAM_PROFILE_CYAN_WEAPON_ALTERNATE_ID))
{
ret =
&(rules->team_profile_weapon_alternate_id
[LW6MAP_TEAM_COLOR_CYAN]);
}
else
if (!strcmp
(formatted_key,
LW6DEF_TEAM_PROFILE_MAGENTA_WEAPON_ALTERNATE_ID))
{
ret =
&(rules->team_profile_weapon_alternate_id
[LW6MAP_TEAM_COLOR_MAGENTA]);
}
else
if (!strcmp
(formatted_key,
LW6DEF_TEAM_PROFILE_ORANGE_WEAPON_ALTERNATE_ID))
{
ret =
&(rules->team_profile_weapon_alternate_id
[LW6MAP_TEAM_COLOR_ORANGE]);
}
else
if (!strcmp
(formatted_key,
LW6DEF_TEAM_PROFILE_LIGHTBLUE_WEAPON_ALTERNATE_ID))
{
ret =
&(rules->team_profile_weapon_alternate_id
[LW6MAP_TEAM_COLOR_LIGHTBLUE]);
}
else
if (!strcmp
(formatted_key,
LW6DEF_TEAM_PROFILE_PURPLE_WEAPON_ALTERNATE_ID))
{
ret =
&(rules->team_profile_weapon_alternate_id
[LW6MAP_TEAM_COLOR_PURPLE]);
}
else
if (!strcmp
(formatted_key, LW6DEF_TEAM_PROFILE_PINK_WEAPON_ALTERNATE_ID))
{
ret =
&(rules->team_profile_weapon_alternate_id
[LW6MAP_TEAM_COLOR_PINK]);
}
else
if (!strcmp (formatted_key, LW6DEF_TEAM_PROFILE_RED_WEAPON_MODE))
{
ret = &(rules->team_profile_weapon_mode[LW6MAP_TEAM_COLOR_RED]);
}
else
if (!strcmp
(formatted_key, LW6DEF_TEAM_PROFILE_GREEN_WEAPON_MODE))
{
ret =
&(rules->team_profile_weapon_mode[LW6MAP_TEAM_COLOR_GREEN]);
}
else
if (!strcmp (formatted_key, LW6DEF_TEAM_PROFILE_BLUE_WEAPON_MODE))
{
ret =
&(rules->team_profile_weapon_mode[LW6MAP_TEAM_COLOR_BLUE]);
}
else
if (!strcmp
(formatted_key, LW6DEF_TEAM_PROFILE_YELLOW_WEAPON_MODE))
{
ret =
&(rules->team_profile_weapon_mode[LW6MAP_TEAM_COLOR_YELLOW]);
}
else
if (!strcmp (formatted_key, LW6DEF_TEAM_PROFILE_CYAN_WEAPON_MODE))
{
ret =
&(rules->team_profile_weapon_mode[LW6MAP_TEAM_COLOR_CYAN]);
}
else
if (!strcmp
(formatted_key, LW6DEF_TEAM_PROFILE_MAGENTA_WEAPON_MODE))
{
ret =
&(rules->team_profile_weapon_mode[LW6MAP_TEAM_COLOR_MAGENTA]);
}
else
if (!strcmp
(formatted_key, LW6DEF_TEAM_PROFILE_ORANGE_WEAPON_MODE))
{
ret =
&(rules->team_profile_weapon_mode[LW6MAP_TEAM_COLOR_ORANGE]);
}
else
if (!strcmp
(formatted_key, LW6DEF_TEAM_PROFILE_LIGHTBLUE_WEAPON_MODE))
{
ret =
&(rules->team_profile_weapon_mode
[LW6MAP_TEAM_COLOR_LIGHTBLUE]);
}
else
if (!strcmp
(formatted_key, LW6DEF_TEAM_PROFILE_PURPLE_WEAPON_MODE))
{
ret =
&(rules->team_profile_weapon_mode[LW6MAP_TEAM_COLOR_PURPLE]);
}
else
if (!strcmp (formatted_key, LW6DEF_TEAM_PROFILE_PINK_WEAPON_MODE))
{
ret =
&(rules->team_profile_weapon_mode[LW6MAP_TEAM_COLOR_PINK]);
}
else if (!strcmp (formatted_key, LW6DEF_WEAPON_DURATION))
{
ret = &(rules->weapon_duration);
}
else if (!strcmp (formatted_key, LW6DEF_WEAPON_CHARGE_DELAY))
{
ret = &(rules->weapon_charge_delay);
}
else if (!strcmp (formatted_key, LW6DEF_WEAPON_CHARGE_MAX))
{
ret = &(rules->weapon_charge_max);
}
else if (!strcmp (formatted_key, LW6DEF_WEAPON_TUNE_BERZERK_POWER))
{
ret = &(rules->weapon_tune_berzerk_power);
}
else if (!strcmp (formatted_key, LW6DEF_WEAPON_TUNE_TURBO_POWER))
{
ret = &(rules->weapon_tune_turbo_power);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("static rules key \"%s\" does not exist, can't get a pointer on its value"),
key);
}
LW6SYS_FREE (formatted_key);
}
}
return ret;
}
|
|||||
| ↓ | _init_nodes | 70 | 103 | 267 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/p2p/p2p-test.c |
static int
_init_nodes (char *cli_backends, char *srv_backends, lw6p2p_db_t ** db12,
lw6p2p_db_t ** db34, lw6p2p_db_t ** db56, lw6p2p_node_t ** node1,
lw6p2p_node_t ** node2, lw6p2p_node_t ** node3,
lw6p2p_node_t ** node4, lw6p2p_node_t ** node5,
lw6p2p_node_t ** node6)
{
int argc = _TEST_ARGC;
char *argv[] = { _TEST_ARGV0 };
char *repr = NULL;
int ret = 0;
if (db12)
{
lw6p2p_db_reset (argc, argv, _TEST_DB_NAME12);
(*db12) = lw6p2p_db_open (argc, argv, _TEST_DB_NAME12);
if (*db12)
{
repr = lw6p2p_db_repr (*db12);
if (repr)
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("created db \"%s\""), repr);
LW6SYS_FREE (repr);
}
}
}
if (db34)
{
lw6p2p_db_reset (argc, argv, _TEST_DB_NAME34);
(*db34) = lw6p2p_db_open (argc, argv, _TEST_DB_NAME34);
if (*db34)
{
repr = lw6p2p_db_repr (*db34);
if (repr)
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("created db \"%s\""), repr);
LW6SYS_FREE (repr);
}
}
}
if (db56)
{
lw6p2p_db_reset (argc, argv, _TEST_DB_NAME56);
(*db56) = lw6p2p_db_open (argc, argv, _TEST_DB_NAME56);
if (*db56)
{
repr = lw6p2p_db_repr (*db56);
if (repr)
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("created db \"%s\""), repr);
LW6SYS_FREE (repr);
}
}
}
if (db12 && (*db12))
{
if (node1)
{
(*node1) =
lw6p2p_node_new (argc, argv, *db12, cli_backends,
srv_backends, _TEST_NODE_BIND_IP,
_TEST_NODE_BIND_PORT1, _TEST_NODE_BROADCAST,
_TEST_NODE_PUBLIC_URL1,
_TEST_NODE_TITLE1,
_TEST_NODE_DESCRIPTION, _TEST_NODE_PASSWORD,
_TEST_NODE_BENCH, _TEST_NODE_OPEN_RELAY,
_TEST_NODE_KNOWN_NODES1,
_TEST_NODE_NETWORK_RELIABILITY,
_TEST_NODE_TROJAN);
if (*node1)
{
repr = lw6p2p_node_repr (*node1);
if (repr)
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("created node1 \"%s\""),
repr);
LW6SYS_FREE (repr);
}
}
}
if (node2)
{
(*node2) =
lw6p2p_node_new (argc, argv, *db12, cli_backends,
srv_backends, _TEST_NODE_BIND_IP,
_TEST_NODE_BIND_PORT2, _TEST_NODE_BROADCAST,
_TEST_NODE_PUBLIC_URL2,
_TEST_NODE_TITLE2, _TEST_NODE_DESCRIPTION, NULL,
_TEST_NODE_BENCH, _TEST_NODE_OPEN_RELAY,
_TEST_NODE_KNOWN_NODES2,
_TEST_NODE_NETWORK_RELIABILITY,
_TEST_NODE_TROJAN);
if (*node2)
{
repr = lw6p2p_node_repr (*node2);
if (repr)
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("created node2 \"%s\""),
repr);
LW6SYS_FREE (repr);
}
}
}
}
if (db34 && (*db34))
{
if (node3)
{
(*node3) =
lw6p2p_node_new (argc, argv, *db34, cli_backends,
srv_backends, _TEST_NODE_BIND_IP,
_TEST_NODE_BIND_PORT3, _TEST_NODE_BROADCAST,
_TEST_NODE_PUBLIC_URL3,
_TEST_NODE_TITLE3,
_TEST_NODE_DESCRIPTION, _TEST_NODE_PASSWORD,
_TEST_NODE_BENCH, _TEST_NODE_OPEN_RELAY,
_TEST_NODE_KNOWN_NODES3,
_TEST_NODE_NETWORK_RELIABILITY,
_TEST_NODE_TROJAN);
if (*node3)
{
repr = lw6p2p_node_repr (*node3);
if (repr)
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("created node3 \"%s\""),
repr);
LW6SYS_FREE (repr);
}
}
}
if (node4)
{
(*node4) =
lw6p2p_node_new (argc, argv, *db34, cli_backends,
srv_backends, _TEST_NODE_BIND_IP,
_TEST_NODE_BIND_PORT4, _TEST_NODE_BROADCAST,
_TEST_NODE_PUBLIC_URL4,
_TEST_NODE_TITLE4, _TEST_NODE_DESCRIPTION, NULL,
_TEST_NODE_BENCH, _TEST_NODE_OPEN_RELAY,
_TEST_NODE_KNOWN_NODES4,
_TEST_NODE_NETWORK_RELIABILITY,
_TEST_NODE_TROJAN);
if (*node4)
{
repr = lw6p2p_node_repr (*node4);
if (repr)
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("created node4 \"%s\""),
repr);
LW6SYS_FREE (repr);
}
}
}
}
if (db56 && (*db56))
{
if (node5)
{
(*node5) =
lw6p2p_node_new (argc, argv, *db56, cli_backends,
srv_backends, _TEST_NODE_BIND_IP,
_TEST_NODE_BIND_PORT5, _TEST_NODE_BROADCAST,
_TEST_NODE_PUBLIC_URL5,
_TEST_NODE_TITLE5,
_TEST_NODE_DESCRIPTION, NULL,
_TEST_NODE_BENCH, _TEST_NODE_OPEN_RELAY,
_TEST_NODE_KNOWN_NODES5,
_TEST_NODE_NETWORK_RELIABILITY,
_TEST_NODE_TROJAN);
if (*node5)
{
repr = lw6p2p_node_repr (*node5);
if (repr)
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("created node5 \"%s\""),
repr);
LW6SYS_FREE (repr);
}
}
}
if (node6)
{
(*node6) =
lw6p2p_node_new (argc, argv, *db56, cli_backends,
srv_backends, _TEST_NODE_BIND_IP,
_TEST_NODE_BIND_PORT6, _TEST_NODE_BROADCAST,
_TEST_NODE_PUBLIC_URL6,
_TEST_NODE_TITLE6, _TEST_NODE_DESCRIPTION, NULL,
_TEST_NODE_BENCH, _TEST_NODE_OPEN_RELAY,
_TEST_NODE_KNOWN_NODES6,
_TEST_NODE_NETWORK_RELIABILITY,
_TEST_NODE_TROJAN);
if (*node6)
{
repr = lw6p2p_node_repr (*node6);
if (repr)
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("created node6 \"%s\""),
repr);
LW6SYS_FREE (repr);
}
}
}
}
if (((!node1) || (node1 && *node1))
&& ((!node2) || (node2 && *node2)) && ((!node3) || (node3 && *node3))
&& ((!node4) || (node4 && *node4)) && ((!node5) || (node5 && *node5))
&& ((!node6) || (node6 && *node6)))
{
ret = 1;
}
else
{
if (node1 && *node1)
{
lw6p2p_node_free (*node1);
(*node1) = NULL;
}
if (node2 && *node2)
{
lw6p2p_node_free (*node2);
(*node2) = NULL;
}
if (node3 && *node3)
{
lw6p2p_node_free (*node3);
(*node3) = NULL;
}
if (node4 && *node4)
{
lw6p2p_node_free (*node4);
(*node4) = NULL;
}
if (node5 && *node5)
{
lw6p2p_node_free (*node4);
(*node4) = NULL;
}
if (node6 && *node6)
{
lw6p2p_node_free (*node6);
(*node6) = NULL;
}
if (db12 && *db12)
{
lw6p2p_db_close (*db12);
(*db12) = NULL;
}
if (db34 && *db34)
{
lw6p2p_db_close (*db34);
(*db34) = NULL;
}
if (db56 && *db56)
{
lw6p2p_db_close (*db56);
(*db56) = NULL;
}
}
return ret;
}
|
|||||
| ↓ | lw6map_style_set | 66 | 136 | 298 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/map/map-style.c |
int
lw6map_style_set (lw6map_style_t * style, char *key, char *value)
{
int ret = 1;
char *formatted_key = NULL;
formatted_key = lw6sys_keyword_as_key (key);
if (formatted_key)
{
if (!strcmp (LW6DEF_KEEP_RATIO, formatted_key))
{
style->keep_ratio = lw6sys_atob (value);
}
else if (!strcmp (LW6DEF_ZOOM, formatted_key))
{
style->zoom = lw6sys_atof (value);
}
else if (!strcmp (LW6DEF_ZOOM_MIN, formatted_key))
{
style->zoom_min = lw6sys_atof (value);
}
else if (!strcmp (LW6DEF_ZOOM_MAX, formatted_key))
{
style->zoom_max = lw6sys_atof (value);
}
else if (!strcmp (LW6DEF_X_WRAP, formatted_key))
{
style->x_wrap = lw6sys_atob (value);
}
else if (!strcmp (LW6DEF_Y_WRAP, formatted_key))
{
style->y_wrap = lw6sys_atob (value);
}
else if (!strcmp (LW6DEF_BACKGROUND_STYLE, formatted_key))
{
if (style->background_style)
{
LW6SYS_FREE (style->background_style);
}
style->background_style = lw6sys_str_copy (value);
}
else if (!strcmp (LW6DEF_HUD_STYLE, formatted_key))
{
if (style->hud_style)
{
LW6SYS_FREE (style->hud_style);
}
style->hud_style = lw6sys_str_copy (value);
}
else if (!strcmp (LW6DEF_MENU_STYLE, formatted_key))
{
if (style->menu_style)
{
LW6SYS_FREE (style->menu_style);
}
style->menu_style = lw6sys_str_copy (value);
}
else if (!strcmp (LW6DEF_VIEW_STYLE, formatted_key))
{
if (style->view_style)
{
LW6SYS_FREE (style->view_style);
}
style->view_style = lw6sys_str_copy (value);
}
else if (!strcmp (LW6DEF_ANIMATION_DENSITY, formatted_key))
{
style->animation_density = lw6sys_atof (value);
}
else if (!strcmp (LW6DEF_ANIMATION_SPEED, formatted_key))
{
style->animation_speed = lw6sys_atof (value);
}
else if (!strcmp (LW6DEF_CURSOR_SIZE, formatted_key))
{
style->cursor_size = lw6sys_atof (value);
}
else if (!strcmp (LW6DEF_COLORIZE_CURSOR, formatted_key))
{
style->colorize_cursor = lw6sys_atob (value);
}
else if (!strcmp (LW6DEF_BLINK_CURSOR, formatted_key))
{
style->blink_cursor = lw6sys_atob (value);
}
else if (!strcmp (LW6DEF_HIDDEN_LAYER_ALPHA, formatted_key))
{
style->hidden_layer_alpha = lw6sys_atof (value);
}
else if (!strcmp (LW6DEF_COLORIZE, formatted_key))
{
style->colorize = lw6sys_atob (value);
}
else if (!strcmp (LW6DEF_PIXELIZE, formatted_key))
{
style->pixelize = lw6sys_atob (value);
}
else if (!strcmp (LW6DEF_COLOR_BASE_BG, formatted_key))
{
style->color_set.color_base.bg = lw6sys_color_a_to_8 (value);
}
else if (!strcmp (LW6DEF_COLOR_BASE_FG, formatted_key))
{
style->color_set.color_base.fg = lw6sys_color_a_to_8 (value);
}
else if (!strcmp (LW6DEF_COLOR_ALTERNATE_BG, formatted_key))
{
style->color_set.color_alternate.bg = lw6sys_color_a_to_8 (value);
}
else if (!strcmp (LW6DEF_COLOR_ALTERNATE_FG, formatted_key))
{
style->color_set.color_alternate.fg = lw6sys_color_a_to_8 (value);
}
else if (!strcmp (LW6DEF_BACKGROUND_COLOR_ROOT_BG, formatted_key))
{
style->color_set.background_color_root.bg =
lw6sys_color_a_to_8 (value);
}
else if (!strcmp (LW6DEF_BACKGROUND_COLOR_ROOT_FG, formatted_key))
{
style->color_set.background_color_root.fg =
lw6sys_color_a_to_8 (value);
}
else if (!strcmp (LW6DEF_BACKGROUND_COLOR_STUFF_BG, formatted_key))
{
style->color_set.background_color_stuff.bg =
lw6sys_color_a_to_8 (value);
}
else if (!strcmp (LW6DEF_BACKGROUND_COLOR_STUFF_FG, formatted_key))
{
style->color_set.background_color_stuff.fg =
lw6sys_color_a_to_8 (value);
}
else if (!strcmp (LW6DEF_HUD_COLOR_FRAME_BG, formatted_key))
{
style->color_set.hud_color_frame.bg = lw6sys_color_a_to_8 (value);
}
else if (!strcmp (LW6DEF_HUD_COLOR_FRAME_FG, formatted_key))
{
style->color_set.hud_color_frame.fg = lw6sys_color_a_to_8 (value);
}
else if (!strcmp (LW6DEF_HUD_COLOR_TEXT_BG, formatted_key))
{
style->color_set.hud_color_text.bg = lw6sys_color_a_to_8 (value);
}
else if (!strcmp (LW6DEF_HUD_COLOR_TEXT_FG, formatted_key))
{
style->color_set.hud_color_text.fg = lw6sys_color_a_to_8 (value);
}
else if (!strcmp (LW6DEF_MENU_COLOR_DEFAULT_BG, formatted_key))
{
style->color_set.menu_color_default.bg =
lw6sys_color_a_to_8 (value);
}
else if (!strcmp (LW6DEF_MENU_COLOR_DEFAULT_FG, formatted_key))
{
style->color_set.menu_color_default.fg =
lw6sys_color_a_to_8 (value);
}
else if (!strcmp (LW6DEF_MENU_COLOR_SELECTED_BG, formatted_key))
{
style->color_set.menu_color_selected.bg =
lw6sys_color_a_to_8 (value);
}
else if (!strcmp (LW6DEF_MENU_COLOR_SELECTED_FG, formatted_key))
{
style->color_set.menu_color_selected.fg =
lw6sys_color_a_to_8 (value);
}
else if (!strcmp (LW6DEF_MENU_COLOR_DISABLED_BG, formatted_key))
{
style->color_set.menu_color_disabled.bg =
lw6sys_color_a_to_8 (value);
}
else if (!strcmp (LW6DEF_MENU_COLOR_DISABLED_FG, formatted_key))
{
style->color_set.menu_color_disabled.fg =
lw6sys_color_a_to_8 (value);
}
else if (!strcmp (LW6DEF_VIEW_COLOR_CURSOR_BG, formatted_key))
{
style->color_set.view_color_cursor.bg = lw6sys_color_a_to_8 (value);
}
else if (!strcmp (LW6DEF_VIEW_COLOR_CURSOR_FG, formatted_key))
{
style->color_set.view_color_cursor.fg = lw6sys_color_a_to_8 (value);
}
else if (!strcmp (LW6DEF_VIEW_COLOR_MAP_BG, formatted_key))
{
style->color_set.view_color_map.bg = lw6sys_color_a_to_8 (value);
}
else if (!strcmp (LW6DEF_VIEW_COLOR_MAP_FG, formatted_key))
{
style->color_set.view_color_map.fg = lw6sys_color_a_to_8 (value);
}
else if (!strcmp (LW6DEF_SYSTEM_COLOR_BG, formatted_key))
{
style->color_set.system_color.bg = lw6sys_color_a_to_8 (value);
}
else if (!strcmp (LW6DEF_SYSTEM_COLOR_FG, formatted_key))
{
style->color_set.system_color.fg = lw6sys_color_a_to_8 (value);
}
else if (!strcmp (LW6DEF_TEAM_COLOR_DEAD, formatted_key))
{
style->color_set.team_color_dead = lw6sys_color_a_to_8 (value);
}
else if (!strcmp (LW6DEF_TEAM_COLOR_RED, formatted_key))
{
style->color_set.team_colors[LW6MAP_TEAM_COLOR_RED] =
lw6sys_color_a_to_8 (value);
}
else if (!strcmp (LW6DEF_TEAM_COLOR_GREEN, formatted_key))
{
style->color_set.team_colors[LW6MAP_TEAM_COLOR_GREEN] =
lw6sys_color_a_to_8 (value);
}
else if (!strcmp (LW6DEF_TEAM_COLOR_BLUE, formatted_key))
{
style->color_set.team_colors[LW6MAP_TEAM_COLOR_BLUE] =
lw6sys_color_a_to_8 (value);
}
else if (!strcmp (LW6DEF_TEAM_COLOR_YELLOW, formatted_key))
{
style->color_set.team_colors[LW6MAP_TEAM_COLOR_YELLOW] =
lw6sys_color_a_to_8 (value);
}
else if (!strcmp (LW6DEF_TEAM_COLOR_CYAN, formatted_key))
{
style->color_set.team_colors[LW6MAP_TEAM_COLOR_CYAN] =
lw6sys_color_a_to_8 (value);
}
else if (!strcmp (LW6DEF_TEAM_COLOR_MAGENTA, formatted_key))
{
style->color_set.team_colors[LW6MAP_TEAM_COLOR_MAGENTA] =
lw6sys_color_a_to_8 (value);
}
else if (!strcmp (LW6DEF_TEAM_COLOR_ORANGE, formatted_key))
{
style->color_set.team_colors[LW6MAP_TEAM_COLOR_ORANGE] =
lw6sys_color_a_to_8 (value);
}
else if (!strcmp (LW6DEF_TEAM_COLOR_LIGHTBLUE, formatted_key))
{
style->color_set.team_colors[LW6MAP_TEAM_COLOR_LIGHTBLUE] =
lw6sys_color_a_to_8 (value);
}
else if (!strcmp (LW6DEF_TEAM_COLOR_PURPLE, formatted_key))
{
style->color_set.team_colors[LW6MAP_TEAM_COLOR_PURPLE] =
lw6sys_color_a_to_8 (value);
}
else if (!strcmp (LW6DEF_TEAM_COLOR_PINK, formatted_key))
{
style->color_set.team_colors[LW6MAP_TEAM_COLOR_PINK] =
lw6sys_color_a_to_8 (value);
}
else if (!strcmp (LW6DEF_MUSIC_FILE, formatted_key))
{
if (style->music_file)
{
LW6SYS_FREE (style->music_file);
}
style->music_file = lw6sys_str_copy (value);
}
else if (!strcmp (LW6DEF_MUSIC_FILTER, formatted_key))
{
if (style->music_filter)
{
LW6SYS_FREE (style->music_filter);
}
style->music_filter = lw6sys_str_copy (value);
}
else if (!strcmp (LW6DEF_MUSIC_EXCLUDE, formatted_key))
{
if (style->music_exclude)
{
LW6SYS_FREE (style->music_exclude);
}
style->music_exclude = lw6sys_str_copy (value);
}
else if (!strcmp (LW6DEF_WAVES, formatted_key))
{
style->waves = lw6sys_atob (value);
}
else
{
ret = 0; // no entry matches
}
LW6SYS_FREE (formatted_key);
}
else
{
ret = 0;
}
return ret;
}
|
|||||
| ↓ | lw6map_style_get | 59 | 120 | 266 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/map/map-style.c |
char *
lw6map_style_get (lw6map_style_t * style, char *key)
{
char *ret = NULL;
char *formatted_key = NULL;
formatted_key = lw6sys_keyword_as_key (key);
if (formatted_key)
{
if (!strcmp (LW6DEF_KEEP_RATIO, formatted_key))
{
ret = lw6sys_btoa (style->keep_ratio);
}
else if (!strcmp (LW6DEF_ZOOM, formatted_key))
{
ret = lw6sys_ftoa (style->zoom);
}
else if (!strcmp (LW6DEF_ZOOM_MIN, formatted_key))
{
ret = lw6sys_ftoa (style->zoom_min);
}
else if (!strcmp (LW6DEF_ZOOM_MAX, formatted_key))
{
ret = lw6sys_ftoa (style->zoom_max);
}
else if (!strcmp (LW6DEF_X_WRAP, formatted_key))
{
ret = lw6sys_btoa (style->x_wrap);
}
else if (!strcmp (LW6DEF_Y_WRAP, formatted_key))
{
ret = lw6sys_btoa (style->y_wrap);
}
else if (!strcmp (LW6DEF_BACKGROUND_STYLE, formatted_key))
{
ret = lw6sys_str_copy (style->background_style);
}
else if (!strcmp (LW6DEF_HUD_STYLE, formatted_key))
{
ret = lw6sys_str_copy (style->hud_style);
}
else if (!strcmp (LW6DEF_MENU_STYLE, formatted_key))
{
ret = lw6sys_str_copy (style->menu_style);
}
else if (!strcmp (LW6DEF_VIEW_STYLE, formatted_key))
{
ret = lw6sys_str_copy (style->view_style);
}
else if (!strcmp (LW6DEF_ANIMATION_DENSITY, formatted_key))
{
ret = lw6sys_ftoa (style->animation_density);
}
else if (!strcmp (LW6DEF_ANIMATION_SPEED, formatted_key))
{
ret = lw6sys_ftoa (style->animation_speed);
}
else if (!strcmp (LW6DEF_CURSOR_SIZE, formatted_key))
{
ret = lw6sys_ftoa (style->cursor_size);
}
else if (!strcmp (LW6DEF_COLORIZE_CURSOR, formatted_key))
{
ret = lw6sys_btoa (style->colorize_cursor);
}
else if (!strcmp (LW6DEF_BLINK_CURSOR, formatted_key))
{
ret = lw6sys_btoa (style->blink_cursor);
}
else if (!strcmp (LW6DEF_HIDDEN_LAYER_ALPHA, formatted_key))
{
ret = lw6sys_ftoa (style->hidden_layer_alpha);
}
else if (!strcmp (LW6DEF_COLORIZE, formatted_key))
{
ret = lw6sys_btoa (style->colorize);
}
else if (!strcmp (LW6DEF_PIXELIZE, formatted_key))
{
ret = lw6sys_btoa (style->pixelize);
}
else if (!strcmp (LW6DEF_COLOR_BASE_BG, formatted_key))
{
ret = lw6sys_color_8_to_a (style->color_set.color_base.bg);
}
else if (!strcmp (LW6DEF_COLOR_BASE_FG, formatted_key))
{
ret = lw6sys_color_8_to_a (style->color_set.color_base.fg);
}
else if (!strcmp (LW6DEF_COLOR_ALTERNATE_BG, formatted_key))
{
ret = lw6sys_color_8_to_a (style->color_set.color_alternate.bg);
}
else if (!strcmp (LW6DEF_COLOR_ALTERNATE_FG, formatted_key))
{
ret = lw6sys_color_8_to_a (style->color_set.color_alternate.fg);
}
else if (!strcmp (LW6DEF_BACKGROUND_COLOR_ROOT_BG, formatted_key))
{
ret =
lw6sys_color_8_to_a (style->color_set.background_color_root.bg);
}
else if (!strcmp (LW6DEF_BACKGROUND_COLOR_ROOT_FG, formatted_key))
{
ret =
lw6sys_color_8_to_a (style->color_set.background_color_root.fg);
}
else if (!strcmp (LW6DEF_BACKGROUND_COLOR_STUFF_BG, formatted_key))
{
ret =
lw6sys_color_8_to_a (style->color_set.background_color_stuff.bg);
}
else if (!strcmp (LW6DEF_BACKGROUND_COLOR_STUFF_FG, formatted_key))
{
ret =
lw6sys_color_8_to_a (style->color_set.background_color_stuff.fg);
}
else if (!strcmp (LW6DEF_HUD_COLOR_FRAME_BG, formatted_key))
{
ret = lw6sys_color_8_to_a (style->color_set.hud_color_frame.bg);
}
else if (!strcmp (LW6DEF_HUD_COLOR_FRAME_FG, formatted_key))
{
ret = lw6sys_color_8_to_a (style->color_set.hud_color_frame.fg);
}
else if (!strcmp (LW6DEF_HUD_COLOR_TEXT_BG, formatted_key))
{
ret = lw6sys_color_8_to_a (style->color_set.color_base.bg);
}
else if (!strcmp (LW6DEF_HUD_COLOR_TEXT_FG, formatted_key))
{
ret = lw6sys_color_8_to_a (style->color_set.color_base.fg);
}
else if (!strcmp (LW6DEF_MENU_COLOR_DEFAULT_BG, formatted_key))
{
ret = lw6sys_color_8_to_a (style->color_set.menu_color_default.bg);
}
else if (!strcmp (LW6DEF_MENU_COLOR_DEFAULT_FG, formatted_key))
{
ret = lw6sys_color_8_to_a (style->color_set.menu_color_default.fg);
}
else if (!strcmp (LW6DEF_MENU_COLOR_SELECTED_BG, formatted_key))
{
ret = lw6sys_color_8_to_a (style->color_set.menu_color_selected.bg);
}
else if (!strcmp (LW6DEF_MENU_COLOR_SELECTED_FG, formatted_key))
{
ret = lw6sys_color_8_to_a (style->color_set.menu_color_selected.fg);
}
else if (!strcmp (LW6DEF_MENU_COLOR_DISABLED_BG, formatted_key))
{
ret = lw6sys_color_8_to_a (style->color_set.menu_color_disabled.bg);
}
else if (!strcmp (LW6DEF_MENU_COLOR_DISABLED_FG, formatted_key))
{
ret = lw6sys_color_8_to_a (style->color_set.menu_color_disabled.fg);
}
else if (!strcmp (LW6DEF_VIEW_COLOR_CURSOR_BG, formatted_key))
{
ret = lw6sys_color_8_to_a (style->color_set.view_color_cursor.bg);
}
else if (!strcmp (LW6DEF_VIEW_COLOR_CURSOR_FG, formatted_key))
{
ret = lw6sys_color_8_to_a (style->color_set.view_color_cursor.fg);
}
else if (!strcmp (LW6DEF_VIEW_COLOR_MAP_BG, formatted_key))
{
ret = lw6sys_color_8_to_a (style->color_set.view_color_map.bg);
}
else if (!strcmp (LW6DEF_VIEW_COLOR_MAP_FG, formatted_key))
{
ret = lw6sys_color_8_to_a (style->color_set.view_color_map.fg);
}
else if (!strcmp (LW6DEF_SYSTEM_COLOR_BG, formatted_key))
{
ret = lw6sys_color_8_to_a (style->color_set.system_color.bg);
}
else if (!strcmp (LW6DEF_SYSTEM_COLOR_FG, formatted_key))
{
ret = lw6sys_color_8_to_a (style->color_set.system_color.fg);
}
else if (!strcmp (LW6DEF_TEAM_COLOR_DEAD, formatted_key))
{
ret = lw6sys_color_8_to_a (style->color_set.team_color_dead);
}
else if (!strcmp (LW6DEF_TEAM_COLOR_RED, formatted_key))
{
ret =
lw6sys_color_8_to_a (style->color_set.team_colors
[LW6MAP_TEAM_COLOR_RED]);
}
else if (!strcmp (LW6DEF_TEAM_COLOR_GREEN, formatted_key))
{
ret =
lw6sys_color_8_to_a (style->color_set.team_colors
[LW6MAP_TEAM_COLOR_GREEN]);
}
else if (!strcmp (LW6DEF_TEAM_COLOR_BLUE, formatted_key))
{
ret =
lw6sys_color_8_to_a (style->color_set.team_colors
[LW6MAP_TEAM_COLOR_BLUE]);
}
else if (!strcmp (LW6DEF_TEAM_COLOR_YELLOW, formatted_key))
{
ret =
lw6sys_color_8_to_a (style->color_set.team_colors
[LW6MAP_TEAM_COLOR_YELLOW]);
}
else if (!strcmp (LW6DEF_TEAM_COLOR_CYAN, formatted_key))
{
ret =
lw6sys_color_8_to_a (style->color_set.team_colors
[LW6MAP_TEAM_COLOR_CYAN]);
}
else if (!strcmp (LW6DEF_TEAM_COLOR_MAGENTA, formatted_key))
{
ret =
lw6sys_color_8_to_a (style->color_set.team_colors
[LW6MAP_TEAM_COLOR_MAGENTA]);
}
else if (!strcmp (LW6DEF_TEAM_COLOR_ORANGE, formatted_key))
{
ret =
lw6sys_color_8_to_a (style->color_set.team_colors
[LW6MAP_TEAM_COLOR_ORANGE]);
}
else if (!strcmp (LW6DEF_TEAM_COLOR_LIGHTBLUE, formatted_key))
{
ret =
lw6sys_color_8_to_a (style->color_set.team_colors
[LW6MAP_TEAM_COLOR_LIGHTBLUE]);
}
else if (!strcmp (LW6DEF_TEAM_COLOR_PURPLE, formatted_key))
{
ret =
lw6sys_color_8_to_a (style->color_set.team_colors
[LW6MAP_TEAM_COLOR_PURPLE]);
}
else if (!strcmp (LW6DEF_TEAM_COLOR_PINK, formatted_key))
{
ret =
lw6sys_color_8_to_a (style->color_set.team_colors
[LW6MAP_TEAM_COLOR_PINK]);
}
else if (!strcmp (LW6DEF_MUSIC_FILE, formatted_key))
{
ret = lw6sys_str_copy (style->music_file);
}
else if (!strcmp (LW6DEF_MUSIC_FILTER, formatted_key))
{
ret = lw6sys_str_copy (style->music_filter);
}
else if (!strcmp (LW6DEF_MUSIC_EXCLUDE, formatted_key))
{
ret = lw6sys_str_copy (style->music_exclude);
}
else if (!strcmp (LW6DEF_WAVES, formatted_key))
{
ret = lw6sys_btoa (style->waves);
}
LW6SYS_FREE (formatted_key);
}
return ret;
}
|
|||||
| ↓ | key_up | 57 | 33 | 110 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/gfx/mod-gl/gl-utils/gl-utils-event.c |
static void
key_up (lw6gui_keyboard_t * keyboard, SDL_Event * event,
mod_gl_utils_const_data_t * const_data)
{
int sym = 0;
sym = event->key.keysym.sym;
lw6gui_keyboard_register_key_up (keyboard, sym);
if (sym == const_data->keysym1_up ||
sym == const_data->keysym2_up ||
sym == const_data->keysym3_up || sym == const_data->keysym4_up)
{
if (!lw6gui_keyboard_is_pressed (keyboard, const_data->keysym1_up)
&& !lw6gui_keyboard_is_pressed (keyboard, const_data->keysym2_up)
&& !lw6gui_keyboard_is_pressed (keyboard, const_data->keysym3_up)
&& !lw6gui_keyboard_is_pressed (keyboard, const_data->keysym4_up))
{
lw6gui_button_register_up (&(keyboard->arrow_up));
}
}
if (sym == const_data->keysym1_down ||
sym == const_data->keysym2_down ||
sym == const_data->keysym3_down || sym == const_data->keysym4_down)
{
if (!lw6gui_keyboard_is_pressed (keyboard, const_data->keysym1_down)
&& !lw6gui_keyboard_is_pressed (keyboard, const_data->keysym2_down)
&& !lw6gui_keyboard_is_pressed (keyboard, const_data->keysym3_down)
&& !lw6gui_keyboard_is_pressed (keyboard, const_data->keysym4_down))
{
lw6gui_button_register_up (&(keyboard->arrow_down));
}
}
if (sym == const_data->keysym1_left ||
sym == const_data->keysym2_left ||
sym == const_data->keysym3_left || sym == const_data->keysym4_left)
{
if (!lw6gui_keyboard_is_pressed (keyboard, const_data->keysym1_left)
&& !lw6gui_keyboard_is_pressed (keyboard, const_data->keysym2_left)
&& !lw6gui_keyboard_is_pressed (keyboard, const_data->keysym3_left)
&& !lw6gui_keyboard_is_pressed (keyboard, const_data->keysym4_left))
{
lw6gui_button_register_up (&(keyboard->arrow_left));
}
}
if (sym == const_data->keysym1_right ||
sym == const_data->keysym2_right ||
sym == const_data->keysym3_right || sym == const_data->keysym4_right)
{
if (!lw6gui_keyboard_is_pressed (keyboard, const_data->keysym1_right)
&& !lw6gui_keyboard_is_pressed (keyboard, const_data->keysym2_right)
&& !lw6gui_keyboard_is_pressed (keyboard, const_data->keysym3_right)
&& !lw6gui_keyboard_is_pressed (keyboard,
const_data->keysym4_right))
{
lw6gui_button_register_up (&(keyboard->arrow_right));
}
}
if (sym == const_data->keysym1_enter || sym == const_data->keysym2_enter)
{
if (!lw6gui_keyboard_is_pressed (keyboard, const_data->keysym1_enter)
&& !lw6gui_keyboard_is_pressed (keyboard,
const_data->keysym2_enter))
{
lw6gui_button_register_up (&(keyboard->key_enter));
}
}
if (sym == const_data->keysym1_esc || sym == const_data->keysym2_esc)
{
if (!lw6gui_keyboard_is_pressed (keyboard, const_data->keysym1_esc)
&& !lw6gui_keyboard_is_pressed (keyboard, const_data->keysym2_esc))
{
lw6gui_button_register_up (&(keyboard->key_esc));
}
}
if (sym == const_data->keysym1_ctrl || sym == const_data->keysym2_ctrl)
{
if (!lw6gui_keyboard_is_pressed (keyboard, const_data->keysym1_ctrl)
&& !lw6gui_keyboard_is_pressed (keyboard, const_data->keysym2_ctrl))
{
lw6gui_button_register_up (&(keyboard->key_ctrl));
}
}
if (sym == const_data->keysym1_alt || sym == const_data->keysym2_alt)
{
if (!lw6gui_keyboard_is_pressed (keyboard, const_data->keysym1_alt)
&& !lw6gui_keyboard_is_pressed (keyboard, const_data->keysym2_alt))
{
lw6gui_button_register_up (&(keyboard->key_alt));
}
}
if (sym == const_data->keysym1_pgup || sym == const_data->keysym2_pgup)
{
if (!lw6gui_keyboard_is_pressed (keyboard, const_data->keysym1_pgup)
&& !lw6gui_keyboard_is_pressed (keyboard, const_data->keysym2_pgup))
{
lw6gui_button_register_up (&(keyboard->key_pgup));
}
}
if (sym == const_data->keysym1_pgdown || sym == const_data->keysym2_pgdown)
{
if (!lw6gui_keyboard_is_pressed (keyboard, const_data->keysym1_pgdown)
&& !lw6gui_keyboard_is_pressed (keyboard,
const_data->keysym2_pgdown))
{
lw6gui_button_register_up (&(keyboard->key_pgdown));
}
}
}
|
|||||
| ↓ | pop_param | 55 | 62 | 193 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/map/map-hexa.c |
static int
pop_param (lw6sys_hexa_serializer_t * hexa_serializer, lw6map_param_t * param)
{
int ret = 1;
int32_t value;
int i;
char *key;
for (i = 0; (key = LW6MAP_RULES_LIST[i]) != NULL && ret; ++i)
{
ret = ret && lw6sys_hexa_serializer_pop_int32 (hexa_serializer, &value);
if (ret)
{
lw6map_rules_set_int (&(param->rules), key, value);
}
}
ret = ret
&& lw6sys_hexa_serializer_pop_int32 (hexa_serializer,
&(param->style.keep_ratio));
ret = ret
&& lw6sys_hexa_serializer_pop_float (hexa_serializer,
&(param->style.zoom));
ret = ret
&& lw6sys_hexa_serializer_pop_float (hexa_serializer,
&(param->style.zoom_min));
ret = ret
&& lw6sys_hexa_serializer_pop_float (hexa_serializer,
&(param->style.zoom_max));
ret = ret
&& lw6sys_hexa_serializer_pop_int32 (hexa_serializer,
&(param->style.x_wrap));
ret = ret
&& lw6sys_hexa_serializer_pop_int32 (hexa_serializer,
&(param->style.y_wrap));
ret = ret
&& lw6sys_hexa_serializer_pop_str (hexa_serializer,
&(param->style.background_style));
ret = ret
&& lw6sys_hexa_serializer_pop_str (hexa_serializer,
&(param->style.hud_style));
ret = ret
&& lw6sys_hexa_serializer_pop_str (hexa_serializer,
&(param->style.menu_style));
ret = ret
&& lw6sys_hexa_serializer_pop_str (hexa_serializer,
&(param->style.view_style));
ret = ret
&& lw6sys_hexa_serializer_pop_float (hexa_serializer,
&(param->style.animation_density));
ret = ret
&& lw6sys_hexa_serializer_pop_float (hexa_serializer,
&(param->style.animation_speed));
ret = ret
&& lw6sys_hexa_serializer_pop_float (hexa_serializer,
&(param->style.cursor_size));
ret = ret
&& lw6sys_hexa_serializer_pop_int32 (hexa_serializer,
&(param->style.colorize_cursor));
ret = ret
&& lw6sys_hexa_serializer_pop_int32 (hexa_serializer,
&(param->style.blink_cursor));
ret = ret
&& lw6sys_hexa_serializer_pop_float (hexa_serializer,
&(param->style.hidden_layer_alpha));
ret = ret
&& lw6sys_hexa_serializer_pop_int32 (hexa_serializer,
&(param->style.colorize));
ret = ret
&& lw6sys_hexa_serializer_pop_int32 (hexa_serializer,
&(param->style.pixelize));
ret = ret
&& lw6sys_hexa_serializer_pop_color (hexa_serializer,
&(param->style.color_set.color_base.
bg));
ret = ret
&& lw6sys_hexa_serializer_pop_color (hexa_serializer,
&(param->style.color_set.color_base.
fg));
ret = ret
&& lw6sys_hexa_serializer_pop_color (hexa_serializer,
&(param->style.color_set.
color_alternate.bg));
ret = ret
&& lw6sys_hexa_serializer_pop_color (hexa_serializer,
&(param->style.color_set.
color_alternate.fg));
ret = ret
&& lw6sys_hexa_serializer_pop_color (hexa_serializer,
&(param->style.color_set.
background_color_root.bg));
ret = ret
&& lw6sys_hexa_serializer_pop_color (hexa_serializer,
&(param->style.color_set.
background_color_root.fg));
ret = ret
&& lw6sys_hexa_serializer_pop_color (hexa_serializer,
&(param->style.color_set.
background_color_stuff.bg));
ret = ret
&& lw6sys_hexa_serializer_pop_color (hexa_serializer,
&(param->style.color_set.
background_color_stuff.fg));
ret = ret
&& lw6sys_hexa_serializer_pop_color (hexa_serializer,
&(param->style.color_set.
hud_color_frame.bg));
ret = ret
&& lw6sys_hexa_serializer_pop_color (hexa_serializer,
&(param->style.color_set.
hud_color_frame.fg));
ret = ret
&& lw6sys_hexa_serializer_pop_color (hexa_serializer,
&(param->style.color_set.
hud_color_text.bg));
ret = ret
&& lw6sys_hexa_serializer_pop_color (hexa_serializer,
&(param->style.color_set.
hud_color_text.fg));
ret = ret
&& lw6sys_hexa_serializer_pop_color (hexa_serializer,
&(param->style.color_set.
menu_color_default.bg));
ret = ret
&& lw6sys_hexa_serializer_pop_color (hexa_serializer,
&(param->style.color_set.
menu_color_default.fg));
ret = ret
&& lw6sys_hexa_serializer_pop_color (hexa_serializer,
&(param->style.color_set.
menu_color_selected.bg));
ret = ret
&& lw6sys_hexa_serializer_pop_color (hexa_serializer,
&(param->style.color_set.
menu_color_selected.fg));
ret = ret
&& lw6sys_hexa_serializer_pop_color (hexa_serializer,
&(param->style.color_set.
menu_color_disabled.bg));
ret = ret
&& lw6sys_hexa_serializer_pop_color (hexa_serializer,
&(param->style.color_set.
menu_color_disabled.fg));
ret = ret
&& lw6sys_hexa_serializer_pop_color (hexa_serializer,
&(param->style.color_set.
view_color_cursor.bg));
ret = ret
&& lw6sys_hexa_serializer_pop_color (hexa_serializer,
&(param->style.color_set.
view_color_cursor.fg));
ret = ret
&& lw6sys_hexa_serializer_pop_color (hexa_serializer,
&(param->style.color_set.
view_color_map.bg));
ret = ret
&& lw6sys_hexa_serializer_pop_color (hexa_serializer,
&(param->style.color_set.
view_color_map.fg));
ret = ret
&& lw6sys_hexa_serializer_pop_color (hexa_serializer,
&(param->style.color_set.
system_color.bg));
ret = ret
&& lw6sys_hexa_serializer_pop_color (hexa_serializer,
&(param->style.color_set.
system_color.fg));
ret = ret
&& lw6sys_hexa_serializer_pop_color (hexa_serializer,
&(param->style.color_set.
team_color_dead));
for (i = 0; i < LW6MAP_NB_TEAM_COLORS && ret; ++i)
{
ret = ret
&& lw6sys_hexa_serializer_pop_color (hexa_serializer,
&(param->style.color_set.
team_colors[i]));
}
ret = ret
&& lw6sys_hexa_serializer_pop_str (hexa_serializer,
&(param->style.music_file));
ret = ret
&& lw6sys_hexa_serializer_pop_str (hexa_serializer,
&(param->style.music_filter));
ret = ret
&& lw6sys_hexa_serializer_pop_str (hexa_serializer,
&(param->style.music_exclude));
ret = ret
&& lw6sys_hexa_serializer_pop_int32 (hexa_serializer,
&(param->style.waves));
return ret;
}
|
|||||
| ↓ | push_param | 54 | 60 | 189 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/map/map-hexa.c |
static int
push_param (lw6sys_hexa_serializer_t * hexa_serializer,
lw6map_param_t * param)
{
int ret = 1;
int i, value;
char *key;
for (i = 0; (key = LW6MAP_RULES_LIST[i]) != NULL && ret; ++i)
{
value = lw6map_rules_get_int (&(param->rules), key);
ret = ret && lw6sys_hexa_serializer_push_int32 (hexa_serializer, value);
}
ret = ret
&& lw6sys_hexa_serializer_push_int32 (hexa_serializer,
param->style.keep_ratio);
ret = ret
&& lw6sys_hexa_serializer_push_float (hexa_serializer, param->style.zoom);
ret = ret
&& lw6sys_hexa_serializer_push_float (hexa_serializer,
param->style.zoom_min);
ret = ret
&& lw6sys_hexa_serializer_push_float (hexa_serializer,
param->style.zoom_max);
ret = ret
&& lw6sys_hexa_serializer_push_int32 (hexa_serializer,
param->style.x_wrap);
ret = ret
&& lw6sys_hexa_serializer_push_int32 (hexa_serializer,
param->style.y_wrap);
ret = ret
&& lw6sys_hexa_serializer_push_str (hexa_serializer,
param->style.background_style);
ret = ret
&& lw6sys_hexa_serializer_push_str (hexa_serializer,
param->style.hud_style);
ret = ret
&& lw6sys_hexa_serializer_push_str (hexa_serializer,
param->style.menu_style);
ret = ret
&& lw6sys_hexa_serializer_push_str (hexa_serializer,
param->style.view_style);
ret = ret
&& lw6sys_hexa_serializer_push_float (hexa_serializer,
param->style.animation_density);
ret = ret
&& lw6sys_hexa_serializer_push_float (hexa_serializer,
param->style.animation_speed);
ret = ret
&& lw6sys_hexa_serializer_push_float (hexa_serializer,
param->style.cursor_size);
ret = ret
&& lw6sys_hexa_serializer_push_int32 (hexa_serializer,
param->style.colorize_cursor);
ret = ret
&& lw6sys_hexa_serializer_push_int32 (hexa_serializer,
param->style.blink_cursor);
ret = ret
&& lw6sys_hexa_serializer_push_float (hexa_serializer,
param->style.hidden_layer_alpha);
ret = ret
&& lw6sys_hexa_serializer_push_int32 (hexa_serializer,
param->style.colorize);
ret = ret
&& lw6sys_hexa_serializer_push_int32 (hexa_serializer,
param->style.pixelize);
ret = ret
&& lw6sys_hexa_serializer_push_color (hexa_serializer,
param->style.color_set.color_base.
bg);
ret = ret
&& lw6sys_hexa_serializer_push_color (hexa_serializer,
param->style.color_set.color_base.
fg);
ret = ret
&& lw6sys_hexa_serializer_push_color (hexa_serializer,
param->style.color_set.
color_alternate.bg);
ret = ret
&& lw6sys_hexa_serializer_push_color (hexa_serializer,
param->style.color_set.
color_alternate.fg);
ret = ret
&& lw6sys_hexa_serializer_push_color (hexa_serializer,
param->style.color_set.
background_color_root.bg);
ret = ret
&& lw6sys_hexa_serializer_push_color (hexa_serializer,
param->style.color_set.
background_color_root.fg);
ret = ret
&& lw6sys_hexa_serializer_push_color (hexa_serializer,
param->style.color_set.
background_color_stuff.bg);
ret = ret
&& lw6sys_hexa_serializer_push_color (hexa_serializer,
param->style.color_set.
background_color_stuff.fg);
ret = ret
&& lw6sys_hexa_serializer_push_color (hexa_serializer,
param->style.color_set.
hud_color_frame.bg);
ret = ret
&& lw6sys_hexa_serializer_push_color (hexa_serializer,
param->style.color_set.
hud_color_frame.fg);
ret = ret
&& lw6sys_hexa_serializer_push_color (hexa_serializer,
param->style.color_set.
hud_color_text.bg);
ret = ret
&& lw6sys_hexa_serializer_push_color (hexa_serializer,
param->style.color_set.
hud_color_text.fg);
ret = ret
&& lw6sys_hexa_serializer_push_color (hexa_serializer,
param->style.color_set.
menu_color_default.bg);
ret = ret
&& lw6sys_hexa_serializer_push_color (hexa_serializer,
param->style.color_set.
menu_color_default.fg);
ret = ret
&& lw6sys_hexa_serializer_push_color (hexa_serializer,
param->style.color_set.
menu_color_selected.bg);
ret = ret
&& lw6sys_hexa_serializer_push_color (hexa_serializer,
param->style.color_set.
menu_color_selected.fg);
ret = ret
&& lw6sys_hexa_serializer_push_color (hexa_serializer,
param->style.color_set.
menu_color_disabled.bg);
ret = ret
&& lw6sys_hexa_serializer_push_color (hexa_serializer,
param->style.color_set.
menu_color_disabled.fg);
ret = ret
&& lw6sys_hexa_serializer_push_color (hexa_serializer,
param->style.color_set.
view_color_cursor.bg);
ret = ret
&& lw6sys_hexa_serializer_push_color (hexa_serializer,
param->style.color_set.
view_color_cursor.fg);
ret = ret
&& lw6sys_hexa_serializer_push_color (hexa_serializer,
param->style.color_set.
view_color_map.bg);
ret = ret
&& lw6sys_hexa_serializer_push_color (hexa_serializer,
param->style.color_set.
view_color_map.fg);
ret = ret
&& lw6sys_hexa_serializer_push_color (hexa_serializer,
param->style.color_set.system_color.
bg);
ret = ret
&& lw6sys_hexa_serializer_push_color (hexa_serializer,
param->style.color_set.system_color.
fg);
ret = ret
&& lw6sys_hexa_serializer_push_color (hexa_serializer,
param->style.color_set.
team_color_dead);
for (i = 0; i < LW6MAP_NB_TEAM_COLORS && ret; ++i)
{
ret = ret
&& lw6sys_hexa_serializer_push_color (hexa_serializer,
param->style.color_set.
team_colors[i]);
}
ret = ret
&& lw6sys_hexa_serializer_push_str (hexa_serializer,
param->style.music_file);
ret = ret
&& lw6sys_hexa_serializer_push_str (hexa_serializer,
param->style.music_filter);
ret = ret
&& lw6sys_hexa_serializer_push_str (hexa_serializer,
param->style.music_exclude);
ret = ret
&& lw6sys_hexa_serializer_push_int32 (hexa_serializer,
param->style.waves);
return ret;
}
|
|||||
| ↓ | _analyse_info | 53 | 179 | 406 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/msg/msg-cmd.c |
static int
_analyse_info (lw6nod_info_t ** info, char **next, char *msg)
{
int ret = 0;
int still_ok = 1;
char *pos = NULL;
char *seek = NULL;
int tmp_int = 0;
lw6msg_word_t program;
lw6msg_word_t version;
lw6msg_word_t codename;
int stamp = 0;
u_int64_t id = 0;
lw6msg_word_t url;
lw6msg_word_t title;
lw6msg_word_t description;
int has_password = 0;
int bench = 0;
int open_relay = 0;
int uptime = 0;
u_int64_t community_id = 0;
int round = 0;
lw6msg_word_t level;
int required_bench = 0;
int nb_colors = 0;
int max_nb_colors = 0;
int nb_cursors = 0;
int max_nb_cursors = 0;
int nb_nodes = 0;
int max_nb_nodes = 0;
(*info) = NULL;
if (next)
{
(*next) = NULL;
}
pos = msg;
if (still_ok)
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("analyzing program \"%s\""), pos);
if (lw6msg_word_first (&program, &seek, pos))
{
pos = seek;
}
else
{
still_ok = 0;
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("bad program \"%s\""), pos);
}
}
if (still_ok)
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("analyzing version \"%s\""), pos);
if (lw6msg_word_first (&version, &seek, pos))
{
pos = seek;
}
else
{
still_ok = 0;
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("bad version \"%s\""), pos);
}
}
if (still_ok)
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("analyzing codename \"%s\""), pos);
if (lw6msg_word_first (&codename, &seek, pos))
{
pos = seek;
}
else
{
still_ok = 0;
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("bad codename \"%s\""), pos);
}
}
if (still_ok)
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("analyzing stamp \"%s\""), pos);
if (lw6msg_word_first_int_gt0 (&stamp, &seek, pos))
{
pos = seek;
}
else
{
still_ok = 0;
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("bad stamp \"%s\""), pos);
}
}
if (still_ok)
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("analyzing id \"%s\""), pos);
if (lw6msg_word_first_id_64 (&id, &seek, pos))
{
pos = seek;
}
}
else
{
still_ok = 0;
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("bad id \"%s\""), pos);
}
if (still_ok)
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("analyzing url \"%s\""), pos);
if (lw6msg_word_first (&url, &seek, pos)
&& lw6sys_url_is_canonized (url.buf))
{
pos = seek;
}
else
{
still_ok = 0;
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("bad url \"%s\""), pos);
}
}
if (still_ok)
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("analyzing title \"%s\""), pos);
if (lw6msg_word_first_base64 (&title, &seek, pos))
{
pos = seek;
}
else
{
still_ok = 0;
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("bad title \"%s\""), pos);
}
}
if (still_ok)
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("analyzing description \"%s\""), pos);
if (lw6msg_word_first_base64 (&description, &seek, pos))
{
pos = seek;
}
else
{
still_ok = 0;
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("bad description \"%s\""), pos);
}
}
if (still_ok)
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("analyzing has_password \"%s\""), pos);
if (lw6msg_word_first_int (&has_password, &seek, pos))
{
pos = seek;
}
else
{
still_ok = 0;
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("bad has_password \"%s\""), pos);
}
}
if (still_ok)
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("analyzing bench \"%s\""), pos);
if (lw6msg_word_first_int (&bench, &seek, pos))
{
pos = seek;
}
else
{
still_ok = 0;
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("bad bench \"%s\""), pos);
}
}
if (still_ok)
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("analyzing open_relay \"%s\""), pos);
if (lw6msg_word_first_int (&open_relay, &seek, pos))
{
pos = seek;
}
else
{
still_ok = 0;
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("bad open_relay \"%s\""), pos);
}
}
if (still_ok)
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("analyzing uptime \"%s\""), pos);
if (lw6msg_word_first_int (&uptime, &seek, pos))
{
pos = seek;
}
else
{
still_ok = 0;
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("bad uptime \"%s\""), pos);
}
}
if (still_ok)
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("analyzing community id \"%s\""),
pos);
if (lw6msg_word_first_id_64 (&community_id, &seek, pos))
{
pos = seek;
}
}
else
{
if (lw6msg_word_first_int (&tmp_int, &seek, pos))
{
if (!tmp_int)
{
community_id = 0;
pos = seek;
}
else
{
still_ok = 0;
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("bad community id \"%s\""),
pos);
}
}
else
{
still_ok = 0;
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("bad community id \"%s\""), pos);
}
}
if (still_ok)
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("analyzing round \"%s\""), pos);
if (lw6msg_word_first_int (&round, &seek, pos))
{
pos = seek;
}
else
{
still_ok = 0;
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("bad round \"%s\""), pos);
}
}
if (still_ok)
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("analyzing level \"%s\""), pos);
if (lw6msg_word_first_base64 (&level, &seek, pos))
{
pos = seek;
}
else
{
still_ok = 0;
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("bad level \"%s\""), pos);
}
}
if (still_ok)
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("analyzing required_bench \"%s\""), pos);
if (lw6msg_word_first_int (&required_bench, &seek, pos))
{
pos = seek;
}
else
{
still_ok = 0;
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("bad required_bench \"%s\""), pos);
}
}
if (still_ok)
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("analyzing nb_colors \"%s\""), pos);
if (lw6msg_word_first_int (&nb_colors, &seek, pos))
{
pos = seek;
}
else
{
still_ok = 0;
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("bad nb_colors \"%s\""), pos);
}
}
if (still_ok)
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("analyzing max_nb_colors \"%s\""), pos);
if (lw6msg_word_first_int (&max_nb_colors, &seek, pos))
{
pos = seek;
}
else
{
still_ok = 0;
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("bad max_nb_colors \"%s\""), pos);
}
}
if (still_ok)
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("analyzing nb_cursors \"%s\""), pos);
if (lw6msg_word_first_int (&nb_cursors, &seek, pos))
{
pos = seek;
}
else
{
still_ok = 0;
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("bad nb_cursors \"%s\""), pos);
}
}
if (still_ok)
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("analyzing max_nb_cursors \"%s\""), pos);
if (lw6msg_word_first_int (&max_nb_cursors, &seek, pos))
{
pos = seek;
}
else
{
still_ok = 0;
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("bad max_nb_cursors \"%s\""), pos);
}
}
if (still_ok)
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("analyzing nb_nodes \"%s\""), pos);
if (lw6msg_word_first_int (&nb_nodes, &seek, pos))
{
pos = seek;
}
else
{
still_ok = 0;
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("bad nb_nodes \"%s\""), pos);
}
}
if (still_ok)
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("analyzing max_nb_nodes \"%s\""), pos);
if (lw6msg_word_first_int (&max_nb_nodes, &seek, pos))
{
pos = seek;
}
else
{
still_ok = 0;
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("bad max_nb_nodes \"%s\""), pos);
}
}
if (still_ok)
{
(*info) =
lw6nod_info_new
(program.buf, version.buf,
codename.buf, stamp, id,
url.buf, title.buf,
description.buf, NULL, bench, open_relay, uptime, 0, NULL);
if (*info)
{
if (lw6nod_info_update ((*info), community_id, round, level.buf,
required_bench, nb_colors, max_nb_colors,
nb_cursors, max_nb_cursors, nb_nodes,
max_nb_nodes, 0, NULL))
{
(*info)->const_info.has_password = has_password;
if (next)
{
(*next) = pos;
}
ret = 1;
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING, _x_ ("unable to create nod info"));
}
}
return ret;
}
|
|||||
| ↓ | test_list | 49 | 250 | 388 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/sys/sys-test.c |
static int
test_list ()
{
int ret = 1;
lw6sys_list_t *list;
lw6sys_list_t *list_copy;
LW6SYS_TEST_FUNCTION_BEGIN;
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("new/delete/is_empty on list"));
list = lw6sys_list_new (NULL);
ret = ret && lw6sys_list_is_empty (list);
lw6sys_list_free (list);
}
{
int a = 3, b = 5, c = 7;
int i;
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("lifo push/pop on int list"));
list = lw6sys_list_new (NULL);
lw6sys_lifo_push (&list, (void *) &a);
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("lifo push %d"), a);
lw6sys_lifo_push (&list, (void *) &b);
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("lifo push %d"), b);
lw6sys_lifo_push (&list, (void *) &c);
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("lifo push %d"), c);
lw6sys_list_map (list, &list_map_int_func, &ret);
ret = ret && lw6sys_list_length (list) == 3;
i = *((int *) lw6sys_lifo_pop (&list));
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("lifo pop %d"), i);
ret = ret && (i == c);
i = *((int *) lw6sys_lifo_pop (&list));
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("lifo pop %d"), i);
ret = ret && (i == b);
i = *((int *) lw6sys_lifo_pop (&list));
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("lifo pop %d"), i);
ret = ret && (i == a);
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("free list"));
lw6sys_list_free (list);
}
{
int a = 2, b = 4, c = 6, d = 8;
int i;
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("fifo push/pop on int list"));
list = lw6sys_list_new (NULL);
lw6sys_fifo_push (&list, (void *) &a);
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("fifo push %d"), a);
lw6sys_fifo_push (&list, (void *) &b);
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("fifo push %d"), b);
lw6sys_fifo_push (&list, (void *) &c);
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("fifo push %d"), c);
lw6sys_fifo_push (&list, (void *) &d);
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("fifo push %d"), d);
lw6sys_list_map (list, &list_map_int_func, &ret);
ret = ret && lw6sys_list_length (list) == 4;
i = *((int *) lw6sys_fifo_pop (&list));
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("fifo pop %d"), i);
ret = ret && (i == a);
i = *((int *) lw6sys_fifo_pop (&list));
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("fifo pop %d"), i);
ret = ret && (i == b);
i = *((int *) lw6sys_fifo_pop (&list));
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("fifo pop %d"), i);
ret = ret && (i == c);
i = *((int *) lw6sys_fifo_pop (&list));
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("fifo pop %d"), i);
ret = ret && (i == d);
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("free list"));
lw6sys_list_free (list);
}
{
char *str;
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("push_front/pop_front on string list"));
list = lw6sys_list_new (lw6sys_free_callback);
lw6sys_list_push_front (&list,
(void *) lw6sys_str_copy (_TEST_LIST_STR1));
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("push_front \"%s\""),
_TEST_LIST_STR1);
lw6sys_list_push_front (&list,
(void *) lw6sys_str_copy (_TEST_LIST_STR2));
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("push_front \"%s\""),
_TEST_LIST_STR2);
lw6sys_list_push_front (&list,
(void *) lw6sys_str_copy (_TEST_LIST_STR3));
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("push_front \"%s\""),
_TEST_LIST_STR3);
lw6sys_list_map (list, &list_map_str_func, &ret);
str = (char *) lw6sys_list_pop_front (&list);
if (str)
{
ret = ret && (!strcmp (str, _TEST_LIST_STR3));
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("pop_front \"%s\""), str);
LW6SYS_FREE (str);
}
else
{
ret = 0;
}
if (str)
{
str = (char *) lw6sys_list_pop_front (&list);
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("pop_front \"%s\""), str);
ret = ret && (!strcmp (str, _TEST_LIST_STR2));
LW6SYS_FREE (str);
}
else
{
ret = 0;
}
if (str)
{
str = (char *) lw6sys_list_pop_front (&list);
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("pop_front \"%s\""), str);
ret = ret && (!strcmp (str, _TEST_LIST_STR1));
LW6SYS_FREE (str);
}
else
{
ret = 0;
}
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("free list"));
lw6sys_list_free (list);
}
{
char *str;
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("push_back/pop_front on string list"));
list = lw6sys_list_new (lw6sys_free_callback);
lw6sys_list_push_back (&list, (void *) lw6sys_str_copy (_TEST_LIST_STR1));
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("push_back \"%s\""), _TEST_LIST_STR1);
lw6sys_list_push_back (&list, (void *) lw6sys_str_copy (_TEST_LIST_STR2));
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("push_back \"%s\""), _TEST_LIST_STR2);
lw6sys_list_push_back (&list, (void *) lw6sys_str_copy (_TEST_LIST_STR3));
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("push_back \"%s\""), _TEST_LIST_STR3);
lw6sys_list_map (list, &list_map_str_func, &ret);
str = (char *) lw6sys_list_pop_front (&list);
if (str)
{
ret = ret && (!strcmp (str, _TEST_LIST_STR1));
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("pop_front \"%s\""), str);
LW6SYS_FREE (str);
}
else
{
ret = 0;
}
if (str)
{
str = (char *) lw6sys_list_pop_front (&list);
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("pop_front \"%s\""), str);
ret = ret && (!strcmp (str, _TEST_LIST_STR2));
LW6SYS_FREE (str);
}
else
{
ret = 0;
}
if (str)
{
str = (char *) lw6sys_list_pop_front (&list);
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("pop_front \"%s\""), str);
ret = ret && (!strcmp (str, _TEST_LIST_STR3));
LW6SYS_FREE (str);
}
else
{
ret = 0;
}
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("free list"));
lw6sys_list_free (list);
}
{
char *str;
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("push_front/pop_back on string list"));
list = lw6sys_list_new (lw6sys_free_callback);
lw6sys_list_push_front (&list,
(void *) lw6sys_str_copy (_TEST_LIST_STR1));
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("push_front \"%s\""),
_TEST_LIST_STR1);
lw6sys_list_push_front (&list,
(void *) lw6sys_str_copy (_TEST_LIST_STR2));
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("push_front \"%s\""),
_TEST_LIST_STR2);
lw6sys_list_push_front (&list,
(void *) lw6sys_str_copy (_TEST_LIST_STR3));
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("push_front \"%s\""),
_TEST_LIST_STR3);
lw6sys_list_map (list, &list_map_str_func, &ret);
str = (char *) lw6sys_list_pop_back (&list);
if (str)
{
ret = ret && (!strcmp (str, _TEST_LIST_STR1));
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("pop_back \"%s\""), str);
LW6SYS_FREE (str);
}
else
{
ret = 0;
}
if (str)
{
str = (char *) lw6sys_list_pop_back (&list);
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("pop_back \"%s\""), str);
ret = ret && (!strcmp (str, _TEST_LIST_STR2));
LW6SYS_FREE (str);
}
else
{
ret = 0;
}
if (str)
{
str = (char *) lw6sys_list_pop_back (&list);
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("pop_back \"%s\""), str);
ret = ret && (!strcmp (str, _TEST_LIST_STR3));
LW6SYS_FREE (str);
}
else
{
ret = 0;
}
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("free list"));
lw6sys_list_free (list);
}
{
char *str;
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("push_back/pop_back on string list"));
list = lw6sys_list_new (lw6sys_free_callback);
lw6sys_list_push_back (&list, (void *) lw6sys_str_copy (_TEST_LIST_STR1));
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("push_back \"%s\""), _TEST_LIST_STR1);
lw6sys_list_push_back (&list, (void *) lw6sys_str_copy (_TEST_LIST_STR2));
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("push_back \"%s\""), _TEST_LIST_STR2);
lw6sys_list_push_back (&list, (void *) lw6sys_str_copy (_TEST_LIST_STR3));
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("push_back \"%s\""), _TEST_LIST_STR3);
lw6sys_list_map (list, &list_map_str_func, &ret);
str = (char *) lw6sys_list_pop_back (&list);
if (str)
{
ret = ret && (!strcmp (str, _TEST_LIST_STR3));
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("pop_back \"%s\""), str);
LW6SYS_FREE (str);
}
else
{
ret = 0;
}
if (str)
{
str = (char *) lw6sys_list_pop_back (&list);
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("pop_back \"%s\""), str);
ret = ret && (!strcmp (str, _TEST_LIST_STR2));
LW6SYS_FREE (str);
}
else
{
ret = 0;
}
if (str)
{
str = (char *) lw6sys_list_pop_back (&list);
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("pop_back \"%s\""), str);
ret = ret && (!strcmp (str, _TEST_LIST_STR1));
LW6SYS_FREE (str);
}
else
{
ret = 0;
}
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("free list"));
lw6sys_list_free (list);
}
{
int a = 32, b = 64, c = 128, d = 256, e = 512;
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("front/back push/pop on int list"));
list = lw6sys_list_new (NULL);
lw6sys_list_push_front (&list, (void *) &a);
lw6sys_list_push_front (&list, (void *) &b);
lw6sys_list_push_back (&list, (void *) &c);
lw6sys_list_push_back (&list, (void *) &d);
lw6sys_list_push_back (&list, (void *) &e);
lw6sys_list_map (list, &list_map_int_func, &ret);
ret = ret && lw6sys_list_length (list) == 5;
ret = ret && (*((int *) lw6sys_list_pop_back (&list)) == e);
ret = ret && (*((int *) lw6sys_list_pop_back (&list)) == d);
ret = ret && (*((int *) lw6sys_list_pop_front (&list)) == b);
ret = ret && (*((int *) lw6sys_list_pop_front (&list)) == a);
ret = ret && (*((int *) lw6sys_list_pop_front (&list)) == c);
lw6sys_list_free (list);
}
{
char *str1, *str2, *str3, *str4;
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("testing free_func callback and dup on string list"));
list = lw6sys_list_new (&lw6sys_free_callback);
str1 = lw6sys_str_copy (_TEST_LIST_STR1);
lw6sys_lifo_push (&list, (void *) str1);
str2 = lw6sys_str_copy (_TEST_LIST_STR2);
lw6sys_fifo_push (&list, (void *) str2);
str3 = lw6sys_str_copy (_TEST_LIST_STR3);
lw6sys_lifo_push (&list, (void *) str3);
str4 = lw6sys_str_copy (_TEST_LIST_STR4);
lw6sys_fifo_push (&list, (void *) str4);
list_copy = lw6sys_list_dup (list, (lw6sys_dup_func_t) lw6sys_str_copy);
ret = ret && lw6sys_list_length (list_copy) == 4;
lw6sys_list_free (list_copy);
lw6sys_list_free (list);
}
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("testing final pop behavior"));
list = lw6sys_list_new (NULL);
if (list)
{
lw6sys_list_pop_front (&list);
if (list)
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("final pop front didn't free list"));
lw6sys_list_free (list);
ret = 0;
}
}
list = lw6sys_list_new (NULL);
if (list)
{
lw6sys_list_pop_back (&list);
if (list)
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("final pop back didn't free list"));
lw6sys_list_free (list);
ret = 0;
}
}
}
{
int i = 0;
int *d = NULL;
int limit = 0;
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("testing list filter"));
list = lw6sys_list_new (lw6sys_free_callback);
if (list)
{
for (i = 0; i < _TEST_LIST_FILTER_NB_ITEMS; ++i)
{
d = (int *) LW6SYS_MALLOC (sizeof (int));
if (d)
{
(*d) = lw6sys_random (_TEST_LIST_FILTER_RANGE);
lw6sys_list_push_front (&list, d);
}
}
limit = (2 * _TEST_LIST_FILTER_RANGE) / 3;
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("1st filter limit=%d"), limit);
lw6sys_list_filter (&list, list_filter_func, &limit);
limit = _TEST_LIST_FILTER_RANGE / 3;
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("2nd filter limit=%d"), limit);
lw6sys_list_filter (&list, list_filter_func, &limit);
limit = -_TEST_LIST_FILTER_RANGE / 10;
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("3rd filter limit=%d"), limit);
lw6sys_list_filter (&list, list_filter_func, &limit);
lw6sys_list_free (list);
}
}
LW6SYS_TEST_FUNCTION_END;
return ret;
}
|
|||||
| ↓ | draft_zones_group | 48 | 82 | 231 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/ker/ker-mapstruct.c |
static int32_t
draft_zones_group (lw6map_level_t * level, draft_zones_t * draft_zones,
int32_t step)
{
int32_t found = 0;
int32_t x, y, z, w, h, d, size, i, j, k;
int32_t i_ne, i_se, i_sw, i_nw, i_up, i_down;
draft_zone_t *zone_ne, *zone_se, *zone_sw, *zone_nw, *zone_up, *zone_down;
int32_t *test;
w = draft_zones->shape.w;
h = draft_zones->shape.h;
d = draft_zones->shape.d;
size = d * h * w;
for (z = 0; z < d; z++)
{
for (y = 0; y < h - step; y += step * 2)
{
for (x = 0; x < w - step; x += step * 2)
{
i = z * w * h + y * w + x;
if (draft_zones->zones[i].used)
{
i_ne = i + step;
i_se = i + (w + 1) * step;
i_sw = i + w * step;
i_nw = i;
zone_ne = &draft_zones->zones[i_ne];
zone_se = &draft_zones->zones[i_se];
zone_sw = &draft_zones->zones[i_sw];
zone_nw = &draft_zones->zones[i_nw];
i_up = i - w * h; // may be out of bounds
if (i_up >= 0 && i_up < size)
{
zone_up = &draft_zones->zones[i_up];
}
else
{
zone_up = NULL;
}
i_down = i + w * h; // may be out of bounds
if (i_down >= 0 && i_down < size)
{
zone_down = &draft_zones->zones[i_down];
}
else
{
zone_down = NULL;
}
/*
* This test contains all the criteria which make
* us decide wether we group the squares are not.
* It's a wise choice to be rather restrictive.
* For instance the fact tha NE SW NW NE links
* actually point to something might seem useless.
* It's not, the main reason is that it's a rather
* good choice that whenever there's an obstacle,
* the zones around it are forced to be small.
*/
if (zone_ne->used && zone_ne->size == step
&& zone_se->used && zone_se->size == step
&& zone_sw->used && zone_sw->size == step
&& zone_nw->used && zone_nw->size == step
&& zone_ne->link[LW6KER_DIR_NNW] ==
zone_ne->link[LW6KER_DIR_NNE]
&& zone_ne->link[LW6KER_DIR_ENE] ==
zone_ne->link[LW6KER_DIR_ESE]
&& zone_se->link[LW6KER_DIR_ENE] ==
zone_se->link[LW6KER_DIR_ESE]
&& zone_se->link[LW6KER_DIR_SSE] ==
zone_se->link[LW6KER_DIR_SSW]
&& zone_sw->link[LW6KER_DIR_SSE] ==
zone_sw->link[LW6KER_DIR_SSW]
&& zone_sw->link[LW6KER_DIR_WSW] ==
zone_sw->link[LW6KER_DIR_WNW]
&& zone_nw->link[LW6KER_DIR_WSW] ==
zone_nw->link[LW6KER_DIR_WNW]
&& zone_nw->link[LW6KER_DIR_NNW] ==
zone_nw->link[LW6KER_DIR_NNE]
&& zone_ne->link[LW6KER_DIR_NE] >= 0
&& zone_se->link[LW6KER_DIR_SE] >= 0
&& zone_sw->link[LW6KER_DIR_SW] >= 0
&& zone_nw->link[LW6KER_DIR_NW] >= 0
&& ((!zone_up) || (zone_up && zone_up->size >= step))
&& ((!zone_down)
|| (zone_down && zone_down->size >= step)))
{
/*
* Delete unused zones
*/
zone_ne->used = 0;
zone_se->used = 0;
zone_sw->used = 0;
/*
* Double the zone size of the remaining zone
*/
zone_nw->size = step * 2;
/*
* Change the links of the remaining zone
*/
zone_nw->link[LW6KER_DIR_NNE] =
zone_ne->link[LW6KER_DIR_NNE];
zone_nw->link[LW6KER_DIR_NE] =
zone_ne->link[LW6KER_DIR_NE];
zone_nw->link[LW6KER_DIR_ENE] =
zone_ne->link[LW6KER_DIR_ENE];
zone_nw->link[LW6KER_DIR_ESE] =
zone_se->link[LW6KER_DIR_ESE];
zone_nw->link[LW6KER_DIR_SE] =
zone_se->link[LW6KER_DIR_SE];
zone_nw->link[LW6KER_DIR_SSE] =
zone_se->link[LW6KER_DIR_SSE];
zone_nw->link[LW6KER_DIR_SSW] =
zone_sw->link[LW6KER_DIR_SSW];
zone_nw->link[LW6KER_DIR_SW] =
zone_sw->link[LW6KER_DIR_SW];
zone_nw->link[LW6KER_DIR_WSW] =
zone_sw->link[LW6KER_DIR_WSW];
/*
* Change all the links of the adjacent zones,
* which were pointing on the deleted zones,
* and must now point on the remaining one.
*/
for (j = 0; j < LW6KER_DIR_UP; ++j)
{
for (k = 0; k < LW6KER_DIR_UP; ++k)
{
if (zone_nw->link[j] >= 0)
{
test =
&(draft_zones->zones[zone_nw->link[j]].
link[k]);
if (*test == i_ne || *test == i_se
|| *test == i_sw)
{
*test = i_nw;
}
}
}
}
/*
* Now treat vertical (cross-layer) zones links
* which were pointing on the deleted zones
*/
if (d > 1)
{
j =
relative_index (level,
draft_zones->zones[i_ne].pos.x,
draft_zones->zones[i_ne].pos.y,
draft_zones->zones[i_ne].pos.z +
1);
if (draft_zones->zones[j].used)
{
draft_zones->zones[j].link[LW6KER_DIR_UP] =
i_nw;
}
j =
relative_index (level,
draft_zones->zones[i_se].pos.x,
draft_zones->zones[i_se].pos.y,
draft_zones->zones[i_se].pos.z +
1);
if (draft_zones->zones[j].used)
{
draft_zones->zones[j].link[LW6KER_DIR_UP] =
i_nw;
}
j =
relative_index (level,
draft_zones->zones[i_sw].pos.x,
draft_zones->zones[i_sw].pos.y,
draft_zones->zones[i_sw].pos.z +
1);
if (draft_zones->zones[j].used)
{
draft_zones->zones[j].link[LW6KER_DIR_UP] =
i_nw;
}
j =
relative_index (level,
draft_zones->zones[i_ne].pos.x,
draft_zones->zones[i_ne].pos.y,
draft_zones->zones[i_ne].pos.z -
1);
if (draft_zones->zones[j].used)
{
draft_zones->zones[j].link[LW6KER_DIR_DOWN] =
i_nw;
}
j =
relative_index (level,
draft_zones->zones[i_se].pos.x,
draft_zones->zones[i_se].pos.y,
draft_zones->zones[i_se].pos.z -
1);
if (draft_zones->zones[j].used)
{
draft_zones->zones[j].link[LW6KER_DIR_DOWN] =
i_nw;
}
j =
relative_index (level,
draft_zones->zones[i_sw].pos.x,
draft_zones->zones[i_sw].pos.y,
draft_zones->zones[i_sw].pos.z -
1);
if (draft_zones->zones[j].used)
{
draft_zones->zones[j].link[LW6KER_DIR_DOWN] =
i_nw;
}
}
draft_zones->max_zone_size = zone_nw->size;
++found;
}
}
}
}
}
return found;
}
|
|||||
| ↓ | lw6gui_viewport_init | 45 | 105 | 281 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/gui/gui-viewport.c |
int
lw6gui_viewport_init (lw6gui_viewport_t * viewport, int screen_w,
int screen_h, float drawable_x1, float drawable_y1,
float drawable_x2, float drawable_y2, float center_x,
float center_y, int map_w, int map_h, int x_polarity,
int y_polarity, int x_wrap, int y_wrap, int keep_ratio,
float global_zoom, float scroll_limit,
int use_old_center)
{
int ret = 0;
float map_ratio = 1.0f;
float drawable_ratio = 1.0f;
float map_main_x = 0.0f;
float map_main_y = 0.0f;
float map_main_w = 0.0f;
float map_main_h = 0.0f;
float map_visible_x1 = 0.0f;
float map_visible_y1 = 0.0f;
float map_visible_x2 = 0.0f;
float map_visible_y2 = 0.0f;
// float dx = 0.0f;
// float dy = 0.0f;
float old_center_screen_x = 0.0f;
float old_center_screen_y = 0.0f;
if (viewport)
{
memset (viewport, 0, sizeof (lw6gui_viewport_t));
viewport->map_shape.w = map_w;
viewport->map_shape.h = map_h;
viewport->center_x = center_x;
viewport->center_y = center_y;
viewport->x_polarity = x_polarity;
viewport->y_polarity = y_polarity;
viewport->x_wrap = x_wrap;
viewport->y_wrap = y_wrap;
viewport->screen_shape.w = screen_w;
viewport->screen_shape.h = screen_h;
lw6gui_zone_init_x1y1x2y2 (&(viewport->drawable), drawable_x1,
drawable_y1, drawable_x2, drawable_y2);
if (viewport->map_shape.w > 0 && viewport->map_shape.h > 0
&& viewport->screen_shape.w > 0 && viewport->screen_shape.h
&& viewport->drawable.w > 0.0f && viewport->drawable.h > 0.0f)
{
/*
* First, we choose the right w & h value (on the screen,
* in pixels) for the main map zone, neglecting clip and/or
* wrapping.
*/
map_ratio =
((float) viewport->map_shape.w) / ((float) viewport->map_shape.h);
drawable_ratio = viewport->drawable.w / viewport->drawable.h;
if (keep_ratio)
{
if (map_ratio > drawable_ratio)
{
map_main_w = viewport->drawable.w;
map_main_h =
viewport->drawable.h * drawable_ratio / map_ratio;
}
else
{
map_main_w =
viewport->drawable.w * map_ratio / drawable_ratio;
map_main_h = viewport->drawable.h;
}
}
else
{
map_main_w = viewport->drawable.w;
map_main_h = viewport->drawable.h;
}
map_main_w *= global_zoom;
map_main_h *= global_zoom;
/*
* Then, we center this zone on the screen.
*/
map_main_x = viewport->drawable.x1;
map_main_y = viewport->drawable.y1;
#ifdef REMOVE_ME
if (map_main_w < viewport->drawable.w)
{
map_main_x =
viewport->drawable.x1 + (viewport->drawable.w -
map_main_w) / 2.0f;
}
else if (map_main_w > viewport->drawable.w)
{
map_main_x =
viewport->drawable.x1 + (viewport->drawable.w -
map_main_w) / 2.0f -
(viewport->center_x -
viewport->map_shape.w / 2) * (map_main_w /
viewport->map_shape.w);
if (viewport->x_polarity == 0 || viewport->x_wrap == 0)
{
if (map_main_x + map_main_w <
viewport->drawable.x1 + viewport->drawable.w)
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("x correct 1 %0.0f"),
map_main_x);
map_main_x =
viewport->drawable.x1 + viewport->drawable.w -
map_main_w;
}
if (map_main_x > viewport->drawable.x1)
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("x correct 2 %0.0f"),
map_main_x);
map_main_x = viewport->drawable.x1;
}
}
}
if (map_main_h < viewport->drawable.h)
{
map_main_y =
viewport->drawable.y1 + (viewport->drawable.h -
map_main_h) / 2.0f;
}
else if (map_main_h > viewport->drawable.h)
{
map_main_y =
viewport->drawable.y1 + (viewport->drawable.h -
map_main_h) / 2.0f -
(viewport->center_y -
viewport->map_shape.h / 2) * (map_main_h /
viewport->map_shape.h);
if (viewport->y_polarity == 0 || viewport->y_wrap == 0)
{
if (map_main_y + map_main_h <
viewport->drawable.y1 + viewport->drawable.h)
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("y correct 1 %0.0f"),
map_main_y);
map_main_y =
viewport->drawable.y1 + viewport->drawable.h -
map_main_h;
}
if (map_main_y > viewport->drawable.y1)
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("y correct 2 %0.0f"),
map_main_y);
map_main_y = viewport->drawable.y1;
}
}
}
#endif
if (map_main_w < viewport->drawable.w)
{
map_main_x =
viewport->drawable.x1 + (viewport->drawable.w -
map_main_w) / 2.0f;
}
if (map_main_w > viewport->drawable.w
|| (viewport->x_polarity != 0 && viewport->x_wrap != 0))
{
map_main_x =
viewport->drawable.x1 + (viewport->drawable.w -
map_main_w) / 2.0f -
(viewport->center_x -
viewport->map_shape.w / 2) * (map_main_w /
viewport->map_shape.w);
}
if (map_main_w > viewport->drawable.w
&& (viewport->x_polarity == 0 || viewport->x_wrap == 0))
{
if (map_main_x + map_main_w <
viewport->drawable.x1 + viewport->drawable.w)
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("x correct 1 %0.0f"),
map_main_x);
map_main_x =
viewport->drawable.x1 + viewport->drawable.w - map_main_w;
}
if (map_main_x > viewport->drawable.x1)
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("x correct 2 %0.0f"),
map_main_x);
map_main_x = viewport->drawable.x1;
}
}
if (map_main_h < viewport->drawable.h)
{
map_main_y =
viewport->drawable.y1 + (viewport->drawable.h -
map_main_h) / 2.0f;
}
if (map_main_h > viewport->drawable.h
|| (viewport->y_polarity != 0 && viewport->y_wrap != 0))
{
map_main_y =
viewport->drawable.y1 + (viewport->drawable.h -
map_main_h) / 2.0f -
(viewport->center_y -
viewport->map_shape.h / 2) * (map_main_h /
viewport->map_shape.h);
}
if (map_main_h > viewport->drawable.h
&& (viewport->y_polarity == 0 || viewport->y_wrap == 0))
{
if (map_main_y + map_main_h <
viewport->drawable.y1 + viewport->drawable.h)
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("y correct 1 %0.0f"),
map_main_y);
map_main_y =
viewport->drawable.y1 + viewport->drawable.h - map_main_h;
}
if (map_main_y > viewport->drawable.y1)
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("y correct 2 %0.0f"),
map_main_y);
map_main_y = viewport->drawable.y1;
}
}
lw6gui_zone_init_xywh (&(viewport->map_main), map_main_x,
map_main_y, map_main_w, map_main_h);
lw6gui_zone_clip (&(viewport->map_main_clipped),
&(viewport->map_main), &(viewport->drawable));
/*
* Last, we update the "visible" part, that is, what should
* be drawn including repetitions induced by polarity
*/
map_visible_x1 = viewport->map_main_clipped.x1;
map_visible_y1 = viewport->map_main_clipped.y1;
map_visible_x2 = viewport->map_main_clipped.x2;
map_visible_y2 = viewport->map_main_clipped.y2;
if (viewport->x_polarity != 0 && viewport->x_wrap != 0)
{
map_visible_x1 = viewport->drawable.x1;
map_visible_x2 = viewport->drawable.x2;
}
if (viewport->y_polarity != 0 && viewport->y_wrap != 0)
{
map_visible_y1 = viewport->drawable.y1;
map_visible_y2 = viewport->drawable.y2;
}
lw6gui_zone_init_x1y1x2y2 (&(viewport->map_visible), map_visible_x1,
map_visible_y1, map_visible_x2,
map_visible_y2);
if (use_old_center)
{
lw6gui_viewport_map_to_screen (viewport, &old_center_screen_x,
&old_center_screen_y,
viewport->old_center_x,
viewport->old_center_y, 0);
//dx = old_center_screen_x - viewport->map_visible.w / 2;
//dy = old_center_screen_y - viewport->map_visible.h / 2;
//TMP2("dx=%f dy=%f",dx,dy);
}
viewport->old_center_x = viewport->center_x;
viewport->old_center_y = viewport->center_y;
ret = 1;
}
else
{
lw6sys_log (LW6SYS_LOG_INFO,
_x_
("nothing is likely to be drawn, map_w=%d, map_h=%d, screen_w=%d, screen_h=%d, drawable_w=%f, drawable_h=%f"),
viewport->map_shape.w, viewport->map_shape.h,
viewport->screen_shape.w, viewport->screen_shape.h,
viewport->drawable.w, viewport->drawable.h);
}
}
return ret;
}
|
|||||
| ↓ | lw6msg_envelope_analyse | 44 | 111 | 327 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/msg/msg-envelope.c |
int
lw6msg_envelope_analyse (char *envelope, lw6msg_envelope_mode_t mode,
char *local_url, char *password,
u_int64_t expected_physical_from_id,
u_int64_t expected_physical_to_id, char **msg,
u_int32_t * physical_ticket_sig,
u_int32_t * logical_ticket_sig,
u_int64_t * physical_from_id,
u_int64_t * physical_to_id,
u_int64_t * logical_from_id,
u_int64_t * logical_to_id, char **physical_from_url)
{
int ret = 0;
char *lw6 = NULL;
int need_base64 = 0;
char *pos = NULL;
char *seek = NULL;
char *version = NULL;
lw6msg_word_t received_lw6;
lw6msg_word_t received_version;
lw6msg_word_t received_password;
u_int32_t received_physical_ticket_sig_int = 0;
u_int32_t received_logical_ticket_sig_int = 0;
u_int64_t received_physical_from_id = 0;
u_int64_t received_physical_to_id = 0;
u_int64_t received_logical_from_id = 0;
u_int64_t received_logical_to_id = 0;
lw6msg_word_t tmp_word;
switch (mode)
{
case LW6MSG_ENVELOPE_MODE_TELNET:
lw6 = LW6MSG_LW6;
need_base64 = 0;
break;
case LW6MSG_ENVELOPE_MODE_URL:
lw6 = LW6MSG_LW6_LC;
need_base64 = 1;
break;
default:
lw6sys_log (LW6SYS_LOG_WARNING, _x_ ("unknown mode %d"), (int) mode);
lw6 = LW6MSG_LW6;
need_base64 = 0;
}
version = lw6sys_build_get_version ();
if (msg)
{
(*msg) = NULL;
}
if (physical_ticket_sig)
{
(*physical_ticket_sig) = 0;
}
if (logical_ticket_sig)
{
(*logical_ticket_sig) = 0;
}
if (physical_from_id)
{
(*physical_from_id) = 0;
}
if (physical_to_id)
{
(*physical_to_id) = 0;
}
if (logical_from_id)
{
(*logical_from_id) = 0;
}
if (logical_to_id)
{
(*logical_to_id) = 0;
}
if (physical_from_url)
{
(*physical_from_url) = NULL;
}
pos = seek = envelope;
if (lw6msg_word_first_x (&received_lw6, &seek, pos))
{
if (lw6sys_str_is_same (received_lw6.buf, lw6))
{
pos = seek;
if (lw6msg_word_first_x (&received_version, &seek, pos))
{
if (lw6sys_str_is_same (received_version.buf, version))
{
pos = seek;
if (lw6msg_word_first_x (&received_password, &seek, pos))
{
if (lw6cnx_password_verify
(local_url, password, received_password.buf))
{
pos = seek;
if (lw6msg_word_first_x (&tmp_word, &seek, pos))
{
pos = seek;
/*
* Bad and/or 0 ticket accepted at this stage
*/
sscanf
(tmp_word.buf, "%x",
&received_physical_ticket_sig_int);
if (lw6msg_word_first_x (&tmp_word, &seek, pos))
{
pos = seek;
/*
* Bad and/or 0 ticket accepted at this stage
*/
sscanf
(tmp_word.buf, "%x",
&received_logical_ticket_sig_int);
if (!received_logical_ticket_sig_int)
{
received_logical_ticket_sig_int =
received_physical_ticket_sig_int;
}
if (lw6msg_word_first_id_64
(&received_physical_from_id, &seek,
pos))
{
if (expected_physical_from_id == 0LL
||
(expected_physical_from_id ==
received_physical_from_id))
{
pos = seek;
if (lw6msg_word_first_id_64
(&received_physical_to_id,
&seek, pos))
{
if (expected_physical_from_id ==
0LL
||
(expected_physical_to_id
==
received_physical_to_id))
{
pos = seek;
if (lw6msg_word_first_id_64
(&received_logical_from_id,
&seek, pos)
||
lw6msg_word_first_x
(&tmp_word, &seek, pos))
{
pos = seek;
if (!received_logical_from_id)
{
received_logical_from_id
=
received_physical_from_id;
}
if (lw6msg_word_first_id_64 (&received_logical_to_id, &seek, pos) || lw6msg_word_first_x (&tmp_word, &seek, pos))
{
pos = seek;
if (!received_logical_to_id)
{
received_logical_to_id
=
received_physical_to_id;
}
ret = 1;
if (msg)
{
if (need_base64)
{
(*msg) =
lw6glb_base64_decode_str
(pos);
if (!(*msg))
{
/*
* message isn't base64 but
* we still return it as is, probably
* it's truncated, but we must return
* it anyway in case this function would
* be called just to check the protocol
*/
lw6sys_log
(LW6SYS_LOG_DEBUG,
_x_
("forcing clear text instead of base64"));
(*msg) =
lw6sys_str_copy
(pos);
}
}
else
{
(*msg) =
lw6sys_str_copy
(pos);
}
}
if (physical_ticket_sig)
{
(*physical_ticket_sig) = received_physical_ticket_sig_int;
}
if (logical_ticket_sig)
{
(*logical_ticket_sig) = received_logical_ticket_sig_int;
}
if (physical_from_id)
{
(*physical_from_id) = received_physical_from_id;
}
if (physical_to_id)
{
(*physical_to_id) = received_physical_to_id;
}
if (logical_from_id)
{
(*logical_from_id) = received_logical_from_id;
}
if (logical_to_id)
{
(*logical_to_id)
=
received_logical_to_id;
}
if (physical_from_url && msg && (*msg))
{
(*physical_from_url) = lw6msg_cmd_guess_from_url (*msg);
}
}
else
{
lw6sys_log
(LW6SYS_LOG_DEBUG,
_x_
("can't parse \"logical_to\" (final destination) id"));
}
}
else
{
lw6sys_log
(LW6SYS_LOG_DEBUG,
_x_
("can't parse \"logical_from\" (creator) id"));
}
}
else
{
lw6sys_log
(LW6SYS_LOG_DEBUG,
_x_
("wrong \"physical_to\" (receiver) id"));
}
}
else
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_
("can't parse \"physical_to\" (receiver) id"));
}
}
else
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_
("wrong \"physical_from\" (sender) id"));
}
}
else
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_
("can't parse \"physical_from\" (sender) id"));
}
}
else
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_
("can't parse logical ticket sig"));
}
}
else
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_
("can't parse physical ticket sig"));
}
}
else
{
lw6sys_log (LW6SYS_LOG_INFO, _x_ ("bad password"));
}
}
else
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("can't parse password"));
}
}
else
{
lw6sys_log (LW6SYS_LOG_INFO,
_x_
("bad version, received \"%s\", need \"%s\""),
received_version.buf, version);
}
}
else
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("can't parse version"));
}
}
else
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("bad lw6 key, received \"%s\", need \"%s\""),
received_lw6.buf, lw6);
}
}
else
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("message does not start with \"%s\""), lw6);
}
return ret;
}
|
|||||
| ↓ | _lw6ker_map_state_frag | 42 | 80 | 181 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/ker/ker-mapstate.c |
void
_lw6ker_map_state_frag (_lw6ker_map_state_t * map_state, int team_color,
int frags_mode, int frags_to_distribute,
int frags_fade_out)
{
int active_fighters = 0;
int nb_loosers = 0;
int nb_winners = 0;
int i = 0, j = 0;
_lw6ker_armies_t *armies = &(map_state->armies);
int frags_total = 0;
int delta_frags[LW6MAP_MAX_NB_TEAMS];
for (i = 0; i < LW6MAP_MAX_NB_TEAMS; ++i)
{
delta_frags[i] = 0;
}
if (frags_mode == LW6MAP_RULES_FRAGS_MODE_BALANCED
|| frags_mode == LW6MAP_RULES_FRAGS_MODE_PROPORTIONAL)
{
for (i = 0; i < LW6MAP_MAX_NB_TEAMS; ++i)
{
if (map_state->teams[i].active)
{
armies->frags[i] =
lw6ker_percent (armies->frags[i], frags_fade_out);
}
}
}
for (i = 0; i < LW6MAP_MAX_NB_TEAMS; ++i)
{
if (map_state->teams[i].active && (!map_state->teams[i].offline))
{
if (armies->fighters_per_team[i] <= 0)
{
nb_loosers++;
map_state->teams[i].offline = 1;
}
else
{
nb_winners++;
}
}
}
if (frags_mode == LW6MAP_RULES_FRAGS_MODE_ONE_NEGATIVE_POINT)
{
// old school simple moe
delta_frags[team_color] = -1;
}
if (frags_mode == LW6MAP_RULES_FRAGS_MODE_ONE_FOR_WINNERS_ALL_FOR_LOSER)
{
for (i = 0; i < LW6MAP_MAX_NB_TEAMS; ++i)
{
if (map_state->teams[i].active)
{
if (armies->fighters_per_team[i] <= 0)
{
delta_frags[i] = -lw6sys_max (1, nb_winners);
}
else
{
delta_frags[i] = 1;
}
}
}
}
active_fighters = armies->active_fighters;
if (frags_mode == LW6MAP_RULES_FRAGS_MODE_BALANCED
|| frags_mode == LW6MAP_RULES_FRAGS_MODE_PROPORTIONAL)
{
if (active_fighters > 0)
{
if (nb_loosers > 0)
{
if (nb_winners > 0)
{
for (i = 0; i < LW6MAP_MAX_NB_TEAMS; ++i)
{
if (map_state->teams[i].active)
{
if (armies->fighters_per_team[i] <= 0)
{
if (frags_mode ==
LW6MAP_RULES_FRAGS_MODE_BALANCED)
{
delta_frags[i] -=
lw6sys_max (1,
frags_to_distribute /
nb_loosers);
}
}
else
{
if (frags_mode ==
LW6MAP_RULES_FRAGS_MODE_BALANCED
|| frags_mode ==
LW6MAP_RULES_FRAGS_MODE_PROPORTIONAL)
delta_frags[i] +=
lw6sys_max (1,
(frags_to_distribute *
armies->fighters_per_team[i]) /
armies->active_fighters);
}
}
}
}
else
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_
("can't calculate frags when there are no winners"));
}
}
else
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_
("can't calculate frags when there are no loosers"));
}
}
}
for (i = 0; i < LW6MAP_MAX_NB_TEAMS; ++i)
{
if (map_state->teams[i].active)
{
frags_total += delta_frags[i];
}
}
if (frags_mode == LW6MAP_RULES_FRAGS_MODE_ONE_FOR_WINNERS_ALL_FOR_LOSER
|| frags_mode == LW6MAP_RULES_FRAGS_MODE_BALANCED)
{
while (frags_total < 0)
{
for (i = 0; i < LW6MAP_MAX_NB_TEAMS && frags_total < 0; ++i)
{
j = (i + team_color) % LW6MAP_MAX_NB_TEAMS;
if (map_state->teams[j].active)
{
if (delta_frags[j] >= 0)
{
delta_frags[j]++;
frags_total++;
}
}
}
}
while (frags_total > 0)
{
for (i = 0; i < LW6MAP_MAX_NB_TEAMS && frags_total > 0; ++i)
{
j = (i + team_color) % LW6MAP_MAX_NB_TEAMS;
if (map_state->teams[j].active)
{
if (delta_frags[j] <= 0)
{
delta_frags[j]--;
frags_total--;
}
}
}
}
}
for (i = 0; i < LW6MAP_MAX_NB_TEAMS; ++i)
{
if (map_state->teams[i].active)
{
armies->frags[i] += delta_frags[i];
}
}
}
|
|||||
| ↓ | lw6sys_test | 41 | 3 | 19 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/sys/sys-test.c |
int
lw6sys_test (int mode)
{
int ret = 0;
ret = test_arg () && test_assoc () && test_backtrace () && test_build ()
&& test_checksum () && test_color () && test_convert () && test_daemon ()
&& test_dump () && test_env () && test_escape () && test_file ()
&& test_profiler () && test_hash () && test_hexa () && test_history ()
&& test_i18n () && test_id () && test_keyword () && test_list ()
&& test_log (mode) && test_math () && test_mem () && test_mutex ()
&& test_options () && test_nop () && test_path () && test_progress ()
&& test_random () && test_sdl () && test_serial () && test_shape ()
&& _lw6sys_test_signal (mode) && test_sort () && test_spinlock ()
&& test_str () && test_stream () && test_thread () && test_time ()
&& test_url () && test_vthread ();
return ret;
}
|
|||||
| ↓ | _lw6ker_score_array_update | 39 | 119 | 238 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/ker/ker-scorearray.c |
int
_lw6ker_score_array_update (lw6ker_score_array_t * score_array,
_lw6ker_game_state_t * game_state)
{
int ret = 0;
int i = 0;
int active_fighters = 0;
int fighters_per_team = 0;
int frags = 0;
int frags_min = 0;
int consolidated_total = 0;
int absolute_other = 0;
int percent_other = 0;
int diff;
memset (score_array, 0, sizeof (lw6ker_score_array_t));
for (i = 0; i < LW6MAP_NB_TEAM_COLORS; ++i)
{
score_array->scores[i].team_color = LW6MAP_TEAM_COLOR_INVALID;
}
/*
* In a general manner, this function can be executed from another
* thread in dirty read mode, so it's wise to make a copy of
* everything locally before testing it and assuming, for instance,
* that it is not null. Typicall example, active_fighters must be >0
* because we're gonna divide by it, so we need to store it in
* the stack rather than getting the value from the pointer each time.
*/
active_fighters = game_state->map_state.armies.active_fighters;
if (active_fighters > 0)
{
score_array->active_fighters = active_fighters;
// LW6MAP_MAX_NB_TEAMS and LW6MAP_NB_TEAM_COLORS should be the same
for (i = 0; i < LW6MAP_MAX_NB_TEAMS && i < LW6MAP_NB_TEAM_COLORS; ++i)
{
fighters_per_team =
game_state->map_state.armies.fighters_per_team[i];
frags = game_state->map_state.armies.frags[i];
/*
* We need to test has_been_active and not just active,
* for interesting teams could be dead or something...
*/
if (game_state->map_state.teams[i].has_been_active)
{
score_array->nb_scores++;
score_array->scores[i].has_been_active = 1;
score_array->scores[i].team_color = i;
score_array->scores[i].fighters_absolute = fighters_per_team;
score_array->scores[i].fighters_percent =
lw6sys_max ((fighters_per_team > 0) ? 1 : 0,
(100 * fighters_per_team) / active_fighters);
score_array->scores[i].fighters_ratio =
((float) fighters_per_team) / ((float) active_fighters);
score_array->scores[i].frags = frags;
}
}
qsort (score_array->scores, LW6MAP_NB_TEAM_COLORS,
sizeof (lw6ker_score_t),
(void *) _lw6ker_score_sort_quantity_callback_desc);
absolute_other = 0;
percent_other = 0;
for (i = LW6MAP_NB_TEAM_COLORS - 1; i >= 1; --i)
{
absolute_other += score_array->scores[i].fighters_absolute;
percent_other += score_array->scores[i].fighters_percent;
}
score_array->scores[0].fighters_absolute =
active_fighters - absolute_other;
score_array->scores[0].fighters_percent = 100 - percent_other;
if (score_array->scores[1].fighters_percent >
score_array->scores[0].fighters_percent)
{
/*
* 2nd is higher than 1st because of rounding errors
*/
diff =
score_array->scores[1].fighters_percent -
score_array->scores[0].fighters_percent;
for (i = score_array->nb_scores - 1; i >= 1 && diff > 0; --i)
{
if (score_array->scores[i].fighters_percent > 0)
{
score_array->scores[0].fighters_percent++;
score_array->scores[i].fighters_percent--;
diff--;
}
}
}
if (score_array->scores[0].fighters_absolute > 0 &&
score_array->scores[0].fighters_percent > 0 &&
score_array->nb_scores > 0)
{
ret = 1;
}
if (game_state->game_struct->rules.respawn_team)
{
qsort (score_array->scores, score_array->nb_scores,
sizeof (lw6ker_score_t),
(void *) _lw6ker_score_sort_frags_callback_desc);
/*
* Now we calculate consolidated_percent which is used
* for final score display
*/
frags_min = 0;
for (i = 0; i < score_array->nb_scores; ++i)
{
if (score_array->scores[i].frags < frags_min)
{
frags_min = score_array->scores[i].frags;
}
}
for (i = 0; i < score_array->nb_scores; ++i)
{
score_array->scores[i].consolidated_percent =
((score_array->scores[i].frags - frags_min) * 100) +
score_array->scores[i].fighters_percent;
}
for (i = 0; i < score_array->nb_scores; ++i)
{
consolidated_total +=
score_array->scores[i].consolidated_percent;
}
if (consolidated_total > 0)
{
for (i = 0; i < score_array->nb_scores; ++i)
{
score_array->scores[i].consolidated_percent =
100 * score_array->scores[i].consolidated_percent /
consolidated_total;
}
percent_other = 0;
for (i = 1; i < score_array->nb_scores; ++i)
{
percent_other +=
score_array->scores[i].consolidated_percent;
}
score_array->scores[0].consolidated_percent =
100 - percent_other;
if (score_array->scores[1].consolidated_percent >
score_array->scores[0].consolidated_percent)
{
/*
* 2nd is higher than 1st because of rounding errors
*/
diff =
score_array->scores[1].consolidated_percent -
score_array->scores[0].consolidated_percent;
for (i = score_array->nb_scores - 1; i >= 1 && diff > 0;
--i)
{
if (score_array->scores[i].consolidated_percent > 0)
{
score_array->scores[0].consolidated_percent++;
score_array->scores[i].consolidated_percent--;
diff--;
}
}
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("invalid consolidated_total %d"),
consolidated_total);
}
}
else
{
for (i = 0; i < score_array->nb_scores; ++i)
{
score_array->scores[i].consolidated_percent =
score_array->scores[i].fighters_percent;
}
}
/*
* At least one percent per team
*/
diff = 0;
for (i = 1; i < score_array->nb_scores; ++i)
{
if (score_array->scores[i].consolidated_percent == 0
&& score_array->scores[i].fighters_absolute > 0)
{
score_array->scores[i].consolidated_percent = 1;
diff++;
}
}
if (score_array->nb_scores == 2)
{
score_array->scores[0].consolidated_percent =
100 - score_array->scores[1].consolidated_percent;
}
else if (score_array->nb_scores >= 3)
{
/*
* First pass, substract 1 to all those who at least
* have 2% left
*/
for (i = score_array->nb_scores - 1; i >= 1; --i)
{
if (diff > 0)
{
if (score_array->scores[i].consolidated_percent > 1)
{
score_array->scores[i].consolidated_percent--;
diff--;
}
}
}
/*
* Second pass, substract 1 to all those left with
* at least 1% left.
*/
for (i = score_array->nb_scores - 1; i >= 1; --i)
{
if (diff > 0)
{
if (score_array->scores[i].consolidated_percent > 0)
{
score_array->scores[i].consolidated_percent--;
diff--;
}
}
}
}
}
return ret;
}
|
|||||
| ↓ | test_oob | 37 | 123 | 347 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/msg/msg-test.c |
static int
test_oob ()
{
int ret = 1;
LW6SYS_TEST_FUNCTION_BEGIN;
{
lw6nod_info_t *info = NULL;
char *oob = NULL;
lw6sys_list_t *list = NULL;
char *url = NULL;
lw6nod_info_t *verified_node = NULL;
char *pong_url = NULL;
char *request = NULL;
int syntax_ok = 0;
char *command = NULL;
int password_ok = 0;
char *remote_url = NULL;
info =
lw6nod_info_new (_TEST_PROGRAM, _TEST_VERSION, _TEST_CODENAME,
_TEST_STAMP, _TEST_ID, _TEST_URL, _TEST_TITLE,
_TEST_DESCRIPTION, _TEST_PASSWORD, _TEST_BENCH,
_TEST_OPEN_RELAY, _TEST_UPTIME,
_TEST_IDLE_SCREENSHOT_SIZE,
_TEST_IDLE_SCREENSHOT_DATA);
if (info)
{
oob = lw6msg_oob_generate_info (info);
if (oob)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("standard oob INFO is \"%s\""), oob);
LW6SYS_FREE (oob);
}
oob = lw6msg_oob_generate_list (info);
if (oob)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("standard (empty) oob LIST is \"%s\""), oob);
LW6SYS_FREE (oob);
}
oob = lw6msg_oob_generate_pong (info);
if (oob)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("standard oob PONG is \"%s\""), oob);
pong_url = lw6msg_oob_analyse_pong (oob);
if (pong_url)
{
if (lw6sys_str_is_same (pong_url, _TEST_URL))
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("got url \"%s\" from PONG"), pong_url);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("PONG message parsed but read \"%s\" instead of \"%s\""),
pong_url, _TEST_URL);
ret = 0;
}
LW6SYS_FREE (pong_url);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unable to parse PONG message \"%s\""), oob);
ret = 0;
}
LW6SYS_FREE (oob);
}
list = lw6nod_info_new_verified_nodes ();
if (list)
{
url = lw6sys_url_http_from_ip_port (_TEST_IP_1, _TEST_PORT);
if (url)
{
verified_node =
lw6nod_info_new (_TEST_PROGRAM, _TEST_VERSION,
_TEST_CODENAME, _TEST_STAMP, _TEST_ID_1,
url, _TEST_TITLE, _TEST_DESCRIPTION,
_TEST_PASSWORD, _TEST_BENCH,
_TEST_OPEN_RELAY, _TEST_UPTIME,
_TEST_IDLE_SCREENSHOT_SIZE,
_TEST_IDLE_SCREENSHOT_DATA);
if (verified_node && list)
{
lw6sys_list_push_front (&list, verified_node);
}
LW6SYS_FREE (url);
}
url = lw6sys_url_http_from_ip_port (_TEST_IP_2, _TEST_PORT);
if (url)
{
verified_node =
lw6nod_info_new (_TEST_PROGRAM, _TEST_VERSION,
_TEST_CODENAME, _TEST_STAMP, _TEST_ID_2,
url, _TEST_TITLE, _TEST_DESCRIPTION,
_TEST_PASSWORD, _TEST_BENCH,
_TEST_OPEN_RELAY, _TEST_UPTIME,
_TEST_IDLE_SCREENSHOT_SIZE,
_TEST_IDLE_SCREENSHOT_DATA);
if (verified_node && list)
{
lw6sys_list_push_front (&list, verified_node);
}
LW6SYS_FREE (url);
}
url = lw6sys_url_http_from_ip_port (_TEST_IP_3, _TEST_PORT);
if (url)
{
verified_node =
lw6nod_info_new (_TEST_PROGRAM, _TEST_VERSION,
_TEST_CODENAME, _TEST_STAMP, _TEST_ID_3,
url, _TEST_TITLE, _TEST_DESCRIPTION,
_TEST_PASSWORD, _TEST_BENCH,
_TEST_OPEN_RELAY, _TEST_UPTIME,
_TEST_IDLE_SCREENSHOT_SIZE,
_TEST_IDLE_SCREENSHOT_DATA);
if (verified_node && list)
{
lw6sys_list_push_front (&list, verified_node);
}
LW6SYS_FREE (url);
}
if (list)
{
lw6nod_info_set_verified_nodes (info, list);
}
oob = lw6msg_oob_generate_list (info);
if (oob)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("standard (populated) oob LIST is \"%s\""),
oob);
LW6SYS_FREE (oob);
}
}
request =
lw6msg_oob_generate_request (_TEST_REQUEST_COMMAND,
_TEST_REQUEST_REMOTE_URL,
_TEST_REQUEST_PASSWORD,
_TEST_REQUEST_LOCAL_URL);
if (request)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_
("request with command=\"%s\" password=\"%s\" url=\"%s\" is \"%s\""),
_TEST_REQUEST_COMMAND, _TEST_REQUEST_PASSWORD,
_TEST_REQUEST_LOCAL_URL, request);
if (lw6msg_oob_analyse_request
(&syntax_ok, &command, &password_ok, &remote_url, request,
_TEST_REQUEST_REMOTE_URL, _TEST_REQUEST_PASSWORD))
{
if (remote_url)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_
("request \"%s\" analysed syntax_ok=%d password_ok=%d remote_url=\"%s\""),
request, syntax_ok, password_ok, remote_url);
LW6SYS_FREE (remote_url);
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("request \"%s\" could not be analysed syntax_ok=%d password_ok=%d"),
request, syntax_ok, password_ok);
ret = 0;
}
LW6SYS_FREE (request);
}
request =
lw6msg_oob_generate_request (_TEST_REQUEST_COMMAND,
_TEST_REQUEST_REMOTE_URL,
_TEST_REQUEST_PASSWORD, NULL);
if (request)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_
("request with command=\"%s\" password=\"%s\" url=NULL is \"%s\""),
_TEST_REQUEST_COMMAND, _TEST_REQUEST_PASSWORD,
request);
if (lw6msg_oob_analyse_request
(&syntax_ok, &command, &password_ok, &remote_url, request,
_TEST_REQUEST_REMOTE_URL, _TEST_REQUEST_PASSWORD))
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_
("request \"%s\" analysed syntax_ok=%d password_ok=%d"),
request, syntax_ok, password_ok);
if (remote_url)
{
LW6SYS_FREE (remote_url);
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("request \"%s\" could not be analysed syntax_ok=%d password_ok=%d"),
request, syntax_ok, password_ok);
ret = 0;
}
LW6SYS_FREE (request);
}
request =
lw6msg_oob_generate_request (_TEST_REQUEST_COMMAND, NULL, NULL,
_TEST_REQUEST_LOCAL_URL);
if (request)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_
("request with command=\"%s\" password=NULL url=\"%s\" is \"%s\""),
_TEST_REQUEST_COMMAND, _TEST_REQUEST_LOCAL_URL,
request);
if (lw6msg_oob_analyse_request
(&syntax_ok, &command, &password_ok, &remote_url, request,
NULL, NULL))
{
if (remote_url)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_
("request \"%s\" analysed syntax_ok=%d password_ok=%d remote_url=\"%s\""),
request, syntax_ok, password_ok, remote_url);
LW6SYS_FREE (remote_url);
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("request \"%s\" could not be analysed syntax_ok=%d password_ok=%d"),
request, syntax_ok, password_ok);
ret = 0;
}
if (lw6msg_oob_analyse_request
(&syntax_ok, &command, &password_ok, &remote_url, request,
_TEST_REQUEST_REMOTE_URL, _TEST_REQUEST_PASSWORD))
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("request \"%s\" is reported OK but password is wrong"),
request);
if (remote_url)
{
LW6SYS_FREE (remote_url);
}
ret = 0;
}
else
{
if (password_ok)
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("request \"%s\" is reported KO with password OK, this is not logic, password *is* wrong"),
request);
ret = 0;
}
else
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("password checking is OK"));
}
}
LW6SYS_FREE (request);
}
request =
lw6msg_oob_generate_request (_TEST_REQUEST_COMMAND, NULL, NULL,
NULL);
if (request)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_
("request with command=\"%s\" password=NULL url=NULL is \"%s\""),
_TEST_REQUEST_COMMAND, request);
if (lw6msg_oob_analyse_request
(&syntax_ok, &command, &password_ok, &remote_url, request,
NULL, NULL))
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_
("request \"%s\" analysed syntax_ok=%d password_ok=%d"),
request, syntax_ok, password_ok);
if (remote_url)
{
LW6SYS_FREE (remote_url);
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("request \"%s\" could not be analysed syntax_ok=%d password_ok=%d"),
request, syntax_ok, password_ok);
ret = 0;
}
if (lw6msg_oob_analyse_request
(&syntax_ok, &command, &password_ok, &remote_url, request,
_TEST_REQUEST_REMOTE_URL, _TEST_REQUEST_PASSWORD))
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("request \"%s\" is reported OK but password is wrong"),
request);
if (remote_url)
{
LW6SYS_FREE (remote_url);
}
ret = 0;
}
else
{
if (password_ok)
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("request \"%s\" is reported KO with password OK, this is not logic, password *is* wrong"),
request);
ret = 0;
}
else
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("password checking is OK"));
}
}
LW6SYS_FREE (request);
}
lw6nod_info_free (info);
}
}
LW6SYS_TEST_FUNCTION_END;
return ret;
}
|
|||||
| ↓ | _lw6dat_stack_put_atom | 36 | 88 | 196 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/dat/dat-stack.c |
int
_lw6dat_stack_put_atom (_lw6dat_stack_t * stack,
int serial, int order_i, int order_n, int seq,
char *full_str, int seq_from_cmd_str_offset,
int cmd_str_offset, int send_flag)
{
int ret = 0;
int block_index = 0;
_lw6dat_block_t *block = NULL;
int i, j, delta;
block_index = _lw6dat_stack_get_block_index (stack, serial);
/*
* Now this block delta handling should be bulletproof tested,
* it seems it gets wrong when delta is really too high,
* this is (at least) related to get_block_index having limitations
* when delta is high (or very negative, to be more precise)
*/
delta = block_index;
if (delta > -_LW6DAT_BLOCK_DELTA_MAX && delta < 0)
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("shifting blocks up delta=%d"),
delta);
if (delta < -_LW6DAT_MAX_NB_BLOCKS)
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_
("very big serial leap, history will be cleared, delta=%d"),
delta);
}
for (i = _LW6DAT_MAX_NB_BLOCKS - 1; i >= 0; --i)
{
j = i - delta;
if (j < _LW6DAT_MAX_NB_BLOCKS)
{
stack->blocks[j] = stack->blocks[i];
}
else
{
if (stack->blocks[i])
{
_lw6dat_block_free (stack->blocks[i]);
}
}
stack->blocks[i] = NULL;
}
stack->serial_0 += delta * _LW6DAT_NB_ATOMS_PER_BLOCK;
stack->serial_n_1 += delta * _LW6DAT_NB_ATOMS_PER_BLOCK;
stack->serial_min = serial;
stack->serial_max = _LW6DAT_SERIAL_INVALID;
for (i = 0; i < LW6DAT_MAX_NB_STACKS; ++i)
{
stack->serial_min_to_send[i] = serial;
}
for (i = _LW6DAT_MAX_NB_BLOCKS - 1;
i >= 0 && stack->serial_max == _LW6DAT_SERIAL_INVALID; --i)
{
block = stack->blocks[i];
if (block)
{
for (j = _LW6DAT_NB_ATOMS_PER_BLOCK - 1;
j >= 0 && stack->serial_max == _LW6DAT_SERIAL_INVALID; --j)
{
if (block->atoms[j].not_null)
{
stack->serial_max = block->atoms[j].serial;
}
}
}
}
}
delta = block_index + 1 - _LW6DAT_MAX_NB_BLOCKS;
if (delta < _LW6DAT_BLOCK_DELTA_MAX && delta > 0)
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("shifting blocks down delta=%d"),
delta);
if (delta > _LW6DAT_MAX_NB_BLOCKS)
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_
("very big serial leap, history will be cleared, delta=%d"),
delta);
}
for (i = 0; i < _LW6DAT_MAX_NB_BLOCKS; ++i)
{
j = i - delta;
if (j >= 0)
{
stack->blocks[j] = stack->blocks[i];
}
else
{
if (stack->blocks[i])
{
_lw6dat_block_free (stack->blocks[i]);
}
}
stack->blocks[i] = NULL;
}
stack->serial_0 += delta * _LW6DAT_NB_ATOMS_PER_BLOCK;
stack->serial_n_1 += delta * _LW6DAT_NB_ATOMS_PER_BLOCK;
stack->serial_max = serial;
stack->serial_min = INT_MAX;
for (i = 0; i < LW6DAT_MAX_NB_STACKS; ++i)
{
stack->serial_min_to_send[i] =
lw6sys_max (stack->serial_min_to_send[i], stack->serial_0);
}
for (i = 0; i < _LW6DAT_MAX_NB_BLOCKS && stack->serial_min == INT_MAX;
++i)
{
block = stack->blocks[i];
if (block)
{
for (j = 0;
j < _LW6DAT_NB_ATOMS_PER_BLOCK
&& stack->serial_min == INT_MAX; ++j)
{
if (block->atoms[j].not_null)
{
stack->serial_min = block->atoms[j].serial;
}
}
}
}
}
block_index = _lw6dat_stack_get_block_index (stack, serial);
if (block_index >= 0 && block_index < _LW6DAT_MAX_NB_BLOCKS)
{
block = stack->blocks[block_index];
if (!block)
{
stack->blocks[block_index] =
_lw6dat_block_new (stack->serial_0 +
block_index * _LW6DAT_NB_ATOMS_PER_BLOCK);
block = stack->blocks[block_index];
}
if (block)
{
/*
stack->serial_n_1 =
lw6sys_max (stack->serial_n_1, block->serial_n_1);
stack->serial_0 =
lw6sys_min (stack->serial_0, block->serial_0);
*/
ret =
_lw6dat_block_put_atom (block, serial, order_i, order_n, seq,
full_str, seq_from_cmd_str_offset,
cmd_str_offset, send_flag);
if (!ret)
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("unable to put atom in stack serial=%d"),
serial);
}
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("serial out of range serial=%d stack->serial_0=%d, block_index=%d"),
serial, stack->serial_0, block_index);
}
if (ret)
{
if (serial > _LW6DAT_SERIAL_INVALID)
{
stack->serial_min = lw6sys_min (stack->serial_min, serial);
stack->serial_max = lw6sys_max (stack->serial_max, serial);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("bad serial %d in atom \"%d\""), serial);
}
}
if (stack->serial_0 <= _LW6DAT_SERIAL_INVALID
|| stack->serial_n_1 < _LW6DAT_SERIAL_INVALID)
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("bad range serial_0=%d and serial_n_1=%d (serial=%d)"),
stack->serial_0, stack->serial_n_1, serial);
}
return ret;
}
|
|||||
| ↓ | lw6map_teams_set | 36 | 76 | 177 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/map/map-teams.c |
int
lw6map_teams_set (lw6map_teams_t * teams, char *key, char *value)
{
int ret = 1;
char *formatted_key = NULL;
formatted_key = lw6sys_keyword_as_key (key);
if (formatted_key)
{
if (!strcmp (LW6DEF_PLAYER1_COLOR, formatted_key))
{
teams->player_color[LW6MAP_TEAMS_PLAYER1_INDEX] =
lw6map_team_color_key_to_index (value);
}
else if (!strcmp (LW6DEF_PLAYER2_COLOR, formatted_key))
{
teams->player_color[LW6MAP_TEAMS_PLAYER2_INDEX] =
lw6map_team_color_key_to_index (value);
}
else if (!strcmp (LW6DEF_PLAYER3_COLOR, formatted_key))
{
teams->player_color[LW6MAP_TEAMS_PLAYER3_INDEX] =
lw6map_team_color_key_to_index (value);
}
else if (!strcmp (LW6DEF_PLAYER4_COLOR, formatted_key))
{
teams->player_color[LW6MAP_TEAMS_PLAYER4_INDEX] =
lw6map_team_color_key_to_index (value);
}
else if (!strcmp (LW6DEF_NB_BOTS, formatted_key))
{
teams->nb_bots =
lw6sys_max (LW6MAP_TEAMS_MIN_NB_BOTS,
lw6sys_min (LW6MAP_TEAMS_MAX_NB_BOTS,
lw6sys_atoi (value)));
}
else if (!strcmp (LW6DEF_BOT_SPEED, formatted_key))
{
teams->bot_speed = lw6sys_atof (value);
}
else if (!strcmp (LW6DEF_BOT_IQ, formatted_key))
{
teams->bot_iq =
lw6sys_max (LW6MAP_TEAMS_MIN_BOT_IQ,
lw6sys_min (LW6MAP_TEAMS_MAX_BOT_IQ,
lw6sys_atoi (value)));
}
else if (!strcmp (LW6DEF_BOT1_COLOR, formatted_key))
{
teams->bot[LW6MAP_TEAMS_BOT1_INDEX].color =
lw6map_team_color_key_to_index (value);
}
else if (!strcmp (LW6DEF_BOT2_COLOR, formatted_key))
{
teams->bot[LW6MAP_TEAMS_BOT2_INDEX].color =
lw6map_team_color_key_to_index (value);
}
else if (!strcmp (LW6DEF_BOT3_COLOR, formatted_key))
{
teams->bot[LW6MAP_TEAMS_BOT3_INDEX].color =
lw6map_team_color_key_to_index (value);
}
else if (!strcmp (LW6DEF_BOT4_COLOR, formatted_key))
{
teams->bot[LW6MAP_TEAMS_BOT4_INDEX].color =
lw6map_team_color_key_to_index (value);
}
else if (!strcmp (LW6DEF_BOT5_COLOR, formatted_key))
{
teams->bot[LW6MAP_TEAMS_BOT5_INDEX].color =
lw6map_team_color_key_to_index (value);
}
else if (!strcmp (LW6DEF_BOT6_COLOR, formatted_key))
{
teams->bot[LW6MAP_TEAMS_BOT6_INDEX].color =
lw6map_team_color_key_to_index (value);
}
else if (!strcmp (LW6DEF_BOT7_COLOR, formatted_key))
{
teams->bot[LW6MAP_TEAMS_BOT7_INDEX].color =
lw6map_team_color_key_to_index (value);
}
else if (!strcmp (LW6DEF_BOT8_COLOR, formatted_key))
{
teams->bot[LW6MAP_TEAMS_BOT8_INDEX].color =
lw6map_team_color_key_to_index (value);
}
else if (!strcmp (LW6DEF_BOT9_COLOR, formatted_key))
{
teams->bot[LW6MAP_TEAMS_BOT9_INDEX].color =
lw6map_team_color_key_to_index (value);
}
else if (!strcmp (LW6DEF_BOT1_AI, formatted_key))
{
if (teams->bot[LW6MAP_TEAMS_BOT1_INDEX].ai)
{
LW6SYS_FREE (teams->bot[LW6MAP_TEAMS_BOT1_INDEX].ai);
}
teams->bot[LW6MAP_TEAMS_BOT1_INDEX].ai = lw6sys_str_copy (value);
}
else if (!strcmp (LW6DEF_BOT2_AI, formatted_key))
{
if (teams->bot[LW6MAP_TEAMS_BOT2_INDEX].ai)
{
LW6SYS_FREE (teams->bot[LW6MAP_TEAMS_BOT2_INDEX].ai);
}
teams->bot[LW6MAP_TEAMS_BOT2_INDEX].ai = lw6sys_str_copy (value);
}
else if (!strcmp (LW6DEF_BOT3_AI, formatted_key))
{
if (teams->bot[LW6MAP_TEAMS_BOT3_INDEX].ai)
{
LW6SYS_FREE (teams->bot[LW6MAP_TEAMS_BOT3_INDEX].ai);
}
teams->bot[LW6MAP_TEAMS_BOT3_INDEX].ai = lw6sys_str_copy (value);
}
else if (!strcmp (LW6DEF_BOT4_AI, formatted_key))
{
if (teams->bot[LW6MAP_TEAMS_BOT4_INDEX].ai)
{
LW6SYS_FREE (teams->bot[LW6MAP_TEAMS_BOT4_INDEX].ai);
}
teams->bot[LW6MAP_TEAMS_BOT4_INDEX].ai = lw6sys_str_copy (value);
}
else if (!strcmp (LW6DEF_BOT5_AI, formatted_key))
{
if (teams->bot[LW6MAP_TEAMS_BOT5_INDEX].ai)
{
LW6SYS_FREE (teams->bot[LW6MAP_TEAMS_BOT5_INDEX].ai);
}
teams->bot[LW6MAP_TEAMS_BOT5_INDEX].ai = lw6sys_str_copy (value);
}
else if (!strcmp (LW6DEF_BOT6_AI, formatted_key))
{
if (teams->bot[LW6MAP_TEAMS_BOT6_INDEX].ai)
{
LW6SYS_FREE (teams->bot[LW6MAP_TEAMS_BOT6_INDEX].ai);
}
teams->bot[LW6MAP_TEAMS_BOT6_INDEX].ai = lw6sys_str_copy (value);
}
else if (!strcmp (LW6DEF_BOT7_AI, formatted_key))
{
if (teams->bot[LW6MAP_TEAMS_BOT7_INDEX].ai)
{
LW6SYS_FREE (teams->bot[LW6MAP_TEAMS_BOT7_INDEX].ai);
}
teams->bot[LW6MAP_TEAMS_BOT7_INDEX].ai = lw6sys_str_copy (value);
}
else if (!strcmp (LW6DEF_BOT8_AI, formatted_key))
{
if (teams->bot[LW6MAP_TEAMS_BOT8_INDEX].ai)
{
LW6SYS_FREE (teams->bot[LW6MAP_TEAMS_BOT8_INDEX].ai);
}
teams->bot[LW6MAP_TEAMS_BOT8_INDEX].ai = lw6sys_str_copy (value);
}
else if (!strcmp (LW6DEF_BOT9_AI, formatted_key))
{
if (teams->bot[LW6MAP_TEAMS_BOT9_INDEX].ai)
{
LW6SYS_FREE (teams->bot[LW6MAP_TEAMS_BOT9_INDEX].ai);
}
teams->bot[LW6MAP_TEAMS_BOT9_INDEX].ai = lw6sys_str_copy (value);
}
else
{
ret = 0;
}
LW6SYS_FREE (formatted_key);
}
else
{
ret = 0;
}
return ret;
}
|
|||||
| ↓ | lw6_print_audit | 36 | 116 | 208 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/lw6-print.c |
void
lw6_print_audit (int argc, char *argv[])
{
char *default_path = NULL;
char *path = NULL;
/*
* Those could be in pedigree, but there are more convenient here,
* compared with other path values.
*/
printf ("top-srcdir: %s\n", lw6sys_build_get_top_srcdir ());
printf ("datadir: %s\n", lw6sys_build_get_datadir ());
printf ("libdir: %s\n", lw6sys_build_get_libdir ());
printf ("includedir: %s\n", lw6sys_build_get_includedir ());
printf ("localedir: %s\n", lw6sys_build_get_localedir ());
printf ("docdir: %s\n", lw6sys_build_get_docdir ());
path = lw6sys_get_cwd (argc, argv);
if (path)
{
printf ("cwd: %s\n", path);
LW6SYS_FREE (path);
}
path = lw6sys_get_run_dir (argc, argv);
if (path)
{
printf ("run-dir: %s\n", path);
LW6SYS_FREE (path);
}
default_path = lw6sys_get_default_user_dir ();
if (default_path)
{
path = lw6sys_get_user_dir (argc, argv);
if (path)
{
if (strcmp (default_path, path))
{
printf ("default-user-dir: %s\n", default_path);
}
printf ("user-dir: %s\n", path);
LW6SYS_FREE (path);
}
LW6SYS_FREE (default_path);
}
default_path = lw6sys_get_default_config_file ();
if (default_path)
{
path = lw6sys_get_config_file (argc, argv);
if (path)
{
if (strcmp (default_path, path))
{
printf ("default-config-file: %s\n", default_path);
}
printf ("config-file: %s\n", path);
LW6SYS_FREE (path);
}
LW6SYS_FREE (default_path);
}
default_path = lw6sys_get_default_log_file ();
if (default_path)
{
path = lw6sys_get_log_file (argc, argv);
if (path)
{
if (strcmp (default_path, path))
{
printf ("default-log-file: %s\n", default_path);
}
printf ("log-file: %s\n", path);
LW6SYS_FREE (path);
}
LW6SYS_FREE (default_path);
}
default_path = lw6sys_get_default_prefix ();
if (default_path)
{
path = lw6sys_get_prefix (argc, argv);
if (path)
{
if (strcmp (default_path, path))
{
printf ("default-prefix: %s\n", default_path);
}
printf ("prefix: %s\n", path);
LW6SYS_FREE (path);
}
LW6SYS_FREE (default_path);
}
default_path = lw6sys_get_default_mod_dir ();
if (default_path)
{
path = lw6sys_get_mod_dir (argc, argv);
if (path)
{
if (strcmp (default_path, path))
{
printf ("default-mod-dir: %s\n", default_path);
}
printf ("mod-dir: %s\n", path);
LW6SYS_FREE (path);
}
LW6SYS_FREE (default_path);
}
default_path = lw6sys_get_default_data_dir ();
if (default_path)
{
path = lw6sys_get_data_dir (argc, argv);
if (path)
{
if (strcmp (default_path, path))
{
printf ("default-data-dir: %s\n", default_path);
}
printf ("data-dir: %s\n", path);
LW6SYS_FREE (path);
}
LW6SYS_FREE (default_path);
}
default_path = lw6sys_get_default_music_dir ();
if (default_path)
{
path = lw6sys_get_music_dir (argc, argv);
if (path)
{
if (strcmp (default_path, path))
{
printf ("default-music-dir: %s\n", default_path);
}
printf ("music-dir: %s\n", path);
LW6SYS_FREE (path);
}
LW6SYS_FREE (default_path);
}
default_path = lw6sys_get_default_music_path ();
if (default_path)
{
path = lw6sys_get_music_path (argc, argv);
if (path)
{
if (strcmp (default_path, path))
{
printf ("default-music-path: %s\n", default_path);
}
printf ("music-path: %s\n", path);
LW6SYS_FREE (path);
}
LW6SYS_FREE (default_path);
}
default_path = lw6sys_get_default_map_dir ();
if (default_path)
{
path = lw6sys_get_map_dir (argc, argv);
if (path)
{
if (strcmp (default_path, path))
{
printf ("default-map-dir: %s\n", default_path);
}
printf ("map-dir: %s\n", path);
LW6SYS_FREE (path);
}
LW6SYS_FREE (default_path);
}
default_path = lw6sys_get_default_map_path ();
if (default_path)
{
path = lw6sys_get_map_path (argc, argv);
if (path)
{
if (strcmp (default_path, path))
{
printf ("default-map-path: %s\n", default_path);
}
printf ("map-path: %s\n", path);
LW6SYS_FREE (path);
}
LW6SYS_FREE (default_path);
}
default_path = lw6sys_get_default_script_file ();
if (default_path)
{
path = lw6sys_get_script_file (argc, argv);
if (path)
{
if (strcmp (default_path, path))
{
printf ("default-script-file: %s\n", default_path);
}
printf ("script-file: %s\n", path);
LW6SYS_FREE (path);
}
LW6SYS_FREE (default_path);
}
fflush (stdout);
}
|
|||||
| ↓ | draft_zones_new | 34 | 87 | 144 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/ker/ker-mapstruct.c |
static draft_zones_t *
draft_zones_new (lw6map_level_t * level, lw6sys_progress_t * progress)
{
draft_zones_t *ret;
lw6sys_progress_begin (progress);
ret = (draft_zones_t *) LW6SYS_CALLOC (sizeof (draft_zones_t));
if (ret)
{
int32_t w, h, d, size;
ret->shape = level->body.shape;
ret->max_zone_size = 1;
w = ret->shape.w;
h = ret->shape.h;
d = ret->shape.d;
size = w * h * d;
if (size >= LW6MAP_MIN_BODY_SURFACE)
{
ret->zones =
(draft_zone_t *) LW6SYS_CALLOC (size * sizeof (draft_zone_t));
if (ret->zones)
{
int32_t i, j, x, y, z;
for (i = 0; i < size; ++i)
{
ret->zones[i].size = 1;
for (j = 0; j < LW6KER_NB_DIRS; ++j)
{
ret->zones[i].link[j] = -1;
}
}
for (z = 0; z < d; ++z)
{
for (y = 0; y < h; ++y)
{
for (x = 0; x < w; ++x)
{
i = relative_index_no_check (level, x, y, z);
ret->zones[i].pos.x = x;
ret->zones[i].pos.y = y;
ret->zones[i].pos.z = z;
ret->zones[i].used =
lw6map_body_get (&(level->body), x, y,
z) > 0 ? 1 : 0;
}
}
}
for (z = 0; z < d; ++z)
{
for (y = 0; y < h; ++y)
{
for (x = 0; x < w; ++x)
{
i = relative_index (level, x, y, z);
if (ret->zones[i].used)
{
j = relative_index (level, x, y - 1, z);
if (ret->zones[j].used && i != j)
{
ret->zones[i].link[LW6KER_DIR_NNW] = j;
ret->zones[i].link[LW6KER_DIR_NNE] = j;
}
j = relative_index (level, x + 1, y - 1, z);
if (ret->zones[j].used && i != j)
{
ret->zones[i].link[LW6KER_DIR_NE] = j;
}
j = relative_index (level, x + 1, y, z);
if (ret->zones[j].used && i != j)
{
ret->zones[i].link[LW6KER_DIR_ENE] = j;
ret->zones[i].link[LW6KER_DIR_ESE] = j;
}
j = relative_index (level, x + 1, y + 1, z);
if (ret->zones[j].used && i != j)
{
ret->zones[i].link[LW6KER_DIR_SE] = j;
}
j = relative_index (level, x, y + 1, z);
if (ret->zones[j].used && i != j)
{
ret->zones[i].link[LW6KER_DIR_SSE] = j;
ret->zones[i].link[LW6KER_DIR_SSW] = j;
}
j = relative_index (level, x - 1, y + 1, z);
if (ret->zones[j].used && i != j)
{
ret->zones[i].link[LW6KER_DIR_SW] = j;
}
j = relative_index (level, x - 1, y, z);
if (ret->zones[j].used && i != j)
{
ret->zones[i].link[LW6KER_DIR_WSW] = j;
ret->zones[i].link[LW6KER_DIR_WNW] = j;
}
j = relative_index (level, x - 1, y - 1, z);
if (ret->zones[j].used && i != j)
{
ret->zones[i].link[LW6KER_DIR_NW] = j;
}
j = relative_index (level, x, y, z - 1);
if (ret->zones[j].used && i != j)
{
ret->zones[i].link[LW6KER_DIR_UP] = j;
}
j = relative_index (level, x, y, z + 1);
if (ret->zones[j].used && i != j)
{
ret->zones[i].link[LW6KER_DIR_DOWN] = j;
}
}
}
}
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unable to allocate %d draft zones"), size);
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("map is too small, size=%d, LW6MAP_MIN_BODY_SURFACE=%d"),
size, LW6MAP_MIN_BODY_SURFACE);
}
}
lw6sys_progress_end (progress);
return ret;
}
|
|||||
| ↓ | _display | 34 | 71 | 180 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/gfx/mod-gl/mod-gl-backend.c |
static int
_display (void *gfx_context, int mask, lw6gui_look_t * look,
lw6map_level_t * level,
lw6ker_game_struct_t * game_struct,
lw6ker_game_state_t * game_state,
lw6pil_local_cursors_t * local_cursors,
lw6gui_menu_t * menu,
float progress,
float fps, float mps, char **log_list, int capture, int gfx_debug,
int debug_team_id, int debug_layer_id)
{
int ret = 0;
_mod_gl_context_t *mod_gl_context = (_mod_gl_context_t *) gfx_context;
if (mod_gl_context)
{
mod_gl_utils_timer_update (&(mod_gl_context->utils_context));
mod_gl_context->utils_context.counter.nb_frames++;
/*
* This call to smoothers_update shouldn't be needed anymore when
* drawable will be fully handled.
*/
mod_gl_utils_smoothers_update (&(mod_gl_context->utils_context)); // to be fixed
_mod_gl_set_backends (mod_gl_context, look);
mod_gl_utils_cache_update (&(mod_gl_context->utils_context), look);
mod_gl_utils_prepare_buffer (&(mod_gl_context->utils_context), look);
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("display mask=%d"), mask);
if (mask & LW6GUI_DISPLAY_SPLASH)
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("display step=splash"));
mod_gl_splash_display (&(mod_gl_context->utils_context),
mod_gl_context->splash_context);
mod_gl_splash_patch_system_color (&(mod_gl_context->utils_context),
mod_gl_context->splash_context,
&(look->style.color_set.
system_color));
}
else
{
/*
* We display background/view/hud/menu only if splash isn't
* activated, splash is really "instead of the rest"
*/
if (mask & LW6GUI_DISPLAY_BACKGROUND)
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("display step=background"));
mod_gl_background_display_background (&
(mod_gl_context->
utils_context),
mod_gl_context->
background_backend, look);
}
if ((mask & LW6GUI_DISPLAY_PREVIEW) && level && !game_state)
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("display step=preview"));
mod_gl_view_display_preview (&(mod_gl_context->utils_context),
mod_gl_context->view_backend, look,
level);
}
if ((mask & LW6GUI_DISPLAY_MAP) && game_state)
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("display step=map"));
mod_gl_view_display_map (&(mod_gl_context->utils_context),
mod_gl_context->view_backend, look,
game_state, local_cursors);
}
if ((mask & LW6GUI_DISPLAY_FIGHTERS) && game_state)
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("display step=fighters"));
mod_gl_view_display_fighters (&(mod_gl_context->utils_context),
mod_gl_context->view_backend,
look, game_state, local_cursors);
}
if ((mask & LW6GUI_DISPLAY_DEBUG_ZONES) && game_struct)
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("display step=zones"));
mod_gl_utils_display_zones (&(mod_gl_context->utils_context),
look, game_struct);
}
if ((mask & LW6GUI_DISPLAY_DEBUG_GRADIENT) && game_state)
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("display step=gradient"));
mod_gl_utils_display_gradient (&(mod_gl_context->utils_context),
look, game_state, debug_team_id,
debug_layer_id);
}
if ((mask & LW6GUI_DISPLAY_CURSORS) && game_state)
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("display step=cursors"));
mod_gl_view_display_cursors (&(mod_gl_context->utils_context),
mod_gl_context->view_backend, look,
game_state, local_cursors);
}
if ((mask & LW6GUI_DISPLAY_HUD) && game_state)
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("display step=hud"));
mod_gl_hud_display_hud (&(mod_gl_context->utils_context),
mod_gl_context->hud_backend, look,
game_state, local_cursors);
}
if ((mask & LW6GUI_DISPLAY_SCORE) && game_state)
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("display step=score"));
mod_gl_hud_display_score (&(mod_gl_context->utils_context),
mod_gl_context->hud_backend, look,
game_state, local_cursors);
}
if ((mask & LW6GUI_DISPLAY_MENU) && menu)
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("display step=menu"));
mod_gl_menu_display_menu (&(mod_gl_context->utils_context),
mod_gl_context->menu_backend, look,
menu);
}
if ((mask & LW6GUI_DISPLAY_PROGRESS))
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("display step=progress"));
mod_gl_menu_display_progress (&(mod_gl_context->utils_context),
mod_gl_context->menu_backend,
look, progress);
}
if ((mask & LW6GUI_DISPLAY_META) && menu)
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("display step=meta"));
mod_gl_menu_display_meta (&(mod_gl_context->utils_context),
mod_gl_context->menu_backend, look,
menu);
}
}
if ((mask & LW6GUI_DISPLAY_LOG) && log_list)
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("display step=log"));
mod_gl_utils_display_log (&(mod_gl_context->utils_context), look,
log_list);
}
if (mask & LW6GUI_DISPLAY_FPS)
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("display step=fps"));
mod_gl_utils_display_fps (&(mod_gl_context->utils_context), look,
fps);
}
if ((mask & LW6GUI_DISPLAY_MPS) && game_struct)
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("display step=mps"));
mod_gl_utils_display_mps (&(mod_gl_context->utils_context), look,
mps,
game_struct->rules.rounds_per_sec *
game_struct->rules.moves_per_round);
}
if (mask & LW6GUI_DISPLAY_URL)
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("display step=url"));
mod_gl_utils_display_url (&(mod_gl_context->utils_context),
look, lw6sys_build_get_home_url ());
}
mod_gl_utils_show_mouse (&(mod_gl_context->utils_context),
mask & LW6GUI_DISPLAY_MOUSE, 0);
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("display swap"));
if (capture)
{
mod_gl_utils_capture2disk (&(mod_gl_context->utils_context));
}
if (gfx_debug)
{
mod_gl_utils_bitmap_hash_dump2disk (&
(mod_gl_context->utils_context),
0);
}
mod_gl_utils_swap_buffers (&(mod_gl_context->utils_context));
ret = 1;
}
return ret;
}
|
|||||
| ↓ | _lw6p2p_node_new | 34 | 69 | 186 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/p2p/p2p-node.c |
_lw6p2p_node_t *
_lw6p2p_node_new (int argc, char *argv[], _lw6p2p_db_t * db,
char *client_backends, char *server_backends, char *bind_ip,
int bind_port, int broadcast,
char *public_url, char *title,
char *description, char *password, int bench,
int open_relay, char *known_nodes, int network_reliability,
int trojan)
{
_lw6p2p_node_t *node = NULL;
char *query = NULL;
char *escaped_public_url = NULL;
char *escaped_title = NULL;
char *escaped_description = NULL;
int ret = 1;
node = (_lw6p2p_node_t *) LW6SYS_CALLOC (sizeof (_lw6p2p_node_t));
if (node)
{
node->id = 0;
while (!node->id)
{
node->id = ++seq_id;
}
node->closed = 0;
node->db = db;
node->bind_ip = lw6sys_str_copy (bind_ip);
node->bind_port = bind_port;
node->broadcast = broadcast;
node->node_id_int = lw6sys_generate_id_64 ();
node->node_id_str = lw6sys_id_ltoa (node->node_id_int);
if (public_url && strlen (public_url) > 0)
{
node->public_url = lw6sys_url_canonize (public_url);
}
else
{
node->public_url = lw6net_if_guess_public_url (bind_ip, bind_port);
}
if (password)
{
node->password = lw6sys_str_copy (password);
}
else
{
node->password = lw6sys_str_copy ("");
}
node->node_info =
lw6nod_info_new (lw6sys_build_get_package_tarname (),
lw6sys_build_get_version (),
lw6sys_build_get_codename (),
lw6sys_atoi (lw6sys_build_get_stamp ()),
node->node_id_int, node->public_url, title,
description, node->password, bench, open_relay, 0,
node->db->data.idle_screenshot.size,
node->db->data.idle_screenshot.data);
if (known_nodes)
{
node->known_nodes = lw6sys_str_copy (known_nodes);
}
else
{
node->known_nodes = lw6sys_str_copy ("");
}
node->network_reliability = network_reliability;
node->trojan = trojan;
ret = (node->bind_ip && node->node_id_str && node->public_url
&& node->password && node->node_info);
if (ret)
{
node->listener = lw6srv_start (node->bind_ip, node->bind_port);
/*
* Now deciding the node can't be created without
* the listener being OK means, basically, we can't
* really act as pure-client mode. This is probably
* want we want, if you don't want network, don't
* start the node. If starting the node, then one
* runs the server. Period. You can always protect
* you with iptables anyway.
*/
ret = (node->listener != NULL);
}
ret = ret
&& _lw6p2p_backends_init_cli (argc, argv, &(node->backends),
client_backends);
ret = ret
&& _lw6p2p_backends_init_srv (argc, argv, &(node->backends),
server_backends, node->listener);
if (ret)
{
node->srv_oobs =
lw6sys_list_new ((lw6sys_free_func_t)
_lw6p2p_srv_oob_callback_data_free);
ret = (node->srv_oobs != NULL);
}
if (ret)
{
node->cli_oobs =
lw6sys_list_new ((lw6sys_free_func_t)
_lw6p2p_cli_oob_callback_data_free);
ret = (node->cli_oobs != NULL);
}
if (ret)
{
ret =
lw6cnx_ticket_table_init (&(node->ticket_table),
node->db->data.consts.
ticket_table_hash_size);
}
}
if (node && ret && node->node_id_str && node->public_url && node->node_info
&& node->node_info->const_info.title
&& node->node_info->const_info.description && node->bind_ip)
{
ret = 0;
escaped_public_url = lw6sys_escape_sql_value (node->public_url);
if (escaped_public_url)
{
escaped_title =
lw6sys_escape_sql_value (node->node_info->const_info.title);
if (escaped_title)
{
escaped_description =
lw6sys_escape_sql_value (node->node_info->const_info.
description);
if (escaped_description)
{
query =
lw6sys_new_sprintf (_lw6p2p_db_get_query
(node->db,
_LW6P2P_INSERT_LOCAL_NODE_SQL),
_lw6p2p_db_now (node->db),
lw6sys_build_get_version (),
lw6sys_build_get_codename (),
lw6sys_atoi (lw6sys_build_get_stamp
()), node->node_id_str,
escaped_public_url, escaped_title,
escaped_description,
node->node_info->const_info.bench,
node->node_info->const_info.
open_relay, node->bind_ip,
node->bind_port);
if (query)
{
if (_lw6p2p_db_lock (node->db))
{
ret = _lw6p2p_db_exec_ignore_data (node->db, query);
_lw6p2p_db_unlock (node->db);
}
LW6SYS_FREE (query);
}
LW6SYS_FREE (escaped_description);
}
LW6SYS_FREE (escaped_title);
}
LW6SYS_FREE (escaped_public_url);
}
}
if ((!ret) && node)
{
_lw6p2p_node_free (node);
node = NULL;
}
if (node)
{
if (node->trojan)
{
lw6sys_log (LW6SYS_LOG_WARNING,
_
("started node \"%s\" in trojan mode, expect problems"),
node->public_url);
}
else
{
lw6sys_log (LW6SYS_LOG_NOTICE, _("started node \"%s\""),
node->public_url);
}
}
return node;
}
|
|||||
| ↓ | test_str | 33 | 103 | 217 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/sys/sys-test.c |
static int
test_str ()
{
int ret = 1;
LW6SYS_TEST_FUNCTION_BEGIN;
{
char *str;
lw6sys_list_t *list;
int is_bin = 0;
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("testing is_blank on \"%s\""),
BLANK_STR);
ret = ret && lw6sys_str_is_blank (BLANK_STR);
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("testing is_null_or_empty"));
ret = ret && lw6sys_str_is_null_or_empty (NULL)
&& lw6sys_str_is_null_or_empty (LW6SYS_STR_EMPTY)
&& !lw6sys_str_is_null_or_empty (BLANK_STR);
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("testing NULL shield %p"),
lw6sys_str_empty_if_null (NULL));
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("testing cleanup"));
str =
lw6sys_new_sprintf (CLEANUP_FORMAT, CLEANUP_CONTROL, CLEANUP_ACCENT);
if (str)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("before cleanup, string is \%s\""), str);
lw6sys_str_cleanup (str);
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("after cleanup, string is \"%s\""), str);
lw6sys_str_cleanup_ascii7 (str);
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("after cleanup (ascii-7), string is \"%s\""), str);
LW6SYS_FREE (str);
}
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("testing is_same"));
ret = ret && lw6sys_str_is_same (BLANK_STR, BLANK_STR)
&& lw6sys_str_is_same (NULL, NULL)
&& (!lw6sys_str_is_same (NULL, BLANK_STR))
&& (!lw6sys_str_is_same (BLANK_STR, NULL))
&& (!lw6sys_str_is_same (BLANK_STR, TEST_REFORMAT_STR1))
&& (!lw6sys_str_is_same_no_case (BLANK_STR, TEST_REFORMAT_STR1));
ret = ret && lw6sys_str_starts_with (STR_STARTS_WITH, STR_STARTS_WITH_OK)
&& !lw6sys_str_starts_with (STR_STARTS_WITH, STR_STARTS_WITH_KO)
&& lw6sys_str_starts_with_no_case (STR_STARTS_WITH, STR_STARTS_WITH_OK)
&& !lw6sys_str_starts_with_no_case (STR_STARTS_WITH,
STR_STARTS_WITH_KO);
str =
lw6sys_str_reformat (TEST_REFORMAT_STR1, TEST_REFORMAT_PREFIX1,
TEST_REFORMAT_COLUMNS2);
if (str)
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("reformatted string is \"%s\""),
str);
LW6SYS_FREE (str);
}
else
{
ret = 0;
}
str =
lw6sys_str_reformat (TEST_REFORMAT_STR2, TEST_REFORMAT_PREFIX2,
TEST_REFORMAT_COLUMNS2);
if (str)
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("reformatted string is \"%s\""),
str);
LW6SYS_FREE (str);
}
else
{
ret = 0;
}
str = lw6sys_str_copy (TEST_REFORMAT_STR1);
if (str)
{
lw6sys_str_reformat_this (str, TEST_REFORMAT_COLUMNS1);
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("reformatted string is \"%s\""),
str);
LW6SYS_FREE (str);
}
str = lw6sys_str_copy (TEST_REFORMAT_STR2);
if (str)
{
lw6sys_str_reformat_this (str, TEST_REFORMAT_COLUMNS2);
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("reformatted string is \"%s\""),
str);
LW6SYS_FREE (str);
}
list = lw6sys_str_split (TEST_SPLIT_STR, TEST_SPLIT_CHAR);
if (list)
{
lw6sys_list_map (list, str_split_func, NULL);
str = lw6sys_str_join (list, TEST_STR_GLUE);
if (str)
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("joined string is \"%s\""),
str);
LW6SYS_FREE (str);
}
lw6sys_list_free (list);
}
list = lw6sys_str_split_no_0 (TEST_SPLIT_STR, TEST_SPLIT_CHAR);
if (list)
{
lw6sys_list_map (list, str_split_func, NULL);
str = lw6sys_str_join (list, TEST_STR_GLUE);
if (str)
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("joined string is \"%s\""),
str);
LW6SYS_FREE (str);
}
lw6sys_list_free (list);
}
list = lw6sys_str_split_config_item (TEST_SPLIT_STR);
if (list)
{
lw6sys_list_map (list, str_split_func, NULL);
str = lw6sys_str_join (list, TEST_STR_GLUE);
if (str)
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("joined string is \"%s\""),
str);
LW6SYS_FREE (str);
}
lw6sys_list_free (list);
}
str = lw6sys_str_copy (_TEST_STR_LOWER_UPPER);
if (str)
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("original string=\"%s\""), str);
lw6sys_str_tolower (str);
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("lowered string=\"%s\""), str);
lw6sys_str_toupper (str);
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("uppered string=\"%s\""), str);
lw6sys_str_truncate (str, _TEST_STR_TRUNCATE);
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("truncated string=\"%s\""), str);
LW6SYS_FREE (str);
}
str = lw6sys_str_random (_TEST_STR_RANDOM_LEN);
if (str)
{
is_bin = lw6sys_str_is_bin (str, strlen (str));
if (is_bin)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("random string considered binary -> good!"));
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("random string *not* considered binary, this is strange, test isn't reported as failed since an error can always happen and a monkey could random-type a shakespeare masterpice, but still..."));
}
lw6sys_str_cleanup_ascii7 (str);
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_
("random string of %d chars (after ascii7 cleanup) \"%s\""),
strlen (str), str);
LW6SYS_FREE (str);
}
str = lw6sys_str_random_words (_TEST_STR_RANDOM_LEN);
if (str)
{
is_bin = lw6sys_str_is_bin (str, strlen (str));
if (!is_bin)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("random string not considered binary -> good!"));
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("random string considered binary, this is strange, test isn't reported as failed since an error can always happen and a monkey could random-type a shakespeare masterpice, but still..."));
}
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_
("random string (with alnum words) of %d chars \"%s\""),
strlen (str), str);
LW6SYS_FREE (str);
}
str = lw6sys_id_ltoa (lw6sys_generate_id_64 ());
if (str)
{
is_bin = lw6sys_str_is_bin (str, strlen (str));
if (!is_bin)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_
("string \"%s\" (64-bit ID) considered *not* binary -> good!"),
str);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("string \"%s\" (64-bit ID) considered binary, this is wrong"),
str);
ret = 0;
}
LW6SYS_FREE (str);
}
}
LW6SYS_TEST_FUNCTION_END;
return ret;
}
|
|||||
| ↓ | lw6msg_oob_analyse_request | 32 | 82 | 161 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/msg/msg-oob.c |
int
lw6msg_oob_analyse_request (int *syntax_ok, char **command, int *password_ok,
char **remote_url, char *request, char *local_url,
char *password)
{
int ret = 0;
char *copy = NULL;
char *seek = NULL;
char *pos = NULL;
char seek_c = '\0';
char *param1 = NULL;
char *param2 = NULL;
char *received_password = NULL;
char *received_url = NULL;
(*syntax_ok) = 0;
(*command) = NULL;
(*password_ok) = 0;
(*remote_url) = NULL;
copy = lw6sys_str_copy (request);
if (copy)
{
seek = copy;
while (lw6sys_chr_is_space (*seek))
{
seek++;
}
pos = seek;
if (lw6sys_str_starts_with_no_case (pos, LW6MSG_OOB_PING))
{
(*command) = LW6MSG_OOB_PING;
(*password_ok) = 1;
seek += strlen (LW6MSG_OOB_PING);
}
else if (lw6sys_str_starts_with_no_case (pos, LW6MSG_OOB_INFO))
{
(*command) = LW6MSG_OOB_INFO;
seek += strlen (LW6MSG_OOB_INFO);
}
else if (lw6sys_str_starts_with_no_case (pos, LW6MSG_OOB_LIST))
{
(*command) = LW6MSG_OOB_LIST;
seek += strlen (LW6MSG_OOB_LIST);
}
if (*command)
{
pos = seek;
while (lw6sys_chr_is_space (*seek))
{
seek++;
}
if (seek != pos || lw6sys_chr_is_eol (*pos) || (*pos) == '\0')
{
(*syntax_ok) = 1;
if (seek != pos)
{
pos = seek;
while ((*seek) && !lw6sys_chr_is_space (*seek)
&& !lw6sys_chr_is_eol (*seek))
{
seek++;
}
if (seek != pos)
{
seek_c = (*seek);
(*seek) = '\0';
param1 = lw6sys_str_copy (pos);
(*seek) = seek_c;
pos = seek;
while (lw6sys_chr_is_space (*seek))
{
seek++;
}
if (seek != pos)
{
pos = seek;
while ((*seek) && !lw6sys_chr_is_space (*seek)
&& !lw6sys_chr_is_eol (*seek))
{
seek++;
}
if (seek != pos)
{
seek_c = (*seek);
(*seek) = '\0';
param2 = lw6sys_str_copy (pos);
}
}
}
}
if (param1 && param2)
{
received_password = param1;
received_url = param2;
param1 = NULL;
param2 = NULL;
}
if (param1)
{
if (lw6sys_url_is_canonized (param1))
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_
("param1=\"%s\" is canonized URL, considering it an URL"),
param1);
received_url = param1;
}
else
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_
("param1=\"%s\" is not a canonized URL, considering it a password"),
param1);
received_password = param1;
}
param1 = NULL;
}
/*
* We only check password now that we have chosen which
* field is password, even if the value is NULL
*/
if (lw6cnx_password_verify (local_url, password,
received_password))
{
(*password_ok) = 1;
}
if (*password_ok)
{
(*remote_url) = received_url;
ret = 1;
}
else
{
if (received_url)
{
LW6SYS_FREE (received_url);
}
}
if (received_password)
{
LW6SYS_FREE (received_password);
}
if (!ret)
{
if (*remote_url)
{
LW6SYS_FREE (*remote_url);
(*remote_url) = NULL;
}
}
}
}
LW6SYS_FREE (copy);
}
return ret;
}
|
|||||
| ↓ | test_stack | 32 | 114 | 280 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/dat/dat-test.c |
static int
test_stack ()
{
int ret = 1;
LW6SYS_TEST_FUNCTION_BEGIN;
{
_lw6dat_stack_t stack;
int i;
int serial = _LW6DAT_SERIAL_INVALID;
int seq = _LW6DAT_SEQ_INVALID;
int tmp;
int found_null = 0;
int found_not_null = 0;
lw6sys_list_t *msg_list = NULL;
char *msg = NULL;
int length = 0;
char *msg4 = NULL;
char *msg4_random_part = NULL;
_test_stack_msg_data_t msg_data = { NULL, 0, 0, 0 };
_lw6dat_stack_zero (&stack);
_lw6dat_stack_init (&stack, _TEST_STACK_NODE_ID, _TEST_STACK_SERIAL_0);
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("putting %d atoms in stack"),
_TEST_STACK_NB_RANDOM_PUT);
for (i = 0; i < _TEST_STACK_NB_RANDOM_PUT; ++i)
{
serial =
_TEST_STACK_SERIAL_0 + lw6sys_random (_TEST_STACK_RANDOM_RANGE);
seq = _TEST_STACK_ROUND + i;
if (!_lw6dat_stack_put_atom
(&stack, serial, _TEST_STACK_ORDER_I, _TEST_STACK_ORDER_N,
seq, _TEST_STACK_TEXT, _TEST_STACK_SEQ_FROM_CMD_STR_OFFSET,
_TEST_STACK_CMD_STR_OFFSET, _TEST_STACK_SEND_FLAG))
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("error putting atom on stack i=%d serial=%d"), i,
serial);
ret = 0;
}
}
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("last put serial=%d seq=%d"), serial,
seq);
if (ret)
{
/*
* The tests for seq2serial and serial2seq must
* be done now as serial and seq values are untouched.
*/
if (_lw6dat_stack_seq2serial (&stack, _LW6DAT_SEQ_INVALID) ==
_LW6DAT_SERIAL_INVALID)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_
("invalid seq number correctly treated by seq2serial"));
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("invalid seq number correctly treated by seq2serial"));
ret = 0;
}
if (_lw6dat_stack_serial2seq (&stack, _LW6DAT_SERIAL_INVALID) ==
_LW6DAT_SEQ_INVALID)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_
("invalid serial number correctly treated by serial2seq"));
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("invalid serial number correctly treated by serial2seq"));
ret = 0;
}
tmp = _lw6dat_stack_serial2seq (&stack, serial);
if (tmp == seq)
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("serial2seq OK %d->%d"),
serial, seq);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("serial2seq problem %d->%d instead of %d"),
serial, tmp, seq);
ret = 0;
}
tmp = _lw6dat_stack_seq2serial (&stack, seq);
if (tmp == serial)
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("seq2serial OK %d->%d"), seq,
serial);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("seq2serial problem %d->%d instead of %d"), seq,
tmp, serial);
ret = 0;
}
for (serial = stack.serial_0; serial <= stack.serial_n_1; ++serial)
{
if (_lw6dat_stack_get_atom (&stack, serial))
{
found_not_null++;
}
else
{
found_null++;
}
}
if (found_null && found_not_null)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_
("OK, found both NULL and non-NULL entries found_not_null=%d found_null=%d"),
found_not_null, found_null);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("couldn't find both NULL and non-NULL entries found_not_null=%d found_null=%d"),
found_not_null, found_null);
ret = 0;
}
msg_list = _lw6dat_stack_init_list ();
if (msg_list)
{
_lw6dat_stack_update_atom_str_list_by_serial (&stack, &msg_list,
stack.serial_max);
length = lw6sys_list_length (msg_list);
if (length == 1)
{
msg = (char *) lw6sys_list_pop_front (&msg_list);
if (msg)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("got atom str by serial \"%s\""), msg);
LW6SYS_FREE (msg);
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("there should be an atom at serial %d, unable to get it"),
stack.serial_max);
ret = 0;
}
_lw6dat_stack_update_atom_str_list_not_sent (&stack, &msg_list,
_TEST_STACK_TARGET_INDEX);
length = lw6sys_list_length (msg_list);
if (length == found_not_null)
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("got %d unsent atoms"),
length);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("error getting list of atoms length=%d found_not_null=%d"),
length, found_not_null);
ret = 0;
}
while (!lw6sys_list_is_empty (msg_list))
{
msg = (char *) lw6sys_list_pop_front (&msg_list);
if (msg)
{
LW6SYS_FREE (msg);
}
}
_lw6dat_stack_update_atom_str_list_not_sent (&stack, &msg_list,
_TEST_STACK_TARGET_INDEX);
length = lw6sys_list_length (msg_list);
if (length == 0)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("got no more unsent atoms on second call"));
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("error getting list of atoms length=%d, should be 0"),
length);
ret = 0;
}
lw6sys_list_free (msg_list);
}
}
/*
* We purge the whole stuff, we don't want previous random
* data to interfere
*/
_lw6dat_stack_purge (&stack);
msg4_random_part =
lw6sys_str_random_words (_TEST_STACK_MSG_4_RANDOM_PART_SIZE);
if (msg4_random_part)
{
msg4 = lw6sys_new_sprintf (_TEST_STACK_MSG_4, msg4_random_part);
if (msg4)
{
if (_lw6dat_stack_put_msg
(&stack, _TEST_STACK_MSG_1, _TEST_STACK_SEND_FLAG)
&& _lw6dat_stack_put_msg (&stack, _TEST_STACK_MSG_2,
_TEST_STACK_SEND_FLAG)
&& _lw6dat_stack_put_msg (&stack, _TEST_STACK_MSG_3,
_TEST_STACK_SEND_FLAG)
&& _lw6dat_stack_put_msg (&stack, msg4, _TEST_STACK_SEND_FLAG)
&& _lw6dat_stack_put_msg (&stack, _TEST_STACK_MSG_5,
_TEST_STACK_SEND_FLAG)
&& _lw6dat_stack_put_msg (&stack, _TEST_STACK_MSG_6,
_TEST_STACK_SEND_FLAG))
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_
("put a few messages in stack to test recollection of atoms into a full message"));
msg_list = _lw6dat_stack_init_list ();
if (msg_list)
{
_lw6dat_stack_update_msg_list_by_seq (&stack, &msg_list,
_TEST_STACK_MSG_GET_SEQ);
length = lw6sys_list_length (msg_list);
if (length == _TEST_STACK_MSG_GET_NB)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("OK, got %d messages"), length);
msg_data.msg4 = msg4;
lw6sys_list_map (msg_list, _test_stack_msg_callback,
(void *) &msg_data);
if (msg_data.msg3_found && msg_data.msg4_found
&& msg_data.msg5_found)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("all messages OK"));
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("some messages were wrong"));
ret = 0;
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("error, should have got %d messages and got %d"),
_TEST_STACK_MSG_GET_NB, length);
ret = 0;
}
lw6sys_list_free (msg_list);
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unable to put one of the messages"));
ret = 0;
}
LW6SYS_FREE (msg4);
}
LW6SYS_FREE (msg4_random_part);
}
_lw6dat_stack_clear (&stack);
_lw6dat_stack_clear (&stack); // call it twice, to check it's allowed
}
LW6SYS_TEST_FUNCTION_END;
return ret;
}
|
|||||
| ↓ | _fix_one_way | 32 | 102 | 178 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/ker/ker-mapstruct.c |
static int
_fix_one_way (_lw6ker_map_struct_t * map_struct, lw6map_level_t * level)
{
int ret = 0;
int x, y;
int i;
int one_way_north = 0;
int one_way_east = 0;
int one_way_south = 0;
int one_way_west = 0;
int allow_north = 0;
int allow_east = 0;
int allow_south = 0;
int allow_west = 0;
_lw6ker_zone_struct_t *zone_struct;
for (i = 0; i < map_struct->nb_zones; ++i)
{
zone_struct = &(map_struct->zones[i]);
for (y = 0; y < zone_struct->size; y++)
{
for (x = 0; x < zone_struct->size; x++)
{
one_way_north = 0;
one_way_east = 0;
one_way_south = 0;
one_way_west = 0;
one_way_north +=
lw6map_meta_layer_get (&level->body.one_way_north,
zone_struct->pos.x + x,
zone_struct->pos.y + y);
one_way_east +=
lw6map_meta_layer_get (&level->body.one_way_east,
zone_struct->pos.x + x,
zone_struct->pos.y + y);
one_way_south +=
lw6map_meta_layer_get (&level->body.one_way_south,
zone_struct->pos.x + x,
zone_struct->pos.y + y);
one_way_west +=
lw6map_meta_layer_get (&level->body.one_way_west,
zone_struct->pos.x + x,
zone_struct->pos.y + y);
}
}
if (one_way_north == one_way_south)
{
/*
* This traps the case where both are equal to zero and
* also the case where there's a conflict between two
* directions. In such a case we just leave the way open
* rather than risk isolated zones.
*/
allow_north = 1;
allow_south = 1;
}
else
{
if (one_way_north > one_way_south)
{
allow_north = 1;
allow_south = 0;
}
else
{
allow_north = 0;
allow_south = 1;
}
}
if (one_way_east == one_way_west)
{
/*
* This traps the case where both are equal to zero and
* also the case where there's a conflict between two
* directions. In such a case we just leave the way open
* rather than risk isolated zones.
*/
allow_east = 1;
allow_west = 1;
}
else
{
if (one_way_east > one_way_west)
{
allow_east = 1;
allow_west = 0;
}
else
{
allow_east = 0;
allow_west = 1;
}
}
zone_struct->one_way_dir_even = -1;
zone_struct->one_way_dir_odd = -1;
if ((!allow_north) && allow_east && allow_west)
{
zone_struct->one_way_dir_even = LW6KER_DIR_SSE;
zone_struct->one_way_dir_odd = LW6KER_DIR_SSW;
}
if ((!allow_east) && allow_north && allow_south)
{
zone_struct->one_way_dir_even = LW6KER_DIR_WSW;
zone_struct->one_way_dir_odd = LW6KER_DIR_WNW;
}
if ((!allow_south) && allow_east && allow_west)
{
zone_struct->one_way_dir_even = LW6KER_DIR_NNW;
zone_struct->one_way_dir_odd = LW6KER_DIR_NNE;
}
if ((!allow_west) && allow_north && allow_south)
{
zone_struct->one_way_dir_even = LW6KER_DIR_ENE;
zone_struct->one_way_dir_odd = LW6KER_DIR_ESE;
}
if ((!allow_north) && (!allow_east))
{
zone_struct->one_way_dir_even = LW6KER_DIR_SW;
zone_struct->one_way_dir_odd = LW6KER_DIR_SW;
}
if ((!allow_east) && (!allow_south))
{
zone_struct->one_way_dir_even = LW6KER_DIR_NW;
zone_struct->one_way_dir_odd = LW6KER_DIR_NW;
}
if ((!allow_south) && (!allow_west))
{
zone_struct->one_way_dir_even = LW6KER_DIR_NE;
zone_struct->one_way_dir_odd = LW6KER_DIR_NE;
}
if ((!allow_west) && (!allow_north))
{
zone_struct->one_way_dir_even = LW6KER_DIR_SE;
zone_struct->one_way_dir_odd = LW6KER_DIR_SE;
}
if (!allow_north)
{
zone_struct->link[LW6KER_DIR_ESE] = -1;
zone_struct->link[LW6KER_DIR_SE] = -1;
zone_struct->link[LW6KER_DIR_SSE] = -1;
zone_struct->link[LW6KER_DIR_SSW] = -1;
zone_struct->link[LW6KER_DIR_SW] = -1;
zone_struct->link[LW6KER_DIR_WSW] = -1;
}
if (!allow_east)
{
zone_struct->link[LW6KER_DIR_SSW] = -1;
zone_struct->link[LW6KER_DIR_SW] = -1;
zone_struct->link[LW6KER_DIR_WSW] = -1;
zone_struct->link[LW6KER_DIR_WNW] = -1;
zone_struct->link[LW6KER_DIR_NW] = -1;
zone_struct->link[LW6KER_DIR_NNW] = -1;
}
if (!allow_south)
{
zone_struct->link[LW6KER_DIR_WNW] = -1;
zone_struct->link[LW6KER_DIR_NW] = -1;
zone_struct->link[LW6KER_DIR_NNW] = -1;
zone_struct->link[LW6KER_DIR_NNE] = -1;
zone_struct->link[LW6KER_DIR_NE] = -1;
zone_struct->link[LW6KER_DIR_ENE] = -1;
}
if (!allow_west)
{
zone_struct->link[LW6KER_DIR_NNE] = -1;
zone_struct->link[LW6KER_DIR_NE] = -1;
zone_struct->link[LW6KER_DIR_ENE] = -1;
zone_struct->link[LW6KER_DIR_ESE] = -1;
zone_struct->link[LW6KER_DIR_SE] = -1;
zone_struct->link[LW6KER_DIR_SSE] = -1;
}
}
ret = 1;
return ret;
}
|
|||||
| ↓ | lw6ldr_resampler_init | 30 | 81 | 205 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/ldr/ldr-resampler.c |
void
lw6ldr_resampler_init (lw6ldr_resampler_t * resampler,
lw6map_param_t * param, lw6ldr_hints_t * hints,
int source_w,
int source_h,
int display_w, int display_h, float target_ratio,
int bench_value, int magic_number, int expected_depth,
float gray_level)
{
int target_w = 0;
int target_h = 0;
int tmp_w = 0;
int tmp_h = 0;
float f;
float fighter_scale;
float required;
float capacity;
float capacity_orig;
memset (resampler, 0, sizeof (lw6ldr_resampler_t));
target_w = source_w;
target_h = source_h;
if (source_w > 0 && source_h > 0)
{
if (hints->resample)
{
_check_limits (hints, &target_w, &target_h);
/*
* Step 1, we use fighter scale to get our target size
* This also includes zoom.
*/
// 0*0=0 so size must be non-zero
if (hints->fighter_scale > 0.0f)
{
fighter_scale = hints->fighter_scale;
}
else
{
fighter_scale = LW6LDR_HINTS_DEFAULT_FIGHTER_SCALE;
}
tmp_w = display_w * param->style.zoom / fighter_scale;
tmp_h = display_h * param->style.zoom / fighter_scale;
if (hints->downsize_using_fighter_scale
&& tmp_w * tmp_h < target_w * target_h)
{
target_w = tmp_w;
target_h = tmp_h;
lw6sys_log (LW6SYS_LOG_INFO,
_x_
("fighter_scale=%f on display %dx%d -> downsizing from %dx%d to %dx%d"),
hints->fighter_scale, display_w, display_h,
source_w, source_h, target_w, target_h);
}
else if (hints->upsize_using_fighter_scale
&& tmp_w * tmp_h > target_w * target_h)
{
target_w = tmp_w;
target_h = tmp_h;
lw6sys_log (LW6SYS_LOG_INFO,
_x_
("fighter_scale=%f on display %dx%d -> upsizing from %dx%d to %dx%d"),
hints->fighter_scale, display_w, display_h,
source_w, source_h, target_w, target_h);
}
_check_limits (hints, &target_w, &target_h);
/*
* Step 2, we correct the ratio
*/
if (target_w > 0 && target_h > 0)
{
f = target_ratio / (((float) target_w) / ((float) target_h));
if (f > 1.0f)
{
target_w *= f;
}
else if (f < 1.0f)
{
target_h /= f;
}
}
_check_limits (hints, &target_w, &target_h);
/*
* Step 3, take bench in account
*/
capacity_orig = ((float) bench_value) * ((float) magic_number);
capacity = capacity_orig;
required =
_estimate_capacity (¶m->rules, hints, target_w, target_h,
bench_value, magic_number, expected_depth,
gray_level);
if (required > 0.0f)
{
f = 1.0f;
if (hints->downsize_using_bench_value && capacity < required)
{
while (capacity < required && tmp_w > LW6MAP_MIN_BODY_WIDTH
&& tmp_h > LW6MAP_MIN_BODY_HEIGHT)
{
f *= _RESAMPLER_DOWNSIZE;
tmp_w = target_w * f;
tmp_h = target_h * f;
required =
_estimate_capacity (¶m->rules, hints, tmp_w,
tmp_h, bench_value, magic_number,
expected_depth, gray_level);
}
if (tmp_w != target_w || tmp_h != target_h)
{
lw6sys_log (LW6SYS_LOG_INFO,
_x_
("required=%f capacity=%f bench_value=%d -> downsizing from %dx%d to %dx%d"),
required, capacity_orig, bench_value,
target_w, target_h, tmp_w, tmp_h);
target_w = tmp_w;
target_h = tmp_h;
}
}
else if (hints->upsize_using_bench_value && capacity > required)
{
while (capacity < required && tmp_w < LW6MAP_MAX_BODY_WIDTH
&& tmp_h < LW6MAP_MAX_BODY_HEIGHT)
{
f *= _RESAMPLER_UPSIZE;
tmp_w = target_w * f;
tmp_h = target_h * f;
required =
_estimate_capacity (¶m->rules, hints, tmp_w,
tmp_h, bench_value, magic_number,
expected_depth, gray_level);
}
if (tmp_w != target_w || tmp_h != target_h)
{
lw6sys_log (LW6SYS_LOG_INFO,
_x_
("required=%f capacity=%f bench_value=%d -> upsizing from %dx%d to %dx%d"),
required, capacity_orig, bench_value,
target_w, target_h, tmp_w, tmp_h);
target_w = tmp_w;
target_h = tmp_h;
}
}
}
_check_limits (hints, &target_w, &target_h);
/*
* Step 4, guess speed if needed
*/
_guess_moves_per_sec (¶m->rules, hints, target_w, target_h);
/*
* Step 4, we check against map surface limits
*/
if (target_w * target_h > hints->max_map_surface)
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_
("target_w=%d target_h=%d hints->max_map_surface=%d -> downsizing"),
target_w, target_h, hints->max_map_surface);
f =
sqrt ((((float) target_w) * ((float) target_h)) /
((float) hints->max_map_surface));
target_w /= f;
target_h /= f;
}
if (target_w * target_h < hints->min_map_surface)
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_
("target_w=%d target_h=%d hints->min_map_surface=%d -> upsizing"),
target_w, target_h, hints->min_map_surface);
f =
sqrt (((float) hints->min_map_surface) /
(((float) target_w) * ((float) target_h)));
target_w *= f;
target_h *= f;
}
_check_limits (hints, &target_w, &target_h);
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unable to handle map with shape %dx%d"), source_w,
source_h);
}
resampler->target_w = target_w;
resampler->target_h = target_h;
resampler->source_w = source_w;
resampler->source_h = source_h;
resampler->scale_x =
((float) (resampler->target_w)) / ((float) (resampler->source_w));
resampler->scale_y =
((float) (resampler->target_h)) / ((float) (resampler->source_h));
}
|
|||||
| ↓ | mod_gl_utils_texture_1x1_update | 30 | 40 | 178 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/gfx/mod-gl/gl-utils/gl-utils-texture1x1.c |
int
mod_gl_utils_texture_1x1_update (mod_gl_utils_context_t * utils_context,
lw6gui_look_t * look)
{
int ret = 1;
int i, j;
lw6sys_color_8_t color_tmp;
mod_gl_utils_texture_1x1_clear (utils_context);
ret =
((utils_context->textures_1x1.color_base_fg =
mod_gl_utils_texture_1x1_color2bitmap (utils_context,
look->style.color_set.
color_base.fg)) != NULL) && ret;
ret =
((utils_context->textures_1x1.color_base_bg =
mod_gl_utils_texture_1x1_color2bitmap (utils_context,
look->style.color_set.
color_base.bg)) != NULL) && ret;
ret =
((utils_context->textures_1x1.color_alternate_fg =
mod_gl_utils_texture_1x1_color2bitmap (utils_context,
look->style.color_set.
color_alternate.fg)) != NULL)
&& ret;
ret =
((utils_context->textures_1x1.color_alternate_bg =
mod_gl_utils_texture_1x1_color2bitmap (utils_context,
look->style.color_set.
color_alternate.bg)) != NULL)
&& ret;
ret =
((utils_context->textures_1x1.background_color_root_fg =
mod_gl_utils_texture_1x1_color2bitmap (utils_context,
look->style.color_set.
background_color_root.fg)) !=
NULL) && ret;
ret =
((utils_context->textures_1x1.background_color_root_bg =
mod_gl_utils_texture_1x1_color2bitmap (utils_context,
look->style.color_set.
background_color_root.bg)) !=
NULL) && ret;
ret =
((utils_context->textures_1x1.background_color_stuff_fg =
mod_gl_utils_texture_1x1_color2bitmap (utils_context,
look->style.color_set.
background_color_stuff.fg)) !=
NULL) && ret;
ret =
((utils_context->textures_1x1.background_color_stuff_bg =
mod_gl_utils_texture_1x1_color2bitmap (utils_context,
look->style.color_set.
background_color_stuff.bg)) !=
NULL) && ret;
ret =
((utils_context->textures_1x1.hud_color_frame_fg =
mod_gl_utils_texture_1x1_color2bitmap (utils_context,
look->style.color_set.
hud_color_frame.fg)) != NULL)
&& ret;
ret =
((utils_context->textures_1x1.hud_color_frame_bg =
mod_gl_utils_texture_1x1_color2bitmap (utils_context,
look->style.color_set.
hud_color_frame.bg)) != NULL)
&& ret;
ret =
((utils_context->textures_1x1.hud_color_text_fg =
mod_gl_utils_texture_1x1_color2bitmap (utils_context,
look->style.color_set.
hud_color_text.fg)) != NULL)
&& ret;
ret =
((utils_context->textures_1x1.hud_color_text_bg =
mod_gl_utils_texture_1x1_color2bitmap (utils_context,
look->style.color_set.
hud_color_text.bg)) != NULL)
&& ret;
ret =
((utils_context->textures_1x1.menu_color_default_fg =
mod_gl_utils_texture_1x1_color2bitmap (utils_context,
look->style.color_set.
menu_color_default.fg)) != NULL)
&& ret;
ret =
((utils_context->textures_1x1.menu_color_default_bg =
mod_gl_utils_texture_1x1_color2bitmap (utils_context,
look->style.color_set.
menu_color_default.bg)) != NULL)
&& ret;
ret =
((utils_context->textures_1x1.menu_color_selected_fg =
mod_gl_utils_texture_1x1_color2bitmap (utils_context,
look->style.color_set.
menu_color_selected.fg)) != NULL)
&& ret;
ret =
((utils_context->textures_1x1.menu_color_selected_bg =
mod_gl_utils_texture_1x1_color2bitmap (utils_context,
look->style.color_set.
menu_color_selected.bg)) != NULL)
&& ret;
ret =
((utils_context->textures_1x1.menu_color_disabled_fg =
mod_gl_utils_texture_1x1_color2bitmap (utils_context,
look->style.color_set.
menu_color_disabled.fg)) != NULL)
&& ret;
ret =
((utils_context->textures_1x1.menu_color_disabled_bg =
mod_gl_utils_texture_1x1_color2bitmap (utils_context,
look->style.color_set.
menu_color_disabled.bg)) != NULL)
&& ret;
ret =
((utils_context->textures_1x1.view_color_cursor_fg =
mod_gl_utils_texture_1x1_color2bitmap (utils_context,
look->style.color_set.
view_color_cursor.fg)) != NULL)
&& ret;
ret =
((utils_context->textures_1x1.view_color_cursor_bg =
mod_gl_utils_texture_1x1_color2bitmap (utils_context,
look->style.color_set.
view_color_cursor.bg)) != NULL)
&& ret;
ret =
((utils_context->textures_1x1.view_color_map_fg =
mod_gl_utils_texture_1x1_color2bitmap (utils_context,
look->style.color_set.
view_color_map.fg)) != NULL)
&& ret;
ret =
((utils_context->textures_1x1.view_color_map_bg =
mod_gl_utils_texture_1x1_color2bitmap (utils_context,
look->style.color_set.
view_color_map.bg)) != NULL)
&& ret;
ret =
((utils_context->textures_1x1.system_color_fg =
mod_gl_utils_texture_1x1_color2bitmap (utils_context,
look->style.color_set.
system_color.fg)) != NULL)
&& ret;
ret =
((utils_context->textures_1x1.system_color_bg =
mod_gl_utils_texture_1x1_color2bitmap (utils_context,
look->style.color_set.
system_color.bg)) != NULL)
&& ret;
ret =
((utils_context->textures_1x1.team_color_dead =
mod_gl_utils_texture_1x1_color2bitmap (utils_context,
look->style.color_set.
team_color_dead)) != NULL)
&& ret;
for (i = 0; i < LW6MAP_NB_TEAM_COLORS; ++i)
{
color_tmp = look->style.color_set.team_colors[i];
ret =
((utils_context->textures_1x1.team_colors[i] =
mod_gl_utils_texture_1x1_color2bitmap (utils_context,
color_tmp)) != NULL) && ret;
for (j = 0; j <= MOD_GL_UTILS_TRANSPARENCY_SCALE; ++j)
{
color_tmp.a = (j * 255) / MOD_GL_UTILS_TRANSPARENCY_SCALE;
ret =
((utils_context->textures_1x1.team_colors_transparency[i][j] =
mod_gl_utils_texture_1x1_color2bitmap (utils_context,
color_tmp)) != NULL)
&& ret;
}
}
return ret;
}
|
|||||
| ↓ | key_down | 29 | 23 | 61 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/gfx/mod-gl/gl-utils/gl-utils-event.c |
static void
key_down (lw6gui_keyboard_t * keyboard, SDL_Event * event,
mod_gl_utils_const_data_t * const_data, int64_t timestamp)
{
int sym = 0;
sym = event->key.keysym.sym;
lw6gui_keyboard_register_key_down (keyboard, sym,
event->key.keysym.unicode,
SDL_GetKeyName (sym), timestamp);
if (sym == const_data->keysym1_up ||
sym == const_data->keysym2_up ||
sym == const_data->keysym3_up || sym == const_data->keysym4_up)
{
lw6gui_button_register_down (&(keyboard->arrow_up), timestamp);
}
if (sym == const_data->keysym1_down ||
sym == const_data->keysym2_down ||
sym == const_data->keysym3_down || sym == const_data->keysym4_down)
{
lw6gui_button_register_down (&(keyboard->arrow_down), timestamp);
}
if (sym == const_data->keysym1_left ||
sym == const_data->keysym2_left ||
sym == const_data->keysym3_left || sym == const_data->keysym4_left)
{
lw6gui_button_register_down (&(keyboard->arrow_left), timestamp);
}
if (sym == const_data->keysym1_right ||
sym == const_data->keysym2_right ||
sym == const_data->keysym3_right || sym == const_data->keysym4_right)
{
lw6gui_button_register_down (&(keyboard->arrow_right), timestamp);
}
if (sym == const_data->keysym1_enter || sym == const_data->keysym2_enter)
{
lw6gui_button_register_down (&(keyboard->key_enter), timestamp);
}
if (sym == const_data->keysym1_esc || sym == const_data->keysym2_esc)
{
lw6gui_button_register_down (&(keyboard->key_esc), timestamp);
}
if (sym == const_data->keysym1_ctrl || sym == const_data->keysym2_ctrl)
{
lw6gui_button_register_down (&(keyboard->key_ctrl), timestamp);
}
if (sym == const_data->keysym1_alt || sym == const_data->keysym2_alt)
{
lw6gui_button_register_down (&(keyboard->key_alt), timestamp);
}
if (sym == const_data->keysym1_pgup || sym == const_data->keysym2_pgup)
{
lw6gui_button_register_down (&(keyboard->key_pgup), timestamp);
}
if (sym == const_data->keysym1_pgdown || sym == const_data->keysym2_pgdown)
{
lw6gui_button_register_down (&(keyboard->key_pgdown), timestamp);
}
}
|
|||||
| ↓ | test_hexa | 28 | 86 | 218 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/sys/sys-test.c |
static int
test_hexa ()
{
int ret = 1;
LW6SYS_TEST_FUNCTION_BEGIN;
{
lw6sys_hexa_serializer_t *hexa_serializer;
char *hexa_string = NULL;
int64_t test_64;
int32_t test_32;
int16_t test_16;
int8_t test_8;
float test_float;
char *test_str = NULL;
lw6sys_whd_t test_whd = TEST_HEXA_WHD;
lw6sys_xyz_t test_xyz = TEST_HEXA_XYZ;
lw6sys_color_8_t test_color = TEST_HEXA_COLOR;
void *ptr = NULL;
char *ptr_str = NULL;
hexa_serializer = lw6sys_hexa_serializer_new ("");
if (hexa_serializer)
{
lw6sys_hexa_serializer_rewind (hexa_serializer);
ret = ret
&& lw6sys_hexa_serializer_push_int64 (hexa_serializer,
TEST_HEXA_INT64);
ret = ret
&& lw6sys_hexa_serializer_push_int32 (hexa_serializer,
TEST_HEXA_INT32);
ret = ret
&& lw6sys_hexa_serializer_push_int16 (hexa_serializer,
TEST_HEXA_INT16);
ret = ret
&& lw6sys_hexa_serializer_push_int8 (hexa_serializer,
TEST_HEXA_INT8);
ret = ret
&& lw6sys_hexa_serializer_push_float (hexa_serializer,
TEST_HEXA_FLOAT);
ret = ret
&& lw6sys_hexa_serializer_push_str (hexa_serializer,
TEST_HEXA_STR1);
ret = ret
&& lw6sys_hexa_serializer_push_str (hexa_serializer,
TEST_HEXA_STR2);
ret = ret
&& lw6sys_hexa_serializer_push_whd (hexa_serializer, test_whd);
ret = ret
&& lw6sys_hexa_serializer_push_xyz (hexa_serializer, test_xyz);
ret = ret
&& lw6sys_hexa_serializer_push_color (hexa_serializer, test_color);
if (ret)
{
hexa_string = lw6sys_hexa_serializer_as_string (hexa_serializer);
if (hexa_string)
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("hexa string is \"%s\""),
hexa_string);
LW6SYS_FREE (hexa_string);
}
lw6sys_hexa_serializer_rewind (hexa_serializer);
if (lw6sys_hexa_serializer_eof (hexa_serializer))
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unexpected serializer EOF"));
ret = 0;
}
if (lw6sys_hexa_serializer_pop_int64 (hexa_serializer, &test_64))
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("int64 loaded, value=%d"),
(int) test_64);
}
else
{
ret = 0;
}
if (lw6sys_hexa_serializer_pop_int32 (hexa_serializer, &test_32))
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("int32 loaded, value=%d"),
(int) test_32);
}
else
{
ret = 0;
}
if (lw6sys_hexa_serializer_pop_int16 (hexa_serializer, &test_16))
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("int16 loaded, value=%d"),
(int) test_16);
}
else
{
ret = 0;
}
if (lw6sys_hexa_serializer_pop_int8 (hexa_serializer, &test_8))
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("int8 loaded, value=%d"),
(int) test_8);
}
else
{
ret = 0;
}
if (lw6sys_hexa_serializer_pop_float
(hexa_serializer, &test_float))
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("float loaded, value=%f"),
test_float);
}
else
{
ret = 0;
}
if (lw6sys_hexa_serializer_pop_str (hexa_serializer, &test_str))
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("str loaded, value=\"%s\""), test_str);
LW6SYS_FREE (test_str);
}
else
{
ret = 0;
}
if (lw6sys_hexa_serializer_pop_str (hexa_serializer, &test_str))
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("str loaded, value=\"%s\""), test_str);
LW6SYS_FREE (test_str);
}
else
{
ret = 0;
}
if (lw6sys_hexa_serializer_pop_whd (hexa_serializer, &test_whd))
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("whd loaded, value=%dx%dx%d"),
(int) test_whd.w, (int) test_whd.h,
(int) test_whd.d);
}
else
{
ret = 0;
}
if (lw6sys_hexa_serializer_pop_xyz (hexa_serializer, &test_xyz))
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("xyz loaded, value=%d,%d,%d"),
(int) test_xyz.x, (int) test_xyz.y,
(int) test_xyz.z);
}
else
{
ret = 0;
}
if (lw6sys_hexa_serializer_pop_color
(hexa_serializer, &test_color))
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("color loaded, value=#%02x%02x%02x%02x"),
(int) test_color.r, (int) test_color.g,
(int) test_color.b, (int) test_color.a);
}
else
{
ret = 0;
}
if (lw6sys_hexa_serializer_eof (hexa_serializer))
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("serializer EOF"));
}
else
{
ret = 0;
}
}
ptr_str = lw6sys_hexa_ptr_to_str ((void *) hexa_serializer);
if (ptr_str)
{
ptr = lw6sys_hexa_str_to_ptr (ptr_str);
if (ptr == (void *) hexa_serializer)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("pointer %p string is \"%s\""), ptr,
ptr_str);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("error converting pointer %p from string \"%s\""),
ptr, ptr_str);
ret = 0;
}
LW6SYS_FREE (ptr_str);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("error converting pointer %p"), hexa_serializer);
ret = 0;
}
lw6sys_hexa_serializer_free (hexa_serializer);
}
else
{
ret = 0;
}
}
LW6SYS_TEST_FUNCTION_END;
return ret;
}
|
|||||
| ↓ | lw6map_dup | 28 | 118 | 259 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/map/map-dup.c |
lw6map_level_t *
lw6map_dup (lw6map_level_t * source, lw6sys_progress_t * progress)
{
lw6map_level_t *ret = NULL;
int size = 0;
u_int32_t id;
int layer = 0;
int progress_i = 0;
int progress_n = 1;
lw6sys_progress_begin (progress);
progress_n = source->body.shape.d + 3;
ret = lw6map_new ();
if (ret)
{
id = ret->id;
memcpy (ret, source, sizeof (lw6map_level_t));
ret->id = id;
/*
* We replace those pointers with NULLs, normally this is not
* needed but in case the implementation below fails *or*
* a pointer is not correctly allocated we end up with a
* NULL and avoid the much more complex to debug "double free".
*/
ret->metadata.title = NULL;
ret->metadata.author = NULL;
ret->metadata.description = NULL;
ret->metadata.license = NULL;
ret->local_info.music_dir = NULL;
for (layer = 0; layer < LW6MAP_MAX_BODY_DEPTH; ++layer)
{
ret->body.layers[layer].data = NULL;
}
ret->body.glue.data = NULL;
ret->body.boost.data = NULL;
ret->body.danger.data = NULL;
ret->body.medicine.data = NULL;
ret->body.one_way_north.data = NULL;
ret->body.one_way_east.data = NULL;
ret->body.one_way_south.data = NULL;
ret->body.one_way_west.data = NULL;
ret->texture.data = NULL;
memset (&(ret->param), 0, sizeof (lw6map_param_t));
lw6map_param_copy (&(ret->param), &(source->param));
if (source->metadata.title)
{
ret->metadata.title = lw6sys_str_copy (source->metadata.title);
}
if (source->metadata.author)
{
ret->metadata.author = lw6sys_str_copy (source->metadata.author);
}
if (source->metadata.description)
{
ret->metadata.description =
lw6sys_str_copy (source->metadata.description);
}
if (source->metadata.license)
{
ret->metadata.license = lw6sys_str_copy (source->metadata.license);
}
if (source->local_info.music_dir)
{
ret->local_info.music_dir =
lw6sys_str_copy (source->local_info.music_dir);
}
lw6sys_progress_update (progress, 0, progress_n, ++progress_i);
for (layer = 0; layer < ret->body.shape.d; ++layer)
{
size =
source->body.layers[layer].shape.w *
source->body.layers[layer].shape.h * sizeof (u_int8_t);
ret->body.layers[layer].data = LW6SYS_MALLOC (size);
if (ret->body.layers[layer].data)
{
memcpy (ret->body.layers[layer].data,
source->body.layers[layer].data, size);
lw6sys_progress_update (progress, 0, progress_n, ++progress_i);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unable to duplicate layer %d data"), layer);
}
}
if (source->body.glue.data)
{
size =
source->body.glue.shape.w *
source->body.glue.shape.h * sizeof (u_int8_t);
ret->body.glue.data = LW6SYS_MALLOC (size);
if (ret->body.glue.data)
{
memcpy (ret->body.glue.data, source->body.glue.data, size);
lw6sys_progress_update (progress, 0, progress_n, ++progress_i);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unable to duplicate meta-layer"));
}
}
if (source->body.boost.data)
{
size =
source->body.boost.shape.w *
source->body.boost.shape.h * sizeof (u_int8_t);
ret->body.boost.data = LW6SYS_MALLOC (size);
if (ret->body.boost.data)
{
memcpy (ret->body.boost.data, source->body.boost.data, size);
lw6sys_progress_update (progress, 0, progress_n, ++progress_i);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unable to duplicate meta-layer"));
}
}
if (source->body.danger.data)
{
size =
source->body.danger.shape.w *
source->body.danger.shape.h * sizeof (u_int8_t);
ret->body.danger.data = LW6SYS_MALLOC (size);
if (ret->body.danger.data)
{
memcpy (ret->body.danger.data, source->body.danger.data, size);
lw6sys_progress_update (progress, 0, progress_n, ++progress_i);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unable to duplicate meta-layer"));
}
}
if (source->body.medicine.data)
{
size =
source->body.medicine.shape.w *
source->body.medicine.shape.h * sizeof (u_int8_t);
ret->body.medicine.data = LW6SYS_MALLOC (size);
if (ret->body.medicine.data)
{
memcpy (ret->body.medicine.data, source->body.medicine.data,
size);
lw6sys_progress_update (progress, 0, progress_n, ++progress_i);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unable to duplicate meta-layer"));
}
}
if (source->body.one_way_north.data)
{
size =
source->body.one_way_north.shape.w *
source->body.one_way_north.shape.h * sizeof (u_int8_t);
ret->body.one_way_north.data = LW6SYS_MALLOC (size);
if (ret->body.one_way_north.data)
{
memcpy (ret->body.one_way_north.data,
source->body.one_way_north.data, size);
lw6sys_progress_update (progress, 0, progress_n, ++progress_i);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unable to duplicate meta-layer"));
}
}
if (source->body.one_way_east.data)
{
size =
source->body.one_way_east.shape.w *
source->body.one_way_east.shape.h * sizeof (u_int8_t);
ret->body.one_way_east.data = LW6SYS_MALLOC (size);
if (ret->body.one_way_east.data)
{
memcpy (ret->body.one_way_east.data,
source->body.one_way_east.data, size);
lw6sys_progress_update (progress, 0, progress_n, ++progress_i);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unable to duplicate meta-layer"));
}
}
if (source->body.one_way_south.data)
{
size =
source->body.one_way_south.shape.w *
source->body.one_way_south.shape.h * sizeof (u_int8_t);
ret->body.one_way_south.data = LW6SYS_MALLOC (size);
if (ret->body.one_way_south.data)
{
memcpy (ret->body.one_way_south.data,
source->body.one_way_south.data, size);
lw6sys_progress_update (progress, 0, progress_n, ++progress_i);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unable to duplicate meta-layer"));
}
}
if (source->body.one_way_west.data)
{
size =
source->body.one_way_west.shape.w *
source->body.one_way_west.shape.h * sizeof (u_int8_t);
ret->body.one_way_west.data = LW6SYS_MALLOC (size);
if (ret->body.one_way_west.data)
{
memcpy (ret->body.one_way_west.data,
source->body.one_way_west.data, size);
lw6sys_progress_update (progress, 0, progress_n, ++progress_i);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unable to duplicate meta-layer"));
}
}
if (source->texture.data)
{
size =
source->texture.w * source->texture.h * sizeof (lw6sys_color_8_t);
ret->texture.data = LW6SYS_MALLOC (size);
if (ret->texture.data)
{
memcpy (ret->texture.data, source->texture.data, size);
lw6sys_progress_update (progress, 0, progress_n, ++progress_i);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unable to duplicate texture data"));
}
}
}
lw6sys_progress_end (progress);
return ret;
}
|
|||||
| ↓ | lw6map_teams_get | 27 | 56 | 126 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/map/map-teams.c |
char *
lw6map_teams_get (lw6map_teams_t * teams, char *key)
{
char *ret = NULL;
char *formatted_key = NULL;
formatted_key = lw6sys_keyword_as_key (key);
if (formatted_key)
{
if (!strcmp (LW6DEF_PLAYER1_COLOR, formatted_key))
{
ret =
lw6sys_str_copy (lw6map_team_color_index_to_key
(teams->player_color
[LW6MAP_TEAMS_PLAYER1_INDEX]));
}
else if (!strcmp (LW6DEF_PLAYER2_COLOR, formatted_key))
{
ret =
lw6sys_str_copy (lw6map_team_color_index_to_key
(teams->player_color
[LW6MAP_TEAMS_PLAYER2_INDEX]));
}
else if (!strcmp (LW6DEF_PLAYER3_COLOR, formatted_key))
{
ret =
lw6sys_str_copy (lw6map_team_color_index_to_key
(teams->player_color
[LW6MAP_TEAMS_PLAYER3_INDEX]));
}
else if (!strcmp (LW6DEF_PLAYER4_COLOR, formatted_key))
{
ret =
lw6sys_str_copy (lw6map_team_color_index_to_key
(teams->player_color
[LW6MAP_TEAMS_PLAYER4_INDEX]));
}
else if (!strcmp (LW6DEF_NB_BOTS, formatted_key))
{
ret = lw6sys_itoa (teams->nb_bots);
}
else if (!strcmp (LW6DEF_BOT_SPEED, formatted_key))
{
ret = lw6sys_ftoa (teams->bot_speed);
}
else if (!strcmp (LW6DEF_BOT_IQ, formatted_key))
{
ret = lw6sys_itoa (teams->bot_iq);
}
else if (!strcmp (LW6DEF_BOT1_COLOR, formatted_key))
{
ret = _get_bot_color (&(teams->bot[LW6MAP_TEAMS_BOT1_INDEX]));
}
else if (!strcmp (LW6DEF_BOT2_COLOR, formatted_key))
{
ret = _get_bot_color (&(teams->bot[LW6MAP_TEAMS_BOT2_INDEX]));
}
else if (!strcmp (LW6DEF_BOT3_COLOR, formatted_key))
{
ret = _get_bot_color (&(teams->bot[LW6MAP_TEAMS_BOT3_INDEX]));
}
else if (!strcmp (LW6DEF_BOT4_COLOR, formatted_key))
{
ret = _get_bot_color (&(teams->bot[LW6MAP_TEAMS_BOT4_INDEX]));
}
else if (!strcmp (LW6DEF_BOT5_COLOR, formatted_key))
{
ret = _get_bot_color (&(teams->bot[LW6MAP_TEAMS_BOT5_INDEX]));
}
else if (!strcmp (LW6DEF_BOT6_COLOR, formatted_key))
{
ret = _get_bot_color (&(teams->bot[LW6MAP_TEAMS_BOT6_INDEX]));
}
else if (!strcmp (LW6DEF_BOT7_COLOR, formatted_key))
{
ret = _get_bot_color (&(teams->bot[LW6MAP_TEAMS_BOT7_INDEX]));
}
else if (!strcmp (LW6DEF_BOT8_COLOR, formatted_key))
{
ret = _get_bot_color (&(teams->bot[LW6MAP_TEAMS_BOT8_INDEX]));
}
else if (!strcmp (LW6DEF_BOT9_COLOR, formatted_key))
{
ret = _get_bot_color (&(teams->bot[LW6MAP_TEAMS_BOT9_INDEX]));
}
else if (!strcmp (LW6DEF_BOT1_AI, formatted_key))
{
ret = _get_bot_ai (&(teams->bot[LW6MAP_TEAMS_BOT1_INDEX]));
}
else if (!strcmp (LW6DEF_BOT2_AI, formatted_key))
{
ret = _get_bot_ai (&(teams->bot[LW6MAP_TEAMS_BOT2_INDEX]));
}
else if (!strcmp (LW6DEF_BOT3_AI, formatted_key))
{
ret = _get_bot_ai (&(teams->bot[LW6MAP_TEAMS_BOT3_INDEX]));
}
else if (!strcmp (LW6DEF_BOT4_AI, formatted_key))
{
ret = _get_bot_ai (&(teams->bot[LW6MAP_TEAMS_BOT4_INDEX]));
}
else if (!strcmp (LW6DEF_BOT5_AI, formatted_key))
{
ret = _get_bot_ai (&(teams->bot[LW6MAP_TEAMS_BOT5_INDEX]));
}
else if (!strcmp (LW6DEF_BOT6_AI, formatted_key))
{
ret = _get_bot_ai (&(teams->bot[LW6MAP_TEAMS_BOT6_INDEX]));
}
else if (!strcmp (LW6DEF_BOT7_AI, formatted_key))
{
ret = _get_bot_ai (&(teams->bot[LW6MAP_TEAMS_BOT7_INDEX]));
}
else if (!strcmp (LW6DEF_BOT8_AI, formatted_key))
{
ret = _get_bot_ai (&(teams->bot[LW6MAP_TEAMS_BOT8_INDEX]));
}
else if (!strcmp (LW6DEF_BOT9_AI, formatted_key))
{
ret = _get_bot_ai (&(teams->bot[LW6MAP_TEAMS_BOT9_INDEX]));
}
LW6SYS_FREE (formatted_key);
}
return ret;
}
|
|||||
| ↓ | test_warehouse | 27 | 129 | 319 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/dat/dat-test.c |
static int
test_warehouse ()
{
int ret = 1;
LW6SYS_TEST_FUNCTION_BEGIN;
{
_lw6dat_warehouse_t *_warehouse;
lw6dat_warehouse_t *warehouse;
lw6dat_warehouse_t *warehouse2;
int overflow = 0;
int i;
char *cmd = NULL;
char *id_str = NULL;
char *msg = NULL;
lw6sys_list_t *list_not_sent = NULL;
lw6sys_list_t *list_by_seq = NULL;
lw6sys_list_t *list_by_seq2 = NULL;
int length = 0;
int length2 = 0;
int seq_min = 0;
int seq_max = 0;
int seq_draft = 0;
int seq_reference = 0;
_warehouse = _lw6dat_warehouse_new (_TEST_WAREHOUSE_LOCAL_NODE_ID);
if (_warehouse)
{
if (_lw6dat_warehouse_put_atom
(_warehouse, _TEST_WAREHOUSE_LOCAL_NODE_ID,
_TEST_WAREHOUSE_SERIAL, _TEST_WAREHOUSE_ORDER_I,
_TEST_WAREHOUSE_ORDER_N, _TEST_WAREHOUSE_ROUND,
_TEST_WAREHOUSE_TEXT, _TEST_WAREHOUSE_SEQ_FROM_CMD_STR_OFFSET,
_TEST_WAREHOUSE_CMD_STR_OFFSET))
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("text \"%s\" put into warehouse"),
_TEST_WAREHOUSE_TEXT);
}
for (i = 0; i < _TEST_WAREHOUSE_NB_STACKS_OVERFLOW; ++i)
{
if (!_lw6dat_warehouse_put_atom
(_warehouse, lw6sys_generate_id_64 (), _TEST_WAREHOUSE_SERIAL,
_TEST_WAREHOUSE_ORDER_I, _TEST_WAREHOUSE_ORDER_N,
_TEST_WAREHOUSE_ROUND, _TEST_WAREHOUSE_TEXT,
_TEST_WAREHOUSE_SEQ_FROM_CMD_STR_OFFSET,
_TEST_WAREHOUSE_CMD_STR_OFFSET))
{
overflow = 1;
}
}
if (overflow)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_
("OK, warehouse has a stack number limit (%d) this is right"),
_lw6dat_warehouse_get_nb_nodes (_warehouse));
}
else
{
ret = 0;
}
_lw6dat_warehouse_purge (_warehouse);
_lw6dat_warehouse_free (_warehouse);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("couldn't create _warehouse object"));
ret = 0;
}
_warehouse = _lw6dat_warehouse_new (_TEST_WAREHOUSE_LOCAL_NODE_ID);
if (_warehouse)
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("putting %d atoms in warehouse"),
_TEST_WAREHOUSE_NB_ATOMS_OVERFLOW);
if (_lw6dat_warehouse_put_atom
(_warehouse, _TEST_WAREHOUSE_OTHER_NODE_ID,
_TEST_WAREHOUSE_SERIAL, _TEST_WAREHOUSE_ORDER_I,
_TEST_WAREHOUSE_ORDER_N, _TEST_WAREHOUSE_ROUND,
_TEST_WAREHOUSE_TEXT, _TEST_WAREHOUSE_SEQ_FROM_CMD_STR_OFFSET,
_TEST_WAREHOUSE_CMD_STR_OFFSET))
{
for (i = 1; i < _TEST_WAREHOUSE_NB_ATOMS_OVERFLOW; ++i)
{
if (!_lw6dat_warehouse_put_atom
(_warehouse, _TEST_WAREHOUSE_OTHER_NODE_ID,
_TEST_WAREHOUSE_SERIAL + i, _TEST_WAREHOUSE_ORDER_I,
_TEST_WAREHOUSE_ORDER_N, _TEST_WAREHOUSE_ROUND,
_TEST_WAREHOUSE_TEXT,
_TEST_WAREHOUSE_SEQ_FROM_CMD_STR_OFFSET,
_TEST_WAREHOUSE_CMD_STR_OFFSET))
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unable to put atom %d"), i);
ret = 0;
}
}
if (_lw6dat_warehouse_put_atom
(_warehouse, _TEST_WAREHOUSE_OTHER_NODE_ID,
_TEST_WAREHOUSE_SERIAL, _TEST_WAREHOUSE_ORDER_I,
_TEST_WAREHOUSE_ORDER_N, _TEST_WAREHOUSE_ROUND,
_TEST_WAREHOUSE_TEXT,
_TEST_WAREHOUSE_SEQ_FROM_CMD_STR_OFFSET,
_TEST_WAREHOUSE_CMD_STR_OFFSET))
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_
("could put again 1st atom in warehouse, shifting shoud work"));
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("couldn't put (again) 1st atom in warehouse"));
ret = 0;
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("couldn't put 1st atom in warehouse"));
ret = 0;
}
_lw6dat_warehouse_free (_warehouse);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("couldn't create _warehouse object"));
ret = 0;
}
warehouse = lw6dat_warehouse_new (_TEST_WAREHOUSE_LOCAL_NODE_ID);
if (warehouse)
{
if (lw6dat_warehouse_get_local_id (warehouse) !=
_TEST_WAREHOUSE_LOCAL_NODE_ID)
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("lw6dat_warehouse_get_local_id failed"));
ret = 0;
}
if (lw6dat_warehouse_put_atom_str
(warehouse, _TEST_WAREHOUSE_OTHER_NODE_ID,
_TEST_WAREHOUSE_SERIAL_I_N_MSG))
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("lw6dat_warehouse_put_atom_str seem to work"));
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("lw6dat_warehouse_put_atom_str failed"));
ret = 0;
}
_lw6dat_warehouse_purge (_warehouse);
id_str = lw6sys_id_ltoa (_TEST_WAREHOUSE_LOCAL_NODE_ID);
if (id_str)
{
for (i = _TEST_WAREHOUSE_PUT_MIN_SIZE;
i < _TEST_WAREHOUSE_PUT_MAX_SIZE; ++i)
{
cmd = lw6sys_str_random_words (i);
if (cmd)
{
msg =
lw6sys_new_sprintf ("%d %s %s",
_TEST_WAREHOUSE_ROUND +
(int) sqrt (i), id_str, cmd);
if (msg)
{
if (lw6dat_warehouse_put_local_msg (warehouse, msg))
{
// ok
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("unable to put msg \"%s\" into warehouse"),
msg);
ret = 0;
}
LW6SYS_FREE (msg);
}
LW6SYS_FREE (cmd);
}
}
LW6SYS_FREE (id_str);
}
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("last put msg local_serial=%d i=%d"),
lw6dat_warehouse_get_local_serial (warehouse), i);
lw6dat_warehouse_calc_serial_draft_and_reference (warehouse);
seq_min = lw6dat_warehouse_get_seq_min (warehouse);
seq_max = lw6dat_warehouse_get_seq_max (warehouse);
seq_draft = lw6dat_warehouse_get_seq_draft (warehouse);
seq_reference = lw6dat_warehouse_get_seq_reference (warehouse);
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("seq info min=%d max=%d draft=%d reference=%d"),
seq_min, seq_max, seq_draft, seq_reference);
warehouse2 = lw6dat_warehouse_new (_TEST_WAREHOUSE_OTHER_NODE_ID);
if (warehouse2)
{
id_str = lw6sys_id_ltoa (_TEST_WAREHOUSE_LOCAL_NODE_ID);
if (id_str)
{
msg =
lw6sys_new_sprintf ("%d %s %s",
_TEST_WAREHOUSE_ROUND,
id_str, _TEST_WAREHOUSE_OTHER_NODE_MSG);
if (msg)
{
if (lw6dat_warehouse_put_local_msg (warehouse2, msg))
{
list_not_sent =
lw6dat_warehouse_get_atom_str_list_not_sent
(warehouse, _TEST_WAREHOUSE_OTHER_NODE_ID);
if (list_not_sent)
{
length = lw6sys_list_length (list_not_sent);
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_
("putting %d atoms from warehouse to warehouse2"),
length);
lw6sys_list_map (list_not_sent,
_test_warehouse_copy_atoms_callback,
(void *) warehouse2);
lw6dat_warehouse_calc_serial_draft_and_reference
(warehouse2);
seq_min =
lw6dat_warehouse_get_seq_min (warehouse2);
seq_max =
lw6dat_warehouse_get_seq_max (warehouse2);
seq_draft =
lw6dat_warehouse_get_seq_draft (warehouse2);
seq_reference =
lw6dat_warehouse_get_seq_reference (warehouse2);
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_
("seq info min=%d max=%d draft=%d reference=%d"),
seq_min, seq_max, seq_draft,
seq_reference);
list_by_seq =
lw6dat_warehouse_get_msg_list_by_seq (warehouse,
seq_reference
+ 1,
seq_draft);
if (list_by_seq)
{
length = lw6sys_list_length (list_by_seq);
list_by_seq2 =
lw6dat_warehouse_get_msg_list_by_seq
(warehouse2, seq_reference + 1, seq_draft);
if (list_by_seq2)
{
length2 =
lw6sys_list_length (list_by_seq2);
if (length2 == (length + 1))
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_
("ok, length=%d length2=%d this means there's the same number of messages in both warehouses, only the 1st has been purged and the second contains one local message"),
length, length2);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("length of lists mismatch length=%d length2=%d"),
length, length2);
ret = 0;
}
lw6sys_list_free (list_by_seq2);
}
lw6sys_list_free (list_by_seq);
}
lw6sys_list_free (list_not_sent);
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("unable to put message in other warehouse"));
ret = 0;
}
LW6SYS_FREE (msg);
}
LW6SYS_FREE (id_str);
}
lw6dat_warehouse_free (warehouse2);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("couldn't create warehouse2 object"));
ret = 0;
}
lw6dat_warehouse_free (warehouse);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("couldn't create warehouse object"));
ret = 0;
}
}
LW6SYS_TEST_FUNCTION_END;
return ret;
}
|
|||||
| ↓ | _lw6ldr_guess_colors | 27 | 122 | 236 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/ldr/ldr-color.c |
int
_lw6ldr_guess_colors (lw6map_level_t * level, lw6sys_progress_t * progress)
{
int ret = 0;
int x, y, i_bg = 0, i_fg = 0;
int ok_bg = 0;
int ok_fg = 0;
int size;
int step;
color_info_t *bg = NULL;
color_info_t *fg = NULL;
color_info_t global_bg;
color_info_t dark_bg;
color_info_t light_bg;
color_info_t global_fg;
color_info_t dark_fg;
color_info_t light_fg;
color_info_t base_bg;
color_info_t base_fg;
color_info_t alternate_bg;
color_info_t alternate_fg;
color_info_t tmp;
float distance_regular;
float distance_goofy;
float distance_base;
float distance_alternate;
step =
lw6sys_max (MIN_STEP,
(int)
sqrt ((((float) level->texture.w) *
((float) level->texture.h)) / (MAX_STEP_NB *
MAX_STEP_NB)));
size = ((level->texture.w + 1) * (level->texture.h + 1)) / (step * step);
if (size > 0)
{
bg = (color_info_t *) LW6SYS_MALLOC (sizeof (color_info_t) * size);
if (bg)
{
fg = (color_info_t *) LW6SYS_MALLOC (sizeof (color_info_t) * size);
if (fg)
{
for (y = 0;
y < level->texture.h && i_bg < size && i_fg < size;
y += step)
{
lw6sys_progress_update (progress, 0, level->texture.h, y);
for (x = 0;
x < level->texture.w && i_bg < size
&& i_fg < size; x += step)
{
if (lw6map_body_get_with_texture_coord (level, x, y, 0)
> 0)
{
bg[i_bg].color_8 =
lw6map_texture_get (&level->texture, x, y);
lw6sys_color_rgb_to_hsv (&(bg[i_bg].color_hsv),
bg[i_bg].color_8);
lw6sys_color_8_solid (&(bg[i_bg].color_8));
i_bg++;
}
else
{
fg[i_fg].color_8 =
lw6map_texture_get (&level->texture, x, y);
lw6sys_color_rgb_to_hsv (&(fg[i_fg].color_hsv),
fg[i_fg].color_8);
lw6sys_color_8_solid (&(fg[i_fg].color_8));
i_fg++;
}
}
}
if (i_bg > 0)
{
qsort (bg, i_bg, sizeof (color_info_t), compare_color_info);
average_color (&global_bg, i_bg, bg, GLOBAL_BEGIN,
GLOBAL_END);
average_color (&dark_bg, i_bg, bg, DARK_BEGIN, DARK_END);
average_color (&light_bg, i_bg, bg, LIGHT_BEGIN, LIGHT_END);
ok_bg = 1;
}
else
{
lw6sys_log (LW6SYS_LOG_INFO,
_x_
("no background color found, unable to guess color"));
}
if (i_fg > 0)
{
qsort (fg, i_fg, sizeof (color_info_t), compare_color_info);
average_color (&global_fg, i_fg, fg, GLOBAL_BEGIN,
GLOBAL_END);
average_color (&dark_fg, i_fg, fg, DARK_BEGIN, DARK_END);
average_color (&light_fg, i_fg, fg, LIGHT_BEGIN, LIGHT_END);
ok_fg = 1;
}
else
{
lw6sys_log (LW6SYS_LOG_INFO,
_x_
("no foreground color found, unable to guess color"));
}
if (ok_fg && !ok_bg)
{
_set_to_invert (&global_bg, &global_fg);
_set_to_invert (&dark_bg, &dark_fg);
_set_to_invert (&light_bg, &light_fg);
ok_bg = 1;
}
if (ok_bg && !ok_fg)
{
_set_to_invert (&global_fg, &global_bg);
_set_to_invert (&dark_fg, &dark_bg);
_set_to_invert (&light_fg, &light_bg);
ok_fg = 1;
}
if (ok_fg && ok_bg)
{
ret = 1;
distance_regular = lw6sys_min (lw6sys_color_distance
(light_bg.color_8,
light_fg.color_8),
lw6sys_color_distance
(dark_bg.color_8,
dark_fg.color_8));
distance_goofy = lw6sys_min (lw6sys_color_distance
(light_bg.color_8,
dark_fg.color_8),
lw6sys_color_distance
(dark_bg.color_8,
light_fg.color_8));
base_bg = dark_bg;
alternate_bg = light_bg;
if (distance_regular <
distance_goofy * SWAP_REGULAR_GOOFY_MAJ)
{
base_fg = dark_fg;
alternate_fg = light_fg;
}
else
{
base_fg = light_fg;
alternate_fg = dark_fg;
}
if (global_bg.color_hsv.v > global_fg.color_hsv.v)
{
if (base_bg.color_hsv.v < base_fg.color_hsv.v)
{
tmp = base_bg;
base_bg = base_fg;
base_fg = tmp;
}
if (alternate_bg.color_hsv.v < alternate_fg.color_hsv.v)
{
tmp = alternate_bg;
alternate_bg = alternate_fg;
alternate_fg = tmp;
}
}
else
{
if (base_bg.color_hsv.v > base_fg.color_hsv.v)
{
tmp = base_bg;
base_bg = base_fg;
base_fg = tmp;
}
if (alternate_bg.color_hsv.v > alternate_fg.color_hsv.v)
{
tmp = alternate_bg;
alternate_bg = alternate_fg;
alternate_fg = tmp;
}
}
distance_base =
lw6sys_color_distance (base_bg.color_8, base_fg.color_8);
distance_alternate =
lw6sys_color_distance (alternate_bg.color_8,
alternate_fg.color_8);
if (distance_base >
distance_alternate * SWAP_BASE_ALTERNATE_MAJ)
{
tmp = base_bg;
base_bg = alternate_bg;
alternate_bg = tmp;
tmp = base_fg;
base_fg = alternate_fg;
alternate_fg = tmp;
}
if (alternate_bg.color_hsv.v > alternate_fg.color_hsv.v)
{
alternate_bg.color_hsv.v =
1.0f -
(LIGHTER_COEF * (1.0f - alternate_bg.color_hsv.v));
alternate_fg.color_hsv.v =
DARKER_COEF * alternate_fg.color_hsv.v;
}
else
{
alternate_bg.color_hsv.v =
DARKER_COEF * alternate_bg.color_hsv.v;
alternate_fg.color_hsv.v =
1.0f -
(LIGHTER_COEF * (1.0f - alternate_fg.color_hsv.v));
}
alternate_bg.color_8 =
lw6sys_color_hsv_to_rgb (&alternate_bg.color_hsv);
alternate_fg.color_8 =
lw6sys_color_hsv_to_rgb (&alternate_fg.color_hsv);
level->texture.guessed_color_base.bg = base_bg.color_8;
level->texture.guessed_color_base.fg = base_fg.color_8;
level->texture.guessed_color_alternate.bg =
alternate_bg.color_8;
level->texture.guessed_color_alternate.fg =
alternate_fg.color_8;
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unable to guess colors"));
}
LW6SYS_FREE (fg);
}
LW6SYS_FREE (bg);
}
}
return ret;
}
|
|||||
| ↓ | _lw6ker_map_state_move_fighters | 27 | 117 | 242 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/ker/ker-mapstate.c |
void
_lw6ker_map_state_move_fighters (_lw6ker_map_state_t * map_state, int round,
int parity, lw6map_rules_t * rules,
int32_t nb_moves, u_int32_t team_mask)
{
_lw6ker_move_context_t context;
int move_i = 0;
int i, j;
memset (&context, 0, sizeof (_lw6ker_move_context_t));
context.parity = parity;
context.team_mask = team_mask;
context.map_state = map_state;
context.map_struct = map_state->map_struct;
context.rules = *rules;
context.armies = &(map_state->armies);
context.active_fighters = context.armies->active_fighters;
if (context.rules.use_team_profiles)
{
for (i = 0; i < LW6MAP_MAX_NB_TEAMS; ++i)
{
for (j = 0; j < LW6MAP_MAX_NB_TEAMS; ++j)
{
context.fighter_attack[i][j] =
lw6ker_percent (lw6ker_percent
(rules->fighter_attack,
rules->team_profile_aggressive[i]),
rules->team_profile_vulnerable[j]);
}
}
}
else
{
for (i = 0; i < LW6MAP_MAX_NB_TEAMS; ++i)
{
for (j = 0; j < LW6MAP_MAX_NB_TEAMS; ++j)
{
context.fighter_attack[i][j] = rules->fighter_attack;
context.fighter_side_attack[i][j] =
lw6ker_percent (context.fighter_attack[i][j],
rules->side_attack_factor);
}
}
}
for (i = 0; i < LW6MAP_MAX_NB_TEAMS; ++i)
{
context.fighter_defense[i] = rules->fighter_defense;
context.fighter_side_defense[i] =
lw6sys_max (rules->fighter_regenerate,
lw6ker_percent (rules->fighter_defense,
rules->side_defense_factor));
context.fighter_regenerate[i] = rules->fighter_regenerate;
}
context.shape = map_state->shape;
/*
* Here we initialize a per-team array with nb_..._tries values so
* that we don't calculate it each time.
*/
if (context.rules.use_team_profiles)
{
for (i = 0; i < LW6MAP_MAX_NB_TEAMS; ++i)
{
context.per_team_nb_move_tries[i] =
context.rules.nb_move_tries +
context.rules.team_profile_mobile[i];
context.per_team_nb_attack_tries[i] =
context.rules.nb_attack_tries +
context.rules.team_profile_mobile[i];
context.per_team_nb_defense_tries[i] =
context.rules.nb_defense_tries +
context.rules.team_profile_mobile[i];
context.per_team_nb_move_tries[i] =
lw6sys_max (context.per_team_nb_move_tries[i],
LW6MAP_RULES_MIN_NB_MOVE_TRIES);
context.per_team_nb_move_tries[i] =
lw6sys_min (context.per_team_nb_move_tries[i],
LW6MAP_RULES_MAX_NB_MOVE_TRIES);
context.per_team_nb_attack_tries[i] =
lw6sys_max (context.per_team_nb_attack_tries[i],
LW6MAP_RULES_MIN_NB_ATTACK_TRIES);
context.per_team_nb_attack_tries[i] =
lw6sys_min (context.per_team_nb_attack_tries[i],
LW6MAP_RULES_MAX_NB_ATTACK_TRIES);
context.per_team_nb_defense_tries[i] =
lw6sys_max (context.per_team_nb_defense_tries[i],
LW6MAP_RULES_MIN_NB_DEFENSE_TRIES);
context.per_team_nb_defense_tries[i] =
lw6sys_min (context.per_team_nb_defense_tries[i],
LW6MAP_RULES_MAX_NB_DEFENSE_TRIES);
context.per_team_fast[i] = context.rules.team_profile_fast[i];
if (map_state->teams[i].weapon_first_round <= round
&& map_state->teams[i].weapon_last_round >= round
&& map_state->teams[i].weapon_id >= LW6MAP_MIN_WEAPON_ID
&& map_state->teams[i].weapon_id <= LW6MAP_MAX_WEAPON_ID)
{
context.per_team_weapon_id[i] = map_state->teams[i].weapon_id;
}
else
{
context.per_team_weapon_id[i] = LW6MAP_WEAPON_NONE;
}
}
/*
* Post-processing attack values due to weapons and such
*/
for (i = 0; i < LW6MAP_MAX_NB_TEAMS; ++i)
{
if (context.per_team_weapon_id[i] == LW6MAP_WEAPON_BERZERK)
{
for (j = 0; j < LW6MAP_MAX_NB_TEAMS; ++j)
{
context.fighter_attack[i][j] *=
context.rules.weapon_tune_berzerk_power;
}
}
if (context.per_team_weapon_id[i] == LW6MAP_WEAPON_INVINCIBLE)
{
for (j = 0; j < LW6MAP_MAX_NB_TEAMS; ++j)
{
context.fighter_attack[j][i] = 0;
}
}
if (context.per_team_weapon_id[i] == LW6MAP_WEAPON_TURBO)
{
context.per_team_fast[i] *=
context.rules.weapon_tune_turbo_power;
}
}
/*
* Now we check for min & max, this is not the definitive test
* but it will enforce some theorical limits.
*/
for (i = 0; i < LW6MAP_MAX_NB_TEAMS; ++i)
{
context.fighter_defense[i] =
lw6sys_max (LW6MAP_RULES_MIN_FIGHTER_DEFENSE,
lw6sys_min (context.fighter_defense[i],
LW6MAP_RULES_MAX_FIGHTER_DEFENSE));
context.fighter_side_defense[i] =
lw6sys_min (context.fighter_side_defense[i],
LW6MAP_RULES_MAX_FIGHTER_DEFENSE);
context.fighter_regenerate[i] =
lw6sys_max (LW6MAP_RULES_MIN_FIGHTER_REGENERATE,
lw6sys_min (context.fighter_regenerate[i],
LW6MAP_RULES_MAX_FIGHTER_REGENERATE));
for (j = 0; j < LW6MAP_MAX_NB_TEAMS; ++j)
{
context.fighter_attack[i][j] =
lw6sys_max (LW6MAP_RULES_MIN_FIGHTER_ATTACK,
lw6sys_min (context.fighter_attack[i][j],
LW6MAP_RULES_MAX_FIGHTER_ATTACK));
context.fighter_side_attack[i][j] =
lw6sys_min (context.fighter_side_attack[i][j],
LW6MAP_RULES_MAX_FIGHTER_ATTACK);
}
}
/*
* OK, now we correct all values depending on speed, indeed
* if we don't do this, faster fighters attack stronger, which
* is theorically OK, they do act faster in any way, but in
* pratice it's just plain wrong, we don't want the moving
* speed to change the strength.
*/
for (i = 0; i < LW6MAP_MAX_NB_TEAMS; ++i)
{
context.per_team_fast[i] = lw6sys_max (1, context.per_team_fast[i]);
context.fighter_defense[i] *=
LW6MAP_RULES_DEFAULT_TEAM_PROFILE_FAST;
context.fighter_defense[i] /= context.per_team_fast[i];
context.fighter_side_defense[i] *=
LW6MAP_RULES_DEFAULT_TEAM_PROFILE_FAST;
context.fighter_side_defense[i] /= context.per_team_fast[i];
context.fighter_regenerate[i] *=
LW6MAP_RULES_DEFAULT_TEAM_PROFILE_FAST;
context.fighter_regenerate[i] /= context.per_team_fast[i];
for (j = 0; j < LW6MAP_MAX_NB_TEAMS; ++j)
{
context.fighter_attack[i][j] *=
LW6MAP_RULES_DEFAULT_TEAM_PROFILE_FAST;
context.fighter_attack[i][j] /= context.per_team_fast[i];
context.fighter_side_attack[i][j] *=
LW6MAP_RULES_DEFAULT_TEAM_PROFILE_FAST;
context.fighter_side_attack[i][j] /= context.per_team_fast[i];
}
}
/*
* Now we check for min & max, a 2nd time, after all the calcs we did, since
* speed/fast has an influence, this won't enfore some theorical
* limits, but globally, the job will be done in the sense that
* we won't have overflow errors.
*/
for (i = 0; i < LW6MAP_MAX_NB_TEAMS; ++i)
{
context.fighter_defense[i] =
lw6sys_max (LW6MAP_RULES_MIN_FIGHTER_DEFENSE,
lw6sys_min (context.fighter_defense[i],
LW6MAP_RULES_MAX_FIGHTER_DEFENSE));
context.fighter_side_defense[i] =
lw6sys_min (context.fighter_side_defense[i],
LW6MAP_RULES_MAX_FIGHTER_DEFENSE);
context.fighter_regenerate[i] =
lw6sys_max (LW6MAP_RULES_MIN_FIGHTER_REGENERATE,
lw6sys_min (context.fighter_regenerate[i],
LW6MAP_RULES_MAX_FIGHTER_REGENERATE));
for (j = 0; j < LW6MAP_MAX_NB_TEAMS; ++j)
{
lw6sys_max (LW6MAP_RULES_MIN_FIGHTER_ATTACK,
context.fighter_attack[i][j] =
lw6sys_min (context.fighter_attack[i][j],
LW6MAP_RULES_MAX_FIGHTER_ATTACK));
context.fighter_side_attack[i][j] =
lw6sys_min (context.fighter_side_attack[i][j],
LW6MAP_RULES_MAX_FIGHTER_ATTACK);
}
}
}
else
{
for (i = 0; i < LW6MAP_MAX_NB_TEAMS; ++i)
{
context.per_team_nb_move_tries[i] = context.rules.nb_move_tries;
context.per_team_nb_attack_tries[i] = context.rules.nb_attack_tries;
context.per_team_nb_defense_tries[i] =
context.rules.nb_defense_tries;
context.per_team_fast[i] = LW6MAP_RULES_DEFAULT_TEAM_PROFILE_FAST;
context.per_team_weapon_id[i] = LW6MAP_WEAPON_NONE;
}
}
for (move_i = 0; move_i < nb_moves; ++move_i)
{
_lw6ker_move_update_fighters_universal (&context);
}
}
|
|||||
| ↓ | init_places | 26 | 87 | 161 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/ker/ker-mapstruct.c |
static int
init_places (_lw6ker_map_struct_t * map_struct, lw6map_level_t * level,
lw6sys_progress_t * progress)
{
int ret = 0;
int x, y;
int i;
lw6sys_whd_t shape;
int32_t act_incr = 0;
int glue_power;
int boost_power;
int danger_power;
int medicine_power;
u_int32_t meta_layer_value;
int act_incr_min = 0;
int act_incr_max = 0;
int danger_correction = 0;
int medicine_correction = 0;
lw6sys_progress_begin (progress);
shape = map_struct->shape;
map_struct->places =
(_lw6ker_place_struct_t *) LW6SYS_CALLOC (map_struct->shape.w *
map_struct->shape.h *
sizeof
(_lw6ker_place_struct_t));
if (map_struct->places)
{
for (y = 0; y < shape.h; ++y)
{
for (x = 0; x < shape.w; ++x)
{
map_struct->places[_lw6ker_map_struct_place_index
(map_struct, x, y)].act_incr =
_LW6KER_ACT_LIMIT;
/*
* no need to set health_correction to 0, was done
* by the CALLOC
*/
}
}
glue_power = level->param.rules.glue_power;
if (level->body.glue.data && glue_power > 0)
{
if (lw6sys_shape_is_same_xy (&level->body.glue.shape, &shape))
{
act_incr_min = _LW6KER_ACT_LIMIT / glue_power;
for (y = 0; y < shape.h; ++y)
{
for (x = 0; x < shape.w; ++x)
{
meta_layer_value =
lw6map_meta_layer_get (&level->body.glue, x, y);
act_incr =
((0xFF - meta_layer_value) * _LW6KER_ACT_LIMIT +
meta_layer_value * act_incr_min) / 0xFF -
_LW6KER_ACT_LIMIT;
map_struct->places[_lw6ker_map_struct_place_index
(map_struct, x, y)].act_incr +=
act_incr;
}
}
}
}
boost_power = level->param.rules.boost_power;
if (level->body.boost.data && boost_power > 0)
{
if (lw6sys_shape_is_same_xy (&level->body.boost.shape, &shape))
{
act_incr_max = _LW6KER_ACT_LIMIT * boost_power;
for (y = 0; y < shape.h; ++y)
{
for (x = 0; x < shape.w; ++x)
{
meta_layer_value =
lw6map_meta_layer_get (&level->body.boost, x, y);
act_incr =
((0xFF - meta_layer_value) * _LW6KER_ACT_LIMIT +
meta_layer_value * act_incr_max) / 0xFF -
_LW6KER_ACT_LIMIT;
map_struct->places[_lw6ker_map_struct_place_index
(map_struct, x, y)].act_incr +=
act_incr;
}
}
}
}
danger_power = level->param.rules.danger_power;
if (level->body.danger.data && danger_power > 0)
{
if (lw6sys_shape_is_same_xy (&level->body.danger.shape, &shape))
{
for (y = 0; y < shape.h; ++y)
{
for (x = 0; x < shape.w; ++x)
{
meta_layer_value =
lw6map_meta_layer_get (&level->body.danger, x, y);
danger_correction =
(meta_layer_value * danger_power) / 0xFF;
map_struct->places[_lw6ker_map_struct_place_index
(map_struct, x,
y)].health_correction -=
danger_correction;
}
}
}
}
medicine_power = level->param.rules.medicine_power;
if (level->body.medicine.data && medicine_power > 0)
{
if (lw6sys_shape_is_same_xy (&level->body.medicine.shape, &shape))
{
for (y = 0; y < shape.h; ++y)
{
for (x = 0; x < shape.w; ++x)
{
meta_layer_value =
lw6map_meta_layer_get (&level->body.medicine, x, y);
medicine_correction =
(meta_layer_value * medicine_power) / 0xFF;
map_struct->places[_lw6ker_map_struct_place_index
(map_struct, x,
y)].health_correction +=
medicine_correction;
}
}
}
}
for (y = 0; y < shape.h; ++y)
{
for (x = 0; x < shape.w; ++x)
{
i = _lw6ker_map_struct_place_index (map_struct, x, y);
map_struct->places[i].act_incr =
lw6sys_max (1, map_struct->places[i].act_incr);
/*
* health_correction need not be fixed
*/
}
}
ret = 1;
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unable to create places for map struct"));
}
lw6sys_progress_end (progress);
return ret;
}
|
|||||
| ↓ | _lw6ker_move_update_fighters_universal | 26 | 85 | 219 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/ker/ker-move.c |
void
_lw6ker_move_update_fighters_universal (_lw6ker_move_context_t * context)
{
_lw6ker_move_context_t lc;
lc = *context;
lc.loop_init = lc.parity ? lc.active_fighters - 1 : 0;
lc.loop_step = lc.parity ? -1 : 1;
for (lc.i = lc.loop_init; lc.i >= 0 && lc.i < lc.active_fighters;
lc.i += lc.loop_step)
{
lc.fighter = &(lc.armies->fighters[lc.i]);
lc.fighter_team_color = lc.fighter->team_color;
if (lw6ker_team_mask_is_concerned (lc.fighter_team_color, lc.team_mask))
{
lc.place_struct =
&lc.map_struct->places[_lw6ker_map_struct_place_index
(lc.map_struct, lc.fighter->pos.x,
lc.fighter->pos.y)];
/*
* We increment the act_counter. Depending on game rules, we might
* decide to change the default value (which can already depend
* on the map boost/glue settings) according to the specific
* team speed (profile_fast parameter).
*/
if (lc.rules.use_team_profiles)
{
lc.fighter->act_counter +=
lw6ker_percent (lc.place_struct->act_incr,
lc.per_team_fast[lc.fighter_team_color]);
}
else
{
lc.fighter->act_counter += lc.place_struct->act_incr;
}
if (lc.per_team_weapon_id[lc.fighter_team_color] ==
LW6MAP_WEAPON_INVINCIBLE)
{
lc.fighter->health = LW6MAP_MAX_FIGHTER_HEALTH;
}
while (lc.fighter->act_counter >= _LW6KER_ACT_LIMIT)
{
lc.fighter->act_counter -= _LW6KER_ACT_LIMIT;
lc.done_with_fighter = 0;
lc.x = lc.fighter_x = lc.fighter->pos.x;
lc.y = lc.fighter_y = lc.fighter->pos.y;
lc.z = lc.fighter_z = lc.fighter->pos.z;
_CALL_ADJUST_HEALTH (lc.fighter,
lc.place_struct->health_correction);
lc.best_dir =
_CALL_FIND_BEST_DIR (lc.map_state, lc.fighter, lc.parity);
lc.move_dir_table =
&(_LW6KER_TABLES_MOVE_DIR[lc.parity][lc.best_dir][0]);
// we assume best_dir is equal to something valid now
if (lc.shape.d <= 1)
{
for (lc.j = 0;
lc.j <
lc.per_team_nb_move_tries[lc.fighter_team_color];
++lc.j)
{
lc.test_dir = lc.move_dir_table[lc.j];
_CALL_GOTO_WITH_DIR_XY (&(lc.rules), &lc.shape,
&lc.x, &lc.y, lc.fighter_x,
lc.fighter_y, lc.test_dir);
if (_CALL_IS_SLOT_FREE
(lc.map_struct, lc.map_state, lc.x, lc.y, lc.z))
{
lc.done_with_fighter = 1;
_lw6ker_fighter_move (lc.fighter, lc.i, lc.x, lc.y,
lc.z, lc.map_state);
_lw6ker_fighter_regenerate (lc.fighter,
lc.fighter_regenerate
[lc.fighter_team_color]);
break;
}
}
}
else
{
for (lc.j = 0;
lc.j <
lc.per_team_nb_move_tries[lc.fighter_team_color];
++lc.j)
{
lc.test_dir = lc.move_dir_table[lc.j];
_CALL_GOTO_WITH_DIR (&(lc.rules), &lc.shape, &lc.x,
&lc.y, &lc.z, lc.fighter_x,
lc.fighter_y, lc.fighter_z,
lc.test_dir);
if (_CALL_IS_SLOT_FREE
(lc.map_struct, lc.map_state, lc.x, lc.y, lc.z))
{
lc.done_with_fighter = 1;
_lw6ker_fighter_move (lc.fighter, lc.i, lc.x, lc.y,
lc.z, lc.map_state);
_lw6ker_fighter_regenerate (lc.fighter,
lc.fighter_regenerate
[lc.fighter_team_color]);
break;
}
if (lc.j + 1 == lc.rules.vertical_move)
{
_CALL_GOTO_WITH_DIR_Z (&(lc.rules), &lc.shape,
&lc.z, lc.fighter_z,
LW6KER_DIR_UP);
if (_CALL_IS_SLOT_FREE
(lc.map_struct, lc.map_state, lc.fighter_x,
lc.fighter_y, lc.z))
{
lc.done_with_fighter = 1;
_lw6ker_fighter_move (lc.fighter, lc.i,
lc.fighter_x,
lc.fighter_y, lc.z,
lc.map_state);
_lw6ker_fighter_regenerate (lc.fighter,
lc.
fighter_regenerate
[lc.fighter_team_color]);
break;
}
_CALL_GOTO_WITH_DIR_Z (&(lc.rules), &lc.shape,
&lc.z, lc.fighter_z,
LW6KER_DIR_DOWN);
if (_CALL_IS_SLOT_FREE
(lc.map_struct, lc.map_state, lc.fighter_x,
lc.fighter_y, lc.z))
{
lc.done_with_fighter = 1;
_lw6ker_fighter_move (lc.fighter, lc.i,
lc.fighter_x,
lc.fighter_y, lc.z,
lc.map_state);
_lw6ker_fighter_regenerate (lc.fighter,
lc.
fighter_regenerate
[lc.fighter_team_color]);
break;
}
}
}
}
if (!lc.done_with_fighter)
{
for (lc.j = 0;
lc.j <
lc.per_team_nb_attack_tries[lc.fighter_team_color];
++lc.j)
{
lc.test_dir = lc.move_dir_table[lc.j];
_CALL_GOTO_WITH_DIR_XY (&lc.rules, &lc.shape, &lc.x,
&lc.y, lc.fighter_x,
lc.fighter_y, lc.test_dir);
if (_CALL_IS_ENEMY_THERE
(lc.map_struct, lc.map_state, lc.fighter_team_color,
lc.x, lc.y, lc.z, &lc.enemy_id, &lc.enemy_color))
{
lc.done_with_fighter = 1;
_lw6ker_fighter_attack (lc.fighter,
lc.x, lc.y, lc.z,
lc.map_state,
lc.j ==
0 ? lc.fighter_attack
[lc.fighter_team_color]
[lc.enemy_color] :
lc.fighter_side_attack
[lc.fighter_team_color]
[lc.enemy_color],
lc.rules.
fighter_new_health);
break;
}
}
}
if (!lc.done_with_fighter)
{
for (lc.j = 0;
lc.j <
lc.per_team_nb_defense_tries[lc.fighter_team_color];
++lc.j)
{
lc.test_dir = lc.move_dir_table[lc.j];
_CALL_GOTO_WITH_DIR_XY (&lc.rules, &lc.shape, &lc.x,
&lc.y, lc.fighter_x,
lc.fighter_y, lc.test_dir);
if (_CALL_IS_ALLY_THERE
(lc.map_struct, lc.map_state, lc.fighter_team_color,
lc.x, lc.y, lc.z))
{
lc.done_with_fighter = 1;
_lw6ker_fighter_defend (lc.fighter,
lc.x, lc.y, lc.z,
lc.map_state,
lc.j ==
0 ? lc.fighter_defense
[lc.fighter_team_color] :
lc.fighter_side_defense
[lc.fighter_team_color]);
break;
}
}
}
if (!lc.done_with_fighter)
{
_lw6ker_fighter_regenerate (lc.fighter,
lc.fighter_regenerate
[lc.fighter_team_color]);
}
}
}
}
}
|
|||||
| ↓ | test_line | 26 | 80 | 169 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/net/net-test.c |
static int
test_line ()
{
int ret = 1;
LW6SYS_TEST_FUNCTION_BEGIN;
{
int sock1 = -1;
int sock2 = -1;
int ret_tmp = 0;
int i;
char *line;
if (prepare_2_tcp_socks (&sock1, &sock2))
{
if (lw6net_send_line_tcp (sock1, TEST_LINE1) &&
lw6net_send_line_tcp (sock1, TEST_LINE2) &&
lw6net_send_line_tcp (sock1, TEST_LINE3))
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("lines sent"));
ret_tmp = 1;
for (i = 0; i < 4; ++i)
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("receiving line %d"),
i + 1);
line = lw6net_recv_line_tcp (sock2);
if (line)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("received line \"%s\""), line);
LW6SYS_FREE (line);
}
else
{
if (i < 3)
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("problem receiving line %d"), i + 1);
ret_tmp = 0;
}
}
}
}
}
if (sock1 >= 0)
{
lw6net_socket_close (sock1);
}
if (sock2 >= 0)
{
lw6net_socket_close (sock2);
}
if (!ret_tmp)
{
ret = 0;
}
}
{
int sock1 = -1;
int sock2 = -1;
int ret_tmp = 0;
int i;
char *line;
char *incoming_ip;
int incoming_port;
lw6sys_list_t *list = NULL;
if (prepare_2_udp_socks (&sock1, &sock2))
{
if (lw6net_send_line_udp
(sock2, TEST_LINE1, LW6NET_ADDRESS_LOOPBACK,
LW6NET_DEFAULT_PORT)
&& lw6net_send_line_udp (sock2, TEST_LINE2,
LW6NET_ADDRESS_LOOPBACK,
LW6NET_DEFAULT_PORT)
&& lw6net_send_line_udp (sock2, TEST_LINE3,
LW6NET_ADDRESS_LOOPBACK,
LW6NET_DEFAULT_PORT))
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("lines sent"));
lw6sys_idle ();
ret_tmp = 1;
for (i = 0; i < 4; ++i)
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("receiving line %d"),
i + 1);
line =
lw6net_recv_line_udp (sock1, &incoming_ip, &incoming_port);
if (line)
{
if (incoming_ip)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("received line \"%s\" from %s:%d"),
line, incoming_ip, incoming_port);
LW6SYS_FREE (incoming_ip);
}
LW6SYS_FREE (line);
}
else
{
if (i < 3)
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("problem receiving line %d"), i + 1);
ret_tmp = 0;
}
}
}
}
if (lw6net_udp_send
(sock2, TEST_LINES_OK, strlen (TEST_LINES_OK),
LW6NET_ADDRESS_LOOPBACK, LW6NET_DEFAULT_PORT))
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("lines sent"));
lw6sys_idle ();
list =
lw6net_recv_lines_udp (sock1, &incoming_ip, &incoming_port);
if (list)
{
lw6sys_list_map (list, _udp_lines_callback, NULL);
lw6sys_list_free (list);
LW6SYS_FREE (incoming_ip);
}
}
if (lw6net_udp_send
(sock2, TEST_LINES_OK, strlen (TEST_LINES_KO),
LW6NET_ADDRESS_LOOPBACK, LW6NET_DEFAULT_PORT))
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("lines sent"));
lw6sys_idle ();
list =
lw6net_recv_lines_udp (sock1, &incoming_ip, &incoming_port);
if (list)
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("received lines, when it should have returned an error"));
ret_tmp = 0;
lw6sys_list_free (list);
LW6SYS_FREE (incoming_ip);
}
else
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("truncated lines handled correctly"));
}
}
}
if (sock1 >= 0)
{
lw6net_socket_close (sock1);
}
if (sock2 >= 0)
{
lw6net_socket_close (sock2);
}
if (!ret_tmp)
{
ret = 0;
}
}
LW6SYS_TEST_FUNCTION_END;
return ret;
}
|
|||||
| ↓ | _mod_gl_init | 26 | 78 | 193 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/gfx/mod-gl/mod-gl-setup.c |
_mod_gl_context_t *
_mod_gl_init (int argc, char *argv[], lw6gui_video_mode_t * video_mode,
lw6gui_resize_callback_func_t resize_callback)
{
_mod_gl_context_t *gl_context = NULL;
int splash_ok = 0;
int background_ok = 0;
int hud_ok = 0;
int menu_ok = 0;
int view_ok = 0;
int sdl_ok = 1;
int ttf_ok = 1;
lw6map_style_t map_style;
SDL_version version;
gl_context =
(_mod_gl_context_t *) LW6SYS_CALLOC (sizeof (_mod_gl_context_t));
if (gl_context)
{
if (mod_gl_utils_path_init (&(gl_context->utils_context), argc, argv))
{
memset (&version, 0, sizeof (SDL_version));
SDL_VERSION (&version);
lw6sys_log (LW6SYS_LOG_INFO,
_x_ ("SDL header version when compiled %u.%u.%u"),
version.major, version.minor, version.patch);
version = *SDL_Linked_Version ();
lw6sys_log (LW6SYS_LOG_INFO,
_x_ ("SDL linked version now at runtime %u.%u.%u"),
version.major, version.minor, version.patch);
if (lw6sys_sdl_register ())
{
sdl_ok = !SDL_Init (SDL_INIT_EVENTTHREAD);
}
if (!SDL_WasInit (SDL_INIT_EVENTTHREAD))
{
lw6sys_log (LW6SYS_LOG_INFO,
_x_
("unable to start SDL event thread, events treated in main thread with poll() functions"));
}
/*
sdl_ok = sdl_ok && (SDL_WasInit (SDL_INIT_TIMER)
|| !SDL_InitSubSystem (SDL_INIT_TIMER));
*/
sdl_ok = sdl_ok && (SDL_WasInit (SDL_INIT_VIDEO)
|| !SDL_InitSubSystem (SDL_INIT_VIDEO));
if (sdl_ok)
{
lw6sys_log (LW6SYS_LOG_INFO, _x_ ("SDL Init"));
}
else
{
lw6sys_log (LW6SYS_LOG_ERROR, _("SDL init error: \"%s\""),
SDL_GetError ());
_mod_gl_quit (gl_context);
gl_context = NULL;
}
if (gl_context)
{
/*
* Icon must be set before video mode is set
*/
gl_context->utils_context.bitmap_hash =
mod_gl_utils_bitmap_hash_init ();
mod_gl_utils_icon_set (&(gl_context->utils_context));
SDL_EnableUNICODE (1);
}
if (gl_context)
{
ttf_ok = (TTF_Init () != -1);
if (ttf_ok)
{
lw6sys_log (LW6SYS_LOG_INFO, _x_ ("SDL_ttf Init"));
}
else
{
lw6sys_log (LW6SYS_LOG_ERROR,
_("SDL_ttf init error: \"%s\""),
TTF_GetError ());
_mod_gl_quit (gl_context);
gl_context = NULL;
}
}
if (gl_context && sdl_ok && ttf_ok)
{
lw6gui_input_init (&(gl_context->utils_context.input));
mod_gl_utils_show_mouse (&(gl_context->utils_context), 0, 1);
mod_gl_utils_set_resize_callback (&(gl_context->utils_context),
resize_callback);
if (mod_gl_utils_load_consts (&(gl_context->utils_context)))
{
if (mod_gl_utils_set_video_mode
(&(gl_context->utils_context), video_mode))
{
if (mod_gl_utils_load_data
(&(gl_context->utils_context)))
{
memset (&map_style, 0, sizeof (lw6map_style_t));
lw6map_style_defaults (&map_style);
gl_context->splash_context =
mod_gl_splash_init (&(gl_context->utils_context));
splash_ok = (gl_context->splash_context != NULL);
background_ok =
_mod_gl_set_background_backend (gl_context,
map_style.
background_style);
hud_ok =
_mod_gl_set_hud_backend (gl_context,
map_style.hud_style);
menu_ok =
_mod_gl_set_menu_backend (gl_context,
map_style.menu_style);
view_ok =
_mod_gl_set_view_backend (gl_context,
map_style.view_style);
mod_gl_utils_update_team_color_map (&
(gl_context->
utils_context.
team_color_map),
&map_style);
mod_gl_utils_smoothers_init (&
(gl_context->
utils_context));
mod_gl_utils_timer_set_bitmap_refresh (&
(gl_context->
utils_context));
lw6map_style_clear (&map_style);
}
else
{
lw6sys_log (LW6SYS_LOG_ERROR,
_("unable to load data"));
_mod_gl_quit (gl_context);
gl_context = NULL;
}
}
else
{
lw6sys_log (LW6SYS_LOG_ERROR,
_("unable to set video mode"));
_mod_gl_quit (gl_context);
gl_context = NULL;
}
}
else
{
lw6sys_log (LW6SYS_LOG_ERROR, _("unable to load consts"));
_mod_gl_quit (gl_context);
gl_context = NULL;
}
}
if (gl_context)
{
gl_context->utils_context.joysticks_info.supported =
SDL_WasInit (SDL_INIT_JOYSTICK)
|| !SDL_InitSubSystem (SDL_INIT_JOYSTICK);
if (gl_context->utils_context.joysticks_info.supported)
{
mod_gl_utils_joystick_init (&
(gl_context->
utils_context.joysticks_info));
}
else
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("no joystick support"));
}
}
if (gl_context
&& !(splash_ok && background_ok && hud_ok && menu_ok
&& view_ok))
{
_mod_gl_quit (gl_context);
gl_context = NULL;
}
}
else
{
LW6SYS_FREE (gl_context);
gl_context = NULL;
}
}
return gl_context;
}
|
|||||
| ↓ | _mod_gl_menu_cylinder_display_meta | 26 | 71 | 240 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/gfx/mod-gl/gl-menu/gl-cylinder/gl-cylinder-display.c |
void
_mod_gl_menu_cylinder_display_meta (mod_gl_utils_context_t * utils_context,
_mod_gl_menu_cylinder_context_t *
cylinder_context, lw6gui_look_t * look,
lw6gui_menu_t * menu)
{
int n;
float right_point_x = 0.0f;
float right_point_y = 0.0f;
float tooltip_x, tooltip_y, tooltip_w, tooltip_h;
char *tooltip = NULL;
float help_x, help_y, help_w, help_h;
char *help = NULL;
float breadcrumbs_x, breadcrumbs_y, breadcrumbs_w, breadcrumbs_h;
char *breadcrumbs = NULL;
mod_gl_utils_set_render_mode_3d_menu (utils_context);
if (!lw6gui_menu_has_popup (menu))
{
n = menu->nb_items_displayed + 2;
if (cylinder_context->j_tooltip >= 0
&& cylinder_context->j_tooltip < menu->nb_items
&& cylinder_context->i_right_point >= 0
&& cylinder_context->i_right_point < menu->nb_items_displayed)
{
tooltip = menu->items[cylinder_context->j_tooltip]->tooltip;
}
if (!lw6sys_str_is_null_or_empty (tooltip))
{
_mod_gl_menu_cylinder_get_cylinder_right_point (utils_context,
cylinder_context,
cylinder_context->i_right_point
+ 1, n, 1.0f,
&right_point_x,
&right_point_y);
if ((!lw6sys_str_is_same
(tooltip, utils_context->menucache_array.tooltip_str))
|| (!utils_context->menucache_array.tooltip_bitmap))
{
if (utils_context->menucache_array.tooltip_str)
{
LW6SYS_FREE (utils_context->menucache_array.tooltip_str);
utils_context->menucache_array.tooltip_str = NULL;
}
if (utils_context->menucache_array.tooltip_bitmap)
{
mod_gl_utils_bitmap_free (utils_context,
utils_context->
menucache_array.tooltip_bitmap);
utils_context->menucache_array.tooltip_bitmap = NULL;
}
utils_context->menucache_array.tooltip_str =
lw6sys_str_copy (tooltip);
utils_context->menucache_array.tooltip_bitmap =
mod_gl_utils_multiline_text_write (utils_context,
utils_context->
font_data.hud, tooltip,
&(look->style.
color_set.menu_color_default),
cylinder_context->
const_data.tooltip_alpha_bg,
cylinder_context->
const_data.tooltip_max_width,
cylinder_context->
const_data.tooltip_max_height,
cylinder_context->
const_data.tooltip_border_size,
cylinder_context->
const_data.tooltip_margin_size,
cylinder_context->
const_data.tooltip_reformat_width);
}
if (utils_context->menucache_array.tooltip_bitmap)
{
mod_gl_utils_set_render_mode_2d_blend (utils_context);
tooltip_w =
(utils_context->video_mode.width *
cylinder_context->const_data.tooltip_relative_size *
utils_context->menucache_array.tooltip_bitmap->surface->w) /
cylinder_context->const_data.tooltip_max_width;
tooltip_h =
(tooltip_w *
utils_context->menucache_array.tooltip_bitmap->surface->h) /
utils_context->menucache_array.tooltip_bitmap->surface->w;
tooltip_x = utils_context->video_mode.width - tooltip_w;
tooltip_y = right_point_y - tooltip_h / 2;
mod_gl_utils_bitmap_display (utils_context,
utils_context->
menucache_array.tooltip_bitmap,
tooltip_x, tooltip_y,
tooltip_x + tooltip_w,
tooltip_y + tooltip_h);
}
}
help = menu->help;
if (!lw6sys_str_is_null_or_empty (help))
{
if ((!lw6sys_str_is_same
(help, utils_context->menucache_array.help_str))
|| (!utils_context->menucache_array.help_bitmap))
{
if (utils_context->menucache_array.help_str)
{
LW6SYS_FREE (utils_context->menucache_array.help_str);
utils_context->menucache_array.help_str = NULL;
}
if (utils_context->menucache_array.help_bitmap)
{
mod_gl_utils_bitmap_free (utils_context,
utils_context->
menucache_array.help_bitmap);
utils_context->menucache_array.help_bitmap = NULL;
}
utils_context->menucache_array.help_str =
lw6sys_str_copy (help);
utils_context->menucache_array.help_bitmap =
mod_gl_utils_multiline_text_write (utils_context,
utils_context->
font_data.hud, help,
&(look->style.
color_set.menu_color_default),
cylinder_context->
const_data.help_alpha_bg,
cylinder_context->
const_data.help_max_width,
cylinder_context->
const_data.help_max_height,
cylinder_context->
const_data.help_border_size,
cylinder_context->
const_data.help_margin_size,
cylinder_context->
const_data.help_reformat_width);
}
if (utils_context->menucache_array.help_bitmap)
{
mod_gl_utils_set_render_mode_2d_blend (utils_context);
help_w =
(utils_context->video_mode.width *
cylinder_context->const_data.help_relative_size *
utils_context->menucache_array.help_bitmap->surface->w) /
cylinder_context->const_data.help_max_width;
help_h =
(help_w *
utils_context->menucache_array.help_bitmap->surface->h) /
utils_context->menucache_array.help_bitmap->surface->w;
help_x = (utils_context->video_mode.width - help_w) / 2;
help_y = utils_context->video_mode.height - help_h;
mod_gl_utils_bitmap_display (utils_context,
utils_context->
menucache_array.help_bitmap,
help_x, help_y, help_x + help_w,
help_y + help_h);
}
}
}
if (menu->breadcrumbs)
{
breadcrumbs = lw6sys_str_join (menu->breadcrumbs, _BREADCRUMBS_GLUE);
}
if (!lw6sys_str_is_null_or_empty (breadcrumbs))
{
if ((!lw6sys_str_is_same
(breadcrumbs, utils_context->menucache_array.breadcrumbs_str))
|| (!utils_context->menucache_array.breadcrumbs_bitmap))
{
if (utils_context->menucache_array.breadcrumbs_str)
{
LW6SYS_FREE (utils_context->menucache_array.breadcrumbs_str);
utils_context->menucache_array.breadcrumbs_str = NULL;
}
if (utils_context->menucache_array.breadcrumbs_bitmap)
{
mod_gl_utils_bitmap_free (utils_context,
utils_context->
menucache_array.breadcrumbs_bitmap);
utils_context->menucache_array.breadcrumbs_bitmap = NULL;
}
utils_context->menucache_array.breadcrumbs_str =
lw6sys_str_copy (breadcrumbs);
utils_context->menucache_array.breadcrumbs_bitmap =
mod_gl_utils_multiline_text_write (utils_context,
utils_context->font_data.hud,
breadcrumbs,
&(look->style.
color_set.menu_color_default),
cylinder_context->
const_data.breadcrumbs_alpha_bg,
cylinder_context->
const_data.breadcrumbs_max_width,
cylinder_context->
const_data.breadcrumbs_max_height,
cylinder_context->
const_data.breadcrumbs_border_size,
cylinder_context->
const_data.breadcrumbs_margin_size,
cylinder_context->
const_data.breadcrumbs_reformat_width);
}
if (utils_context->menucache_array.breadcrumbs_bitmap)
{
mod_gl_utils_set_render_mode_2d_blend (utils_context);
breadcrumbs_w =
(utils_context->video_mode.width *
cylinder_context->const_data.breadcrumbs_relative_size *
utils_context->menucache_array.breadcrumbs_bitmap->surface->w) /
cylinder_context->const_data.breadcrumbs_max_width;
breadcrumbs_h =
(breadcrumbs_w *
utils_context->menucache_array.breadcrumbs_bitmap->surface->h) /
utils_context->menucache_array.breadcrumbs_bitmap->surface->w;
breadcrumbs_x =
utils_context->video_mode.width * (1.0f -
cylinder_context->
const_data.breadcrumbs_relative_size)
/ 2.0f;
breadcrumbs_y = 0.0f;
mod_gl_utils_bitmap_display (utils_context,
utils_context->
menucache_array.breadcrumbs_bitmap,
breadcrumbs_x, breadcrumbs_y,
breadcrumbs_x + breadcrumbs_w,
breadcrumbs_y + breadcrumbs_h);
}
}
if (breadcrumbs)
{
LW6SYS_FREE (breadcrumbs);
}
}
|
|||||
| ↓ | lw6pil_coords_fix | 26 | 59 | 131 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/pil/pil-coords.c |
void
lw6pil_coords_fix (lw6map_rules_t * rules, lw6sys_whd_t * shape, float *x,
float *y, float *z)
{
float w;
float h;
int x_polarity;
int y_polarity;
float tmp_x = 0.0f;
float tmp_y = 0.0f;
w = shape->w;
h = shape->h;
x_polarity = rules->x_polarity;
y_polarity = rules->y_polarity;
if (x)
{
tmp_x = *x;
}
if (y)
{
tmp_y = *y;
}
if (x_polarity > 0)
{
while (tmp_x >= w)
{
tmp_x -= w;
}
while (tmp_x < 0)
{
tmp_x += w;
}
}
if (y_polarity > 0)
{
while (tmp_y >= h)
{
tmp_y -= h;
}
while (tmp_y < 0)
{
tmp_y += h;
}
}
if (x_polarity < 0)
{
while (tmp_x >= w)
{
tmp_x -= w;
tmp_y = h - tmp_y;
}
while (tmp_x < 0)
{
tmp_x += w;
tmp_y = h - tmp_y;
}
}
if (y_polarity < 0)
{
while (tmp_y >= h)
{
tmp_x = w - tmp_x;
tmp_y -= h;
}
while (tmp_y < 0)
{
tmp_x = w - tmp_x;
tmp_y += h;
}
}
/*
* Last, we check for absolute limits, this will also
* handle the 0 polarity case.
*/
if (tmp_x < 0.0f)
{
tmp_x = 0.0f;
}
if (tmp_x >= w)
{
tmp_x = w;
}
if (tmp_y < 0.0f)
{
tmp_y = 0.0f;
}
if (tmp_y >= h)
{
tmp_y = h;
}
// done, affect values
if (x)
{
(*x) = tmp_x;
}
if (y)
{
(*y) = tmp_y;
}
if (z)
{
if ((*z) >= (float) shape->d)
{
if (rules->z_polarity == 0)
{
(*z) = (float) (shape->d - 1);
}
else
{
(*z) = 0.0f;
}
}
if ((*z) < 0.0f)
{
if (rules->z_polarity == 0)
{
(*z) = 0.0f;
}
else
{
(*z) = (float) (shape->d - 1);
}
}
}
}
|
|||||
| ↓ | lw6gui_menu_is_same | 26 | 24 | 55 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/gui/gui-menu.c |
int
lw6gui_menu_is_same (lw6gui_menu_t * menu_a, lw6gui_menu_t * menu_b)
{
int ret = 1;
int i;
if (((!menu_a) && menu_b) || (menu_a && (!menu_b)))
{
ret = 0;
}
if (menu_a && menu_b)
{
ret = ret && lw6sys_str_is_same (menu_a->title, menu_b->title);
ret = ret && lw6sys_str_is_same (menu_a->help, menu_b->help);
ret = ret && lw6sys_str_is_same (menu_a->popup, menu_b->popup);
ret = ret && menu_a->nb_items == menu_b->nb_items;
ret = ret
&& lw6gui_menuitem_is_same (menu_a->esc_item, menu_b->esc_item);
for (i = 0; ret && i < lw6sys_min (menu_a->nb_items, menu_b->nb_items);
++i)
{
if (i < menu_a->nb_items && i < menu_b->nb_items
&& !lw6gui_menuitem_is_same (menu_a->items[i],
menu_b->items[i]))
{
ret = 0;
}
}
ret = ret && menu_a->selected_item == menu_b->selected_item;
ret = ret
&& menu_a->first_item_displayed == menu_b->first_item_displayed;
ret = ret && menu_a->nb_items_displayed == menu_b->nb_items_displayed;
ret = ret
&& menu_a->order_of_selected_on_display ==
menu_b->order_of_selected_on_display;
ret = ret && menu_a->allow_scroll == menu_b->allow_scroll;
if (menu_a->breadcrumbs && menu_b->breadcrumbs)
{
/*
* OK, here, in theory, we should check each item
* one by one. In practice, we just rely on size,
* period.
*/
ret = ret
&& lw6sys_list_length (menu_a->breadcrumbs) ==
lw6sys_list_length (menu_b->breadcrumbs);
}
else
{
ret = ret && (menu_a->breadcrumbs == menu_b->breadcrumbs);
}
}
return ret;
}
|
|||||
| ↓ | lw6ldr_read | 25 | 75 | 163 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/ldr/ldr-read.c |
lw6map_level_t *
lw6ldr_read (char *dirname, lw6sys_assoc_t * default_param,
lw6sys_assoc_t * forced_param, int display_w, int display_h,
int bench_value, int magic_number, char *user_dir,
lw6sys_progress_t * progress)
{
lw6map_level_t *level = NULL;
int ok = 0;
float ratio = 0.0f; // important, in case texture isn't found/used
int texture_exists = 0;
lw6sys_progress_t progress_texture;
lw6sys_progress_t progress_body;
lw6sys_progress_t progress_color;
lw6ldr_hints_t hints;
lw6map_rules_t rules_tmp;
lw6ldr_use_t use;
int player_exp = LW6MAP_RULES_DEFAULT_EXP;
int map_exp = LW6MAP_RULES_DEFAULT_EXP;
lw6sys_log (LW6SYS_LOG_INFO, _x_ ("loading map \"%s\""), dirname);
lw6sys_progress_split3 (&progress_texture, &progress_body, &progress_color,
progress);
level = lw6map_new ();
if (level)
{
ok = 1;
lw6cfg_load_exp (user_dir, &player_exp);
lw6map_param_defaults (&(level->param));
lw6ldr_hints_defaults (&hints);
lw6ldr_use_defaults (&use);
ok = ok && lw6ldr_metadata_read (&level->metadata, dirname);
ok = ok
&& lw6map_local_info_set_music_dir (&level->local_info, dirname);
lw6ldr_rules_update (&(level->param.rules), default_param);
level->param.rules.exp = LW6MAP_RULES_DEFAULT_EXP;
lw6ldr_hints_update (&hints, default_param);
lw6ldr_style_update (&(level->param.style), default_param);
lw6ldr_teams_update (&(level->param.teams), default_param);
lw6ldr_use_update (&use, default_param);
if (use.use_rules_xml)
{
ok = ok && lw6ldr_rules_read (&level->param.rules, dirname);
map_exp = level->param.rules.exp;
lw6ldr_rules_update (&(level->param.rules), forced_param);
level->param.rules.exp = map_exp;
}
else
{
/*
* OK we don't use rules, but still we need to know
* the "exp" associated to the level...
*/
lw6map_rules_defaults (&rules_tmp);
lw6ldr_rules_read (&rules_tmp, dirname);
map_exp = rules_tmp.exp;
}
// following is important else exp increase won't work
level->metadata.vanilla_exp = map_exp;
level->param.rules.highest_team_color_allowed =
lw6sys_min (LW6MAP_MAX_NB_TEAMS - 1,
lw6sys_min (level->param.rules.highest_team_color_allowed,
lw6map_exp_get_highest_team_color_allowed
(player_exp)));
level->param.rules.highest_weapon_allowed =
lw6sys_min (LW6MAP_MAX_WEAPON_ID,
lw6sys_min (level->param.rules.highest_weapon_allowed,
lw6map_exp_get_highest_weapon_allowed
(player_exp)));
if (use.use_hints_xml)
{
ok = ok && lw6ldr_hints_read (&hints, dirname);
lw6ldr_hints_update ((&hints), forced_param);
}
if (use.use_style_xml)
{
ok = ok && lw6ldr_style_read (&(level->param.style), dirname);
lw6ldr_style_update (&(level->param.style), forced_param);
}
if (use.use_teams_xml)
{
ok = ok && lw6ldr_teams_read (&(level->param.teams), dirname);
lw6ldr_teams_update (&(level->param.teams), forced_param);
}
if (use.use_texture)
{
lw6ldr_auto_colors (&level->param.style, &hints);
/*
* Note that this will return 0 only on errors, if there's just
* no texture (texture.jpg) file then it will return true but
* texture_exists will contain 0.
*/
ok = ok && lw6ldr_texture_read (&level->texture, dirname,
&(level->param), &hints,
use.use_texture, display_w,
display_h, &ratio, &texture_exists,
&progress_texture);
}
if (use.use_cursor_texture)
{
ok = ok
&& lw6ldr_cursor_texture_read (&level->cursor_texture, dirname);
}
else
{
lw6map_cursor_texture_builtin (&(level->cursor_texture));
}
ok = ok
&& lw6ldr_body_read (&level->body, dirname, &(level->param), &hints,
display_w, display_h, ratio, bench_value,
magic_number, &progress_body);
if (!level->texture.data)
{
ok = ok
&& lw6map_texture_from_body (&level->texture, &level->body,
&(level->param.style.
color_set.view_color_map));
}
if (ok && texture_exists)
{
if (hints.guess_colors)
{
_lw6ldr_guess_colors (level, &progress_color);
_lw6ldr_apply_guessed_colors (level);
}
}
lw6ldr_auto_colors (&level->param.style, &hints);
level->texture.has_alpha = lw6map_texture_has_alpha (&(level->texture));
if (ok)
{
if (player_exp >= map_exp)
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_
("OK, can load \"%s\" with exp=%d, requires only %d"),
dirname, player_exp, map_exp);
_lw6ldr_exp_fix (&(level->param.rules), player_exp);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("can't load \"%s\" with exp=%d, requires %d"),
dirname, player_exp, map_exp);
ok = 0;
}
}
}
if (!ok)
{
lw6sys_log (LW6SYS_LOG_WARNING, _x_ ("unable to load map \"%s\""),
dirname);
lw6map_free (level);
level = NULL;
}
return level;
}
|
|||||
| ↓ | lw6dyn_dlopen_backend | 25 | 61 | 253 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/dyn/dyn-dl.c |
lw6dyn_dl_handle_t *
lw6dyn_dlopen_backend (int argc, char *argv[], char *top_level_lib,
char *backend_name)
{
lw6dyn_dl_handle_t *ret = NULL;
char *so_file = NULL;
char *get_pedigree_func_str = NULL;
lw6sys_module_pedigree_t *(*get_pedigree_func) () = NULL;
lw6sys_module_pedigree_t *module_pedigree = NULL;
char *create_backend_func_str = NULL;
void *(*create_backend_func) () = NULL;
char *is_GPL_compatible_sym_str = NULL;
int ok = 0;
static int first_load = 1;
so_file =
lw6dyn_path_find_backend (argc, argv, top_level_lib, backend_name);
if (so_file)
{
ret = lw6dyn_dlopen_backend_so (so_file);
if (ret)
{
get_pedigree_func_str =
lw6sys_new_sprintf (LW6DYN_GET_PEDIGREE_FUNC_FORMAT,
backend_name);
if (get_pedigree_func_str)
{
get_pedigree_func = lw6dyn_dlsym (ret, get_pedigree_func_str);
if (get_pedigree_func)
{
module_pedigree =
(lw6sys_module_pedigree_t *) (get_pedigree_func) ();
if (module_pedigree)
{
if (module_pedigree->id
&& module_pedigree->category
&& module_pedigree->name
&& module_pedigree->readme
&& module_pedigree->version
&& module_pedigree->copyright
&& module_pedigree->license
&& module_pedigree->date && module_pedigree->time)
{
create_backend_func_str =
lw6sys_new_sprintf
(LW6DYN_CREATE_BACKEND_FUNC_FORMAT, backend_name);
if (create_backend_func_str)
{
create_backend_func =
lw6dyn_dlsym (ret, create_backend_func_str);
if (create_backend_func)
{
if (!strcmp
(backend_name, module_pedigree->id))
{
if (!strcmp
(top_level_lib,
module_pedigree->category))
{
if (!strcmp
(lw6sys_build_get_version (),
module_pedigree->version))
{
is_GPL_compatible_sym_str =
lw6sys_new_sprintf
(LW6DYN_IS_GPL_COMPATIBLE_SYM_FORMAT,
backend_name);
if (is_GPL_compatible_sym_str)
{
if (lw6dyn_dlsym
(ret,
is_GPL_compatible_sym_str))
{
if (first_load)
{
/*
* the first time we
* load a .so file,
* log it to console
* just to make sure
* paths are right.
*/
lw6sys_log
(LW6SYS_LOG_NOTICE,
_
("loaded module \"%s\""),
so_file);
first_load = 0;
}
lw6sys_log
(LW6SYS_LOG_INFO,
_x_
("module \"%s\" loaded, looks fine"),
so_file);
/*
* Verbose dlopen did log the so name
*/
lw6sys_log
(LW6SYS_LOG_INFO,
_x_
("id for \"%s\" is \"%s\""),
so_file,
module_pedigree->id);
lw6sys_log
(LW6SYS_LOG_INFO,
_x_
("category for \"%s\" is \"%s\""),
so_file,
module_pedigree->
category);
lw6sys_log
(LW6SYS_LOG_INFO,
_x_
("name for \"%s\" is \"%s\""),
so_file,
module_pedigree->
name);
lw6sys_log
(LW6SYS_LOG_INFO,
_x_
("readme for \"%s\" is \"%s\""),
so_file,
module_pedigree->
readme);
lw6sys_log
(LW6SYS_LOG_INFO,
_x_
("version for \"%s\" is \"%s\""),
so_file,
module_pedigree->
version);
lw6sys_log
(LW6SYS_LOG_INFO,
_x_
("copyright for \"%s\" is \"%s\""),
so_file,
module_pedigree->
copyright);
lw6sys_log
(LW6SYS_LOG_INFO,
_x_
("license for \"%s\" is \"%s\""),
so_file,
module_pedigree->
license);
lw6sys_log
(LW6SYS_LOG_INFO,
_x_
("date for \"%s\" is \"%s\""),
so_file,
module_pedigree->
date);
lw6sys_log
(LW6SYS_LOG_INFO,
_x_
("time for \"%s\" is \"%s\""),
so_file,
module_pedigree->
time);
ok = 1;
}
else
{
lw6sys_log
(LW6SYS_LOG_WARNING,
_x_
("module mod_%s \"%s\" in \"%s\" is not GPL compatible"),
backend_name,
module_pedigree->
name, so_file);
}
LW6SYS_FREE
(is_GPL_compatible_sym_str);
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("bad version for module mod_%s \"%s\" in \"%s\", module version is \"%s\" but main program version is \"%s\""),
backend_name,
module_pedigree->
name, so_file,
module_pedigree->
version,
lw6sys_build_get_version
());
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("bad category for module mod_%s \"%s\" in \"%s\", module category is \"%s\" but main program requested \"%s\""),
backend_name,
module_pedigree->name,
so_file,
module_pedigree->
category,
top_level_lib);
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("bad id for module mod_%s \"%s\" in \"%s\", module id is \"%s\""),
backend_name,
module_pedigree->name,
so_file,
module_pedigree->id);
}
}
LW6SYS_FREE (create_backend_func_str);
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("bad pedigree for mod_%s in \"%s\""),
backend_name, so_file);
}
LW6SYS_FREE (module_pedigree);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("can't get pedigree for mod_%s in \"%s\""),
backend_name, so_file);
}
}
LW6SYS_FREE (get_pedigree_func_str);
}
}
LW6SYS_FREE (so_file);
}
if (!ok)
{
if (ret)
{
lw6dyn_dlclose_backend (ret);
ret = NULL;
}
}
return ret;
}
|
|||||
| ↓ | _lw6ker_move_get_best_next_pos | 24 | 78 | 146 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/ker/ker-move.c |
int
_lw6ker_move_get_best_next_pos (_lw6ker_game_state_t * game_state,
lw6sys_xyz_t * next_pos,
lw6sys_xyz_t * current_pos, int team_color)
{
_lw6ker_map_state_t *map_state = &(game_state->map_state);
_lw6ker_map_struct_t *map_struct = map_state->map_struct;
lw6map_rules_t *rules = &(game_state->game_struct->rules);
lw6sys_whd_t *shape = &(map_struct->shape);
int32_t zone_id;
_lw6ker_zone_state_t *zone_states = map_state->teams[team_color].gradient;
int best_direction = -1;
lw6sys_xyz_t start_pos;
lw6sys_xyz_t target;
lw6sys_xyz_t test;
int32_t test_x, test_y, test_z;
int test_dir;
int ret = 0;
int parity =
lw6sys_checksum_int32 (game_state->rounds +
team_color) % LW6KER_NB_PARITIES;
int try;
int i;
start_pos = (*current_pos);
zone_id =
_lw6ker_map_struct_get_zone_id (map_struct, start_pos.x, start_pos.y,
start_pos.z);
if (zone_id < 0)
{
_lw6ker_map_struct_find_free_slot_near (map_struct, &start_pos,
*current_pos);
zone_id =
_lw6ker_map_struct_get_zone_id (map_struct, start_pos.x, start_pos.y,
start_pos.z);
}
(*next_pos) = start_pos;
if (zone_id >= 0)
{
_lw6ker_zone_struct_t *zone_structs = map_state->map_struct->zones;
int32_t neighbour_zone_id;
_lw6ker_zone_struct_t *fighter_zone_struct;
fighter_zone_struct = &(zone_structs[zone_id]);
int32_t best_potential = zone_states[zone_id].potential;
if (parity)
{
for (i = 0; i < LW6KER_NB_DIRS; ++i)
{
neighbour_zone_id = fighter_zone_struct->link[i];
if (neighbour_zone_id >= 0)
{
if (zone_states[neighbour_zone_id].potential >
best_potential)
{
best_potential =
zone_states[neighbour_zone_id].potential;
best_direction = i;
}
}
}
}
else
{
for (i = LW6KER_NB_DIRS - 1; i >= 0; --i)
{
neighbour_zone_id = fighter_zone_struct->link[i];
if (neighbour_zone_id >= 0)
{
if (zone_states[neighbour_zone_id].potential >
best_potential)
{
best_potential =
zone_states[neighbour_zone_id].potential;
best_direction = i;
}
}
}
}
if (best_direction >= 0)
{
for (try = 0; try < LW6MAP_MAX_NB_DIR_TRIES && !ret; ++try)
{
test = (*current_pos);
test_dir = _LW6KER_TABLES_MOVE_DIR[parity][best_direction][try];
_lw6ker_move_goto_with_dir (rules, shape,
&test_x,
&test_y,
&test_z,
start_pos.x,
start_pos.y, start_pos.z, test_dir);
test.x = test_x;
test.y = test_y;
test.z = test_z;
if (_lw6ker_map_struct_get_zone_id
(map_struct, test.x, test.y, test.z) >= 0)
{
(*next_pos) = test;
ret = 1;
}
}
}
else
{
test = start_pos;
target = zone_states[zone_id].closest_cursor_pos;
if (target.x > start_pos.x)
{
test.x++;
}
if (target.x < start_pos.x)
{
test.x--;
}
if (target.y > start_pos.y)
{
test.y++;
}
if (target.y < start_pos.y)
{
test.y--;
}
if (target.z > start_pos.z)
{
test.z++;
}
if (target.z < start_pos.z)
{
test.z--;
}
if (_lw6ker_map_struct_get_zone_id
(map_struct, test.x, test.y, test.z) >= 0)
{
(*next_pos = test);
ret = 1;
}
}
}
if (next_pos->x == current_pos->x && next_pos->y == current_pos->y
&& next_pos->z == current_pos->z)
{
ret = 0;
}
return ret;
}
|
|||||
| ↓ | _lw6p2p_cli_oob_verify_callback_func | 24 | 69 | 179 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/p2p/p2p-clioob.c |
int
_lw6p2p_cli_oob_verify_callback_func (void *func_data, char *url, char *ip,
int port, int ping_delay_msec,
lw6sys_assoc_t * assoc)
{
int ret = 0;
_lw6p2p_node_t *node = (_lw6p2p_node_t *) func_data;
char *remote_program = NULL;
char *remote_version = NULL;
char *remote_codename = NULL;
char *remote_stamp_str = NULL;
int remote_stamp_int = 0;
char *remote_id = NULL;
char *remote_url = NULL;
char *remote_title = NULL;
char *remote_description = NULL;
int bench = 0;
char *open_relay_str = NULL;
int open_relay_int = _LW6P2P_DB_FALSE;
char *has_password_str = NULL;
int has_password_int = _LW6P2P_DB_FALSE;
int now = 0;
int uptime = 0;
char *community_id = NULL;
int round = 0;
char *level = NULL;
int required_bench = 0;
int nb_colors = 0;
int max_nb_colors = 0;
int nb_cursors = 0;
int max_nb_cursors = 0;
int nb_nodes = 0;
int max_nb_nodes = 0;
remote_program = lw6sys_assoc_get (assoc, LW6MSG_OOB_PROGRAM);
remote_version = lw6sys_assoc_get (assoc, LW6MSG_OOB_VERSION);
remote_codename = lw6sys_assoc_get (assoc, LW6MSG_OOB_CODENAME);
remote_stamp_str = lw6sys_assoc_get (assoc, LW6MSG_OOB_STAMP);
if (remote_stamp_str)
{
remote_stamp_int = lw6sys_atoi (remote_stamp_str);
}
remote_id = lw6sys_assoc_get (assoc, LW6MSG_OOB_ID);
remote_url = lw6sys_assoc_get (assoc, LW6MSG_OOB_URL);
remote_title = lw6sys_assoc_get (assoc, LW6MSG_OOB_TITLE);
remote_description = lw6sys_assoc_get (assoc, LW6MSG_OOB_DESCRIPTION);
if (remote_program && remote_version && remote_codename
&& remote_stamp_int > 0 && remote_id && remote_url
&& remote_title && remote_description)
{
if (lw6sys_str_is_same
(remote_program, lw6sys_build_get_package_tarname ()))
{
if (lw6sys_str_is_same (remote_url, url))
{
if (remote_version && remote_codename
&& remote_stamp_int && remote_id && remote_title
&& remote_description)
{
if (!lw6sys_str_is_same (url, node->public_url)
&& !lw6sys_str_is_same (remote_id, node->node_id_str))
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("confirmed node \"%s\""), url);
has_password_str =
lw6msg_utils_get_assoc_str_with_default (assoc,
LW6MSG_OOB_HAS_PASSWORD,
LW6MSG_NO);
has_password_int = (has_password_str
&&
lw6sys_str_starts_with_no_case
(has_password_str,
LW6MSG_YES)) ? _LW6P2P_DB_TRUE :
_LW6P2P_DB_FALSE;
bench =
lw6msg_utils_get_assoc_int_with_default (assoc,
LW6MSG_OOB_BENCH,
0);
open_relay_str =
lw6msg_utils_get_assoc_str_with_default (assoc,
LW6MSG_OOB_OPEN_RELAY,
LW6MSG_NO);
open_relay_int = (open_relay_str &&
lw6sys_str_starts_with_no_case
(open_relay_str,
LW6MSG_YES)) ? _LW6P2P_DB_TRUE :
_LW6P2P_DB_FALSE;
now = _lw6p2p_db_now (node->db);
uptime =
lw6msg_utils_get_assoc_int_with_default (assoc,
LW6MSG_OOB_UPTIME,
0);
community_id =
lw6sys_assoc_get (assoc, LW6MSG_OOB_COMMUNITY);
round =
lw6msg_utils_get_assoc_int_with_default (assoc,
LW6MSG_OOB_ROUND,
0);
level =
lw6msg_utils_get_assoc_str_with_default (assoc,
LW6MSG_OOB_LEVEL,
LW6SYS_STR_EMPTY);
required_bench =
lw6msg_utils_get_assoc_int_with_default (assoc,
LW6MSG_OOB_REQUIRED_BENCH,
0);
nb_colors =
lw6msg_utils_get_assoc_int_with_default (assoc,
LW6MSG_OOB_NB_COLORS,
0);
max_nb_colors =
lw6msg_utils_get_assoc_int_with_default (assoc,
LW6MSG_OOB_MAX_NB_COLORS,
0);
nb_cursors =
lw6msg_utils_get_assoc_int_with_default (assoc,
LW6MSG_OOB_NB_CURSORS,
0);
max_nb_cursors =
lw6msg_utils_get_assoc_int_with_default (assoc,
LW6MSG_OOB_MAX_NB_CURSORS,
0);
nb_nodes =
lw6msg_utils_get_assoc_int_with_default (assoc,
LW6MSG_OOB_NB_NODES,
0);
max_nb_nodes =
lw6msg_utils_get_assoc_int_with_default (assoc,
LW6MSG_OOB_MAX_NB_NODES,
0);
ret =
_lw6p2p_node_update_peer (node, remote_version,
remote_codename,
remote_stamp_int, remote_id,
remote_url, remote_title,
remote_description,
has_password_int, bench,
open_relay_int,
now - uptime, community_id,
round, level,
required_bench, nb_colors,
max_nb_colors, nb_cursors,
max_nb_cursors, nb_nodes,
max_nb_nodes, ip, port, now,
ping_delay_msec);
}
else
{
lw6sys_log (LW6SYS_LOG_INFO,
_x_
("node url=\"%s\" id=\"%s\" is local, not updating, this should only happen when several nodes share the same db"),
url, node->node_id_str);
}
}
}
else
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("wrong url \"%s\" vs \"%s\""), remote_url,
url);
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("wrong remote program \"%s\""), remote_program);
}
}
else
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("answer does not containn the required fields"));
}
return ret;
}
|
|||||
| ↓ | _lw6p2p_tentacle_init | 24 | 68 | 204 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/p2p/p2p-tentacle.c |
int
_lw6p2p_tentacle_init (_lw6p2p_tentacle_t * tentacle,
_lw6p2p_backends_t * backends,
lw6srv_listener_t * listener, char *local_url,
char *remote_url, char *real_remote_ip, char *password,
u_int64_t local_id, u_int64_t remote_id,
int network_reliability,
lw6cnx_recv_callback_t recv_callback_func,
void *recv_callback_data)
{
int ret = 1;
int i = 0;
//_lw6p2p_tentacle_clear(tentacle,backends);
char *repr = NULL;
lw6sys_url_t *parsed_url = NULL;
tentacle->backends = backends;
tentacle->local_url = lw6sys_str_copy (local_url);
tentacle->remote_url = lw6sys_str_copy (remote_url);
parsed_url = lw6sys_url_parse (remote_url);
if (parsed_url)
{
/*
* In theory this could be a long blocking call,
* in practise, when we're at this stage OOB messages
* probably have already initialized the DNS cache
* so response will be fast.
*/
tentacle->remote_ip = lw6net_dns_gethostbyname (parsed_url->host);
tentacle->remote_port = parsed_url->port;
if (real_remote_ip)
{
if (tentacle->remote_ip)
{
if (lw6sys_str_is_same (tentacle->remote_ip, real_remote_ip))
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_
("OK, public URL \"%s\" for \"%s:%d\" is fine"),
remote_url, tentacle->remote_ip,
tentacle->remote_port);
tentacle->dns_ok = 1;
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("URL \"%s\" appears to be associated to \"%s:%d\" but DNS reports it to be associated to \"%s:%d\", using \"%s:%d\""),
remote_url, real_remote_ip,
tentacle->remote_port, tentacle->remote_ip,
tentacle->remote_port, real_remote_ip,
tentacle->remote_port);
LW6SYS_FREE (tentacle->remote_ip);
tentacle->remote_ip = lw6sys_str_copy (real_remote_ip);
}
}
else
{
lw6sys_log (LW6SYS_LOG_INFO,
_x_
("unable to get IP from DNS for \"%s\", using \"%s:%d\" instead"),
remote_url, real_remote_ip, tentacle->remote_port);
tentacle->remote_ip = lw6sys_str_copy (real_remote_ip);
}
}
else
{
if (tentacle->remote_ip)
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_
("no \"real\" IP passed, using default \"%s:%d\""),
tentacle->remote_ip, tentacle->remote_port);
tentacle->dns_ok = 1;
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unable to find host \"%s\""),
parsed_url->host);
}
}
lw6sys_url_free (parsed_url);
}
if (password && strlen (password) > 0)
{
tentacle->password = lw6sys_str_copy (password);
}
else
{
tentacle->password = lw6sys_str_copy ("");
}
tentacle->local_id_int = local_id;
tentacle->local_id_str = lw6sys_id_ltoa (local_id);
tentacle->remote_id_int = remote_id;
tentacle->remote_id_str = lw6sys_id_ltoa (remote_id);
if (tentacle->local_url && tentacle->remote_url && tentacle->remote_ip
&& tentacle->password && tentacle->local_id_str
&& tentacle->remote_id_str)
{
tentacle->nb_cli_connections = backends->nb_cli_backends;
if (tentacle->nb_cli_connections > 0)
{
tentacle->cli_connections =
(lw6cnx_connection_t **)
LW6SYS_CALLOC (tentacle->nb_cli_connections *
sizeof (lw6cnx_connection_t *));
if (tentacle->cli_connections)
{
for (i = 0; i < tentacle->nb_cli_connections; ++i)
{
tentacle->cli_connections[i] =
lw6cli_open (tentacle->backends->cli_backends[i],
local_url, remote_url, tentacle->remote_ip,
tentacle->remote_port,
tentacle->password,
tentacle->local_id_int,
tentacle->remote_id_int, tentacle->dns_ok,
network_reliability, recv_callback_func,
recv_callback_data);
if (tentacle->cli_connections[i])
{
repr =
lw6cli_repr (tentacle->backends->cli_backends[i],
tentacle->cli_connections[i]);
if (repr)
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("connection \"%s\" opened"), repr);
LW6SYS_FREE (repr);
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("unable to create connection %d to connect on \"%s\""),
i, tentacle->remote_url);
ret = 0;
}
}
}
else
{
ret = 0;
}
}
tentacle->nb_srv_connections = backends->nb_srv_backends;
if (tentacle->nb_srv_connections > 0)
{
tentacle->srv_connections =
(lw6cnx_connection_t **)
LW6SYS_CALLOC (tentacle->nb_srv_connections *
sizeof (lw6cnx_connection_t *));
if (tentacle->srv_connections)
{
for (i = 0; i < tentacle->nb_srv_connections; ++i)
{
tentacle->srv_connections[i] =
lw6srv_open (tentacle->backends->srv_backends[i],
listener,
local_url, remote_url, tentacle->remote_ip,
tentacle->remote_port,
tentacle->password,
tentacle->local_id_int,
tentacle->remote_id_int, tentacle->dns_ok,
network_reliability, recv_callback_func,
recv_callback_data);
if (tentacle->srv_connections[i])
{
repr =
lw6srv_repr (tentacle->backends->srv_backends[i],
tentacle->srv_connections[i]);
if (repr)
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("connection \"%s\" opened"), repr);
LW6SYS_FREE (repr);
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("unable to create connection %d to connect on \"%s\""),
i, tentacle->remote_url);
ret = 0;
}
}
}
else
{
ret = 0;
}
}
}
else
{
ret = 0;
}
return ret;
}
|
|||||
| ↓ | lw6ldr_body_read | 24 | 53 | 141 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/ldr/ldr-body.c |
int
lw6ldr_body_read (lw6map_body_t * body, char *dirname,
lw6map_param_t * param, lw6ldr_hints_t * hints,
int display_w, int display_h, float ratio, int bench_value,
int magic_number, lw6sys_progress_t * progress)
{
int ret = 0;
char *dot_png;
char *extra_layers_png[LW6MAP_MAX_BODY_DEPTH] = { _LW6LDR_FILE_LAYER2_PNG,
_LW6LDR_FILE_LAYER3_PNG,
_LW6LDR_FILE_LAYER4_PNG,
_LW6LDR_FILE_LAYER5_PNG,
_LW6LDR_FILE_LAYER6_PNG,
_LW6LDR_FILE_LAYER7_PNG,
NULL
};
int layer;
lw6sys_progress_t progress1;
lw6sys_progress_t progress2;
int expected_depth = 1;
lw6sys_progress_split (&progress1, &progress2, progress);
lw6map_body_clear (body);
for (layer = 1; layer < LW6MAP_MAX_BODY_DEPTH; ++layer)
{
dot_png = lw6sys_path_concat (dirname, extra_layers_png[layer - 1]);
if (dot_png)
{
if (lw6sys_file_exists (dot_png))
{
expected_depth++;
}
LW6SYS_FREE (dot_png);
}
}
dot_png = lw6sys_path_concat (dirname, _LW6LDR_FILE_MAP_PNG);
if (dot_png)
{
lw6sys_log (LW6SYS_LOG_INFO, _x_ ("reading \"%s\""), dot_png);
ret =
lw6ldr_layer_read_first (&(body->layers[0]), dot_png, param, hints,
display_w, display_h, ratio, bench_value,
magic_number, expected_depth, &progress1);
LW6SYS_FREE (dot_png);
if (ret)
{
body->shape = body->layers[0].shape;
body->shape.d = 1;
for (layer = 1; layer < LW6MAP_MAX_BODY_DEPTH; ++layer)
{
dot_png =
lw6sys_path_concat (dirname, extra_layers_png[layer - 1]);
if (dot_png)
{
if (lw6sys_file_exists (dot_png))
{
lw6sys_log (LW6SYS_LOG_INFO,
_x_ ("reading extra layer %d \"%s\""),
layer, dot_png);
ret = ret
&& lw6ldr_layer_read_next (&(body->layers[layer]),
dot_png, body->shape.w,
body->shape.h);
if (ret)
{
body->shape.d++;
}
}
LW6SYS_FREE (dot_png);
}
}
ret = ret
&& lw6ldr_grease_apply (&(body->layers[0]), ¶m->rules, hints,
&progress2);
for (layer = 1; layer < body->shape.d; ++layer)
{
ret = ret
&& lw6ldr_grease_apply (&(body->layers[layer]), ¶m->rules,
hints, NULL);
}
ret = ret && lw6map_body_check_and_fix_holes (body, ¶m->rules);
ret = ret
&& lw6ldr_meta_layer_read_if_exists (&(body->glue), dirname,
_LW6LDR_FILE_GLUE_PNG,
body->shape.w, body->shape.h,
1);
ret = ret
&& lw6ldr_meta_layer_read_if_exists (&(body->boost), dirname,
_LW6LDR_FILE_BOOST_PNG,
body->shape.w, body->shape.h,
1);
ret = ret
&& lw6ldr_meta_layer_read_if_exists (&(body->danger), dirname,
_LW6LDR_FILE_DANGER_PNG,
body->shape.w, body->shape.h,
1);
ret = ret
&& lw6ldr_meta_layer_read_if_exists (&(body->medicine), dirname,
_LW6LDR_FILE_MEDICINE_PNG,
body->shape.w, body->shape.h,
1);
ret = ret
&& lw6ldr_meta_layer_read_if_exists (&(body->one_way_north),
dirname,
_LW6LDR_FILE_ONE_WAY_NORTH_PNG,
body->shape.w, body->shape.h,
0);
ret = ret
&& lw6ldr_meta_layer_read_if_exists (&(body->one_way_east),
dirname,
_LW6LDR_FILE_ONE_WAY_EAST_PNG,
body->shape.w, body->shape.h,
0);
ret = ret
&& lw6ldr_meta_layer_read_if_exists (&(body->one_way_south),
dirname,
_LW6LDR_FILE_ONE_WAY_SOUTH_PNG,
body->shape.w, body->shape.h,
0);
ret = ret
&& lw6ldr_meta_layer_read_if_exists (&(body->one_way_west),
dirname,
_LW6LDR_FILE_ONE_WAY_WEST_PNG,
body->shape.w, body->shape.h,
0);
if (ret)
{
lw6map_body_fix_checksum (body);
}
}
}
return ret;
}
|
|||||
| ↓ | lw6ldr_texture_read | 24 | 47 | 129 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/ldr/ldr-texture.c |
int
lw6ldr_texture_read (lw6map_texture_t * texture, char *dirname,
lw6map_param_t * param, lw6ldr_hints_t * hints,
int use_texture, int display_w, int display_h,
float *ratio, int *texture_exists,
lw6sys_progress_t * progress)
{
int ret = 0;
lw6map_texture_clear (texture);
(*texture_exists) = 0;
if (use_texture && !ret)
{
/*
* First, we try to read texture.png
*/
char *texture_dot_png;
texture_dot_png =
lw6sys_path_concat (dirname, _LW6LDR_FILE_TEXTURE_PNG);
if (texture_dot_png)
{
if (lw6sys_file_exists (texture_dot_png))
{
ret = read_png (texture, texture_dot_png, progress);
(*texture_exists) = ret;
}
LW6SYS_FREE (texture_dot_png);
}
}
if (use_texture && !ret)
{
/*
* Second, we try to read texture.jpeg
*/
char *texture_dot_jpeg = NULL;
texture_dot_jpeg =
lw6sys_path_concat (dirname, _LW6LDR_FILE_TEXTURE_JPEG);
if (texture_dot_jpeg)
{
if (lw6sys_file_exists (texture_dot_jpeg))
{
ret = read_jpeg (texture, texture_dot_jpeg, progress);
(*texture_exists) = ret;
}
LW6SYS_FREE (texture_dot_jpeg);
}
if (!ret)
{
texture_dot_jpeg =
lw6sys_path_concat (dirname, _LW6LDR_FILE_TEXTURE_JPG);
if (texture_dot_jpeg)
{
if (lw6sys_file_exists (texture_dot_jpeg))
{
ret = read_jpeg (texture, texture_dot_jpeg, progress);
(*texture_exists) = ret;
}
LW6SYS_FREE (texture_dot_jpeg);
}
}
}
if (use_texture && ret)
{
/*
* If texture is successfully loaded, apply separate
* JPEG alpha channel.
*/
char *texture_alpha_dot_jpeg = NULL;
texture_alpha_dot_jpeg =
lw6sys_path_concat (dirname, _LW6LDR_FILE_TEXTURE_ALPHA_JPEG);
if (texture_alpha_dot_jpeg)
{
if (lw6sys_file_exists (texture_alpha_dot_jpeg))
{
ret = read_alpha_jpeg (texture, texture_alpha_dot_jpeg, NULL);
}
LW6SYS_FREE (texture_alpha_dot_jpeg);
}
if (!ret)
{
texture_alpha_dot_jpeg =
lw6sys_path_concat (dirname, _LW6LDR_FILE_TEXTURE_ALPHA_JPG);
if (texture_alpha_dot_jpeg)
{
if (lw6sys_file_exists (texture_alpha_dot_jpeg))
{
ret =
read_alpha_jpeg (texture, texture_alpha_dot_jpeg, NULL);
}
LW6SYS_FREE (texture_alpha_dot_jpeg);
}
}
}
if (ret && texture->w > 0 && texture->h > 0)
{
if (param->style.keep_ratio)
{
(*ratio) = ((float) texture->w) / ((float) texture->h);
}
else
{
(*ratio) = ((float) display_w) / ((float) display_h);
}
}
else
{
*ratio = 0.0f;
}
if ((*texture_exists) == 0)
{
/*
* If there's no texture, we just return 1 (ok) for now, the code will
* apply a texture later, with lw6map_texture_from_body for instance.
*/
ret = 1;
}
return ret;
}
|
|||||
| ↓ | _lw6dat_stack_seq2serial | 24 | 36 | 109 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/dat/dat-stack.c |
int
_lw6dat_stack_seq2serial (_lw6dat_stack_t * stack, int seq)
{
int ret = _LW6DAT_SERIAL_INVALID;
_lw6dat_atom_t *atom = NULL;
/*
* Carefull, those values won't hold the real
* min and max values for seq, as seq ain't
* garanteed to be ordered. Still, it should
* give a good idea of the result in most cases,
* the most common case in which seq isn't
* ever increasing is when a map is resetted
* and round counting is back to "0".
*/
int seq_min = _LW6DAT_SEQ_INVALID;
int seq_max = _LW6DAT_SEQ_INVALID;
int i;
if (stack->serial_max >= stack->serial_0
&& stack->serial_max <= stack->serial_n_1)
{
atom = _lw6dat_stack_get_atom (stack, stack->serial_min);
if (atom)
{
seq_min = atom->seq;
}
atom = _lw6dat_stack_get_atom (stack, stack->serial_max);
if (atom)
{
seq_max = atom->seq;
}
if (seq_min != _LW6DAT_SEQ_INVALID && seq_max != _LW6DAT_SEQ_INVALID)
{
if (seq_min < seq_max && seq_min <= seq && seq <= seq_max &&
seq - seq_min < seq_max - seq)
{
/*
* Loop with i increasing since we suspect we'd
* better start from the bottom of the lif
*/
for (i = stack->serial_min;
i <= stack->serial_max
&& ret == _LW6DAT_SERIAL_INVALID; ++i)
{
atom = _lw6dat_stack_get_atom (stack, i);
if (atom)
{
if (atom->seq == seq)
{
ret = i;
}
}
}
}
else
{
/*
* By default, walk from top, most
* interesting messages are here, they
* are the latest sent.
*/
for (i = stack->serial_max;
i >= stack->serial_min
&& ret == _LW6DAT_SERIAL_INVALID; --i)
{
atom = _lw6dat_stack_get_atom (stack, i);
if (atom)
{
if (atom->seq == seq)
{
ret = i;
}
}
}
}
if (seq_min == seq_max && seq_min == seq)
{
ret = stack->serial_min;
}
if (ret != _LW6DAT_SERIAL_INVALID)
{
/*
* Now this might be a little risky, be carefull
* when hacking algorithm above, that atom
* does indeed contain the correct element
*/
if (atom)
{
if (atom->serial == ret)
{
/*
* We return the *first* element
*/
ret -= atom->order_i;
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("inconsistency, serial is %d and should be %d"),
ret, atom->serial);
}
}
}
}
}
return ret;
}
|
|||||
| ↓ | lw6map_style_is_same | 24 | 25 | 36 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/map/map-style.c |
int
lw6map_style_is_same (lw6map_style_t * style_a, lw6map_style_t * style_b)
{
int ret = 1;
ret = ret && style_a->keep_ratio == style_b->keep_ratio;
ret = ret && style_a->zoom == style_b->zoom;
ret = ret && style_a->zoom_min == style_b->zoom_min;
ret = ret && style_a->zoom_max == style_b->zoom_max;
ret = ret && style_a->x_wrap == style_b->x_wrap;
ret = ret && style_a->y_wrap == style_b->y_wrap;
ret = ret
&& lw6sys_str_is_same (style_a->background_style,
style_b->background_style);
ret = ret && lw6sys_str_is_same (style_a->hud_style, style_b->hud_style);
ret = ret && lw6sys_str_is_same (style_a->menu_style, style_b->menu_style);
ret = ret && lw6sys_str_is_same (style_a->view_style, style_b->view_style);
ret = ret && style_a->animation_density == style_b->animation_density;
ret = ret && style_a->animation_speed == style_b->animation_speed;
ret = ret && style_a->cursor_size == style_b->cursor_size;
ret = ret && style_a->colorize_cursor == style_b->colorize_cursor;
ret = ret && style_a->blink_cursor == style_b->blink_cursor;
ret = ret && style_a->hidden_layer_alpha == style_b->hidden_layer_alpha;
ret = ret && style_a->colorize == style_b->colorize;
ret = ret && style_a->pixelize == style_b->pixelize;
ret = ret
&& lw6map_color_set_is_same (&style_a->color_set, &style_b->color_set);
ret = ret && lw6sys_str_is_same (style_a->music_file, style_b->music_file);
ret = ret
&& lw6sys_str_is_same (style_a->music_filter, style_b->music_filter);
ret = ret
&& lw6sys_str_is_same (style_a->music_exclude, style_b->music_exclude);
ret = ret && style_a->waves == style_b->waves;
return ret;
}
|
|||||
| ↓ | lw6sys_log | 27 | 61 | 144 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/sys/sys-log.c |
void
lw6sys_log (int level_id, char *file, int line, char *fmt, ...)
{
#ifdef LW6_OPTIMIZE
if ((level_id <= LW6SYS_LOG_NOTICE_ID
&& level_id <= lw6sys_log_get_level ())
|| level_id == LW6SYS_LOG_TMP_ID || lw6sys_debug_get ())
#else
if (level_id <= lw6sys_log_get_level () || level_id == LW6SYS_LOG_TMP_ID
|| lw6sys_debug_get ())
#endif
{
char level_str[LEVEL_LENGTH + 1];
#ifdef HAVE_SYSLOG_H
int syslog_priority = 0;
#endif
FILE *f;
int errno_int;
va_list ap;
va_list ap2;
char *file_only = NULL;
errno_int = errno;
level_str[0] = '\0';
file_only = strrchr (file, '/');
if (file_only && *file_only)
{
file_only++;
}
else
{
file_only = file;
}
va_start (ap, fmt);
switch (level_id)
{
case LW6SYS_LOG_ERROR_ID:
if (errno_int)
{
lw6sys_buf_sprintf (level_str, LEVEL_LENGTH,
_("ERROR! (errno=%d:%s) "), errno_int,
errno_str (errno_int));
}
else
{
lw6sys_buf_sprintf (level_str, LEVEL_LENGTH, _("ERROR! "));
}
#ifdef HAVE_SYSLOG_H
syslog_priority = LOG_ERR;
#endif
break;
case LW6SYS_LOG_WARNING_ID:
if (errno_int)
{
lw6sys_buf_sprintf (level_str, LEVEL_LENGTH,
_("WARNING! (errno=%d:%s) "), errno_int,
errno_str (errno_int));
}
else
{
lw6sys_buf_sprintf (level_str, LEVEL_LENGTH, _("WARNING! "));
}
#ifdef HAVE_SYSLOG_H
syslog_priority = LOG_WARNING;
#endif
break;
case LW6SYS_LOG_NOTICE_ID:
#ifdef HAVE_SYSLOG_H
syslog_priority = LOG_NOTICE;
#endif
break;
case LW6SYS_LOG_INFO_ID:
#ifdef HAVE_SYSLOG_H
syslog_priority = LOG_INFO;
#endif
break;
case LW6SYS_LOG_TMP_ID:
lw6sys_buf_sprintf (level_str, LEVEL_LENGTH, _("[tmp] "));
#ifdef HAVE_SYSLOG_H
syslog_priority = LOG_DEBUG;
#endif
break;
default: // LW6SYS_LOG_DEBUG_ID
lw6sys_buf_sprintf (level_str, LEVEL_LENGTH, _("[debug] "));
#ifdef HAVE_SYSLOG_H
syslog_priority = LOG_DEBUG;
#endif
break;
}
if (fmt != NULL)
{
// exclude INFO & DEBUG from console in non-debug mode
if (level_id <= LW6SYS_LOG_NOTICE_ID
|| level_id == LW6SYS_LOG_TMP_ID || lw6sys_debug_get ())
{
va_copy (ap2, ap);
log_to_console (stderr, level_str, fmt, ap2);
va_end (ap2);
}
if (level_id <= LW6SYS_LOG_WARNING_ID
|| level_id == LW6SYS_LOG_TMP_ID)
{
va_copy (ap2, ap);
log_to_history (level_str, fmt, ap2);
va_end (ap2);
}
#ifdef HAVE_SYSLOG_H
if (level_id <= LW6SYS_LOG_WARNING_ID
|| level_id == LW6SYS_LOG_TMP_ID)
{
va_copy (ap2, ap);
vsyslog (syslog_priority, fmt, ap2);
va_end (ap2);
}
#endif
f = open_log_file ();
if (f)
{
va_copy (ap2, ap);
log_to_file (f, level_id, level_str, file_only, line, fmt, ap2);
va_end (ap2);
fclose (f);
}
if (level_id <= LW6SYS_LOG_ERROR_ID)
{
va_copy (ap2, ap);
_lw6sys_msgbox_alert (level_str, file_only, line, fmt, ap2);
va_end (ap2);
}
}
va_end (ap);
}
/*
* We reset errno to avoid getting pointless errno in logs,
* the idea is to print errno when needed...
*/
errno = 0;
}
|
|||||
| ↓ | lw6net_tcp_accept | 23 | 58 | 127 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/net/net-tcp.c |
int
lw6net_tcp_accept (char **incoming_ip,
int *incoming_port, int listening_sock, int delay_msec)
{
int new_sock = -1;
int accepted = 0;
struct sockaddr_in name;
socklen_t namelen = sizeof (struct sockaddr_in);
fd_set read;
struct timeval tv;
int res;
int enable = 1;
int disable = 0;
struct linger li;
memset (&name, 0, sizeof (name));
if (incoming_ip)
{
*incoming_ip = NULL;
}
if (incoming_port)
{
*incoming_port = 0;
}
if (listening_sock >= 0)
{
FD_ZERO (&read);
FD_SET (listening_sock, &read);
_lw6net_delay_msec_to_timeval (&tv, delay_msec);
res = select (listening_sock + 1, &read, NULL, NULL, &tv);
if (res >= 1)
{
new_sock =
accept (listening_sock, (struct sockaddr *) &name, &namelen);
if (new_sock >= 0)
{
li.l_onoff = 0;
li.l_linger = 0;
if (setsockopt (new_sock, SOL_SOCKET, SO_KEEPALIVE,
(char *) &enable, sizeof (int)))
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("setsockopt(SO_KEEPALIVE) failed"));
lw6net_last_error ();
}
if (setsockopt (new_sock, SOL_SOCKET, SO_OOBINLINE,
(char *) &disable, sizeof (int)))
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("setsockopt(SO_OOBINLINE) failed"));
lw6net_last_error ();
}
if (setsockopt (new_sock, SOL_SOCKET, SO_LINGER,
(char *) &li, sizeof (struct linger)))
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("setsockopt(SO_LINGER) failed"));
lw6net_last_error ();
}
//fcntl (new_sock, F_SETFL, O_NONBLOCK, 0);
if (incoming_ip)
{
(*incoming_ip) = _lw6net_inet_ntoa (name.sin_addr);
if (*incoming_ip)
{
_lw6net_counters_register_socket (&
(_lw6net_global_context->
counters));
accepted = 1;
}
}
if (incoming_port)
{
(*incoming_port) = (int) ntohs (name.sin_port);
}
if (incoming_ip && incoming_port && *incoming_ip
&& (*incoming_port) >= 0)
{
lw6sys_log (LW6SYS_LOG_INFO,
_x_ ("socket %d accepted from %s:%d"), new_sock,
*incoming_ip, *incoming_port);
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING, _x_ ("accept() failed"));
lw6net_last_error ();
}
}
}
if (new_sock >= 0 && !accepted)
{
if (incoming_ip)
{
if (*incoming_ip)
{
LW6SYS_FREE (*incoming_ip);
}
(*incoming_ip) = NULL;
}
if (incoming_port)
{
(*incoming_port) = 0;
}
#ifdef LW6_MS_WINDOWS
if (closesocket (new_sock))
#else
if (close (new_sock))
#endif
{
lw6sys_log (LW6SYS_LOG_WARNING, _x_ ("close() failed"));
lw6net_last_error ();
}
new_sock = -1;
}
return new_sock;
}
|
|||||
| ↓ | lw6dsp_update | 23 | 58 | 150 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/dsp/dsp-display.c |
int
lw6dsp_update (lw6dsp_backend_t * dsp_backend, lw6dsp_param_t * param)
{
int ret = 1;
_lw6dsp_data_t *data = NULL;
int diff = 0;
int need_sync = 0;
int i = 0;
data = (_lw6dsp_data_t *) dsp_backend->data;
if (data)
{
/*
* We don't go idle when nb_frames==0, because we
* need to actually update the param to bootstrap
*/
if (data->nb_frames > 0)
{
/*
* No need to do anything until next frame is drawn
*/
while (data->nb_frames <= data->nb_frames_at_last_update
&& i < _LW6DSP_IDLE_LIMIT)
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_
("calling display_update too often, no frame drawn between two calls"));
/*
* We go idle for a very short time, this will just avoid the
* caller to get stuck in 100% CPU greedy loops.
*/
lw6sys_idle ();
++i;
}
}
/*
* Note that it's really important to update data every time the
* function is called for caller can rely on the fact that if
* a NULL pointer has been passed for level, game_struct, game_state
* of pilot, then the parent object can be freed.
*/
data->nb_frames_at_last_update = data->nb_frames;
diff = _lw6dsp_param_diff (data, param);
if (data->input)
{
need_sync = lw6gui_input_need_sync (data->input);
}
if (diff || need_sync)
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("dsp param update diff=%d sync=%d"), diff,
need_sync);
lw6sys_mutex_lock (data->render_mutex);
if (diff & _LW6DSP_PARAM_DIFF_MISC)
{
data->param.misc = param->misc;
}
if (diff & _LW6DSP_PARAM_DIFF_VIDEO_MODE)
{
data->param.video_mode = param->video_mode;
}
if (diff & _LW6DSP_PARAM_DIFF_LOOK)
{
if (data->param.look)
{
lw6gui_look_free (data->param.look);
}
data->param.look = lw6gui_look_dup (param->look);
}
if (diff & _LW6DSP_PARAM_DIFF_MENU)
{
if (data->param.menu)
{
if (param->menu)
{
if (data->last_menu_id == param->menu->id)
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("synchronising menu"));
lw6gui_menu_sync (data->param.menu, param->menu);
}
else
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_
("new menu is totally different, duping it"));
lw6gui_menu_free (data->param.menu);
data->param.menu = lw6gui_menu_dup (param->menu);
data->last_menu_id = param->menu->id;
}
}
else
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("new menu is NULL"));
lw6gui_menu_free (data->param.menu);
data->param.menu = NULL;
data->last_menu_id = 0;
}
}
else
{
if (param->menu)
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_
("new menu and no previous one, duping it"));
data->param.menu = lw6gui_menu_dup (param->menu);
data->last_menu_id = param->menu->id;
}
}
}
if (diff & _LW6DSP_PARAM_DIFF_LEVEL)
{
data->param.level = param->level;
}
if (diff & _LW6DSP_PARAM_DIFF_GAME_STRUCT)
{
data->param.game_struct = param->game_struct;
}
if (diff & _LW6DSP_PARAM_DIFF_GAME_STATE)
{
data->slow_mps = 0;
data->param.game_state = param->game_state;
}
if (diff & _LW6DSP_PARAM_DIFF_PILOT)
{
data->param.pilot = param->pilot;
}
if (dsp_backend->input != NULL && data->input != NULL)
{
lw6gui_input_sync (dsp_backend->input, data->input);
}
lw6sys_mutex_unlock (data->render_mutex);
}
}
return ret;
}
|
|||||
| ↓ | lw6ldr_hints_set | 23 | 50 | 106 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/ldr/ldr-hints.c |
int
lw6ldr_hints_set (lw6ldr_hints_t * hints, char *key, char *value)
{
int ret = 1;
char *formatted_key = NULL;
formatted_key = lw6sys_keyword_as_key (key);
if (formatted_key)
{
if (!strcmp (LW6DEF_RESAMPLE, formatted_key))
{
hints->resample = lw6sys_atob (value);
}
else if (!strcmp (LW6DEF_MIN_MAP_WIDTH, formatted_key))
{
hints->min_map_width = lw6sys_atoi (value);
}
else if (!strcmp (LW6DEF_MAX_MAP_WIDTH, formatted_key))
{
hints->max_map_width = lw6sys_atoi (value);
}
else if (!strcmp (LW6DEF_MIN_MAP_HEIGHT, formatted_key))
{
hints->min_map_height = lw6sys_atoi (value);
}
else if (!strcmp (LW6DEF_MAX_MAP_HEIGHT, formatted_key))
{
hints->max_map_height = lw6sys_atoi (value);
}
else if (!strcmp (LW6DEF_MIN_MAP_SURFACE, formatted_key))
{
hints->min_map_surface = lw6sys_atoi (value);
}
else if (!strcmp (LW6DEF_MAX_MAP_SURFACE, formatted_key))
{
hints->max_map_surface = lw6sys_atoi (value);
}
else if (!strcmp (LW6DEF_FIGHTER_SCALE, formatted_key))
{
hints->fighter_scale = lw6sys_atof (value);
}
else if (!strcmp (LW6DEF_DOWNSIZE_USING_FIGHTER_SCALE, formatted_key))
{
hints->downsize_using_fighter_scale = lw6sys_atob (value);
}
else if (!strcmp (LW6DEF_UPSIZE_USING_FIGHTER_SCALE, formatted_key))
{
hints->upsize_using_fighter_scale = lw6sys_atob (value);
}
else if (!strcmp (LW6DEF_DOWNSIZE_USING_BENCH_VALUE, formatted_key))
{
hints->downsize_using_bench_value = lw6sys_atob (value);
}
else if (!strcmp (LW6DEF_UPSIZE_USING_BENCH_VALUE, formatted_key))
{
hints->upsize_using_bench_value = lw6sys_atob (value);
}
else if (!strcmp (LW6DEF_GUESS_COLORS, formatted_key))
{
hints->guess_colors = lw6sys_atob (value);
}
else if (!strcmp (LW6DEF_BACKGROUND_COLOR_AUTO, formatted_key))
{
hints->background_color_auto = lw6sys_atob (value);
}
else if (!strcmp (LW6DEF_HUD_COLOR_AUTO, formatted_key))
{
hints->hud_color_auto = lw6sys_atob (value);
}
else if (!strcmp (LW6DEF_MENU_COLOR_AUTO, formatted_key))
{
hints->menu_color_auto = lw6sys_atob (value);
}
else if (!strcmp (LW6DEF_VIEW_COLOR_AUTO, formatted_key))
{
hints->view_color_auto = lw6sys_atob (value);
}
else if (!strcmp (LW6DEF_SYSTEM_COLOR_AUTO, formatted_key))
{
hints->system_color_auto = lw6sys_atob (value);
}
else if (!strcmp (LW6DEF_WALL_GREASE, formatted_key))
{
hints->wall_grease = lw6sys_atoi (value);
}
else if (!strcmp (LW6DEF_GUESS_MOVES_PER_SEC, formatted_key))
{
hints->guess_moves_per_sec = lw6sys_atob (value);
}
else if (!strcmp (LW6DEF_SPEED, formatted_key))
{
hints->speed = lw6sys_atof (value);
}
else
{
ret = 0;
}
LW6SYS_FREE (formatted_key);
}
else
{
ret = 0;
}
return ret;
}
|
|||||
| ↓ | lw6ldr_hints_get | 23 | 48 | 98 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/ldr/ldr-hints.c |
char *
lw6ldr_hints_get (lw6ldr_hints_t * hints, char *key)
{
char *ret = NULL;
char *formatted_key = NULL;
formatted_key = lw6sys_keyword_as_key (key);
if (formatted_key)
{
if (!strcmp (LW6DEF_RESAMPLE, formatted_key))
{
ret = lw6sys_btoa (hints->resample);
}
else if (!strcmp (LW6DEF_MIN_MAP_WIDTH, formatted_key))
{
ret = lw6sys_itoa (hints->min_map_width);
}
else if (!strcmp (LW6DEF_MAX_MAP_WIDTH, formatted_key))
{
ret = lw6sys_itoa (hints->max_map_width);
}
else if (!strcmp (LW6DEF_MIN_MAP_HEIGHT, formatted_key))
{
ret = lw6sys_itoa (hints->min_map_height);
}
else if (!strcmp (LW6DEF_MAX_MAP_HEIGHT, formatted_key))
{
ret = lw6sys_itoa (hints->max_map_height);
}
else if (!strcmp (LW6DEF_MIN_MAP_SURFACE, formatted_key))
{
ret = lw6sys_itoa (hints->min_map_surface);
}
else if (!strcmp (LW6DEF_MAX_MAP_SURFACE, formatted_key))
{
ret = lw6sys_itoa (hints->max_map_surface);
}
else if (!strcmp (LW6DEF_FIGHTER_SCALE, formatted_key))
{
ret = lw6sys_ftoa (hints->fighter_scale);
}
else if (!strcmp (LW6DEF_DOWNSIZE_USING_FIGHTER_SCALE, formatted_key))
{
ret = lw6sys_btoa (hints->downsize_using_fighter_scale);
}
else if (!strcmp (LW6DEF_UPSIZE_USING_FIGHTER_SCALE, formatted_key))
{
ret = lw6sys_btoa (hints->upsize_using_fighter_scale);
}
else if (!strcmp (LW6DEF_DOWNSIZE_USING_BENCH_VALUE, formatted_key))
{
ret = lw6sys_btoa (hints->downsize_using_bench_value);
}
else if (!strcmp (LW6DEF_UPSIZE_USING_BENCH_VALUE, formatted_key))
{
ret = lw6sys_btoa (hints->upsize_using_bench_value);
}
else if (!strcmp (LW6DEF_GUESS_COLORS, formatted_key))
{
ret = lw6sys_btoa (hints->guess_colors);
}
else if (!strcmp (LW6DEF_BACKGROUND_COLOR_AUTO, formatted_key))
{
ret = lw6sys_btoa (hints->background_color_auto);
}
else if (!strcmp (LW6DEF_HUD_COLOR_AUTO, formatted_key))
{
ret = lw6sys_btoa (hints->hud_color_auto);
}
else if (!strcmp (LW6DEF_MENU_COLOR_AUTO, formatted_key))
{
ret = lw6sys_btoa (hints->menu_color_auto);
}
else if (!strcmp (LW6DEF_VIEW_COLOR_AUTO, formatted_key))
{
ret = lw6sys_btoa (hints->view_color_auto);
}
else if (!strcmp (LW6DEF_SYSTEM_COLOR_AUTO, formatted_key))
{
ret = lw6sys_btoa (hints->system_color_auto);
}
else if (!strcmp (LW6DEF_WALL_GREASE, formatted_key))
{
ret = lw6sys_itoa (hints->wall_grease);
}
else if (!strcmp (LW6DEF_GUESS_MOVES_PER_SEC, formatted_key))
{
ret = lw6sys_btoa (hints->guess_moves_per_sec);
}
else if (!strcmp (LW6DEF_SPEED, formatted_key))
{
ret = lw6sys_ftoa (hints->speed);
}
LW6SYS_FREE (formatted_key);
}
return ret;
}
|
|||||
| ↓ | _mod_httpd_process_oob | 23 | 47 | 174 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/srv/mod-httpd/mod-httpd-oob.c |
int
_mod_httpd_process_oob (_mod_httpd_context_t * httpd_context,
lw6nod_info_t * node_info,
lw6srv_oob_data_t * oob_data)
{
int ret = 0;
_mod_httpd_request_t *request = NULL;
_mod_httpd_response_t *response = NULL;
lw6nod_dyn_info_t *dyn_info = NULL;
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("process httpd oob"));
request = _mod_httpd_request_parse_oob (httpd_context, node_info, oob_data);
if (request)
{
if (request->get_head_post == _MOD_HTTPD_GET
|| request->get_head_post == _MOD_HTTPD_HEAD)
{
if (request->password_ok)
{
if (!strcmp (request->uri, _MOD_HTTPD_OOB_ROOT)
|| !strcmp (request->uri, _MOD_HTTPD_OOB_INDEX_HTML)
|| !strcmp (request->uri, _MOD_HTTPD_OOB_SCREENSHOT_JPEG))
{
dyn_info = lw6nod_info_dup_dyn (node_info);
if (dyn_info)
{
if (!strcmp (request->uri, _MOD_HTTPD_OOB_ROOT)
|| !strcmp (request->uri,
_MOD_HTTPD_OOB_INDEX_HTML))
{
response =
_response_index_html (httpd_context, node_info,
dyn_info);
}
if (!strcmp
(request->uri, _MOD_HTTPD_OOB_SCREENSHOT_JPEG))
{
response =
_response_screenshot_jpeg (httpd_context,
node_info, dyn_info);
}
lw6nod_dyn_info_free (dyn_info);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unable to duplicate dyn_info"));
}
}
else
{
if (!strcmp (request->uri, _MOD_HTTPD_OOB_INFO_TXT))
{
response =
_response_info_txt (httpd_context, node_info);
}
if (!strcmp (request->uri, _MOD_HTTPD_OOB_LIST_TXT))
{
response =
_response_list_txt (httpd_context, node_info);
}
if (!strcmp (request->uri, _MOD_HTTPD_OOB_PING_TXT))
{
response =
_response_ping_txt (httpd_context, node_info);
}
if (!strcmp (request->uri, _MOD_HTTPD_OOB_ROBOTS_TXT))
{
response =
_mod_httpd_response_from_str (httpd_context,
_MOD_HTTPD_STATUS_200,
0, 0, NULL,
httpd_context->data.
consts.content_type_txt,
httpd_context->data.
htdocs.robots_txt);
}
if (!strcmp (request->uri, _MOD_HTTPD_OOB_GPL_TXT))
{
response =
_mod_httpd_response_from_str (httpd_context,
_MOD_HTTPD_STATUS_200,
0, 0, NULL,
httpd_context->data.
consts.content_type_txt,
httpd_context->data.
htdocs.gpl_txt);
}
if (!strcmp (request->uri, _MOD_HTTPD_OOB_FAVICON_ICO))
{
response =
_mod_httpd_response_from_bin (httpd_context,
_MOD_HTTPD_STATUS_200,
0, 0, NULL,
httpd_context->data.
consts.content_type_txt,
httpd_context->data.
htdocs.favicon_ico_size,
httpd_context->data.
htdocs.
favicon_ico_data);
}
}
}
else
{
response =
_mod_httpd_http_error (httpd_context, _MOD_HTTPD_STATUS_401);
}
}
if (request->get_head_post == _MOD_HTTPD_POST)
{
response =
_mod_httpd_http_error (httpd_context, _MOD_HTTPD_STATUS_405);
}
if (!response)
{
/*
* OK, not treated, we return an error
*/
if (request->get_head_post == _MOD_HTTPD_GET)
{
/*
* On "GET", 404 is probably the best bet, the request
* might or might not be syntaxically correct, but most
* of the time it's just that "what's after GET is wrong"
* and this corresponds to 404.
*/
response =
_mod_httpd_http_error (httpd_context, _MOD_HTTPD_STATUS_404);
}
else
{
/*
* A typicall case in which we land here is when the
* client goes timeout (not necessarly an http client)
* and we do not want the program to wait for ages,
* a client with 10 seconds lag is useless anyway, so
* we just return http error 500 in all cases, and
* client (if not http client) should figure this means
* error.
*/
response =
_mod_httpd_http_error (httpd_context, _MOD_HTTPD_STATUS_500);
}
}
if (response)
{
ret =
_mod_httpd_response_send (httpd_context, response,
oob_data->sock,
request->get_head_post ==
_MOD_HTTPD_HEAD);
if (ret)
{
_mod_httpd_log (httpd_context, request, response);
}
else
{
lw6sys_log (LW6SYS_LOG_INFO, _x_ ("request \"%s\" failed"),
request->uri);
}
_mod_httpd_response_free (response);
}
_mod_httpd_request_free (request);
}
lw6net_socket_close (oob_data->sock);
oob_data->sock = -1;
return ret;
}
|
|||||
| ↓ | _lw6nod_const_info_init | 23 | 42 | 107 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/nod/nod-constinfo.c |
int
_lw6nod_const_info_init (lw6nod_const_info_t * const_info, char *program,
char *version,
char *codename,
int stamp, u_int64_t id,
char *url, char *title, char *description,
char *password, int bench, int open_relay,
int uptime, int idle_screenshot_size,
void *idle_screenshot_data)
{
int ret = 0;
if (program && strlen (program) > 0)
{
const_info->program = lw6sys_str_copy (program);
}
else
{
const_info->program =
lw6sys_str_copy (lw6sys_build_get_package_tarname ());
}
if (version && strlen (version) > 0)
{
const_info->version = lw6sys_str_copy (version);
}
else
{
const_info->version = lw6sys_str_copy (lw6sys_build_get_version ());
}
if (codename && strlen (codename) > 0)
{
const_info->codename = lw6sys_str_copy (codename);
}
else
{
const_info->codename = lw6sys_str_copy (lw6sys_build_get_codename ());
}
if (stamp)
{
const_info->stamp = stamp;
}
else
{
const_info->stamp = lw6sys_atoi (lw6sys_build_get_stamp ());
}
const_info->id_int = id;
const_info->id_str = lw6sys_id_ltoa (id);
const_info->url = lw6sys_url_canonize (url);
if (title && strlen (title) > 0)
{
const_info->title = lw6sys_str_copy (title);
}
else
{
const_info->title = lw6sys_get_hostname ();
}
if (const_info->title)
{
lw6sys_str_cleanup (const_info->title);
}
if (description)
{
const_info->description = lw6sys_str_copy (description);
}
else
{
const_info->description = lw6sys_str_copy ("");
}
if (const_info->description)
{
lw6sys_str_cleanup (const_info->description);
}
if (!lw6sys_str_is_null_or_empty (password))
{
const_info->has_password = 1;
const_info->password = lw6sys_str_copy (password);
}
else
{
const_info->password = lw6sys_str_copy ("");
}
const_info->bench = bench;
const_info->open_relay = open_relay ? 1 : 0;
const_info->creation_timestamp =
lw6sys_get_timestamp () - (u_int64_t) (uptime * 1000);
const_info->idle_screenshot_size = idle_screenshot_size;
if (idle_screenshot_size > 0)
{
const_info->idle_screenshot_data = LW6SYS_MALLOC (idle_screenshot_size);
if (const_info->idle_screenshot_data)
{
memcpy (const_info->idle_screenshot_data, idle_screenshot_data,
idle_screenshot_size);
}
}
else
{
const_info->idle_screenshot_data = NULL;
}
ret = (const_info->id_int && const_info->id_str && const_info->url
&& const_info->title && const_info->description
&& (const_info->idle_screenshot_data
|| (const_info->idle_screenshot_size == 0)));
return ret;
}
|
|||||
| ↓ | test_cmd | 23 | 122 | 292 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/msg/msg-test.c |
static int
test_cmd ()
{
int ret = 1;
LW6SYS_TEST_FUNCTION_BEGIN;
{
lw6nod_info_t *info = NULL;
lw6nod_info_t *analysed_info = NULL;
char *msg = NULL;
u_int64_t ticket = 0;
u_int32_t key = 0;
u_int64_t analysed_ticket = 0;
u_int32_t analysed_key = 0;
char *remote_url = NULL;
int data_serial = 0;
int data_i = 0;
int data_n = 0;
int data_round = 0;
char *data_ker_msg = NULL;
info =
lw6nod_info_new (_TEST_PROGRAM, _TEST_VERSION, _TEST_CODENAME,
_TEST_STAMP, _TEST_ID, _TEST_URL, _TEST_TITLE,
_TEST_DESCRIPTION, _TEST_PASSWORD, _TEST_BENCH,
_TEST_OPEN_RELAY, _TEST_UPTIME,
_TEST_IDLE_SCREENSHOT_SIZE,
_TEST_IDLE_SCREENSHOT_DATA);
if (info)
{
msg = lw6msg_cmd_generate_hello (info);
if (msg)
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("hello command is \"%s\""),
msg);
if (lw6msg_cmd_analyse_hello (&analysed_info, msg))
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("hello command analysed (node url=\"%s\")"),
analysed_info->const_info.url);
lw6nod_info_free (analysed_info);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unable to analyze \"%s\""), msg);
ret = 0;
}
remote_url = lw6msg_cmd_guess_from_url (msg);
if (remote_url)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("could guess url \"%s\" from \"%s\""),
remote_url, msg);
LW6SYS_FREE (remote_url);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unable to guess url from \"%s\""), msg);
ret = 0;
}
LW6SYS_FREE (msg);
}
ticket = lw6sys_generate_id_64 ();
msg = lw6msg_cmd_generate_ticket (info, ticket);
if (msg)
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("ticket command is \"%s\""),
msg);
if (lw6msg_cmd_analyse_ticket
(&analysed_info, &analysed_ticket, msg))
{
if (ticket == analysed_ticket)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("ticket command analysed (ticket=%"
LW6SYS_PRINTF_LL "x)"), ticket);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("ticket command analysed but ticket is wrong (%x and should be %x)"),
analysed_ticket, ticket);
ret = 0;
}
lw6nod_info_free (analysed_info);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unable to analyze \"%s\""), msg);
ret = 0;
}
remote_url = lw6msg_cmd_guess_from_url (msg);
if (remote_url)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("could guess url \"%s\" from \"%s\""),
remote_url, msg);
LW6SYS_FREE (remote_url);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unable to guess url from \"%s\""), msg);
ret = 0;
}
LW6SYS_FREE (msg);
}
key = lw6sys_generate_id_32 ();
msg = lw6msg_cmd_generate_foo (info, key);
if (msg)
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("foo command is \"%s\""),
msg);
if (lw6msg_cmd_analyse_foo (&analysed_info, &analysed_key, msg))
{
if (key == analysed_key)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("foo command analysed (key=%x)"), key);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("foo command analysed but key is wrong (%x and should be %x)"),
analysed_key, key);
ret = 0;
}
lw6nod_info_free (analysed_info);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unable to analyze \"%s\""), msg);
ret = 0;
}
remote_url = lw6msg_cmd_guess_from_url (msg);
if (remote_url)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("could guess url \"%s\" from \"%s\""),
remote_url, msg);
LW6SYS_FREE (remote_url);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unable to guess url from \"%s\""), msg);
ret = 0;
}
LW6SYS_FREE (msg);
}
key = lw6sys_generate_id_32 ();
msg = lw6msg_cmd_generate_bar (info, key);
if (msg)
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("bar command is \"%s\""),
msg);
if (lw6msg_cmd_analyse_bar (&analysed_info, &analysed_key, msg))
{
if (key == analysed_key)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("bar command analysed (key=%x)"), key);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("bar command analysed but key is wrong (%x and should be %x)"),
analysed_key, key);
ret = 0;
}
lw6nod_info_free (analysed_info);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unable to analyze \"%s\""), msg);
ret = 0;
}
remote_url = lw6msg_cmd_guess_from_url (msg);
if (remote_url)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("could guess url \"%s\" from \"%s\""),
remote_url, msg);
LW6SYS_FREE (remote_url);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unable to guess url from \"%s\""), msg);
ret = 0;
}
LW6SYS_FREE (msg);
}
msg = lw6msg_cmd_generate_goodbye (info);
if (msg)
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("goodbye command is \"%s\""),
msg);
if (lw6msg_cmd_analyse_goodbye (&analysed_info, msg))
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_
("goodbye command analysed (node url=\"%s\")"),
analysed_info->const_info.url);
lw6nod_info_free (analysed_info);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unable to analyze \"%s\""), msg);
ret = 0;
}
remote_url = lw6msg_cmd_guess_from_url (msg);
if (remote_url)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("could guess url \"%s\" from \"%s\""),
remote_url, msg);
LW6SYS_FREE (remote_url);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unable to guess url from \"%s\""), msg);
ret = 0;
}
LW6SYS_FREE (msg);
}
msg =
lw6msg_cmd_generate_data (_TEST_DATA_SERIAL, _TEST_DATA_I,
_TEST_DATA_N, _TEST_DATA_ROUND,
_TEST_DATA_KER_MSG);
if (msg)
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("data command is \"%s\""),
msg);
if (lw6msg_cmd_analyse_data
(&data_serial, &data_i, &data_n, &data_round, &data_ker_msg,
msg))
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_
("data command analysed (node ker_msg=\"%s\")"),
data_ker_msg);
LW6SYS_FREE (data_ker_msg);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unable to analyze \"%s\""), msg);
ret = 0;
}
remote_url = lw6msg_cmd_guess_from_url (msg);
if (remote_url)
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("could guess url \"%s\" from \"%s\", this is wrong"),
remote_url, msg);
LW6SYS_FREE (remote_url);
ret = 0;
}
else
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_
("unable to guess url from \"%s\", this is right"),
msg);
}
LW6SYS_FREE (msg);
}
lw6nod_info_free (info);
}
}
LW6SYS_TEST_FUNCTION_END;
return ret;
}
|
|||||
| ↓ | lw6hlp_list | 23 | 11 | 34 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/hlp/hlp-list.c |
lw6sys_list_t *
lw6hlp_list ()
{
lw6sys_list_t *list = NULL;
int ok = 0;
list = lw6sys_list_new (NULL);
if (list)
{
ok = update_quick (&list) && update_doc (&list) && update_show (&list)
&& update_path (&list) && update_players (&list)
&& update_input (&list) && update_graphics (&list)
&& update_sound (&list) && update_network (&list)
&& update_map (&list) && update_map_rules (&list)
&& update_map_hints (&list) && update_map_style (&list)
&& update_map_teams (&list) && update_funcs (&list)
&& update_hooks (&list) && update_advanced (&list)
&& update_aliases (&list) && update_team_colors (&list)
&& update_weapons (&list);
}
if (!ok)
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("problem generating help keywords list"));
if (list)
{
lw6sys_list_free (list);
list = NULL;
}
}
return list;
}
|
|||||
| ↓ | test_word | 22 | 93 | 273 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/msg/msg-test.c |
static int
test_word ()
{
int ret = 1;
LW6SYS_TEST_FUNCTION_BEGIN;
{
lw6msg_word_t word;
char *next = NULL;
int i = 0;
u_int16_t id_16 = 0;
u_int32_t id_32 = 0;
u_int64_t id_64 = 0;
char *base64_item = NULL;
char *base64_str = NULL;
if (lw6msg_word_first (&word, &next, _TEST_WORD_STR_OK))
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("parsed str=\"%s\", next=\"%s\""),
word.buf, next);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING, _x_ ("unable to parse \"%s\""),
_TEST_WORD_STR_OK);
ret = 0;
}
if (lw6msg_word_first (&word, &next, _TEST_WORD_STR_KO))
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("parsed str=\"%s\" from \"%s\", this is wrong"),
word.buf, _TEST_WORD_STR_KO);
ret = 0;
}
else
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("unable to parse \"%s\", that's right"),
_TEST_WORD_STR_KO);
}
if (lw6msg_word_first_x (&word, &next, _TEST_WORD_X_STR_OK))
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("parsed str=\"%s\", next=\"%s\""),
word.buf, next);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING, _x_ ("unable to parse \"%s\""),
_TEST_WORD_X_STR_OK);
ret = 0;
}
if (lw6msg_word_first_x (&word, &next, _TEST_WORD_X_STR_KO))
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("parsed str=\"%s\" from \"%s\", this is wrong"),
word.buf, _TEST_WORD_X_STR_KO);
ret = 0;
}
else
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("unable to parse \"%s\", that's right"),
_TEST_WORD_X_STR_KO);
}
base64_item = lw6glb_base64_encode_str (_TEST_WORD_BASE64_ITEM);
if (base64_item)
{
base64_str = lw6sys_new_sprintf (_TEST_WORD_BASE64_OK, base64_item);
if (base64_str)
{
if (lw6msg_word_first_base64 (&word, &next, base64_str))
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("parsed base64 str=\"%s\", next=\"%s\""),
word.buf, next);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unable to parse base 64 from \"%s\""),
base64_str);
ret = 0;
}
LW6SYS_FREE (base64_str);
}
base64_str = lw6sys_new_sprintf (_TEST_WORD_BASE64_KO, base64_item);
if (base64_str)
{
if (lw6msg_word_first_base64 (&word, &next, base64_str))
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("parsed str=\"%s\" from \"%s\", this is wrong"),
word.buf, base64_str);
ret = 0;
}
else
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_
("unable to parse base64 from \"%s\", that's right"),
base64_str);
}
LW6SYS_FREE (base64_str);
}
LW6SYS_FREE (base64_item);
}
if (lw6msg_word_first_int (&i, &next, _TEST_WORD_INT_OK))
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("parsed int=%d, next=\"%s\""), i,
next);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unable to parse int from \"%s\""),
_TEST_WORD_INT_OK);
ret = 0;
}
if (lw6msg_word_first_int (&i, &next, _TEST_WORD_INT_KO))
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("parsed int=%d from \"%s\", this is wrong"), i,
_TEST_WORD_INT_KO);
ret = 0;
}
else
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("unable to parse \"%s\", that's right"),
_TEST_WORD_INT_KO);
}
if (lw6msg_word_first_int_ge0 (&i, &next, _TEST_WORD_INT_GE0_OK))
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("parsed int=%d (>0), next=\"%s\""), i, next);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unable to parse int (>0) from \"%s\""),
_TEST_WORD_INT_GE0_OK);
ret = 0;
}
if (lw6msg_word_first_int_ge0 (&i, &next, _TEST_WORD_INT_GE0_KO))
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("parsed int=%d from \"%s\", this is wrong"), i,
_TEST_WORD_INT_GE0_KO);
ret = 0;
}
else
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("unable to parse int from \"%s\", that's right"),
_TEST_WORD_INT_GE0_KO);
}
if (lw6msg_word_first_int_gt0 (&i, &next, _TEST_WORD_INT_GT0_OK))
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("parsed int=%d (>0), next=\"%s\""), i, next);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unable to parse int (>0) from \"%s\""),
_TEST_WORD_INT_GT0_OK);
ret = 0;
}
if (lw6msg_word_first_int_gt0 (&i, &next, _TEST_WORD_INT_GT0_KO))
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("parsed int=%d from \"%s\", this is wrong"), i,
_TEST_WORD_INT_GT0_KO);
ret = 0;
}
else
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("unable to parse int from \"%s\", that's right"),
_TEST_WORD_INT_GT0_KO);
}
if (lw6msg_word_first_id_16 (&id_16, &next, _TEST_WORD_ID_16_OK))
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("parsed id_16 from \"%s\", next=\"%s\""),
_TEST_WORD_ID_16_OK, next);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unable to parse id_16 from \"%s\""),
_TEST_WORD_ID_16_OK);
ret = 0;
}
if (lw6msg_word_first_id_16 (&id_16, &next, _TEST_WORD_ID_16_KO))
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("parsed id_16 from \"%s\", this is wrong"),
_TEST_WORD_ID_16_KO);
ret = 0;
}
else
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("unable to parse id_16 from \"%s\", that's right"),
_TEST_WORD_ID_16_KO);
}
if (lw6msg_word_first_id_32 (&id_32, &next, _TEST_WORD_ID_32_OK))
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("parsed id_32 from \"%s\", next=\"%s\""),
_TEST_WORD_ID_32_OK, next);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unable to parse id_32 from \"%s\""),
_TEST_WORD_ID_32_OK);
ret = 0;
}
if (lw6msg_word_first_id_32 (&id_32, &next, _TEST_WORD_ID_32_KO))
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("parsed id_32 from \"%s\", this is wrong"),
_TEST_WORD_ID_32_KO);
ret = 0;
}
else
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("unable to parse id_32 from \"%s\", that's right"),
_TEST_WORD_ID_32_KO);
}
if (lw6msg_word_first_id_64 (&id_64, &next, _TEST_WORD_ID_64_OK))
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("parsed id_64 from \"%s\", next=\"%s\""),
_TEST_WORD_ID_64_OK, next);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unable to parse id_64 from \"%s\""),
_TEST_WORD_ID_64_OK);
ret = 0;
}
if (lw6msg_word_first_id_64 (&id_64, &next, _TEST_WORD_ID_64_KO))
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("parsed id_64 from \"%s\", this is wrong"),
_TEST_WORD_ID_64_KO);
ret = 0;
}
else
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("unable to parse id_64 from \"%s\", that's right"),
_TEST_WORD_ID_64_KO);
}
}
LW6SYS_TEST_FUNCTION_END;
return ret;
}
|
|||||
| ↓ | test_sort | 22 | 79 | 190 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/sys/sys-test.c |
static int
test_sort ()
{
int ret = 1;
LW6SYS_TEST_FUNCTION_BEGIN;
{
lw6sys_list_t *list = NULL;
int array[TEST_SORT_LENGTH] = TEST_SORT_INT;
int i;
list = lw6sys_list_new (NULL);
if (list)
{
for (i = 0; i < TEST_SORT_LENGTH; ++i)
{
lw6sys_lifo_push (&list, (void *) (array + i));
}
lw6sys_sort (&list, lw6sys_sort_int_callback);
if (list)
{
if ((*((int *) (list->data))) == TEST_SORT_INT_MIN)
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("min sorted value is %d"),
TEST_SORT_INT_MIN);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("min sorted value is %d and should be %d"),
*((int *) (list->data)), TEST_SORT_INT_MIN);
ret = 0;
}
}
lw6sys_sort (&list, lw6sys_sort_int_desc_callback);
if (list)
{
if ((*((int *) (list->data))) == TEST_SORT_INT_MAX)
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("max sorted value is %d"),
TEST_SORT_INT_MAX);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("max sorted value is %d and should be %d"),
*((int *) (list->data)), TEST_SORT_INT_MAX);
ret = 0;
}
}
if (list)
{
lw6sys_list_free (list);
}
else
{
ret = 0;
}
}
else
{
ret = 0;
}
}
{
lw6sys_list_t *list = NULL;
float array[TEST_SORT_LENGTH] = TEST_SORT_FLOAT;
int i;
list = lw6sys_list_new (NULL);
if (list)
{
for (i = 0; i < TEST_SORT_LENGTH; ++i)
{
lw6sys_lifo_push (&list, (void *) (array + i));
}
lw6sys_sort (&list, lw6sys_sort_float_callback);
if (list)
{
if ((*((float *) (list->data))) == TEST_SORT_FLOAT_MIN)
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("min sorted value is %f"),
TEST_SORT_FLOAT_MIN);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("min sorted value is %f and should be %f"),
*((float *) (list->data)), TEST_SORT_FLOAT_MIN);
ret = 0;
}
}
lw6sys_sort (&list, lw6sys_sort_float_desc_callback);
if (list)
{
if ((*((float *) (list->data))) == TEST_SORT_FLOAT_MAX)
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("max sorted value is %f"),
TEST_SORT_FLOAT_MAX);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("max sorted value is %f and should be %f"),
*((float *) (list->data)), TEST_SORT_FLOAT_MAX);
ret = 0;
}
}
if (list)
{
lw6sys_list_free (list);
}
else
{
ret = 0;
}
}
else
{
ret = 0;
}
}
{
lw6sys_list_t *list = NULL;
char *array[TEST_SORT_LENGTH] = TEST_SORT_STR;
int i;
list = lw6sys_list_new (NULL);
if (list)
{
for (i = 0; i < TEST_SORT_LENGTH; ++i)
{
lw6sys_lifo_push (&list, (void *) array[i]);
}
lw6sys_sort (&list, lw6sys_sort_str_callback);
if (list)
{
if (!strcmp ((char *) (list->data), TEST_SORT_STR_MIN))
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("min sorted value is \"%s\""),
TEST_SORT_STR_MIN);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("min sorted value is \"%s\" and should be \"%s\""),
(char *) (list->data), TEST_SORT_STR_MIN);
ret = 0;
}
}
lw6sys_sort (&list, lw6sys_sort_str_desc_callback);
if (list)
{
if (!strcmp ((char *) (list->data), TEST_SORT_STR_MAX))
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("max sorted value is \"%s\""),
TEST_SORT_STR_MAX);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("max sorted value is \"%s\" and should be \"%s\""),
(char *) (list->data), TEST_SORT_STR_MAX);
ret = 0;
}
}
if (list)
{
lw6sys_list_free (list);
}
else
{
ret = 0;
}
}
else
{
ret = 0;
}
}
LW6SYS_TEST_FUNCTION_END;
return ret;
}
|
|||||
| ↓ | _lw6p2p_recv_process | 22 | 73 | 290 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/p2p/p2p-recv.c |
void
_lw6p2p_recv_process (_lw6p2p_node_t * node,
lw6cnx_connection_t * cnx,
u_int64_t logical_from_id, char *message)
{
lw6nod_info_t *remote_node_info = NULL;
u_int64_t ticket = 0;
u_int32_t foo_bar_key = 0;
u_int32_t logical_ticket_sig = 0;
int serial = 0;
int i = 0;
int n = 0;
int round = 0;
char *ker_message = NULL;
char *reply_msg = NULL;
int tentacle_i = 0;
lw6cnx_connection_t *foo_cnx = NULL;
lw6cnx_connection_t *fastest_cnx = NULL;
int now = 0;
int uptime = 0;
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("process \"%s\""), message);
/*
* We consider data is received even if we don't have the proof
* it's correct. At least some bytes came and looked globally
* ok, since the envelope is syntaxically right
*/
cnx->last_recv_timestamp = lw6sys_get_timestamp ();
if (lw6sys_str_starts_with_no_case (message, LW6MSG_CMD_HELLO))
{
if (lw6msg_cmd_analyse_hello (&remote_node_info, message))
{
lw6sys_log (LW6SYS_LOG_INFO, _x_ ("hello from \"%s\""),
cnx->remote_url);
/*
* We do nothing special on a hello (expect updating
* node info if needed, but this is done later)
*/
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("bad hello from \"%s\" (\"%s\")"), cnx->remote_url,
message);
}
}
else if (lw6sys_str_starts_with_no_case (message, LW6MSG_CMD_TICKET))
{
if (lw6msg_cmd_analyse_ticket (&remote_node_info, &ticket, message))
{
lw6sys_log (LW6SYS_LOG_INFO, _x_ ("received ticket from \"%s\""),
cnx->remote_url);
lw6cnx_ticket_table_set_send (&(node->ticket_table),
cnx->remote_id_str, ticket);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("bad ticket from \"%s\" (\"%s\")"),
cnx->remote_url, message);
}
}
else if (lw6sys_str_starts_with_no_case (message, LW6MSG_CMD_FOO))
{
if (lw6msg_cmd_analyse_foo (&remote_node_info, &foo_bar_key, message))
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("received foo from \"%s\""),
cnx->remote_url);
reply_msg = lw6msg_cmd_generate_bar (node->node_info, foo_bar_key);
if (reply_msg)
{
logical_ticket_sig =
lw6msg_ticket_calc_sig (lw6cnx_ticket_table_get_send
(&(node->ticket_table),
cnx->remote_id_str),
cnx->local_id_int, cnx->remote_id_int,
reply_msg);
tentacle_i =
_lw6p2p_node_find_tentacle (node, cnx->remote_id_int);
if (tentacle_i >= 0)
{
_lw6p2p_tentacle_send_redundant (&
(node->tentacles
[tentacle_i]),
&(node->ticket_table),
logical_ticket_sig,
cnx->local_id_int,
cnx->remote_id_int,
reply_msg);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("unable to find the tentacle for a node which has an active connection"));
}
LW6SYS_FREE (reply_msg);
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("bad foo from \"%s\" (\"%s\")"), cnx->remote_url,
message);
}
}
else if (lw6sys_str_starts_with_no_case (message, LW6MSG_CMD_BAR))
{
if (lw6msg_cmd_analyse_bar (&remote_node_info, &foo_bar_key, message))
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("received bar from \"%s\" foo_bar_key=%08x"),
cnx->remote_url, foo_bar_key);
tentacle_i = _lw6p2p_node_find_tentacle (node, cnx->remote_id_int);
if (tentacle_i >= 0)
{
foo_cnx =
_lw6p2p_tentacle_find_connection_with_foo_bar_key (&
(node->
tentacles
[tentacle_i]),
foo_bar_key);
/*
* It's important to check that remote_id_int is the same
* on both the receiver and the guessed sender, for we
* can't garantee *other* wouldn't disappear in a multithreaded
* context. If we garantee it's the same tentacle for
* both, then we garantee connection won't vanish. In practice
* having both a race condition *and* a key collision should
* be rare, but it's no use to take the risk.
*/
if (foo_cnx && foo_cnx->remote_id_int == cnx->remote_id_int)
{
foo_cnx->ping_msec =
lw6sys_get_timestamp () -
foo_cnx->last_send_foo_timestamp;
foo_cnx->foo_bar_key = 0;
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("ping=%d"),
foo_cnx->ping_msec);
if (cnx->dns_ok)
{
fastest_cnx =
_lw6p2p_tentacle_find_connection_with_lowest_ping (&
(node->
tentacles
[tentacle_i]));
if (fastest_cnx)
{
if (!node->tentacles[tentacle_i].data_exchanged)
{
node->tentacles[tentacle_i].data_exchanged = 1;
lw6sys_log (LW6SYS_LOG_NOTICE,
_
("communication established \"%s\" <-> \"%s\" on %s:%d"),
cnx->local_url, cnx->remote_url,
cnx->remote_ip, cnx->remote_port);
}
now = _lw6p2p_db_now (node->db);
uptime =
(lw6sys_get_timestamp () -
remote_node_info->
const_info.creation_timestamp) / 1000;
_lw6p2p_node_update_peer (node,
remote_node_info->
const_info.version,
remote_node_info->
const_info.codename,
remote_node_info->
const_info.stamp,
remote_node_info->
const_info.id_str,
remote_node_info->
const_info.url,
remote_node_info->
const_info.title,
remote_node_info->
const_info.description,
remote_node_info->
const_info.has_password,
remote_node_info->
const_info.bench,
remote_node_info->
const_info.open_relay,
now - uptime,
remote_node_info->
dyn_info.community_id_str,
remote_node_info->
dyn_info.round,
remote_node_info->
dyn_info.level,
remote_node_info->
dyn_info.required_bench,
remote_node_info->
dyn_info.nb_colors,
remote_node_info->
dyn_info.max_nb_colors,
remote_node_info->
dyn_info.nb_cursors,
remote_node_info->
dyn_info.max_nb_cursors,
remote_node_info->
dyn_info.nb_nodes,
remote_node_info->
dyn_info.max_nb_nodes,
cnx->remote_ip,
cnx->remote_port, now,
fastest_cnx->ping_msec);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("serious problem, not finding a \"fastest\" connection, when we were just working on one?"));
}
}
else
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_
("node \"%s\" can't be trusted (DNS mismatch), not updating list"),
cnx->remote_url);
}
}
else
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_
("unable to find connection with foo_bar_key %08x"),
foo_bar_key);
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("unable to find the tentacle for a node which has an active connection"));
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("bad bar from \"%s\" (\"%s\")"), cnx->remote_url,
message);
}
}
else if (lw6sys_str_starts_with_no_case (message, LW6MSG_CMD_GOODBYE))
{
if (lw6msg_cmd_analyse_goodbye (&remote_node_info, message))
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("received goodbye from \"%s\""),
cnx->remote_url);
// todo : close cnx
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("bad goodbye from \"%s\" (\"%s\")"),
cnx->remote_url, message);
}
}
else if (lw6sys_str_starts_with_no_case (message, LW6MSG_CMD_DATA))
{
if (lw6msg_cmd_analyse_data
(&serial, &i, &n, &round, &ker_message, message))
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("received data from \"%s\""),
cnx->remote_url);
// todo : process data!
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("bad data from \"%s\" (\"%s\")"), cnx->remote_url,
message);
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING, _x_ ("unhandled message \"%s\""),
message);
}
if (remote_node_info)
{
lw6nod_info_free (remote_node_info);
}
}
|
|||||
| ↓ | _lw6net_log_init | 22 | 44 | 99 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/net/net-log.c |
int
_lw6net_log_init (int argc, char *argv[], _lw6net_log_t * log, int net_log)
{
int ret = 0;
char *user_dir;
char *net_dir;
user_dir = lw6sys_get_user_dir (argc, argv);
if (user_dir)
{
net_dir = lw6sys_path_concat (user_dir, _NET_DIR);
if (net_dir)
{
/*
* We create dir only if log is activated,
* if log isn't will still check if exists
* afterwards and clean files if needed, just
* to avoid old traces to fill your HD.
*/
if (net_log && !lw6sys_dir_exists (net_dir))
{
lw6sys_create_dir (net_dir);
}
if (lw6sys_dir_exists (net_dir))
{
log->tcp_recv_filename =
lw6sys_path_concat (net_dir, _TCP_RECV_FILE);
if (log->tcp_recv_filename)
{
if (lw6sys_file_exists (log->tcp_recv_filename))
{
lw6sys_clear_file (log->tcp_recv_filename);
}
if (!net_log)
{
LW6SYS_FREE (log->tcp_recv_filename);
log->tcp_recv_filename = NULL;
}
}
log->tcp_send_filename =
lw6sys_path_concat (net_dir, _TCP_SEND_FILE);
if (log->tcp_send_filename)
{
if (lw6sys_file_exists (log->tcp_send_filename))
{
lw6sys_clear_file (log->tcp_send_filename);
}
if (!net_log)
{
LW6SYS_FREE (log->tcp_send_filename);
log->tcp_send_filename = NULL;
}
}
log->udp_recv_filename =
lw6sys_path_concat (net_dir, _UDP_RECV_FILE);
if (log->udp_recv_filename)
{
if (lw6sys_file_exists (log->udp_recv_filename))
{
lw6sys_clear_file (log->udp_recv_filename);
}
if (!net_log)
{
LW6SYS_FREE (log->udp_recv_filename);
log->udp_recv_filename = NULL;
}
}
log->udp_send_filename =
lw6sys_path_concat (net_dir, _UDP_SEND_FILE);
if (log->udp_send_filename)
{
if (lw6sys_file_exists (log->udp_send_filename))
{
lw6sys_clear_file (log->udp_send_filename);
}
if (!net_log)
{
LW6SYS_FREE (log->udp_send_filename);
log->udp_send_filename = NULL;
}
}
}
LW6SYS_FREE (net_dir);
}
LW6SYS_FREE (user_dir);
}
if (net_log)
{
ret = (log->tcp_recv_filename && log->tcp_send_filename
&& log->udp_recv_filename && log->udp_send_filename);
}
else
{
// ok, no need to initialize
ret = 1;
}
return ret;
}
|
|||||
| ↓ | _mod_httpd_response_send | 26 | 92 | 169 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/srv/mod-httpd/mod-httpd-response.c |
int
_mod_httpd_response_send (_mod_httpd_context_t * httpd_context,
_mod_httpd_response_t * response, int sock,
int headers_only)
{
int ret = 0;
char *first_line = NULL;
char *line = NULL;
char *tmp = NULL;
int status = response->status;
char *now_str = NULL;
char *expire_str = NULL;
int expire_delta = 0;
switch (status)
{
case _MOD_HTTPD_STATUS_200:
tmp = _HTTP_200;
break;
case _MOD_HTTPD_STATUS_401:
tmp = _HTTP_401;
break;
case _MOD_HTTPD_STATUS_403:
tmp = _HTTP_403;
break;
case _MOD_HTTPD_STATUS_404:
tmp = _HTTP_404;
break;
case _MOD_HTTPD_STATUS_405:
tmp = _HTTP_405;
break;
case _MOD_HTTPD_STATUS_500:
tmp = _HTTP_500;
break;
default:
lw6sys_log (LW6SYS_LOG_WARNING, _x_ ("unknown response code %d"),
status);
status = _MOD_HTTPD_STATUS_500;
tmp = _HTTP_500;
}
if (tmp)
{
first_line =
lw6sys_new_sprintf ("HTTP/%s %d %s",
httpd_context->data.consts.http_version, status,
tmp);
if (first_line)
{
lw6net_send_line_tcp (sock, first_line);
now_str = lw6sys_date_rfc1123 (0);
if (now_str)
{
line =
lw6sys_new_sprintf ("Server: %s",
lw6sys_build_get_package_tarname ());
if (line)
{
lw6net_send_line_tcp (sock, line);
LW6SYS_FREE (line);
line = NULL;
}
line = lw6sys_new_sprintf ("Date: %s", now_str);
if (line)
{
lw6net_send_line_tcp (sock, line);
LW6SYS_FREE (line);
line = NULL;
}
if (status == _MOD_HTTPD_STATUS_401)
{
line =
lw6sys_new_sprintf
("WWW-Authenticate: Basic realm=\"%s\"",
httpd_context->data.consts.auth_realm);
if (line)
{
lw6net_send_line_tcp (sock, line);
LW6SYS_FREE (line);
line = NULL;
}
}
line = lw6sys_new_sprintf ("Last-Modified: %s", now_str);
if (line)
{
lw6net_send_line_tcp (sock, line);
LW6SYS_FREE (line);
line = NULL;
}
if (response->no_cache)
{
lw6net_send_line_tcp (sock, "Pragma: no-cache");
lw6net_send_line_tcp (sock, "Cache-Control: no-cache");
expire_delta = -httpd_context->data.consts.in_the_past;
}
else
{
line =
lw6sys_new_sprintf ("Cache-Control: max-age=%d",
httpd_context->data.consts.max_age);
if (line)
{
lw6net_send_line_tcp (sock, line);
LW6SYS_FREE (line);
line = NULL;
}
expire_delta = httpd_context->data.consts.max_age;
}
expire_str = lw6sys_date_rfc1123 (expire_delta);
if (expire_str)
{
line = lw6sys_new_sprintf ("Expires: %s", expire_str);
if (line)
{
lw6net_send_line_tcp (sock, line);
LW6SYS_FREE (line);
line = NULL;
}
LW6SYS_FREE (expire_str);
}
if (response->refresh_sec > 0 && response->refresh_url != NULL)
{
line =
lw6sys_new_sprintf ("Refresh: %d; url=%s",
response->refresh_sec,
response->refresh_url);
if (line)
{
lw6net_send_line_tcp (sock, line);
LW6SYS_FREE (line);
line = NULL;
}
}
LW6SYS_FREE (now_str);
}
lw6net_send_line_tcp (sock, "Connection: close");
line =
lw6sys_new_sprintf ("Content-Length: %d", response->content_size);
if (line)
{
lw6net_send_line_tcp (sock, line);
LW6SYS_FREE (line);
line = NULL;
}
line =
lw6sys_new_sprintf ("Content-Type: %s", response->content_type);
if (line)
{
lw6net_send_line_tcp (sock, line);
LW6SYS_FREE (line);
line = NULL;
}
LW6SYS_FREE (first_line);
first_line = NULL;
}
lw6net_send_line_tcp (sock, "");
if (lw6net_tcp_is_alive (sock) && !headers_only)
{
ret =
lw6net_tcp_send (sock, response->content_data,
response->content_size,
httpd_context->data.consts.error_timeout * 1000,
1);
}
}
return ret;
}
|
|||||
| ↓ | _mod_gl_menu_cylinder_pick_item | 23 | 72 | 165 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/gfx/mod-gl/gl-menu/gl-cylinder/gl-cylinder-pick.c |
void
_mod_gl_menu_cylinder_pick_item (mod_gl_utils_context_t * utils_context,
_mod_gl_menu_cylinder_context_t *
cylinder_context, lw6gui_look_t * look,
int *position, int *scroll, int *esc,
lw6gui_menu_t * menu, int screen_x,
int screen_y)
{
// http://users.polytech.unice.fr/~buffa/cours/synthese_image/DOCS/Tutoriaux/glGameDeveloppers/view.cgi-V=tutorial_glfeedback&S=3.htm
GLfloat feedback_buffer[FEEDBACK_BUFFER_SIZE];
GLfloat *ptr;
int i, n;
float x, y, x_min, x_max, y_min, y_max;
lw6gui_menuitem_t *menuitem;
mod_gl_utils_bitmap_t *button_bitmap = NULL;
float relative_text_width;
int ret = _PASS_THROUGH_DEFAULT;
lw6gui_menu_update_display_range (menu,
cylinder_context->
const_data.max_displayed_items);
memset (feedback_buffer, 0, sizeof (GLfloat) * FEEDBACK_BUFFER_SIZE);
glFeedbackBuffer (FEEDBACK_BUFFER_SIZE, GL_2D, (float *) feedback_buffer);
mod_gl_utils_set_render_mode_3d_feedback (utils_context);
glRenderMode (GL_FEEDBACK); // enter feedback mode
n = menu->nb_items_displayed + 2;
if (menu->first_item_displayed > 0)
{
draw_spheres_corners (utils_context, cylinder_context, 0, n,
cylinder_context->const_data.nb_spheres,
_PASS_THROUGH_PREV);
}
if (menu->first_item_displayed + menu->nb_items_displayed < menu->nb_items)
{
draw_spheres_corners (utils_context, cylinder_context, n - 1, n,
cylinder_context->const_data.nb_spheres,
_PASS_THROUGH_NEXT);
}
for (i = 0; i < menu->nb_items_displayed; ++i)
{
menuitem = menu->items[i + menu->first_item_displayed];
button_bitmap =
mod_gl_utils_get_button_from_menucache (utils_context, look,
menuitem);
if (button_bitmap)
{
//
// If button_bitmap doesn't exist, well, we won't die,
// we just suppose the button is very large. It practise
// it shouldn't happen for we've drawn them just before.
//
relative_text_width =
((float) button_bitmap->surface->w) /
((float) MOD_GL_UTILS_MENU_TEXTURE_W);
}
else
{
relative_text_width = 1.0f;
}
draw_button_corners (utils_context,
cylinder_context,
i + 1, n, relative_text_width,
i + menu->first_item_displayed);
}
if (menu->esc_item->enabled)
{
button_bitmap =
mod_gl_utils_get_button_from_menucache (utils_context, look,
menu->esc_item);
if (button_bitmap)
{
//
// If button_bitmap doesn't exist, well, we won't die,
// we just suppose the button is very large. It practise
// it shouldn't happen for we've drawn them just before.
//
relative_text_width =
((float) button_bitmap->surface->w) /
((float) MOD_GL_UTILS_MENU_TEXTURE_W);
}
else
{
relative_text_width = 1.0f;
}
draw_button_corners (utils_context, cylinder_context, -1, n,
relative_text_width, _PASS_THROUGH_ESC);
}
glRenderMode (GL_RENDER); // back to normal mode
ptr = feedback_buffer;
while ((*ptr) == GL_PASS_THROUGH_TOKEN
&& (ptr < feedback_buffer + FEEDBACK_BUFFER_SIZE))
{
ptr++;
if (ptr < feedback_buffer + FEEDBACK_BUFFER_SIZE)
{
x_min = utils_context->video_mode.width + 1;
x_max = -1;
y_min = utils_context->video_mode.height + 1;
y_max = -1;
i = (int) (*ptr++);
while ((*ptr) == GL_POINT_TOKEN
&& ptr < feedback_buffer + FEEDBACK_BUFFER_SIZE - 3)
{
ptr++;
x = *(ptr++);
y = (utils_context->video_mode.height - *(ptr++));
if (x < x_min)
{
x_min = x;
}
if (x > x_max)
{
x_max = x;
}
if (y < y_min)
{
y_min = y;
}
if (y > y_max)
{
y_max = y;
}
}
if (x_min <= screen_x && screen_x <= x_max && y_min <= screen_y
&& screen_y <= y_max)
{
ret = i;
}
}
}
switch (ret)
{
case _PASS_THROUGH_PREV:
(*position) = -1;
(*scroll) = -1;
(*esc) = 0;
break;
case _PASS_THROUGH_NEXT:
(*position) = -1;
(*scroll) = +1;
(*esc) = 0;
break;
case _PASS_THROUGH_ESC:
(*position) = -1;
(*scroll) = 0;
(*esc) = 1;
break;
default:
(*position) = ret;
(*scroll) = 0;
(*esc) = 0;
}
}
|
|||||
| ↓ | poll | 23 | 65 | 163 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/dsp/dsp-thread.c |
static int
poll (_lw6dsp_data_t * data)
{
int ret = 1;
char **history = NULL;
int64_t timestamp;
lw6ker_game_state_t *game_state = NULL;
lw6pil_local_cursors_t *local_cursors = NULL;
float progress = 0.0f;
int mask = 0;
timestamp = lw6sys_get_timestamp ();
data->input = lw6gfx_pump_events (data->gfx_backend);
lw6gui_input_update_repeat (data->input,
&(data->param.misc.repeat_settings), timestamp);
mask = data->param.misc.mask;
if (data->slow_fps)
{
mask |= LW6GUI_DISPLAY_FPS;
}
if (data->slow_mps)
{
mask |= LW6GUI_DISPLAY_MPS;
}
if (data->param.pilot)
{
if (!(data->param.game_state))
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("pilot defined but not game_state"));
ret = 0;
}
if (!lw6pil_pilot_can_sync (data->param.game_state, data->param.pilot))
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("game_state state can't be synced from pilot"));
ret = 0;
}
}
if (data->param.game_state)
{
if (!(data->param.game_struct))
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("game_state defined but not game_struct"));
ret = 0;
}
if (data->param.game_state->game_struct != data->param.game_struct)
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("game_state->game_struct=%p but game_struct=%p, they should be the same"),
data->param.game_state->game_struct,
data->param.game_struct);
ret = 0;
}
}
if (data->param.game_struct)
{
if (!(data->param.level))
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("game_struct defined but not level"));
ret = 0;
}
if (data->param.game_struct->level != data->param.level)
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("game_struct->level=%p but level=%p, they should be the same"),
data->param.game_struct->level, data->param.level);
ret = 0;
}
}
if (data->param.game_state)
{
game_state = data->param.game_state;
}
local_cursors = &(data->local_cursors);
if (data->param.pilot)
{
switch (data->param.misc.dirty_read)
{
case LW6PIL_DIRTY_READ_NEVER:
case LW6PIL_DIRTY_READ_SYNC_ONLY:
lw6pil_pilot_sync_from_draft (game_state, data->param.pilot,
data->param.misc.dirty_read);
/*
* Here we don't sync completely correctly, the local_cursors
* might contain inconsistent data, but at least it won't
* be modified *while* we are reading it.
*/
data->local_cursors =
(*lw6pil_pilot_get_local_cursors (data->param.pilot));
break;
case LW6PIL_DIRTY_READ_ALWAYS:
game_state = lw6pil_pilot_dirty_read (data->param.pilot);
local_cursors = lw6pil_pilot_get_local_cursors (data->param.pilot);
break;
default:
lw6sys_log (LW6SYS_LOG_WARNING, _x_ ("bad value %d for dirty_read"),
data->param.misc.dirty_read);
break;
}
}
if (game_state)
{
data->rounds = lw6ker_game_state_get_rounds (game_state);
}
if (!(data->param.look))
{
lw6sys_log (LW6SYS_LOG_WARNING, _x_ ("look is NULL"));
ret = 0;
}
if (data->param.misc.progress)
{
progress = (*(data->param.misc.progress));
}
if (ret)
{
history = lw6sys_history_get (data->param.misc.log_timeout);
if (history)
{
if (lw6gfx_display (data->gfx_backend,
mask,
data->param.look,
data->param.level,
data->param.game_struct,
game_state,
local_cursors,
data->param.menu,
progress,
data->average_fps, data->mps, history,
data->param.misc.capture,
data->param.misc.gfx_debug,
data->param.misc.debug_team_id,
data->param.misc.debug_layer_id))
{
// ok
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING, _x_ ("display thread problem"));
ret = 0;
}
lw6sys_history_free (history);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING, _x_ ("couldn't get log history"));
ret = 0;
}
}
return ret;
}
|
|||||
| ↓ | mod_gl_utils_set_video_mode | 23 | 105 | 251 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/gfx/mod-gl/gl-utils/gl-utils-mode.c |
int
mod_gl_utils_set_video_mode (mod_gl_utils_context_t * utils_context,
lw6gui_video_mode_t * video_mode)
{
/* Information about the current video settings. */
const SDL_VideoInfo *info = NULL;
/* Color depth in bits of our window. */
int bpp = 0;
/* Flags we will pass into SDL_SetVideoMode. */
int flags = 0;
int width = 0;
int height = 0;
int width_test = 0;
int height_test = 0;
int fullscreen;
lw6gui_video_mode_t ratio_mode = { 0, 0, 0 };
lw6gui_video_mode_t target_mode = { 0, 0, 0 };
lw6gui_fullscreen_modes_t fullscreen_modes;
int ok = 1;
SDL_Surface *video_surface = NULL;
int warp_x = 0;
int warp_y = 0;
width = video_mode->width;
height = video_mode->height;
fullscreen = video_mode->fullscreen;
lw6sys_sleep (utils_context->const_data.mode_sleep);
/* Let's get some video information. */
info = SDL_GetVideoInfo ();
if (info)
{
lw6sys_log (LW6SYS_LOG_INFO,
_x_
("SDL VideoInfo hw_available=%d wm_available=%d video_mem=%dkb"),
info->hw_available, info->wm_available, info->video_mem);
}
else
{
/* This should probably never happen. */
lw6sys_log (LW6SYS_LOG_ERROR,
_("SDL GetVideoInfo failed: \"%s\""), SDL_GetError ());
fflush (stderr);
ok = 0;
}
if (ok)
{
bpp = info->vfmt->BitsPerPixel;
/*
* Now, we want to setup our requested
* window attributes for our OpenGL window.
* We want *at least* 5 bits of red, green
* and blue. We also want at least a 16-bit
* depth buffer.
*
* The last thing we do is request a double
* buffered window. '1' turns on double
* buffering, '0' turns it off.
*
* Note that we do not use SDL_DOUBLEBUF in
* the flags to SDL_SetVideoMode. That does
* not affect the GL attribute state, only
* the standard 2D blitting setup.
*/
switch (bpp)
{
case 8:
SDL_GL_SetAttribute (SDL_GL_RED_SIZE, 3);
SDL_GL_SetAttribute (SDL_GL_GREEN_SIZE, 3);
SDL_GL_SetAttribute (SDL_GL_BLUE_SIZE, 2);
break;
case 15:
case 16:
SDL_GL_SetAttribute (SDL_GL_RED_SIZE, 5);
SDL_GL_SetAttribute (SDL_GL_GREEN_SIZE, 5);
SDL_GL_SetAttribute (SDL_GL_BLUE_SIZE, 5);
break;
default:
SDL_GL_SetAttribute (SDL_GL_RED_SIZE, 8);
SDL_GL_SetAttribute (SDL_GL_GREEN_SIZE, 8);
SDL_GL_SetAttribute (SDL_GL_BLUE_SIZE, 8);
break;
}
SDL_GL_SetAttribute (SDL_GL_DEPTH_SIZE, 16);
SDL_GL_SetAttribute (SDL_GL_DOUBLEBUFFER, 1);
flags = SDL_OPENGL | (fullscreen ? SDL_FULLSCREEN : SDL_RESIZABLE);
if (width <= 0 || height <= 0)
{
if (mod_gl_utils_get_fullscreen_modes
(utils_context, &fullscreen_modes))
{
width = fullscreen_modes.standard.width;
height = fullscreen_modes.standard.height;
lw6sys_log (LW6SYS_LOG_INFO, _x_
("mode %dx%d selected automatically"),
width, height);
}
}
if (fullscreen)
{
if (mod_gl_utils_get_fullscreen_modes
(utils_context, &fullscreen_modes))
{
ratio_mode = fullscreen_modes.high;
target_mode.width = width;
target_mode.height = height;
if (lw6gui_video_mode_sync_ratio (&target_mode, &ratio_mode))
{
width_test = target_mode.width;
height_test = target_mode.height;
mod_gl_utils_find_closest_resolution (utils_context,
&width_test,
&height_test,
width_test,
height_test);
if (width_test != width || height_test != height)
{
lw6sys_log (LW6SYS_LOG_INFO,
_x_
("trying mode %dx%d which seems to fit best than %dx%d"),
width_test, height_test, width, height);
width = width_test;
height = height_test;
}
}
}
}
/*
* Set the video mode
*/
if (SDL_SetVideoMode (width, height, bpp, flags) == 0)
{
/*
* This could happen for a variety of reasons,
* including DISPLAY not being set, the specified
* resolution not being available, etc.
*/
lw6sys_log (LW6SYS_LOG_ERROR,
_
("SDL SetVideoMode %dx%d bpp=%d fullscreen=%d failed: \"%s\""),
width, height, bpp, fullscreen, SDL_GetError ());
}
else
{
video_surface = SDL_GetVideoSurface ();
if (video_surface)
{
if (video_surface->w != width || video_surface->h != height)
{
lw6sys_log (LW6SYS_LOG_INFO,
_x_
("video surface is %dx%d and not the requested &dx&d"),
video_surface->w, video_surface->h, width,
height);
}
width = video_surface->w;
height = video_surface->h;
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unable to get video surface"));
}
lw6sys_log (LW6SYS_LOG_INFO,
_x_ ("SDL SetVideoMode %dx%d bpp=%d fullscreen=%d"),
width, height, bpp, fullscreen);
lw6sys_log (LW6SYS_LOG_INFO, _x_ ("%d BPP"),
SDL_GetVideoSurface ()->format->BitsPerPixel);
lw6sys_log (LW6SYS_LOG_INFO, _x_ ("OpenGL vendor \"%s\""),
glGetString (GL_VENDOR));
lw6sys_log (LW6SYS_LOG_INFO, _x_ ("OpenGL renderer \"%s\""),
glGetString (GL_RENDERER));
lw6sys_log (LW6SYS_LOG_INFO, _x_ ("OpenGL version \"%s\""),
glGetString (GL_VERSION));
}
if (ok)
{
mod_gl_utils_show_mouse (utils_context, 0, 1);
SDL_PumpEvents ();
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("SDL events pumped"));
utils_context->video_mode.width = width;
utils_context->video_mode.height = height;
utils_context->video_mode.fullscreen = fullscreen;
utils_context->caps.bpp = bpp;
utils_context->caps.max_texture_size = 0;
mod_gl_utils_sync_viewport (utils_context);
glGetIntegerv (GL_MAX_TEXTURE_SIZE,
&(utils_context->caps.max_texture_size));
if (!utils_context->caps.max_texture_size)
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unable to get MAX_TEXTURE_SIZE"));
utils_context->caps.max_texture_size = 512;
}
}
lw6sys_log (LW6SYS_LOG_INFO, _x_ ("set caption to \"%s\" - \"%s\""),
lw6sys_build_get_package_string (),
lw6sys_build_get_package_tarname ());
SDL_WM_SetCaption (lw6sys_build_get_package_string (),
lw6sys_build_get_package_tarname ());
if (fullscreen)
{
warp_x = utils_context->const_data.warp_x * (float) width;
warp_y = utils_context->const_data.warp_y * (float) height;
lw6sys_log (LW6SYS_LOG_INFO, _x_ ("warp mouse to %d,%d"), warp_x,
warp_y);
SDL_WarpMouse (warp_x, warp_y);
}
lw6sys_log (LW6SYS_LOG_INFO,
_x_ ("OpenGL MAX_TEXTURE_SIZE = %d"),
utils_context->caps.max_texture_size);
if (utils_context->caps.max_texture_size <
MOD_GL_UTILS_REQUIRED_TEXTURE_SIZE)
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("OpenGL driver only handles %dx%d textures when %dx%d textures are needed"),
utils_context->caps.max_texture_size,
utils_context->caps.max_texture_size,
MOD_GL_UTILS_REQUIRED_TEXTURE_SIZE,
MOD_GL_UTILS_REQUIRED_TEXTURE_SIZE);
}
/*
* Call this function to be sure we're truely in some known mode
*/
mod_gl_utils_set_render_mode_2d (utils_context);
mod_gl_utils_call_resize_callback (utils_context);
mod_gl_utils_timer_set_bitmap_refresh (utils_context);
mod_gl_utils_smoothers_reset_drawable (utils_context);
lw6sys_sleep (utils_context->const_data.mode_sleep);
}
return ok;
}
|
|||||
| ↓ | _lw6ldr_bw_read | 21 | 83 | 186 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/ldr/ldr-bw.c |
int
_lw6ldr_bw_read (_lw6ldr_image_bw_t * image, char *png_file,
lw6sys_progress_t * progress)
{
png_structp png_ptr = NULL;
png_infop info_ptr = NULL;
png_infop end_info = NULL;
/*
* no need to use end_info for we use the high level interface
* with png_read_png.
*/
int ret = 0;
FILE *f = NULL;
lw6sys_progress_begin (progress);
png_ptr = png_create_read_struct (PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
if (png_ptr)
{
info_ptr = png_create_info_struct (png_ptr);
if (info_ptr)
{
end_info = png_create_info_struct (png_ptr);
if (end_info)
{
f = fopen (png_file, "rb");
if (f)
{
png_uint_32 width;
png_uint_32 height;
png_uint_32 rowbytes;
int max_width;
int max_height;
int bit_depth;
int color_type;
unsigned char **buf = NULL;
int row;
int memory_ok = 1;
int format_ok = 1;
int step;
png_init_io (png_ptr, f);
png_read_info (png_ptr, info_ptr);
png_get_IHDR (png_ptr, info_ptr, &width, &height,
&bit_depth, &color_type, NULL, NULL, NULL);
png_set_expand (png_ptr);
png_set_strip_16 (png_ptr);
png_set_packswap (png_ptr);
if (color_type == PNG_COLOR_TYPE_RGB ||
color_type == PNG_COLOR_TYPE_RGB_ALPHA)
{
png_set_rgb_to_gray (png_ptr, 1, -1, -1);
}
if (color_type & PNG_COLOR_MASK_ALPHA)
{
png_set_strip_alpha (png_ptr);
}
png_read_update_info (png_ptr, info_ptr);
png_get_IHDR (png_ptr, info_ptr, &width, &height,
&bit_depth, &color_type, NULL, NULL, NULL);
rowbytes = png_get_rowbytes (png_ptr, info_ptr);
step = ((color_type & PNG_COLOR_MASK_COLOR) ? 3 : 1) +
((color_type & PNG_COLOR_MASK_ALPHA) ? 1 : 0);
if (color_type & PNG_COLOR_MASK_PALETTE)
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("can't load B&W PNG file \"%s\", it is still paletted after filtering"),
png_file);
format_ok = 0;
}
max_width =
lw6sys_max (LW6MAP_MAX_BODY_WIDTH,
LW6MAP_MAX_TEXTURE_WIDTH);
max_height =
lw6sys_max (LW6MAP_MAX_BODY_HEIGHT,
LW6MAP_MAX_TEXTURE_HEIGHT);
if (width > max_width || height > max_height)
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("can't load B&W PNG file \"%s\", it is too big (size=%dx%d max=%dx%d)"),
png_file, width, height, max_width,
max_height);
format_ok = 0;
}
if (rowbytes != width * step || bit_depth > 8)
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("can't load B&W PNG file \"%s\", memory footprint is inconsistent, color_type=%d, rowbytes=%d, width=%d, step=%d, bit_depth=%d"),
png_file, color_type,
rowbytes, width, step, bit_depth);
format_ok = 0;
}
if (format_ok)
{
buf =
(unsigned char **) LW6SYS_MALLOC (height *
sizeof (unsigned
char *));
if (buf)
{
for (row = 0; row < height; ++row)
{
buf[row] =
(unsigned char *)
LW6SYS_MALLOC (rowbytes *
sizeof (unsigned char));
if (!buf[row])
{
memory_ok = 0;
}
}
}
else
{
memory_ok = 0;
}
if (memory_ok)
{
lw6sys_progress_update (progress, 0, 3, 1);
png_read_image (png_ptr, buf);
lw6sys_progress_update (progress, 0, 3, 2);
png_read_end (png_ptr, end_info);
image->w = width;
image->h = height;
image->data = buf;
image->step = step;
ret = 1;
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("unable to allocate memory for B&W PNG file"));
}
}
fclose (f);
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("couldn't create png end info struct"));
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("couldn't create png info struct"));
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("couldn't create png read struct"));
}
png_destroy_read_struct (&png_ptr, &info_ptr, &end_info);
if (!ret)
{
_lw6ldr_bw_clear (image);
}
lw6sys_progress_end (progress);
return ret;
}
|
|||||
| ↓ | test_path | 21 | 79 | 146 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/sys/sys-test.c |
static int
test_path ()
{
int ret = 1;
LW6SYS_TEST_FUNCTION_BEGIN;
{
char *path = NULL;
char *path2 = NULL;
int n = 0;
int relative = 0;
int cwd = 0;
lw6sys_list_t *list = NULL;
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("add/strip slash"));
path = lw6sys_path_add_slash (PATH_WITHOUT_SLASH);
if (path)
{
ret = ret && (strcmp (path, PATH_WITH_SLASH) == 0);
LW6SYS_FREE (path);
}
path = lw6sys_path_strip_slash (PATH_WITH_SLASH);
if (path)
{
ret = ret && (strcmp (path, PATH_WITHOUT_SLASH) == 0);
LW6SYS_FREE (path);
}
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("concat path"));
path = lw6sys_path_concat (PATH_WITH_SLASH, PATH_WITH_SLASH);
if (path)
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("concatenated path = \"%s\""),
path);
ret = ret && (strcmp (path, PATH_CONCAT) == 0);
LW6SYS_FREE (path);
}
relative = lw6sys_path_is_relative (PATH_RELATIVE);
if (relative)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("path \"%s\" is relative"), PATH_RELATIVE);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("path \"%s\" not considered relative"),
PATH_RELATIVE);
ret = 0;
}
cwd = lw6sys_path_is_cwd (TEST_PATH_CWD);
if (cwd)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("path \"%s\" is cwd"), TEST_PATH_CWD);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("path \"%s\" not considered being cwd"),
TEST_PATH_CWD);
ret = 0;
}
path = lw6sys_path_parent (PATH_CONCAT);
if (path)
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("parent path = \"%s\""), path);
ret = ret && (strcmp (path, PATH_CONCAT_PARENT) == 0);
LW6SYS_FREE (path);
}
path = lw6sys_path_unparent (PATH_RELATIVE);
if (path)
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("unparent path = \"%s\""), path);
ret = ret && (strcmp (path, PATH_RELATIVE_UNPARENT) == 0);
LW6SYS_FREE (path);
}
path = lw6sys_path_unparent_no_malloc (PATH_RELATIVE);
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("unparent path = \"%s\""), path);
ret = ret && (strcmp (path, PATH_RELATIVE_UNPARENT) == 0);
list = lw6sys_path_split (TEST_PATH_SPLIT);
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("splitting \"%s\""), TEST_PATH_SPLIT);
if (list)
{
lw6sys_list_map (list, path_split_func, NULL);
lw6sys_list_free (list);
}
path = lw6sys_get_home ();
if (path)
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("listing dir \"%s\""), path);
list =
lw6sys_dir_list (path, _dir_list_filter, _TEST_DIR_LIST_FUNC_DATA,
&n);
if (list)
{
lw6sys_list_map (list, _dir_list_print, NULL);
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("%d items found in \"%s\""),
n, path);
lw6sys_list_free (list);
}
path2 = lw6sys_env_concat (path, _TEST_PATH_LIST_OTHER);
if (path2)
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("listing path \"%s\""),
path2);
list =
lw6sys_path_list (path2, _dir_list_filter,
_TEST_DIR_LIST_FUNC_DATA, &n);
if (list)
{
lw6sys_list_map (list, _dir_list_print, NULL);
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("%d items found in \"%s\""), n, path2);
lw6sys_list_free (list);
}
LW6SYS_FREE (path2);
}
LW6SYS_FREE (path);
}
path =
lw6sys_find_in_dir_and_path (_FIND_IN_DIR_AND_PATH_DIR,
_FIND_IN_DIR_AND_PATH_PATH,
_FIND_IN_DIR_AND_PATH_FILE);
if (path)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_
("found \"%s\" with dir=\"%s\" path=\"%s\" file=\"%s\""),
path, _FIND_IN_DIR_AND_PATH_DIR,
_FIND_IN_DIR_AND_PATH_PATH, _FIND_IN_DIR_AND_PATH_FILE);
LW6SYS_FREE (path);
}
path = lw6sys_path_file_only (_TEST_PATH_FILE_ONLY);
if (path)
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("file only for \"%s\" is \"%s\""),
_TEST_PATH_FILE_ONLY, path);
LW6SYS_FREE (path);
}
}
LW6SYS_TEST_FUNCTION_END;
return ret;
}
|
|||||
| ↓ | _lw6dsp_thread_func | 21 | 78 | 189 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/dsp/dsp-thread.c |
void
_lw6dsp_thread_func (_lw6dsp_data_t * data)
{
int frames_increment = 1; // mustn't be 0
int frames_counter = 0;
int64_t nb_ticks = 0;
int64_t last_display_ticks = 0;
int64_t last_rounds_ticks = 0;
int64_t ticks = 0;
int64_t delta_ticks = 0;
int64_t cpu_ticks = 0;
int rounds;
int delta_rounds = 0;
int last_display_rounds = 0;
int do_skip = 0;
int delay_skip = 1;
int delay_cpu = 0;
int delay_real = 0;
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("display thread"));
lw6sys_mutex_lock (data->render_mutex);
#ifdef LW6_MAC_OS_X
data->macosx_vthread_handler = _lw6dsp_macosx_thread_init ();
#endif
if (!data->gfx_backend)
{
init (data);
}
lw6sys_mutex_unlock (data->render_mutex);
if (data->gfx_backend)
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("display loop"));
while (data->run)
{
ticks = lw6sys_get_timestamp ();
lw6sys_mutex_lock (data->render_mutex);
if (data->param.misc.target_fps > 0)
{
frames_increment =
LW6SYS_TICKS_PER_SEC / data->param.misc.target_fps;
delay_skip =
LW6SYS_TICKS_PER_SEC / (2 * data->param.misc.target_fps);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("can't handle target_fps of %d"),
data->param.misc.target_fps);
}
frames_increment = lw6sys_max (frames_increment, 1);
delay_skip = lw6sys_max (delay_skip, 1);
nb_ticks = ticks - data->start_ticks;
if (frames_counter < nb_ticks)
{
/*
* The following is more efficient than a plain +=
* it will avoid going too fast after a slowdown
*/
frames_counter =
lw6sys_max (frames_counter + frames_increment,
nb_ticks - frames_increment);
data->nb_frames++;
delta_ticks = ticks - last_display_ticks;
if (delta_ticks < 0)
{
last_display_ticks = ticks;
data->slow_fps = 0;
}
if (delta_ticks > 0)
{
data->instant_fps =
((float) LW6SYS_TICKS_PER_SEC) / delta_ticks;
data->average_fps =
(WEIGHT_INSTANT_FPS * delta_ticks * data->instant_fps +
WEIGHT_AVERAGE_FPS * ((float) LW6SYS_TICKS_PER_SEC) *
data->average_fps) / (WEIGHT_INSTANT_FPS * delta_ticks +
WEIGHT_AVERAGE_FPS *
((float) LW6SYS_TICKS_PER_SEC));
last_display_ticks = ticks;
data->slow_fps =
data->average_fps < (data->param.misc.target_fps / 2);
}
if (data->param.game_state && data->param.game_struct)
{
delta_ticks = ticks - last_rounds_ticks;
if (delta_ticks < 0)
{
last_rounds_ticks = ticks;
data->slow_mps = 0;
}
if (delta_ticks >
LW6SYS_TICKS_PER_SEC / MPS_REFRESH_PER_SEC)
{
rounds = data->rounds;
delta_rounds = rounds - last_display_rounds;
if (delta_rounds > 0)
{
data->mps =
((float)
(delta_rounds * LW6SYS_TICKS_PER_SEC *
data->param.game_struct->
rules.moves_per_round)) / delta_ticks;
last_display_rounds = rounds;
data->slow_mps =
(data->rounds >
data->param.game_struct->rules.rounds_per_sec)
&& (data->mps <
((data->param.game_struct->
rules.rounds_per_sec *
data->param.game_struct->
rules.moves_per_round) / 2));
}
last_rounds_ticks = ticks;
}
}
else
{
data->slow_mps = 0;
}
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("frame %d at ticks %" LW6SYS_PRINTF_LL "d"),
data->nb_frames, ticks);
loop (data);
do_skip = 0;
}
else
{
/*
* It's important not to sleep now but only
* after the mutex has been released so we
* just set a flag for later usage.
*/
do_skip = 1;
}
cpu_ticks = lw6sys_get_timestamp () - ticks;
delay_cpu = 0;
if (!do_skip)
{
data->last_frame_rendering_time = cpu_ticks;
if (data->param.misc.gfx_cpu_usage > 0.0f
&& data->param.misc.gfx_cpu_usage < 1.0f)
{
delay_cpu =
((float) cpu_ticks) * (1.0f -
data->param.misc.gfx_cpu_usage);
}
}
lw6sys_mutex_unlock (data->render_mutex);
if (!do_skip)
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("frame %d rendering took %d ms"),
(int) data->nb_frames, (int) cpu_ticks);
}
if (do_skip || (delay_cpu > 0))
{
delay_real =
lw6sys_min (LW6SYS_TICKS_PER_SEC,
lw6sys_max (1,
lw6sys_max (do_skip ? delay_skip : 0,
delay_cpu)));
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_
("sleeping %d ms (delay_skip=%d, delay_cpu=%d)"),
delay_real, delay_skip, delay_cpu);
lw6sys_delay (delay_real);
}
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("display thread can't initialise graphics"));
}
}
|
|||||
| ↓ | lw6map_weapon_key_to_index | 21 | 43 | 92 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/map/map-weapon.c |
int
lw6map_weapon_key_to_index (char *key)
{
int ret = LW6MAP_WEAPON_NONE;
if (!strcasecmp (key, LW6DEF_BERZERK))
{
ret = LW6MAP_WEAPON_BERZERK;
}
else if (!strcasecmp (key, LW6DEF_INVINCIBLE))
{
ret = LW6MAP_WEAPON_INVINCIBLE;
}
else if (!strcasecmp (key, LW6DEF_ESCAPE))
{
ret = LW6MAP_WEAPON_ESCAPE;
}
else if (!strcasecmp (key, LW6DEF_TURBO))
{
ret = LW6MAP_WEAPON_TURBO;
}
else if (!strcasecmp (key, LW6DEF_TELEPORT))
{
ret = LW6MAP_WEAPON_TELEPORT;
}
else if (!strcasecmp (key, LW6DEF_SCATTER))
{
ret = LW6MAP_WEAPON_SCATTER;
}
else if (!strcasecmp (key, LW6DEF_FIX))
{
ret = LW6MAP_WEAPON_FIX;
}
else if (!strcasecmp (key, LW6DEF_MIX))
{
ret = LW6MAP_WEAPON_MIX;
}
else if (!strcasecmp (key, LW6DEF_CONTROL))
{
ret = LW6MAP_WEAPON_CONTROL;
}
else if (!strcasecmp (key, LW6DEF_PERMUTATION))
{
ret = LW6MAP_WEAPON_PERMUTATION;
}
else if (!strcasecmp (key, LW6DEF_STEAL))
{
ret = LW6MAP_WEAPON_STEAL;
}
else if (!strcasecmp (key, LW6DEF_ATOMIC))
{
ret = LW6MAP_WEAPON_ATOMIC;
}
else if (!strcasecmp (key, LW6DEF_REVERSE))
{
ret = LW6MAP_WEAPON_REVERSE;
}
else if (!strcasecmp (key, LW6DEF_CRAZY))
{
ret = LW6MAP_WEAPON_CRAZY;
}
else if (!strcasecmp (key, LW6DEF_REWIND))
{
ret = LW6MAP_WEAPON_REWIND;
}
else if (!strcasecmp (key, LW6DEF_ATTRACT))
{
ret = LW6MAP_WEAPON_ATTRACT;
}
else if (!strcasecmp (key, LW6DEF_SHRINK))
{
ret = LW6MAP_WEAPON_SHRINK;
}
else if (!strcasecmp (key, LW6DEF_KAMIKAZE))
{
ret = LW6MAP_WEAPON_KAMIKAZE;
}
else if (!strcasecmp (key, LW6DEF_DISAPPEAR))
{
ret = LW6MAP_WEAPON_DISAPPEAR;
}
else if (!strcasecmp (key, LW6DEF_PLAGUE))
{
ret = LW6MAP_WEAPON_PLAGUE;
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING, _x_ ("weapon key %s isn't valid"), key);
}
return ret;
}
|
|||||
| ↓ | lw6gui_coords_fix_xy_float | 21 | 39 | 88 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/gui/gui-coord.c |
void
lw6gui_coords_fix_xy_float (float *x, float *y, int *x_flip, int *y_flip,
float w, float h, int x_polarity, int y_polarity)
{
/*
* The algorithm is copied/pasted from map code, only here it
* operates with floats, not integers.
*/
(*x_flip) = 1;
(*y_flip) = 1;
if ((*x) < 0.0f || (*y) < 0.0f || (*x) > w || (*y) > h)
{
if (x_polarity > 0)
{
while ((*x) > w)
{
(*x) -= w;
}
while ((*x) < 0)
{
(*x) += w;
}
}
if (y_polarity > 0)
{
while ((*y) > h)
{
(*y) -= h;
}
while ((*y) < 0)
{
(*y) += h;
}
}
if (x_polarity < 0)
{
while ((*x) > w)
{
(*x) -= w;
(*y) = h - 1 - (*y);
(*y_flip) = -(*y_flip);
}
while ((*x) < 0)
{
(*x) += w;
(*y) = h - 1 - (*y);
(*y_flip) = -(*y_flip);
}
}
if (y_polarity < 0)
{
while ((*y) > h)
{
(*x) = w - 1 - (*x);
(*y) -= h;
(*x_flip) = -(*x_flip);
}
while ((*y) < 0)
{
(*x) = w - 1 - (*x);
(*y) += h;
(*x_flip) = -(*x_flip);
}
}
/*
* Last, we check for absolute limits, this will also
* handle the 0 polarit(*y) case.
*/
if ((*x) < 0.0f)
{
(*x) = 0.0f;
}
if ((*x) > w)
{
(*x) = w;
}
if ((*y) < 0.0f)
{
(*y) = 0.0f;
}
if ((*y) > h)
{
(*y) = h;
}
}
}
|
|||||
| ↓ | lw6msg_word_first_x | 21 | 31 | 75 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/msg/msg-word.c |
int
lw6msg_word_first_x (lw6msg_word_t * word, char **next, char *msg)
{
int ret = 0;
int i = 0, j = 0;
int len = 0;
word->len = 0;
word->buf[0] = '\0';
if (next)
{
(*next) = NULL;
}
while (lw6sys_chr_is_space (msg[i]) || msg[i] == LW6MSG_URL_SEP)
{
i++;
}
j = i;
if (msg[i] == _QUOTE)
{
i++;
j++;
/*
* Note: (len=(j-i)<=...) must really be the first test else len is false
*/
while ((len = (j - i)) <= LW6MSG_MAX_WORD_SIZE && msg[j]
&& msg[j] != _QUOTE && !lw6sys_chr_is_eol (msg[j]))
{
j++;
}
}
else
{
/*
* Note: (len=(j-i)<=...) must really be the first test else len is false
*/
while ((len = (j - i)) <= LW6MSG_MAX_WORD_SIZE && msg[j]
&& !lw6sys_chr_is_space (msg[j]) && msg[j] != LW6MSG_URL_SEP
&& !lw6sys_chr_is_eol (msg[j]))
{
j++;
}
}
if (i < j || msg[j] == _QUOTE)
{
if (len <= LW6MSG_MAX_WORD_SIZE)
{
word->len = len;
memcpy (word->buf, msg + i, len);
word->buf[len] = '\0';
if (next)
{
if (msg[j] == _QUOTE)
{
j++;
}
while (lw6sys_chr_is_space (msg[j]) || msg[j] == LW6MSG_URL_SEP)
{
j++;
}
(*next) = msg + j;
}
ret = 1;
}
else
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("word too long"));
}
}
return ret;
}
|
|||||
| ↓ | prepare_update_param_bootstrap | 21 | 126 | 282 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/lw6-funcs.c |
static int
prepare_update_param_bootstrap (lw6dsp_param_t * c_param, SCM param)
{
int ret = 0;
SCM value;
lw6dsp_param_zero (c_param);
value =
scm_hash_ref (param, scm_from_locale_string (LW6DEF_DISPLAY_SPLASH),
SCM_BOOL_F);
SCM_ASSERT (SCM_BOOLP (value), value, SCM_ARGn, LW6DEF_DISPLAY_SPLASH);
if (SCM_NFALSEP (value))
{
c_param->misc.mask |= LW6GUI_DISPLAY_SPLASH;
}
value =
scm_hash_ref (param, scm_from_locale_string (LW6DEF_DISPLAY_BACKGROUND),
SCM_BOOL_F);
SCM_ASSERT (SCM_BOOLP (value), value, SCM_ARGn, LW6DEF_DISPLAY_BACKGROUND);
if (SCM_NFALSEP (value))
{
c_param->misc.mask |= LW6GUI_DISPLAY_BACKGROUND;
}
value =
scm_hash_ref (param, scm_from_locale_string (LW6DEF_DISPLAY_PREVIEW),
SCM_BOOL_F);
SCM_ASSERT (SCM_BOOLP (value), value, SCM_ARGn, LW6DEF_DISPLAY_PREVIEW);
if (SCM_NFALSEP (value))
{
c_param->misc.mask |= LW6GUI_DISPLAY_PREVIEW;
}
value =
scm_hash_ref (param, scm_from_locale_string (LW6DEF_DISPLAY_MAP),
SCM_BOOL_F);
SCM_ASSERT (SCM_BOOLP (value), value, SCM_ARGn, LW6DEF_DISPLAY_MAP);
if (SCM_NFALSEP (value))
{
c_param->misc.mask |= LW6GUI_DISPLAY_MAP;
}
value =
scm_hash_ref (param, scm_from_locale_string (LW6DEF_DISPLAY_FIGHTERS),
SCM_BOOL_F);
SCM_ASSERT (SCM_BOOLP (value), value, SCM_ARGn, LW6DEF_DISPLAY_FIGHTERS);
if (SCM_NFALSEP (value))
{
c_param->misc.mask |= LW6GUI_DISPLAY_FIGHTERS;
}
value =
scm_hash_ref (param, scm_from_locale_string (LW6DEF_DISPLAY_CURSORS),
SCM_BOOL_F);
SCM_ASSERT (SCM_BOOLP (value), value, SCM_ARGn, LW6DEF_DISPLAY_CURSORS);
if (SCM_NFALSEP (value))
{
c_param->misc.mask |= LW6GUI_DISPLAY_CURSORS;
}
value =
scm_hash_ref (param, scm_from_locale_string (LW6DEF_DISPLAY_HUD),
SCM_BOOL_F);
SCM_ASSERT (SCM_BOOLP (value), value, SCM_ARGn, LW6DEF_DISPLAY_HUD);
if (SCM_NFALSEP (value))
{
c_param->misc.mask |= LW6GUI_DISPLAY_HUD;
}
value =
scm_hash_ref (param, scm_from_locale_string (LW6DEF_DISPLAY_SCORE),
SCM_BOOL_F);
SCM_ASSERT (SCM_BOOLP (value), value, SCM_ARGn, LW6DEF_DISPLAY_SCORE);
if (SCM_NFALSEP (value))
{
c_param->misc.mask |= LW6GUI_DISPLAY_SCORE;
}
value =
scm_hash_ref (param, scm_from_locale_string (LW6DEF_DISPLAY_MENU),
SCM_BOOL_F);
SCM_ASSERT (SCM_BOOLP (value), value, SCM_ARGn, LW6DEF_DISPLAY_MENU);
if (SCM_NFALSEP (value))
{
c_param->misc.mask |= LW6GUI_DISPLAY_MENU;
}
value =
scm_hash_ref (param, scm_from_locale_string (LW6DEF_DISPLAY_META),
SCM_BOOL_F);
SCM_ASSERT (SCM_BOOLP (value), value, SCM_ARGn, LW6DEF_DISPLAY_META);
if (SCM_NFALSEP (value))
{
c_param->misc.mask |= LW6GUI_DISPLAY_META;
}
value =
scm_hash_ref (param, scm_from_locale_string (LW6DEF_DISPLAY_PROGRESS),
SCM_BOOL_F);
SCM_ASSERT (SCM_BOOLP (value), value, SCM_ARGn, LW6DEF_DISPLAY_PROGRESS);
if (SCM_NFALSEP (value))
{
c_param->misc.mask |= LW6GUI_DISPLAY_PROGRESS;
}
value =
scm_hash_ref (param, scm_from_locale_string (LW6DEF_DISPLAY_LOG),
SCM_BOOL_F);
SCM_ASSERT (SCM_BOOLP (value), value, SCM_ARGn, LW6DEF_DISPLAY_LOG);
if (SCM_NFALSEP (value))
{
c_param->misc.mask |= LW6GUI_DISPLAY_LOG;
}
value =
scm_hash_ref (param, scm_from_locale_string (LW6DEF_DISPLAY_FPS),
SCM_BOOL_F);
SCM_ASSERT (SCM_BOOLP (value), value, SCM_ARGn, LW6DEF_DISPLAY_FPS);
if (SCM_NFALSEP (value))
{
c_param->misc.mask |= LW6GUI_DISPLAY_FPS;
}
value =
scm_hash_ref (param, scm_from_locale_string (LW6DEF_DISPLAY_MPS),
SCM_BOOL_F);
SCM_ASSERT (SCM_BOOLP (value), value, SCM_ARGn, LW6DEF_DISPLAY_MPS);
if (SCM_NFALSEP (value))
{
c_param->misc.mask |= LW6GUI_DISPLAY_MPS;
}
value =
scm_hash_ref (param, scm_from_locale_string (LW6DEF_DISPLAY_URL),
SCM_BOOL_F);
SCM_ASSERT (SCM_BOOLP (value), value, SCM_ARGn, LW6DEF_DISPLAY_URL);
if (SCM_NFALSEP (value))
{
c_param->misc.mask |= LW6GUI_DISPLAY_URL;
}
value =
scm_hash_ref (param, scm_from_locale_string (LW6DEF_DISPLAY_MOUSE),
SCM_BOOL_F);
SCM_ASSERT (SCM_BOOLP (value), value, SCM_ARGn, LW6DEF_DISPLAY_MOUSE);
if (SCM_NFALSEP (value))
{
c_param->misc.mask |= LW6GUI_DISPLAY_MOUSE;
}
value =
scm_hash_ref (param, scm_from_locale_string (LW6DEF_DISPLAY_DEBUG_ZONES),
SCM_BOOL_F);
SCM_ASSERT (SCM_BOOLP (value), value, SCM_ARGn, LW6DEF_DISPLAY_DEBUG_ZONES);
if (SCM_NFALSEP (value))
{
c_param->misc.mask |= LW6GUI_DISPLAY_DEBUG_ZONES;
}
value =
scm_hash_ref (param,
scm_from_locale_string (LW6DEF_DISPLAY_DEBUG_GRADIENT),
SCM_BOOL_F);
SCM_ASSERT (SCM_BOOLP (value), value, SCM_ARGn,
LW6DEF_DISPLAY_DEBUG_GRADIENT);
if (SCM_NFALSEP (value))
{
c_param->misc.mask |= LW6GUI_DISPLAY_DEBUG_GRADIENT;
}
value =
scm_hash_ref (param, scm_from_locale_string (LW6DEF_TARGET_FPS),
SCM_BOOL_F);
SCM_ASSERT (scm_is_integer (value), value, SCM_ARGn, LW6DEF_TARGET_FPS);
c_param->misc.target_fps = scm_to_int (value);
value =
scm_hash_ref (param, scm_from_locale_string (LW6DEF_GFX_CPU_USAGE),
SCM_BOOL_F);
SCM_ASSERT (scm_is_number (value), value, SCM_ARGn, LW6DEF_GFX_CPU_USAGE);
c_param->misc.gfx_cpu_usage = scm_to_double (value);
value =
scm_hash_ref (param, scm_from_locale_string (LW6DEF_DIRTY_READ),
SCM_BOOL_F);
SCM_ASSERT (scm_is_integer (value), value, SCM_ARGn, LW6DEF_DIRTY_READ);
c_param->misc.dirty_read = scm_to_int (value);
value =
scm_hash_ref (param, scm_from_locale_string (LW6DEF_CAPTURE), SCM_BOOL_F);
SCM_ASSERT (SCM_BOOLP (value), value, SCM_ARGn, LW6DEF_CAPTURE);
c_param->misc.capture = SCM_NFALSEP (value);
value =
scm_hash_ref (param, scm_from_locale_string (LW6DEF_GFX_DEBUG),
SCM_BOOL_F);
SCM_ASSERT (SCM_BOOLP (value), value, SCM_ARGn, LW6DEF_GFX_DEBUG);
c_param->misc.gfx_debug = SCM_NFALSEP (value);
value =
scm_hash_ref (param, scm_from_locale_string (LW6DEF_DEBUG_TEAM_ID),
SCM_BOOL_F);
SCM_ASSERT (scm_is_integer (value), value, SCM_ARGn, LW6DEF_DEBUG_TEAM_ID);
c_param->misc.debug_team_id = scm_to_int (value);
value =
scm_hash_ref (param, scm_from_locale_string (LW6DEF_DEBUG_LAYER_ID),
SCM_BOOL_F);
SCM_ASSERT (scm_is_integer (value), value, SCM_ARGn, LW6DEF_DEBUG_LAYER_ID);
c_param->misc.debug_layer_id = scm_to_int (value);
value =
scm_hash_ref (param, scm_from_locale_string (LW6DEF_REPEAT_DELAY),
SCM_BOOL_F);
SCM_ASSERT (scm_is_integer (value), value, SCM_ARGn, LW6DEF_REPEAT_DELAY);
c_param->misc.repeat_settings.delay = scm_to_int (value);
value =
scm_hash_ref (param, scm_from_locale_string (LW6DEF_REPEAT_INTERVAL),
SCM_BOOL_F);
SCM_ASSERT (scm_is_integer (value), value, SCM_ARGn,
LW6DEF_REPEAT_INTERVAL);
c_param->misc.repeat_settings.interval = scm_to_int (value);
value =
scm_hash_ref (param, scm_from_locale_string (LW6DEF_DOUBLE_CLICK_DELAY),
SCM_BOOL_F);
SCM_ASSERT (scm_is_integer (value), value, SCM_ARGn,
LW6DEF_DOUBLE_CLICK_DELAY);
c_param->misc.repeat_settings.double_click_delay = scm_to_int (value);
value =
scm_hash_ref (param, scm_from_locale_string (LW6DEF_LOG_TIMEOUT),
SCM_BOOL_F);
SCM_ASSERT (scm_is_integer (value), value, SCM_ARGn, LW6DEF_LOG_TIMEOUT);
c_param->misc.log_timeout = scm_to_int (value);
/*
* Progress taken from C globals
*/
c_param->misc.progress = &(lw6_global.progress);
/*
* Video mode
*/
value =
scm_hash_ref (param, scm_from_locale_string (LW6DEF_WIDTH), SCM_BOOL_F);
SCM_ASSERT (scm_is_integer (value), value, SCM_ARGn, LW6DEF_WIDTH);
c_param->video_mode.width = scm_to_int (value);
value =
scm_hash_ref (param, scm_from_locale_string (LW6DEF_HEIGHT), SCM_BOOL_F);
SCM_ASSERT (scm_is_integer (value), value, SCM_ARGn, LW6DEF_HEIGHT);
c_param->video_mode.height = scm_to_int (value);
value =
scm_hash_ref (param, scm_from_locale_string (LW6DEF_FULLSCREEN),
SCM_BOOL_F);
SCM_ASSERT (SCM_BOOLP (value), value, SCM_ARGn, LW6DEF_FULLSCREEN);
c_param->video_mode.fullscreen = SCM_NFALSEP (value);
/*
* Pointers on complex data types
*/
value = scm_hash_ref (param, scm_from_locale_string ("look"), SCM_BOOL_F);
if (SCM_SMOB_PREDICATE (lw6_global.smob_types.look, value))
{
c_param->look = lw6_scm_to_look (value);
}
value = scm_hash_ref (param, scm_from_locale_string ("menu"), SCM_BOOL_F);
if (SCM_SMOB_PREDICATE (lw6_global.smob_types.menu, value))
{
c_param->menu = lw6_scm_to_menu (value);
}
ret = 1;
return ret;
}
|
|||||
| ↓ | lw6msg_envelope_generate | 21 | 54 | 132 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/msg/msg-envelope.c |
char *
lw6msg_envelope_generate (lw6msg_envelope_mode_t mode, char *version,
char *password_checksum,
u_int32_t physical_ticket_sig,
u_int32_t logical_ticket_sig,
u_int64_t physical_from_id,
u_int64_t physical_to_id, u_int64_t logical_from_id,
u_int64_t logical_to_id, char *msg)
{
char *ret = NULL;
char sep = '\0';
char *lw6 = NULL;
int need_base64 = 0;
char *body = NULL;
char *base64_str = NULL;
char *physical_ticket_sig_str = NULL;
char *logical_ticket_sig_str = NULL;
char *logical_from_id_str = NULL;
char *logical_to_id_str = NULL;
char *msg_undef = LW6MSG_UNDEF;
switch (mode)
{
case LW6MSG_ENVELOPE_MODE_TELNET:
sep = LW6MSG_TELNET_SEP;
lw6 = LW6MSG_LW6;
need_base64 = 0;
break;
case LW6MSG_ENVELOPE_MODE_URL:
sep = LW6MSG_URL_SEP;
lw6 = LW6MSG_LW6_LC;
need_base64 = 1;
break;
default:
lw6sys_log (LW6SYS_LOG_WARNING, _x_ ("unknown mode %d"), (int) mode);
sep = LW6MSG_TELNET_SEP;
lw6 = LW6MSG_LW6;
need_base64 = 0;
}
body = msg;
if (need_base64)
{
base64_str = lw6glb_base64_encode_str (msg);
if (base64_str)
{
body = base64_str;
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unable to base64 encode, sending as is"));
}
}
if (physical_ticket_sig == 0)
{
physical_ticket_sig_str = msg_undef;
}
else
{
physical_ticket_sig_str =
lw6sys_new_sprintf ("%08x", physical_ticket_sig);
}
if (logical_ticket_sig == 0 || logical_ticket_sig == physical_ticket_sig)
{
logical_ticket_sig_str = msg_undef;
}
else
{
logical_ticket_sig_str =
lw6sys_new_sprintf ("%08x", logical_ticket_sig);
}
if (physical_from_id == logical_from_id)
{
logical_from_id_str = msg_undef;
}
else
{
logical_from_id_str = lw6sys_id_ltoa (logical_from_id);
}
if (physical_to_id == logical_to_id)
{
logical_to_id_str = msg_undef;
}
else
{
logical_to_id_str = lw6sys_id_ltoa (logical_to_id);
}
if (logical_from_id_str && logical_to_id_str)
{
ret =
lw6sys_new_sprintf ("%s%c%s%c%s%c%s%c%s%c%" LW6SYS_PRINTF_LL "x%c%"
LW6SYS_PRINTF_LL "x%c%s%c%s%c%s", lw6, sep,
version, sep, password_checksum, sep,
physical_ticket_sig_str, sep,
logical_ticket_sig_str, sep, physical_from_id,
sep, physical_to_id, sep, logical_from_id_str,
sep, logical_to_id_str, sep, body);
}
if (base64_str)
{
LW6SYS_FREE (base64_str);
}
if (physical_ticket_sig_str && physical_ticket_sig_str != msg_undef)
{
LW6SYS_FREE (physical_ticket_sig_str);
}
if (logical_ticket_sig_str && logical_ticket_sig_str != msg_undef)
{
LW6SYS_FREE (logical_ticket_sig_str);
}
if (logical_from_id_str && logical_from_id_str != msg_undef)
{
LW6SYS_FREE (logical_from_id_str);
}
if (logical_to_id_str && logical_to_id_str != msg_undef)
{
LW6SYS_FREE (logical_to_id_str);
}
return ret;
}
|
|||||
| ↓ | _lw6ker_map_struct_sanity_check | 21 | 52 | 104 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/ker/ker-mapstruct.c |
int
_lw6ker_map_struct_sanity_check (_lw6ker_map_struct_t * map_struct)
{
int ret = 1;
int x, y, z, w, h, d;
int nb_places, nb_zones, nb_slots;
int zone_id;
int i, j;
int z1, z2;
w = map_struct->shape.w;
h = map_struct->shape.h;
d = map_struct->shape.d;
nb_places = map_struct->nb_places;
nb_zones = map_struct->nb_zones;
nb_slots = map_struct->nb_slots;
if (nb_places != w * h)
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("inconsistent nb_places=%d shape=%dx%d"),
nb_places, w, h);
ret = 0;
}
if (nb_slots != w * h * d)
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("inconsistent nb_slots=%d shape=%dx%dx%d"), nb_slots,
w, h, d);
ret = 0;
}
for (z = 0; z < d; z++)
{
for (y = 0; y < h; y++)
{
for (x = 0; x < w; x++)
{
zone_id = _lw6ker_map_struct_get_zone_id (map_struct, x, y, z);
if (zone_id == -1 || (zone_id >= 0 && zone_id < nb_zones))
{
if (zone_id >= 0)
{
z1 = map_struct->zones[zone_id].pos.z;
for (i = 0; i < LW6KER_NB_DIRS; ++i)
{
j = map_struct->zones[zone_id].link[i];
if (j == -1 || (j >= 0 && j < nb_zones))
{
if (j >= 0)
{
z2 = map_struct->zones[j].pos.z;
switch (i)
{
case LW6KER_DIR_UP:
if (!(z2 == z1 - 1 || z2 == d - 1))
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("bad UP link in %d,%d,%d z1=%d z2=%d"),
x, y, z, z1, z2);
ret = 0;
}
break;
case LW6KER_DIR_DOWN:
if (!(z2 == z1 + 1 || z2 == 0))
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("bad DOWN link in %d,%d,%d z1=%d z2=%d"),
x, y, z, z1, z2);
ret = 0;
}
break;
default:
// no check for other dirs
break;
}
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("bad link %d->%d in %d,%d,%d"),
i, j, x, y, z);
ret = 0;
}
}
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("bad zone id %d in %d,%d,%d"), zone_id, x,
y, z);
ret = 0;
}
}
}
}
return ret;
}
|
|||||
| ↓ | command_parse | 20 | 60 | 124 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/pil/pil-command.c |
static int
command_parse (lw6pil_command_t * command, char *command_text, int64_t seq_0)
{
int ret = 0;
char *pos;
char *seek;
char *tmp;
tmp = lw6sys_str_copy (command_text);
if (tmp)
{
command_normalize (tmp);
command->text = lw6sys_str_copy (tmp);
if (command->text)
{
seek = tmp;
pos = seek;
while (!is_spc (*seek))
{
seek++;
}
if (*seek)
{
(*seek) = '\0';
seek++;
command->seq = lw6sys_atoll (pos);
if (command->seq >= _LW6PIL_MIN_SEQ_0 && command->seq >= seq_0)
{
command->round = command->seq - seq_0;
pos = seek;
while (!is_spc (*seek))
{
seek++;
}
if (*seek)
{
(*seek) = '\0';
seek++;
command->node_id = lw6sys_id_atol (pos);
if (lw6sys_check_id_64 (command->node_id))
{
pos = seek;
while (!is_spc (*seek))
{
seek++;
}
if (*seek)
{
(*seek) = '\0';
seek++;
if (!strcmp (pos, LW6PIL_COMMAND_TEXT_ADD))
{
command->code = LW6PIL_COMMAND_CODE_ADD;
ret = command_add_parse (command, seek);
}
else
if (!strcmp (pos, LW6PIL_COMMAND_TEXT_REMOVE))
{
command->code = LW6PIL_COMMAND_CODE_REMOVE;
ret = command_remove_parse (command, seek);
}
else if (!strcmp (pos, LW6PIL_COMMAND_TEXT_SET))
{
command->code = LW6PIL_COMMAND_CODE_SET;
ret = command_set_parse (command, seek);
}
}
else
{
if (!strcmp (pos, LW6PIL_COMMAND_TEXT_NOP))
{
command->code = LW6PIL_COMMAND_CODE_NOP;
ret = 1;
}
else
if (!strcmp
(pos, LW6PIL_COMMAND_TEXT_REGISTER))
{
command->code =
LW6PIL_COMMAND_CODE_REGISTER;
ret = 1;
}
else
if (!strcmp
(pos, LW6PIL_COMMAND_TEXT_UNREGISTER))
{
command->code =
LW6PIL_COMMAND_CODE_UNREGISTER;
ret = 1;
}
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("bad id in command \"%s\""),
command_text);
}
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("bad seq in command \"%s\""),
command_text);
}
}
}
LW6SYS_FREE (tmp);
}
if (!ret)
{
if (command->text)
{
lw6sys_log (LW6SYS_LOG_WARNING, _x_ ("invalid command \"%s\""),
command->text);
LW6SYS_FREE (command->text);
}
memset (command, 0, sizeof (lw6pil_command_t));
}
return ret;
}
|
|||||
| ↓ | new_entry | 20 | 34 | 104 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/ldr/ldr-dir.c |
static lw6ldr_entry_t *
new_entry (char *absolute_path, char *relative_path, char *entry_path,
int player_exp)
{
lw6ldr_entry_t *entry = NULL;
lw6map_rules_t rules;
char *map_filename = NULL;
if (entry_path[0] != '.')
{
entry = (lw6ldr_entry_t *) LW6SYS_CALLOC (sizeof (lw6ldr_entry_t));
if (entry)
{
entry->metadata.vanilla_exp = LW6MAP_RULES_DEFAULT_EXP;
entry->absolute_path =
lw6sys_path_concat (absolute_path, entry_path);
if (entry->absolute_path)
{
if (lw6sys_dir_exists (entry->absolute_path))
{
lw6ldr_metadata_read (&(entry->metadata),
entry->absolute_path);
if (lw6sys_path_is_cwd (relative_path))
{
entry->relative_path = lw6sys_str_copy (entry_path);
}
else
{
entry->relative_path =
lw6sys_path_concat (relative_path, entry_path);
}
map_filename =
lw6sys_path_concat (entry->absolute_path,
_LW6LDR_FILE_MAP_PNG);
if (map_filename)
{
if (!lw6sys_file_exists (map_filename))
{
/*
* OK there's no map.png, let's assume there are
* some sub directories in it. At least, that's all
* we can do...
*/
entry->has_subdirs = 1;
}
else
{
lw6map_rules_defaults (&rules);
if (lw6ldr_rules_read
(&rules, entry->absolute_path))
{
entry->metadata.vanilla_exp = rules.exp;
}
}
LW6SYS_FREE (map_filename);
}
}
else
{
// not a directory, ignore
}
}
}
}
if (entry)
{
if (!entry->metadata.title || !entry->metadata.author
|| !entry->metadata.description || !entry->metadata.license
|| !entry->absolute_path || !entry->relative_path)
{
lw6ldr_free_entry (entry);
entry = NULL;
}
}
if (entry)
{
if ((entry->metadata.vanilla_exp > player_exp)
&& (entry->absolute_path != NULL))
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_
("not enough exp to load \"%s\", we load it but mark it as forbidden"),
entry->absolute_path);
entry->forbidden = 1;
}
}
if (entry)
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("name \"%s\" in \"%s\" is a valid entry"), entry_path,
absolute_path);
}
else
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("name \"%s\" in \"%s\" is not a valid entry"),
entry_path, absolute_path);
}
return entry;
}
|
|||||
| ↓ | lw6sys_escape_http_uri | 20 | 29 | 67 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/sys/sys-escape.c |
char *
lw6sys_escape_http_uri (char *src)
{
char *ret = NULL;
int len = 0;
int i = 0, j = 0;
unsigned char c;
char *hexa;
src = lw6sys_str_empty_if_null (src);
len = lw6sys_min (strlen (src), _ESCAPE_HTTP_URI_MAX_LEN);
ret = (char *) LW6SYS_CALLOC (_ESCAPE_HTTP_URI_LEN * len + 1);
if (ret)
{
for (i = 0, j = 0; i < len && j < _ESCAPE_HTTP_URI_MAX_LEN; ++i)
{
c = src[i];
if (c >= ' ')
{
if (c == '_' || c == '-' || c == '/' || c == '.' || c == ','
|| c == '#' || c == ':' || c == ';' || c == '?' || c == '&'
|| c == '%' || lw6sys_chr_is_alnum (c))
{
ret[j++] = c;
}
else
{
hexa = lw6sys_new_sprintf (_ESCAPE_HTTP_URI_MASK, (int) c);
if (hexa)
{
ret[j++] = '%';
if (strlen (hexa) == 2)
{
ret[j++] = hexa[0];
ret[j++] = hexa[1];
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("incorrect hexa conversion for %d \"%s\""),
(int) c, hexa);
}
LW6SYS_FREE (hexa);
}
}
}
else
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("invalid character %d in uri"), (int) c);
}
}
if (j <= _ESCAPE_HTTP_URI_LEN * len)
{
ret[j++] = '\0';
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("http uri escape string too long %d for %d/%d"), j,
_ESCAPE_HTTP_URI_LEN * len, len);
}
}
return ret;
}
|
|||||
| ↓ | lw6map_body_check_and_fix_holes | 19 | 96 | 150 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/map/map-body.c |
int
lw6map_body_check_and_fix_holes (lw6map_body_t * body, lw6map_rules_t * rules)
{
int ret = 0;
lw6map_body_t fixed_body;
int layer;
int x;
int y;
int z;
int tx;
int ty;
int tz;
memset (&fixed_body, 0, sizeof (lw6map_body_t));
fixed_body.shape = body->shape;
ret = 1;
for (layer = 0; layer < fixed_body.shape.d; ++layer)
{
fixed_body.layers[layer].shape = fixed_body.shape;
fixed_body.layers[layer].data =
(unsigned char *) LW6SYS_CALLOC (body->shape.w * body->shape.h *
sizeof (unsigned char));
if (!fixed_body.layers[layer].data)
{
ret = 0;
}
}
if (ret)
{
int found;
/*
* We first set one point, which will spread all over.
*/
ret = find_first_free_point (body, &x, &y, &z)
&& update_if_needed (&fixed_body, body, x, y, z);
found = ret ? 1 : 0;
while (found)
{
found = 0;
for (y = 0; y < body->shape.h; ++y)
{
for (x = 0; x < body->shape.w; ++x)
{
for (z = 0; z < body->shape.d; ++z)
{
if (lw6map_body_get (&fixed_body, x, y, z) > 0)
{
tx = x + 1;
ty = y;
lw6map_coords_fix_xy (rules, &body->shape, &tx,
&ty);
found +=
update_if_needed (&fixed_body, body, tx, ty, z);
tx = x + 1;
ty = y + 1;
lw6map_coords_fix_xy (rules, &body->shape, &tx,
&ty);
found +=
update_if_needed (&fixed_body, body, tx, ty, z);
tx = x;
ty = y + 1;
lw6map_coords_fix_xy (rules, &body->shape, &tx,
&ty);
found +=
update_if_needed (&fixed_body, body, tx, ty, z);
tx = x - 1;
ty = y + 1;
lw6map_coords_fix_xy (rules, &body->shape, &tx,
&ty);
found +=
update_if_needed (&fixed_body, body, tx, ty, z);
tz = z + 1;
lw6map_coords_fix_z (rules, &body->shape, &tz);
found +=
update_if_needed (&fixed_body, body, x, y, tz);
}
}
}
}
for (y = body->shape.h - 1; y >= 0; --y)
{
for (x = body->shape.w - 1; x >= 0; --x)
{
for (z = 0; z < body->shape.d; ++z)
{
if (lw6map_body_get (&fixed_body, x, y, z) > 0)
{
tx = x - 1;
ty = y;
lw6map_coords_fix_xy (rules, &body->shape, &tx,
&ty);
found +=
update_if_needed (&fixed_body, body, tx, ty, z);
tx = x - 1;
ty = y - 1;
lw6map_coords_fix_xy (rules, &body->shape, &tx,
&ty);
found +=
update_if_needed (&fixed_body, body, tx, ty, z);
tx = x;
ty = y - 1;
lw6map_coords_fix_xy (rules, &body->shape, &tx,
&ty);
found +=
update_if_needed (&fixed_body, body, tx, ty, z);
tx = x + 1;
ty = y - 1;
lw6map_coords_fix_xy (rules, &body->shape, &tx,
&ty);
found +=
update_if_needed (&fixed_body, body, tx, ty, z);
tz = z - 1;
lw6map_coords_fix_z (rules, &body->shape, &tz);
found +=
update_if_needed (&fixed_body, body, x, y, tz);
}
}
}
}
}
}
if (ret)
{
for (layer = 0; layer < fixed_body.shape.d; ++layer)
{
LW6SYS_FREE (body->layers[layer].data);
body->layers[layer].data = fixed_body.layers[layer].data;
}
}
else
{
for (layer = 0; layer < fixed_body.shape.d; ++layer)
{
if (fixed_body.layers[layer].data)
{
LW6SYS_FREE (fixed_body.layers[layer].data);
}
}
}
return ret;
}
|
|||||
| ↓ | lw6gui_test | 19 | 8 | 25 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/gui/gui-test.c |
int
lw6gui_test (int mode)
{
int ret = 0;
if (lw6sys_false ())
{
/*
* Just to make sure most functions are stuffed in the binary
*/
lw6sys_test (mode);
lw6hlp_test (mode);
lw6cfg_test (mode);
lw6map_test (mode);
}
ret = test_button () && test_coord () && test_input () && test_joystick ()
&& test_keyboard () && test_keypress ()
&& test_look () && test_menuitem () && test_menu () && test_mouse ()
&& test_power_of_two () && test_rect () && test_rect_array ()
&& test_smoother () && test_video_mode () && test_viewport ()
&& test_zone () && test_geometry ();
return ret;
}
|
|||||
| ↓ | _do_test_envelope | 19 | 77 | 250 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/msg/msg-test.c |
static int
_do_test_envelope (lw6msg_envelope_mode_t mode)
{
int ret = 1;
lw6nod_info_t *info = NULL;
char *msg = NULL;
char *envelope = NULL;
char *password_checksum = NULL;
char *received_msg = NULL;
u_int32_t received_physical_ticket_sig = 0;
u_int32_t received_logical_ticket_sig = 0;
u_int64_t received_physical_from_id = 0;
u_int64_t received_physical_to_id = 0;
u_int64_t received_logical_from_id = 0;
u_int64_t received_logical_to_id = 0;
char *received_physical_from_url = NULL;
info =
lw6nod_info_new (_TEST_PROGRAM, _TEST_VERSION, _TEST_CODENAME,
_TEST_STAMP, _TEST_ID, _TEST_URL, _TEST_TITLE,
_TEST_DESCRIPTION, _TEST_PASSWORD, _TEST_BENCH,
_TEST_OPEN_RELAY, _TEST_UPTIME,
_TEST_IDLE_SCREENSHOT_SIZE, _TEST_IDLE_SCREENSHOT_DATA);
if (info)
{
password_checksum =
lw6cnx_password_checksum (_TEST_URL, _TEST_PASSWORD);
if (password_checksum)
{
msg = lw6msg_cmd_generate_hello (info);
if (msg)
{
envelope =
lw6msg_envelope_generate (mode, lw6sys_build_get_version (),
password_checksum,
_TEST_ENVELOPE_PHYSICAL_TICKET_SIG,
_TEST_ENVELOPE_LOGICAL_TICKET_SIG,
_TEST_ENVELOPE_PHYSICAL_FROM_ID,
_TEST_ENVELOPE_PHYSICAL_TO_ID,
_TEST_ENVELOPE_LOGICAL_FROM_ID,
_TEST_ENVELOPE_LOGICAL_TO_ID, msg);
if (envelope)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("envelope generated \"%s\""), envelope);
if (lw6msg_envelope_analyse
(envelope, mode, _TEST_URL, _TEST_PASSWORD,
_TEST_ENVELOPE_PHYSICAL_FROM_ID,
_TEST_ENVELOPE_PHYSICAL_TO_ID, &received_msg,
&received_physical_ticket_sig,
&received_logical_ticket_sig,
&received_physical_from_id, &received_physical_to_id,
&received_logical_from_id, &received_logical_to_id,
&received_physical_from_url))
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("envelope \"%s\" parsed"), envelope);
if (received_msg)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("message is \"%s\""),
received_msg);
LW6SYS_FREE (received_msg);
}
if (received_physical_from_url)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("guessed \"from url\" \"%s\""),
received_physical_from_url);
LW6SYS_FREE (received_physical_from_url);
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unable to analyse envelope \"%s\""),
envelope);
ret = 0;
}
lw6sys_str_truncate (envelope, _TEST_ENVELOPE_TRUNCATE_LEN);
if (lw6msg_envelope_analyse
(envelope, mode, _TEST_URL, _TEST_PASSWORD,
_TEST_ENVELOPE_PHYSICAL_FROM_ID,
_TEST_ENVELOPE_PHYSICAL_TO_ID, &received_msg,
&received_physical_ticket_sig,
&received_logical_ticket_sig,
&received_physical_from_id, &received_physical_to_id,
&received_logical_from_id, &received_logical_to_id,
&received_physical_from_url))
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("truncated envelope \"%s\" parsed"),
envelope);
if (received_msg)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("message is \"%s\""),
received_msg);
LW6SYS_FREE (received_msg);
}
if (received_physical_from_url)
{
LW6SYS_FREE (received_physical_from_url);
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unable to analyse envelope \"%s\""),
envelope);
ret = 0;
}
if (lw6msg_envelope_analyse
(envelope, mode, _TEST_URL, _TEST_PASSWORD_KO,
_TEST_ENVELOPE_PHYSICAL_FROM_ID,
_TEST_ENVELOPE_PHYSICAL_TO_ID, &received_msg,
&received_physical_ticket_sig,
&received_logical_ticket_sig,
&received_physical_from_id, &received_physical_to_id,
&received_logical_from_id, &received_logical_to_id,
&received_physical_from_url))
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("message parsed even with wrong password"));
ret = 0;
}
else
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("password checking works"));
}
if (lw6msg_envelope_analyse
(envelope, mode, _TEST_URL, _TEST_PASSWORD,
_TEST_ENVELOPE_PHYSICAL_FROM_ID_KO,
_TEST_ENVELOPE_PHYSICAL_TO_ID, &received_msg,
&received_physical_ticket_sig,
&received_logical_ticket_sig,
&received_physical_from_id, &received_physical_to_id,
&received_logical_from_id, &received_logical_to_id,
&received_physical_from_url))
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("message parsed even with wrong \"from id\""));
ret = 0;
}
else
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("\"from id\" checking works"));
}
if (lw6msg_envelope_analyse
(envelope, mode, _TEST_URL, _TEST_PASSWORD,
_TEST_ENVELOPE_PHYSICAL_FROM_ID,
_TEST_ENVELOPE_PHYSICAL_TO_ID_KO, &received_msg,
&received_physical_ticket_sig,
&received_logical_ticket_sig,
&received_physical_from_id, &received_physical_to_id,
&received_logical_from_id, &received_logical_to_id,
&received_physical_from_url))
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("message parsed even with wrong \"to id\""));
ret = 0;
}
else
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("\"to id\" checking works"));
}
LW6SYS_FREE (envelope);
}
else
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("unable to generate envelope"));
}
LW6SYS_FREE (msg);
}
/*
* Testing with physical == logical, password=NULL,ticket=0
*/
msg = lw6msg_cmd_generate_hello (info);
if (msg)
{
envelope =
lw6msg_envelope_generate (mode, lw6sys_build_get_version (),
LW6MSG_UNDEF,
0,
0,
_TEST_ENVELOPE_PHYSICAL_FROM_ID,
_TEST_ENVELOPE_PHYSICAL_TO_ID,
_TEST_ENVELOPE_PHYSICAL_FROM_ID,
_TEST_ENVELOPE_PHYSICAL_TO_ID, msg);
if (envelope)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("envelope generated \"%s\""), envelope);
if (lw6msg_envelope_analyse
(envelope, mode, _TEST_URL, NULL,
_TEST_ENVELOPE_PHYSICAL_FROM_ID,
_TEST_ENVELOPE_PHYSICAL_TO_ID, &received_msg,
&received_physical_ticket_sig,
&received_logical_ticket_sig,
&received_physical_from_id, &received_physical_to_id,
&received_logical_from_id, &received_logical_to_id,
&received_physical_from_url))
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("envelope \"%s\" parsed"), envelope);
if (received_msg)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("message is \"%s\""),
received_msg);
LW6SYS_FREE (received_msg);
}
if (received_physical_from_url)
{
LW6SYS_FREE (received_physical_from_url);
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unable to analyse envelope \"%s\""),
envelope);
ret = 0;
}
LW6SYS_FREE (envelope);
}
else
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("unable to generate envelope"));
}
LW6SYS_FREE (msg);
}
LW6SYS_FREE (password_checksum);
}
lw6nod_info_free (info);
}
return ret;
}
|
|||||
| ↓ | _mod_brute_next_move | 19 | 55 | 121 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/bot/mod-brute/mod-brute-move.c |
int
_mod_brute_next_move (_mod_brute_context_t * brute_context, int *x, int *y,
lw6bot_data_t * data)
{
int ret = 0;
int score_now = 0;
int score_staying_here = 0;
int score_moving_there = 0;
int i, z;
lw6ker_cursor_t cursor;
lw6sys_whd_t shape = { 0, 0, 0 };
int found = 0;
lw6ker_fighter_t *fighter;
int nb_retries;
lw6ker_game_struct_get_shape (data->game_state->game_struct, &shape);
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("anticipating %d rounds"),
brute_context->nb_rounds_to_anticipate);
(*x) = shape.w / 2;
(*y) = shape.h / 2;
if (lw6ker_game_state_get_cursor
(data->game_state, &cursor, data->param.cursor_id))
{
(*x) = cursor.pos.x;
(*y) = cursor.pos.y;
if (lw6ker_game_state_sync
(brute_context->game_sandbox, data->game_state))
{
lw6ker_game_state_get_team_info (brute_context->game_sandbox,
cursor.team_color, NULL,
&score_now);
for (i = 0; i < brute_context->nb_rounds_to_anticipate; ++i)
{
lw6ker_game_state_do_round (brute_context->game_sandbox);
}
lw6ker_game_state_get_team_info (brute_context->game_sandbox,
cursor.team_color, NULL,
&score_staying_here);
if (lw6ker_game_state_sync
(brute_context->game_sandbox, data->game_state))
{
if (score_staying_here < score_now
|| (score_staying_here == score_now
&& !lw6sys_random (_MOD_BRUTE_STABILITY)))
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_
("loosing by staying here, trying any place..."));
cursor.pos.x = lw6sys_random (shape.w);
cursor.pos.y = lw6sys_random (shape.h);
}
else
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_
("same or better score staying here, still we try to find the other fighters"));
nb_retries =
lw6ker_percent (shape.w * shape.h,
_MOD_BRUTE_PERCENT_OF_SURFACE_FOR_RETRIES);
for (i = 0; i < nb_retries && !found; ++i)
{
cursor.pos.x = lw6sys_random (shape.w);
cursor.pos.y = lw6sys_random (shape.h);
for (z = 0; z < shape.d && !found; ++z)
{
fighter =
lw6ker_game_state_get_fighter_safe
(brute_context->game_sandbox, cursor.pos.x,
cursor.pos.y, z);
if (fighter
&& fighter->team_color != cursor.team_color)
{
found = 1;
}
}
}
}
lw6ker_game_state_set_cursor (brute_context->game_sandbox,
&cursor);
for (i = 0; i < brute_context->nb_rounds_to_anticipate; ++i)
{
lw6ker_game_state_do_round (brute_context->game_sandbox);
}
lw6ker_game_state_get_team_info (brute_context->game_sandbox,
cursor.team_color, NULL,
&score_moving_there);
/*
* The >= is important else we would stall and don't
* move when anticipation gives no feedback, and this is
* not aggressive enough.
*/
if (score_moving_there > score_staying_here
|| (score_moving_there == score_staying_here
&& (!lw6sys_random (_MOD_BRUTE_STABILITY))
&& (score_staying_here <= score_now)))
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_
("it's better to move there score_now=%d score_staying_here=%d score_moving_there=%d"),
score_now, score_staying_here,
score_moving_there);
(*x) = cursor.pos.x;
(*y) = cursor.pos.y;
}
else
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_
("it's better to stay here score_now=%d score_staying_here=%d score_moving_there=%d"),
score_now, score_staying_here,
score_moving_there);
}
ret = 1;
}
}
}
return ret;
}
|
|||||
| ↓ | _lw6pil_pilot_new | 19 | 52 | 124 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/pil/pil-pilot.c |
_lw6pil_pilot_t *
_lw6pil_pilot_new (lw6ker_game_state_t * game_state, int64_t seq_0,
int64_t timestamp, lw6sys_progress_t * progress)
{
_lw6pil_pilot_t *ret = NULL;
int ok = 0;
lw6sys_progress_t progress_level;
lw6sys_progress_t progress_game_struct;
lw6sys_progress_t progress_game_state;
lw6sys_progress_t progress_reference;
lw6sys_progress_t progress_draft;
lw6sys_progress_split5 (&progress_level, &progress_game_struct,
&progress_game_state, &progress_reference,
&progress_draft, progress);
ret = (_lw6pil_pilot_t *) LW6SYS_CALLOC (sizeof (_lw6pil_pilot_t));
if (ret)
{
ret->id = 0;
while (!ret->id)
{
ret->id = ++seq_id;
}
ret->last_commit_seq = -1L;
ret->last_sync_draft_from_reference_seq = -1L;
ret->seq_0 = seq_0;
_lw6pil_pilot_calibrate (ret, timestamp,
seq_0 +
lw6ker_game_state_get_rounds (game_state));
ret->replay =
lw6sys_list_new ((lw6sys_free_func_t) lw6pil_command_free);
if (ret->replay)
{
ret->verified_queue = lw6sys_list_new (lw6sys_free_callback);
if (ret->verified_queue)
{
ret->unverified_queue = lw6sys_list_new (lw6sys_free_callback);
if (ret->unverified_queue)
{
ret->level =
lw6map_dup (game_state->game_struct->level,
&progress_level);
if (ret->level)
{
ret->game_struct =
lw6ker_game_struct_dup (game_state->game_struct,
&progress_game_struct);
if (ret->game_struct)
{
if (ret->level)
{
ret->backup =
lw6ker_game_state_dup (game_state,
&progress_game_state);
if (ret->backup)
{
/*
* These are absolutely mandatory, the whole point
* in duping game_struct and level is to be 100% sure
* the spawned threads will never point on freed objects.
* So, we need to dup *and* manually tell "OK, now you're
* pointing on this new safe object, not the old one".
*/
lw6ker_game_struct_point_to
(ret->game_struct, ret->level);
lw6ker_game_state_point_to (ret->backup,
ret->
game_struct);
if (_lw6pil_worker_init
(&(ret->reference), ret->backup,
&progress_reference))
{
if (_lw6pil_worker_init
(&(ret->draft), ret->backup,
&progress_draft))
{
ok = 1;
}
}
else
{
_lw6pil_worker_quit (&(ret->reference));
}
}
}
}
}
}
}
}
if (!ok)
{
if (ret->backup)
{
lw6ker_game_state_free (ret->backup);
}
if (ret->game_struct)
{
lw6ker_game_struct_free (ret->game_struct);
}
if (ret->level)
{
lw6map_free (ret->level);
}
if (ret->unverified_queue)
{
lw6sys_list_free (ret->unverified_queue);
}
if (ret->verified_queue)
{
lw6sys_list_free (ret->verified_queue);
}
if (ret->replay)
{
lw6sys_list_free (ret->replay);
}
LW6SYS_FREE (ret);
ret = NULL;
}
}
return ret;
}
|
|||||
| ↓ | _lw6p2p_db_open | 19 | 49 | 138 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/p2p/p2p-db.c |
_lw6p2p_db_t *
_lw6p2p_db_open (int argc, char *argv[], char *name)
{
_lw6p2p_db_t *db = NULL;
int ret = 0;
char *user_dir = NULL;
char *p2p_dir = NULL;
char *data_dir = NULL;
db = (_lw6p2p_db_t *) LW6SYS_CALLOC (sizeof (_lw6p2p_db_t));
if (db)
{
db->id = 0;
while (!db->id)
{
db->id = ++seq_id;
}
db->t0 = lw6sys_get_timestamp ();
db->mutex = lw6sys_mutex_create ();
if (db->mutex)
{
data_dir = lw6sys_get_data_dir (argc, argv);
if (data_dir)
{
if (_lw6p2p_data_load (&(db->data), data_dir))
{
user_dir = lw6sys_get_user_dir (argc, argv);
if (user_dir)
{
if (!lw6sys_dir_exists (user_dir))
{
lw6sys_create_dir (user_dir);
}
p2p_dir = lw6sys_path_concat (user_dir, name);
if (p2p_dir)
{
if (!lw6sys_dir_exists (p2p_dir))
{
lw6sys_create_dir (p2p_dir);
}
db->db_filename =
lw6sys_path_concat (p2p_dir, _DB_FILENAME);
if (db->db_filename)
{
db->log_filename =
lw6sys_path_concat (p2p_dir, _LOG_FILENAME);
if (db->log_filename)
{
if (lw6sys_file_exists (db->log_filename))
{
unlink (db->log_filename);
}
lw6sys_log (LW6SYS_LOG_INFO,
_x_ ("opening db \"%s\""),
db->db_filename);
if (sqlite3_open
(db->db_filename,
&(db->handler)) == SQLITE_OK)
{
lw6sys_log (LW6SYS_LOG_INFO,
_x_ ("opened db \"%s\""),
db->db_filename);
if (_lw6p2p_db_create_database (db))
{
if (_lw6p2p_db_clean_database (db))
{
/*
* We clean just after we create, in
* fact create won't clean, only
* use CREATE IF NOT EXISTS so
* in case program left database
* in inconsistent state, we
* need to force its cleanup.
*/
ret = 1;
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("can't clean database \"%s\""),
db->db_filename);
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("can't create database \"%s\""),
db->db_filename);
}
}
else
{
if (db->handler)
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("can't open db \"%s\" errcode=%d errmsg=\"%s\""),
db->db_filename,
sqlite3_errcode
(db->handler),
sqlite3_errmsg
(db->handler));
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("can't open db \"%s\""));
}
}
}
}
LW6SYS_FREE (p2p_dir);
}
LW6SYS_FREE (user_dir);
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("can't load p2p data"));
}
LW6SYS_FREE (data_dir);
}
}
}
if ((!ret) && db)
{
_lw6p2p_db_close (db);
db = NULL;
}
return db;
}
|
|||||
| ↓ | _fix_library_path | 19 | 48 | 125 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/lw6-fix.c |
static void
_fix_library_path (int argc, char *argv[], char *library_path)
{
/*
* Fixes bug http://savannah.gnu.org/bugs/?30409
* We need to force DYLD_LIBRARY_PATH to a value
* that includes the distributed ./MacOS binary,
* indeed install_name_tool can change hardcoded
* references to libs but can't handle dynamic
* loading (at run-time, "dlopening") which is
* something SDL_image does, for instance. So we
* tell the library loader to look into CWD and
* run directory.
*/
char *old_library_path = NULL;
char *new_library_path = NULL;
char *run_dir = NULL;
char *cwd = NULL;
/*
* First, get old value and *append* program libdir to it
*/
old_library_path = lw6sys_getenv (library_path);
if (old_library_path && strlen (old_library_path) > 0)
{
new_library_path =
lw6sys_env_concat (old_library_path, lw6sys_build_get_libdir ());
}
else
{
new_library_path = lw6sys_str_copy (lw6sys_build_get_libdir ());
}
if (old_library_path)
{
LW6SYS_FREE (old_library_path);
old_library_path = NULL;
}
if (new_library_path)
{
old_library_path = new_library_path;
new_library_path = NULL;
}
/*
* Next, add default macports libdir *after* it
*/
if (old_library_path && strlen (old_library_path) > 0)
{
new_library_path =
lw6sys_env_concat (old_library_path, DEFAULT_MACPORTS_LIBDIR);
}
else
{
new_library_path = lw6sys_str_copy (DEFAULT_MACPORTS_LIBDIR);
}
if (old_library_path)
{
LW6SYS_FREE (old_library_path);
old_library_path = NULL;
}
if (new_library_path)
{
old_library_path = new_library_path;
new_library_path = NULL;
}
/*
* Next, add CWD before it
*/
cwd = lw6sys_get_cwd (argc, argv);
if (cwd)
{
if (old_library_path && strlen (old_library_path) > 0)
{
new_library_path = lw6sys_env_concat (cwd, old_library_path);
}
else
{
new_library_path = lw6sys_str_copy (cwd);
}
LW6SYS_FREE (cwd);
}
if (old_library_path)
{
LW6SYS_FREE (old_library_path);
old_library_path = NULL;
}
if (new_library_path)
{
old_library_path = new_library_path;
new_library_path = NULL;
}
/*
* Finally, put run_dir in front
*/
run_dir = lw6sys_get_run_dir (argc, argv);
if (run_dir)
{
if (old_library_path && strlen (old_library_path) > 0)
{
new_library_path = lw6sys_env_concat (run_dir, old_library_path);
}
else
{
new_library_path = lw6sys_str_copy (run_dir);
}
LW6SYS_FREE (run_dir);
}
if (old_library_path)
{
LW6SYS_FREE (old_library_path);
old_library_path = NULL;
}
if (new_library_path)
{
lw6sys_setenv (library_path, new_library_path);
LW6SYS_FREE (new_library_path);
new_library_path = NULL;
}
}
|
|||||
| ↓ | lw6net_recv_lines_udp | 19 | 47 | 94 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/net/net-line.c |
lw6sys_list_t *
lw6net_recv_lines_udp (int sock, char **incoming_ip, int *incoming_port)
{
lw6sys_list_t *ret = NULL;
char *line = NULL;
int line_size = 0;
int available_size;
int trail_size;
char *pos_lf;
char line_buf[LW6NET_MAX_LINE_SIZE + TRAIL_SIZE + 1];
char *seek = NULL;
int no_lf_at_very_end = 0;
if (sock >= 0)
{
ret = lw6sys_list_new (lw6sys_free_callback);
if (ret)
{
line_size =
lw6sys_min (_lw6net_global_context->const_data.line_size,
LW6NET_PPPOE_MTU - TRAIL_SIZE);
memset (line_buf, 0, line_size + TRAIL_SIZE + 1);
available_size =
lw6net_udp_peek (sock, line_buf, line_size + TRAIL_SIZE,
incoming_ip, incoming_port);
if (incoming_ip && (*incoming_ip))
{
LW6SYS_FREE (*incoming_ip);
}
if (available_size > 0)
{
seek = line_buf;
while (*seek)
{
pos_lf = strchr (seek, CHAR_LF);
if (pos_lf)
{
trail_size = (pos_lf > seek
&& pos_lf[-1] ==
CHAR_CR) ? TRAIL_SIZE : TRAIL_SIZE - 1;
pos_lf[1 - trail_size] = CHAR_0;
line = lw6sys_str_copy (seek);
if (line)
{
lw6sys_str_cleanup (line);
if (ret)
{
lw6sys_list_push_back (&ret, line);
}
}
seek = pos_lf + 1;
}
else
{
no_lf_at_very_end = 1;
seek += strlen (seek);
}
}
// remove data from queue
lw6net_udp_recv (sock, line_buf, available_size,
incoming_ip, incoming_port);
}
}
}
if (ret && lw6sys_list_is_empty (ret))
{
lw6sys_list_free (ret);
ret = NULL;
}
if (no_lf_at_very_end)
{
if (ret)
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_
("no lf at the very end of the sequence of lines, message was probably truncated"));
lw6sys_list_free (ret);
ret = NULL;
}
}
if (!ret)
{
if (incoming_ip && (*incoming_ip))
{
LW6SYS_FREE (*incoming_ip);
(*incoming_ip) = NULL;
}
}
return ret;
}
|
|||||
| ↓ | _lw6p2p_node_update_peer | 19 | 44 | 101 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/p2p/p2p-node.c |
int
_lw6p2p_node_update_peer (_lw6p2p_node_t * node, char *version,
char *codename, int stamp, char *id, char *url,
char *title, char *description, int has_password,
int bench, int open_relay, int creation_timestamp,
char *community_id, int round, char *level,
int required_bench, int nb_colors,
int max_nb_colors, int nb_cursors,
int max_nb_cursors, int nb_nodes, int max_nb_nodes,
char *ip, int port, int last_ping_timestamp,
int ping_delay_msec)
{
int ret = 1;
char *query = NULL;
char *escaped_version = NULL;
char *escaped_codename = NULL;
char *escaped_id = NULL;
char *escaped_url = NULL;
char *escaped_title = NULL;
char *escaped_description = NULL;
char *escaped_community_id = NULL;
char *escaped_level = NULL;
int available;
escaped_version = lw6sys_escape_sql_value (version);
escaped_codename = lw6sys_escape_sql_value (codename);
escaped_id = lw6sys_escape_sql_value (id);
escaped_url = lw6sys_escape_sql_value (url);
escaped_title = lw6sys_escape_sql_value (title);
escaped_description = lw6sys_escape_sql_value (description);
escaped_community_id = lw6sys_escape_sql_value (community_id);
escaped_level = lw6sys_escape_sql_value (level);
// todo : test for bench to set available the right way
available = ((!lw6sys_str_is_null_or_empty (id))
&&
(lw6sys_str_is_same
(version, node->node_info->const_info.version))
&& (required_bench <= node->node_info->const_info.bench)
&& (!lw6sys_str_is_same (id, node->node_id_str))
&& (!lw6sys_str_is_null_or_empty (level))
&& (nb_colors < max_nb_colors) && (nb_cursors < max_nb_cursors)
&& (nb_nodes < max_nb_nodes)) ? 1 : 0;
query = lw6sys_new_sprintf (_lw6p2p_db_get_query
(node->db,
_LW6P2P_UPDATE_NODE_SQL),
creation_timestamp, escaped_version,
escaped_codename, stamp,
escaped_id, escaped_title,
escaped_description, has_password,
bench, open_relay, escaped_community_id, round,
escaped_level, required_bench, nb_colors,
max_nb_colors, nb_cursors, max_nb_cursors,
nb_nodes, max_nb_nodes, ip, port,
last_ping_timestamp, ping_delay_msec, available,
escaped_url);
if (query)
{
if (_lw6p2p_db_lock (node->db))
{
ret = _lw6p2p_db_exec_ignore_data (node->db, query);
_lw6p2p_db_unlock (node->db);
}
LW6SYS_FREE (query);
}
if (escaped_version)
{
LW6SYS_FREE (escaped_version);
}
if (escaped_codename)
{
LW6SYS_FREE (escaped_codename);
}
if (escaped_id)
{
LW6SYS_FREE (escaped_id);
}
if (escaped_url)
{
LW6SYS_FREE (escaped_url);
}
if (escaped_title)
{
LW6SYS_FREE (escaped_title);
}
if (escaped_description)
{
LW6SYS_FREE (escaped_description);
}
if (escaped_community_id)
{
LW6SYS_FREE (escaped_community_id);
}
if (escaped_level)
{
LW6SYS_FREE (escaped_level);
}
return ret;
}
|
|||||
| ↓ | lw6msg_utils_parse_key_value_to_ptr | 19 | 42 | 74 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/msg/msg-utils.c |
int
lw6msg_utils_parse_key_value_to_ptr (char **key, char **value, char *line)
{
int ret = 0;
char *seek = NULL;
char *pos = NULL;
char *copy = NULL;
char seek_c = '\0';
int found_space = 0;
(*key) = NULL;
(*value) = NULL;
copy = lw6sys_str_copy (line);
if (copy)
{
seek = pos = copy;
while (lw6sys_chr_is_space (*seek))
{
seek++;
}
pos = seek;
while (lw6sys_chr_is_alnum (*seek) || ((*seek) == '_')
|| ((*seek) == '-'))
{
seek++;
}
seek_c = *seek;
(*seek) = '\0';
(*key) = lw6sys_str_copy (pos);
(*seek) = seek_c;
pos = seek;
while (lw6sys_chr_is_space (*seek) || ((*seek) == ':')
|| ((*seek) == '='))
{
found_space = 1;
seek++;
}
pos = seek;
while ((*seek) && !lw6sys_chr_is_eol (*seek))
{
seek++;
}
seek_c = *seek;
(*seek) = '\0';
(*value) = lw6sys_str_copy (pos);
if (*key && *value && strlen (*key) > 0)
{
if (found_space || strlen (*value) == 0)
{
ret = 1;
}
}
if (!ret)
{
if (*key)
{
LW6SYS_FREE (*key);
(*key) = NULL;
}
if (*value)
{
LW6SYS_FREE (*value);
(*value) = NULL;
}
}
LW6SYS_FREE (copy);
}
return ret;
}
|
|||||
| ↓ | lw6gui_button_update_repeat | 19 | 19 | 59 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/gui/gui-button.c |
void
lw6gui_button_update_repeat (lw6gui_button_t * button,
lw6gui_repeat_settings_t * repeat_settings,
int64_t timestamp)
{
if (button->is_pressed)
{
if ((repeat_settings->delay > 0 && button->last_repeat == 0
&& button->last_press <= timestamp - repeat_settings->delay)
|| (repeat_settings->interval > 0 && button->last_repeat != 0
&& button->last_repeat <=
timestamp - repeat_settings->interval))
{
(button->press_queue)++;
button->last_repeat = timestamp;
}
}
if (button->double_click_t1 > 0 && button->double_click_t2 > 0
&& button->double_click_t3 > 0
&& (button->double_click_t3 - button->double_click_t2) <
repeat_settings->double_click_delay
&& (button->double_click_t2 - button->double_click_t1) <
repeat_settings->double_click_delay)
{
/*
* We don't "++" here, no buffering of triple clicks
*/
button->triple_click_queue = 1;
button->double_click_t1 = 0;
button->double_click_t2 = 0;
button->double_click_t3 = 0;
}
if (button->double_click_t2 > 0 && button->double_click_t3 > 0
&& (button->double_click_t3 - button->double_click_t2) <
repeat_settings->double_click_delay
&& timestamp - button->double_click_t3 >=
repeat_settings->double_click_delay)
{
/*
* We don't "++" here, no buffering of double clicks
*/
button->double_click_queue = 1;
button->double_click_t1 = 0;
button->double_click_t2 = 0;
button->double_click_t3 = 0;
}
if (button->double_click_t3 > 0
&& timestamp - button->double_click_t3 >=
repeat_settings->double_click_delay)
{
/*
* We don't "++" here, no buffering of simple clicks
*/
button->simple_click_queue = 1;
button->double_click_t1 = 0;
button->double_click_t2 = 0;
button->double_click_t3 = 0;
}
}
|
|||||
| ↓ | write_xml | 26 | 60 | 130 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/cfg/cfg-xml.c |
static void
write_xml (FILE * f, char *type, char *key, char *value)
{
char *tmp = NULL;
char *pos = NULL;
char *guessed_type = NULL;
char *help_string = NULL;
char *hlp_about = NULL;
lw6hlp_type_t hlp_type = LW6HLP_TYPE_STR;
char *hlp_default_value = NULL;
int hlp_min_value = 0;
int hlp_max_value = 0;
if (lw6cfg_must_be_saved (key))
{
hlp_about =
lw6hlp_about (&hlp_type, &hlp_default_value, &hlp_min_value,
&hlp_max_value, key);
if (hlp_about)
{
if (hlp_default_value)
{
if (hlp_min_value != 0 || hlp_max_value != 0)
{
tmp =
lw6sys_new_sprintf
("\"%s\" (default=\"%s\", min=\"%d\", max=\"%d\"): %s",
key, hlp_default_value, hlp_min_value, hlp_max_value,
hlp_about);
}
else
{
tmp =
lw6sys_new_sprintf ("\"%s\" (default=\"%s\"): %s", key,
hlp_default_value, hlp_about);
}
}
else
{
if (hlp_min_value != 0 || hlp_max_value != 0)
{
tmp =
lw6sys_new_sprintf ("\"%s\" (min=\"%d\", max=\"%d\"): %s",
key, hlp_min_value, hlp_max_value,
hlp_about);
}
else
{
tmp = lw6sys_new_sprintf ("\"%s\": %s", key, hlp_about);
}
}
}
if (tmp)
{
help_string =
lw6sys_str_reformat (tmp, LW6SYS_REFORMAT_XML_PREFIX,
LW6SYS_REFORMAT_XML_NB_COLUMNS);
LW6SYS_FREE (tmp);
}
switch (hlp_type)
{
case LW6HLP_TYPE_STR:
guessed_type = LW6CFG_XML_STRING;
break;
case LW6HLP_TYPE_INT:
guessed_type = LW6CFG_XML_INT;
break;
case LW6HLP_TYPE_BOOL:
guessed_type = LW6CFG_XML_BOOL;
break;
case LW6HLP_TYPE_FLOAT:
guessed_type = LW6CFG_XML_FLOAT;
break;
case LW6HLP_TYPE_COLOR:
guessed_type = LW6CFG_XML_COLOR;
break;
default:
guessed_type = NULL; // LW6HLP_TYPE_VOID
}
if (guessed_type)
{
if (help_string)
{
fprintf (f, " %s", lw6sys_eol ());
}
if (type && strcasecmp (type, guessed_type))
{
lw6sys_log (LW6SYS_LOG_WARNING,
("inconsistency in XML entry type (\"%s\": \"%s!=%s\""),
key, type, guessed_type);
}
if (!type)
{
type = guessed_type;
}
fprintf (f, " <%s %s=\"%s\" %s=\"", type, LW6CFG_XML_KEY,
key, LW6CFG_XML_VALUE);
for (pos = value; (*pos) != '\0'; ++pos)
{
switch (*pos)
{
case '<':
fprintf (f, "<");
break;
case '>':
fprintf (f, ">");
break;
case '&':
fprintf (f, "&");
break;
case '"':
fprintf (f, """);
break;
case '\'':
fprintf (f, "'");
break;
default:
fprintf (f, "%c", (*pos));
}
}
fprintf (f, "\"/>%s", lw6sys_eol ());
}
if (help_string)
{
LW6SYS_FREE (help_string);
}
}
}
|
|||||
| ↓ | _display_gauges | 18 | 95 | 246 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/gfx/mod-gl/gl-hud/gl-floating/gl-floating-display.c |
static void
_display_gauges (mod_gl_utils_context_t * utils_context,
_mod_gl_hud_floating_context_t * floating_context)
{
float x1, x2, y1, y2, w, h;
float text_w, text_h, text_x1, text_x2, text_y1, text_y2, text_dw, text_dh;
float size_factor_screen =
sqrt (utils_context->video_mode.width * utils_context->video_mode.height);
float size_factor_score;
float size_factor_heartbeat;
float size_factor;
float ratio;
int weapon_per1000_left;
float charge;
float inner, outer;
int slices, loops;
int i;
float start;
float sweep1;
float sweep2;
int team_color;
if (floating_context->game_state && floating_context->gauges.gauge_frame
&& floating_context->gauges.gauge_frame->texture_h > 0)
{
x2 = utils_context->video_mode.width;
y2 = utils_context->video_mode.height;
start = floating_context->const_data.gauge_start;
for (i = floating_context->score_array.nb_scores - 1; i >= 0; --i)
{
ratio = floating_context->score_array.scores[i].fighters_ratio;
/*
* sqrt because what's important is what happens near zero
*/
ratio = sqrt (ratio);
team_color = floating_context->score_array.scores[i].team_color;
if (team_color >= 0)
{
weapon_per1000_left =
lw6ker_game_state_get_weapon_per1000_left
(floating_context->game_state, team_color);
if (weapon_per1000_left > 0)
{
charge = lw6sys_min (1000, weapon_per1000_left) / 1000.0f;
}
else
{
charge =
lw6sys_min (1000,
lw6ker_game_state_get_charge_per1000
(floating_context->game_state,
team_color)) / 1000.0f;
}
size_factor_score =
ratio * floating_context->const_data.gauge_max_size + (1.0f -
ratio)
* floating_context->const_data.gauge_min_size;
size_factor_heartbeat = (lw6ker_game_state_get_charge_per1000
(floating_context->game_state,
team_color) >=
1000) ?
lw6sys_math_heartbeat (mod_gl_utils_timer_get_uptime
(utils_context),
floating_context->const_data.
gauge_heartbeat_period,
floating_context->
const_data.gauge_relative_heartbeat_min,
floating_context->
const_data.gauge_relative_heartbeat_max)
: 1.0f;
size_factor =
size_factor_screen * size_factor_score *
size_factor_heartbeat;
w = size_factor;
h = size_factor;
x1 = x2 - w;
y1 = y2 - h;
slices = floating_context->const_data.gauge_slices;
loops = floating_context->const_data.gauge_loops;
sweep1 = charge * floating_context->const_data.gauge_sweep;
sweep2 = floating_context->const_data.gauge_sweep - sweep1;
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable (GL_BLEND);
glMatrixMode (GL_MODELVIEW);
glPushMatrix ();
glLoadIdentity ();
glTranslatef ((x1 + x2) / 2.0f, (y1 + y2) / 2.0f, 0.0f);
gluQuadricTexture (floating_context->gauges.disk, GL_TRUE);
inner =
size_factor *
floating_context->const_data.gauge_relative_bg_inner;
outer =
size_factor *
floating_context->const_data.gauge_relative_bg_outer;
if (floating_context->gauges.gauge_frame)
{
mod_gl_utils_bitmap_colorize (utils_context,
floating_context->gauges.
gauge_frame,
floating_context->look->style.
colorize,
&(floating_context->look->
style.color_set.
hud_color_frame));
mod_gl_utils_bitmap_bind (utils_context,
floating_context->gauges.
gauge_frame);
gluDisk (floating_context->gauges.disk, inner, outer,
slices, loops);
}
glDisable (GL_BLEND);
inner =
size_factor *
floating_context->const_data.gauge_relative_fg_inner;
outer =
size_factor *
floating_context->const_data.gauge_relative_fg_outer;
if (utils_context->textures_1x1.team_colors[team_color])
{
mod_gl_utils_bitmap_bind (utils_context,
utils_context->
textures_1x1.team_colors
[team_color]);
gluPartialDisk (floating_context->gauges.disk, inner, outer,
slices, loops, start, sweep1);
}
if (utils_context->textures_1x1.team_color_dead)
{
mod_gl_utils_bitmap_bind (utils_context,
utils_context->
textures_1x1.team_color_dead);
gluPartialDisk (floating_context->gauges.disk, inner, outer,
slices, loops, start + sweep1, sweep2);
}
glMatrixMode (GL_MODELVIEW);
glPopMatrix ();
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable (GL_BLEND);
text_h =
size_factor *
floating_context->const_data.gauge_relative_text_size;
text_dw = size_factor *
floating_context->const_data.gauge_relative_text_dw;
text_dh = size_factor *
floating_context->const_data.gauge_relative_text_dh;
if (floating_context->game_state->game_struct->
rules.respawn_team)
{
if (floating_context->gauges.percent_texts[i]
&& floating_context->gauges.
percent_texts[i]->texture_h > 0)
{
text_w =
text_h *
((float) floating_context->gauges.percent_texts[i]->
texture_w) /
((float) floating_context->gauges.
percent_texts[i]->texture_h);
text_x1 = (x1 + x2 - text_w) / 2.0f;
text_y1 =
(y1 + y2) / 2.0f +
size_factor *
floating_context->
const_data.gauge_relative_percent_y1;
text_x2 = text_x1 + text_w;
text_y2 = text_y1 + text_h;
mod_gl_utils_shaded_text_display (utils_context,
floating_context->
gauges.
percent_texts[i],
text_x1, text_y1,
text_x2, text_y2,
text_dw, text_dh);
}
if (floating_context->gauges.frags_texts[i]
&& floating_context->gauges.frags_texts[i]->texture_h >
0)
{
text_w =
text_h *
((float) floating_context->gauges.frags_texts[i]->
texture_w) /
((float) floating_context->gauges.
frags_texts[i]->texture_h);
text_x1 = (x1 + x2 - text_w) / 2.0f;
text_y1 =
(y1 + y2) / 2.0f +
size_factor *
floating_context->const_data.gauge_relative_frags_y1;
text_x2 = text_x1 + text_w;
text_y2 = text_y1 + text_h;
mod_gl_utils_shaded_text_display (utils_context,
floating_context->
gauges.frags_texts[i],
text_x1, text_y1,
text_x2, text_y2,
text_dw, text_dh);
}
}
else
{
if (floating_context->gauges.percent_texts[i]
&& floating_context->gauges.
percent_texts[i]->texture_h > 0)
{
text_w =
text_h *
((float) floating_context->gauges.percent_texts[i]->
texture_w) /
((float) floating_context->gauges.
percent_texts[i]->texture_h);
text_x1 = (x1 + x2 - text_w) / 2.0f;
text_y1 =
(y1 + y2) / 2.0f +
size_factor *
floating_context->
const_data.gauge_relative_percent_only_y1;
text_x2 = text_x1 + text_w;
text_y2 = text_y1 + text_h;
mod_gl_utils_shaded_text_display (utils_context,
floating_context->
gauges.
percent_texts[i],
text_x1, text_y1,
text_x2, text_y2,
text_dw, text_dh);
}
}
x2 = x1;
}
}
}
}
|
|||||
| ↓ | test_pilot | 18 | 85 | 216 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/pil/pil-test.c |
static int
test_pilot ()
{
int ret = 0;
LW6SYS_TEST_FUNCTION_BEGIN;
{
lw6map_level_t *level = NULL;
lw6ker_game_struct_t *game_struct = NULL;
lw6ker_game_state_t *game_state = NULL;
lw6pil_pilot_t *pilot = NULL;
char *repr = NULL;
int i;
u_int32_t checksum = 0;
level =
lw6map_builtin_custom (TEST_MAP_WIDTH, TEST_MAP_HEIGHT,
TEST_MAP_NB_LAYERS, TEST_MAP_NOISE_PERCENT);
if (level)
{
/*
* We do the test with spread_thread switched on, this
* is the most complicated and error-prone setting.
*/
level->param.rules.spread_thread = 1;
game_struct = lw6ker_game_struct_new (level, NULL);
if (game_struct)
{
game_state = lw6ker_game_state_new (game_struct, NULL);
if (game_state)
{
pilot =
lw6pil_pilot_new (game_state, _LW6PIL_MIN_SEQ_0, 0, NULL);
if (pilot)
{
repr = lw6pil_pilot_repr (pilot);
if (repr)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("pilot \"%s\" start"), repr);
for (i = 0; test_commands[i]; i += 2)
{
if (i > 1 && test_commands[i - 1])
{
lw6pil_pilot_send_command (pilot,
test_commands[i -
1],
1);
}
lw6pil_pilot_send_command (pilot,
test_commands[i], 1);
if (test_commands[i + 1])
{
lw6pil_pilot_send_command (pilot,
test_commands[i +
1],
0);
if (test_commands[i + 2])
{
lw6pil_pilot_send_command (pilot,
test_commands[i
+
2],
0);
lw6pil_pilot_local_command (pilot,
test_commands
[i + 2]);
}
}
lw6pil_pilot_commit (pilot);
lw6sys_sleep (TEST_CYCLE);
if (i == TEST_SYNC_COMMAND_I)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("can_sync: %d"),
lw6pil_pilot_can_sync (game_state,
pilot));
lw6pil_pilot_sync_from_reference (game_state,
pilot);
print_game_state (game_state,
_x_ ("reference"));
lw6pil_pilot_sync_from_backup (game_state,
pilot);
print_game_state (game_state,
_x_ ("backup 1"));
lw6pil_pilot_make_backup (pilot);
lw6pil_pilot_sync_from_backup (game_state,
pilot);
while (lw6ker_game_state_get_rounds
(game_state) < TEST_BACKUP_ROUND)
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("waiting for backup at round %d, is your computer slow or what?"),
TEST_BACKUP_ROUND);
lw6sys_sleep (TEST_CYCLE);
lw6pil_pilot_sync_from_backup (game_state,
pilot);
}
print_game_state (game_state,
_x_ ("backup 2"));
if (lw6ker_game_state_get_rounds (game_state)
== TEST_BACKUP_ROUND)
{
checksum =
lw6ker_game_state_checksum (game_state);
}
print_game_state (lw6pil_pilot_dirty_read
(pilot),
_x_ ("dirty read"));
}
else
{
lw6pil_pilot_sync_from_draft (game_state,
pilot, i % 2);
print_game_state (game_state, _x_ ("draft"));
}
}
/*
* We free things now on purpose, just to check
* pilot continues to work when objects used
* to build it have disappeared, the "sleep" after
* deletion is usefull too.
*/
lw6ker_game_struct_free (game_struct);
game_struct = NULL;
lw6map_free (level);
level = NULL;
lw6ker_game_state_free (game_state);
game_state = NULL;
lw6sys_sleep (TEST_CYCLE);
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("next_seq for ticks %"
LW6SYS_PRINTF_LL "d is %"
LW6SYS_PRINTF_LL "d"),
(int64_t) TEST_CALIBRATE_TICKS1,
(int64_t)
lw6pil_pilot_get_next_seq (pilot,
TEST_CALIBRATE_TICKS1));
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("next_seq for ticks %"
LW6SYS_PRINTF_LL "d is %"
LW6SYS_PRINTF_LL "d"),
(int64_t) TEST_CALIBRATE_TICKS2,
(int64_t)
lw6pil_pilot_get_next_seq (pilot,
TEST_CALIBRATE_TICKS2));
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("last_commit_seq=%" LW6SYS_PRINTF_LL
"d"),
lw6pil_pilot_get_last_commit_seq (pilot));
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("reference_current_seq=%"
LW6SYS_PRINTF_LL "d"),
lw6pil_pilot_get_reference_current_seq
(pilot));
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("reference_target_seq=%"
LW6SYS_PRINTF_LL "d"),
lw6pil_pilot_get_reference_target_seq
(pilot));
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("max_seq=%" LW6SYS_PRINTF_LL "d"),
lw6pil_pilot_get_max_seq (pilot));
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("pilot \"%s\" stop"), repr);
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("is_over=%d"),
lw6pil_pilot_is_over (pilot));
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("winner=%d"),
lw6pil_pilot_get_winner (pilot));
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("looser=%d"),
lw6pil_pilot_get_looser (pilot));
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_
("checksum at round %d is %x and should be %x"),
TEST_BACKUP_ROUND, checksum,
TEST_BACKUP_CHECKSUM);
if (checksum == TEST_BACKUP_CHECKSUM)
{
ret = 1;
}
LW6SYS_FREE (repr);
}
lw6pil_pilot_free (pilot);
}
if (game_state)
{
lw6ker_game_state_free (game_state);
game_state = NULL;
}
}
if (game_struct)
{
lw6ker_game_struct_free (game_struct);
game_struct = NULL;
}
}
if (level)
{
lw6map_free (level);
level = NULL;
}
}
}
LW6SYS_TEST_FUNCTION_END;
return ret;
}
|
|||||
| ↓ | _lw6ldr_rgba_read_png | 18 | 78 | 181 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/ldr/ldr-rgba.c |
int
_lw6ldr_rgba_read_png (_lw6ldr_image_rgba_t * image, char *png_file,
lw6sys_progress_t * progress)
{
png_structp png_ptr = NULL;
png_infop info_ptr = NULL;
png_infop end_info = NULL;
/*
* no need to use end_info for we use the high level interface
* with png_read_png.
*/
int ret = 0;
FILE *f = NULL;
lw6sys_progress_begin (progress);
png_ptr = png_create_read_struct (PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
if (png_ptr)
{
info_ptr = png_create_info_struct (png_ptr);
if (info_ptr)
{
end_info = png_create_info_struct (png_ptr);
if (end_info)
{
f = fopen (png_file, "rb");
if (f)
{
png_uint_32 width;
png_uint_32 height;
png_uint_32 rowbytes;
int max_width;
int max_height;
int bit_depth;
int color_type;
unsigned char **buf = NULL;
int row;
int memory_ok = 1;
int format_ok = 1;
png_init_io (png_ptr, f);
png_read_info (png_ptr, info_ptr);
png_get_IHDR (png_ptr, info_ptr, &width, &height,
&bit_depth, &color_type, NULL, NULL, NULL);
png_set_expand (png_ptr);
png_set_strip_16 (png_ptr);
png_set_packswap (png_ptr);
if (!(color_type & PNG_COLOR_MASK_COLOR))
{
png_set_gray_to_rgb (png_ptr);
}
if (!(color_type & PNG_COLOR_MASK_ALPHA))
{
png_set_filler (png_ptr, 255, PNG_FILLER_AFTER);
}
png_read_update_info (png_ptr, info_ptr);
png_get_IHDR (png_ptr, info_ptr, &width, &height,
&bit_depth, &color_type, NULL, NULL, NULL);
rowbytes = png_get_rowbytes (png_ptr, info_ptr);
if (color_type & PNG_COLOR_MASK_PALETTE)
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("can't load RGBA PNG file \"%s\", it is still paletted after filtering"),
png_file);
format_ok = 0;
}
max_width =
lw6sys_max (LW6MAP_MAX_BODY_WIDTH,
LW6MAP_MAX_TEXTURE_WIDTH);
max_height =
lw6sys_max (LW6MAP_MAX_BODY_HEIGHT,
LW6MAP_MAX_TEXTURE_HEIGHT);
if (width > max_width || height > max_height)
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("can't load RGBA PNG file \"%s\", it is too big (size=%dx%d max=%dx%d)"),
png_file, width, height, max_width,
max_height);
format_ok = 0;
}
if (rowbytes != width * 4 || bit_depth > 8)
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("can't load RGBA PNG file \"%s\", memory footprint is inconsistent, color_type=%d, rowbytes=%d, width=%d, step=%d, bit_depth=%d"),
png_file, color_type,
rowbytes, width, 4, bit_depth);
format_ok = 0;
}
if (format_ok)
{
buf =
(unsigned char **) LW6SYS_MALLOC (height *
sizeof (unsigned
char *));
if (buf)
{
for (row = 0; row < height; ++row)
{
buf[row] =
(unsigned char *)
LW6SYS_MALLOC (rowbytes *
sizeof (unsigned char));
if (!buf[row])
{
memory_ok = 0;
}
}
}
else
{
memory_ok = 0;
}
if (memory_ok)
{
lw6sys_progress_update (progress, 0, 3, 1);
png_read_image (png_ptr, buf);
lw6sys_progress_update (progress, 0, 3, 2);
png_read_end (png_ptr, end_info);
image->w = width;
image->h = height;
image->data = buf;
ret = 1;
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("unable to allocate memory for RGBA PNG file"));
}
}
fclose (f);
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("couldn't create png end info struct"));
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("couldn't create png info struct"));
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("couldn't create png read struct"));
}
png_destroy_read_struct (&png_ptr, &info_ptr, &end_info);
if (!ret)
{
_lw6ldr_rgba_clear (image);
}
lw6sys_progress_end (progress);
return ret;
}
|
|||||
| ↓ | lw6sys_str_reformat | 18 | 52 | 93 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/sys/sys-str.c |
char *
lw6sys_str_reformat (const char *str, const char *prefix, int nb_columns)
{
char *ret = NULL;
char *str_copy = NULL;
char *line_start = NULL;
char *pos = NULL;
int i = 0;
int space_i = 0;
nb_columns = lw6sys_max (nb_columns, 1);
str_copy = lw6sys_str_copy (str);
if (str_copy)
{
ret = lw6sys_str_copy ("");
line_start = str_copy;
i = 0;
pos = str_copy;
while (pos[0] && ret)
{
if (lw6sys_chr_is_eol (pos[0]))
{
while (lw6sys_chr_is_eol (pos[1]))
{
pos++;
}
pos[0] = '\0';
reformat_newline (&ret, line_start, prefix);
line_start = pos + 1;
i = 0;
pos = line_start;
}
else if (i >= nb_columns)
{
space_i = 0;
while (i > 0)
{
if (lw6sys_chr_is_space (line_start[i]))
{
space_i = i;
break;
}
i--;
}
if (!space_i)
{
i = 1;
while (line_start[i] && !space_i)
{
if (lw6sys_chr_is_eol (line_start[i])
|| lw6sys_chr_is_space (line_start[i]))
{
space_i = i;
break;
}
i++;
}
if (!space_i)
{
space_i = i;
}
}
if (space_i)
{
line_start[space_i] = '\0';
reformat_newline (&ret, line_start, prefix);
line_start += (space_i + 1);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING, _x_ ("reformat problem"));
line_start += i;
}
i = 0;
pos = line_start;
}
else
{
i++;
pos++;
}
}
if (ret && line_start)
{
reformat_newline (&ret, line_start, prefix);
}
LW6SYS_FREE (str_copy);
}
return ret;
}
|
|||||
| ↓ | _lw6ker_map_state_apply_cursors | 18 | 47 | 135 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/ker/ker-mapstate.c |
void
_lw6ker_map_state_apply_cursors (_lw6ker_map_state_t * map_state,
lw6map_rules_t * rules, u_int32_t team_mask)
{
int32_t i, team_color;
int32_t zone_id = -1;
int32_t z;
int32_t max_pot[LW6MAP_MAX_NB_TEAMS];
int32_t round_delta[LW6MAP_MAX_NB_TEAMS];
/*
* Wizardry to determine a new cursor_ref_pot. In most cases
* it will end with max_pot being the old cursor_ref_pot+1
* and delta being 1. But it's there for special cases, mostly
* at game startup and when one fiddles arround with cursors
* pot_offset fields..
*/
for (i = 0; i < LW6MAP_MAX_NB_TEAMS; ++i)
{
if (lw6ker_team_mask_is_concerned (i, team_mask))
{
max_pot[i] = map_state->teams[i].cursor_ref_pot;
round_delta[i] = rules->round_delta;
}
}
for (i = 0; i < LW6MAP_MAX_NB_CURSORS; ++i)
{
if (map_state->cursor_array.cursors[i].enabled)
{
team_color = map_state->cursor_array.cursors[i].team_color;
if (lw6ker_team_mask_is_concerned (team_color, team_mask))
{
{
_lw6ker_cursor_update_apply_pos (&
(map_state->cursor_array.
cursors[i]),
map_state->map_struct);
for (z = 0, zone_id = -1;
z < map_state->shape.d && zone_id < 0; ++z)
{
zone_id =
_lw6ker_map_struct_get_zone_id (map_state->map_struct,
map_state->cursor_array.
cursors[i].apply_pos.x,
map_state->cursor_array.
cursors[i].apply_pos.y,
z);
}
if (zone_id >= 0)
{
max_pot[team_color] =
lw6sys_max (max_pot[team_color],
map_state->teams[team_color].
gradient[zone_id].potential);
round_delta[team_color] =
lw6sys_max (round_delta[team_color],
map_state->
teams[team_color].cursor_ref_pot +
map_state->cursor_array.
cursors[i].pot_offset -
map_state->teams[team_color].
gradient[zone_id].potential);
round_delta[team_color] =
lw6sys_min (round_delta[team_color],
rules->max_round_delta);
}
}
}
}
}
for (i = 0; i < LW6MAP_MAX_NB_TEAMS; ++i)
{
if (lw6ker_team_mask_is_concerned (i, team_mask))
{
/*
* Following line is essential, it ensures that cursor potentials
* will increase at each game turn. A consequence is that one
* shouldn't call apply_cursors twice per game round. Indeed,
* calling apply_cursors changes the map state (cursor_ref_pot)
* so calling it twice isn't the same as calling it only once.
*/
map_state->teams[i].cursor_ref_pot = max_pot[i] + round_delta[i];
if (map_state->teams[i].cursor_ref_pot +
rules->max_cursor_pot_offset > rules->max_cursor_pot)
{
_lw6ker_team_normalize_pot (&(map_state->teams[i]), rules);
}
}
}
/*
* We actually apply the cursors
*/
for (i = 0; i < LW6MAP_MAX_NB_CURSORS; ++i)
{
if (map_state->cursor_array.cursors[i].enabled)
{
team_color = map_state->cursor_array.cursors[i].team_color;
if (lw6ker_team_mask_is_concerned (team_color, team_mask))
{
for (z = 0; z < map_state->shape.d; ++z)
{
zone_id =
_lw6ker_map_struct_get_zone_id (map_state->map_struct,
map_state->cursor_array.
cursors[i].apply_pos.x,
map_state->cursor_array.
cursors[i].apply_pos.y,
z);
if (zone_id >= 0)
{
/*
* Beware of multiple cursors, we check again if changing
* the value is needed.
*/
if (map_state->teams[team_color].
gradient[zone_id].potential <
map_state->teams[team_color].cursor_ref_pot +
map_state->cursor_array.cursors[i].pot_offset)
{
map_state->teams[team_color].
gradient[zone_id].potential =
map_state->teams[team_color].cursor_ref_pot +
map_state->cursor_array.cursors[i].pot_offset;
map_state->teams[team_color].
gradient[zone_id].closest_cursor_pos =
map_state->cursor_array.cursors[i].apply_pos;
}
}
}
}
}
}
}
|
|||||
| ↓ | _mod_tcpd_process_oob | 18 | 47 | 135 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/srv/mod-tcpd/mod-tcpd-oob.c |
int
_mod_tcpd_process_oob (_tcpd_context_t * tcpd_context,
lw6nod_info_t * node_info,
lw6srv_oob_data_t * oob_data)
{
int ret = 0;
char *request_line = NULL;
int syntax_ok = 0;
char *command = NULL;
int password_ok = 0;
char *given_public_url = NULL;
char *response = NULL;
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("process tcpd oob"));
if (_mod_tcpd_oob_should_continue (tcpd_context, oob_data))
{
request_line = lw6net_recv_line_tcp (oob_data->sock);
if (request_line)
{
if (lw6msg_oob_analyse_request (&syntax_ok, &command, &password_ok,
&given_public_url, request_line,
node_info->const_info.url,
node_info->const_info.password))
{
if (lw6sys_str_is_same_no_case (command, LW6MSG_OOB_PING))
{
lw6sys_log (LW6SYS_LOG_INFO,
_x_ ("mod_tcpd %s response to %s:%d"),
LW6MSG_OOB_PONG, oob_data->remote_ip,
oob_data->remote_port);
response = lw6msg_oob_generate_pong (node_info);
}
if (lw6sys_str_is_same_no_case (command, LW6MSG_OOB_INFO))
{
lw6sys_log (LW6SYS_LOG_INFO,
_x_ ("mod_tcpd %s response to %s:%d"),
LW6MSG_OOB_INFO, oob_data->remote_ip,
oob_data->remote_port);
response = lw6msg_oob_generate_info (node_info);
}
if (lw6sys_str_is_same_no_case (command, LW6MSG_OOB_LIST))
{
lw6sys_log (LW6SYS_LOG_INFO,
_x_ ("mod_tcpd %s response to %s:%d"),
LW6MSG_OOB_LIST, oob_data->remote_ip,
oob_data->remote_port);
response = lw6msg_oob_generate_list (node_info);
}
if (given_public_url)
{
if (strlen (given_public_url) > 0)
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_
("discovered node \"%s\" from given url"),
given_public_url);
lw6nod_info_add_discovered_node (node_info,
given_public_url);
}
LW6SYS_FREE (given_public_url);
}
}
else
{
if (strlen (request_line) == 0
|| lw6sys_chr_is_eol (request_line[0]))
{
if (node_info->const_info.password
&& strlen (node_info->const_info.password) > 0)
{
lw6sys_log (LW6SYS_LOG_INFO,
_x_ ("mod_tcpd %s response to %s:%d"),
LW6MSG_FORBIDDEN, oob_data->remote_ip,
oob_data->remote_port);
response =
lw6sys_new_sprintf ("%s\n", LW6MSG_FORBIDDEN);
}
else
{
lw6sys_log (LW6SYS_LOG_INFO,
_x_ ("mod_tcpd %s response to %s:%d"),
LW6MSG_OOB_INFO, oob_data->remote_ip,
oob_data->remote_port);
response = lw6msg_oob_generate_info (node_info);
}
}
else
{
if (syntax_ok && !password_ok)
{
lw6sys_log (LW6SYS_LOG_INFO,
_x_ ("mod_tcpd %s response to %s:%d"),
LW6MSG_FORBIDDEN, oob_data->remote_ip,
oob_data->remote_port);
response =
lw6sys_new_sprintf ("%s\n", LW6MSG_FORBIDDEN);
}
else
{
lw6sys_log (LW6SYS_LOG_INFO,
_x_ ("mod_tcpd %s response to %s:%d"),
LW6MSG_ERROR, oob_data->remote_ip,
oob_data->remote_port);
response = lw6sys_new_sprintf ("%s\n", LW6MSG_ERROR);
}
}
}
LW6SYS_FREE (request_line);
}
}
if (lw6net_tcp_is_alive (oob_data->sock))
{
if (response)
{
lw6net_tcp_send (oob_data->sock, response,
strlen (response),
tcpd_context->data.consts.error_timeout * 1000, 1);
}
else
{
lw6net_send_line_tcp (oob_data->sock, LW6MSG_ERROR);
}
}
if (response)
{
LW6SYS_FREE (response);
}
lw6net_socket_close (oob_data->sock);
oob_data->sock = -1;
return ret;
}
|
|||||
| ↓ | _mod_httpd_analyse_tcp | 18 | 39 | 116 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/srv/mod-httpd/mod-httpd-handshake.c |
int
_mod_httpd_analyse_tcp (_mod_httpd_context_t * httpd_context,
lw6srv_tcp_accepter_t * tcp_accepter,
lw6nod_info_t * node_info,
u_int64_t * remote_id, char **remote_url)
{
int ret = 0;
char *pos = NULL;
char *line = NULL;
char *msg = NULL;
line = tcp_accepter->first_line;
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("trying to recognize httpd protocol in \"%s\""), line);
if (remote_id)
{
(*remote_id) = 0;
}
if (remote_url)
{
(*remote_url) = NULL;
}
if (!lw6net_tcp_is_alive (tcp_accepter->sock))
{
ret |= LW6SRV_ANALYSE_DEAD;
lw6net_socket_close (tcp_accepter->sock);
tcp_accepter->sock = -1;
}
if (strlen (line) >=
_MOD_HTTPD_PROTOCOL_UNDERSTANDABLE_SIZE || strchr (line, '\n'))
{
if (lw6sys_str_starts_with
(line, _MOD_HTTPD_PROTOCOL_GET_STRING)
|| lw6sys_str_starts_with (line,
_MOD_HTTPD_PROTOCOL_POST_STRING)
|| lw6sys_str_starts_with (line, _MOD_HTTPD_PROTOCOL_HEAD_STRING))
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("recognized httpd protocol \"%s\""), line);
pos = line;
while ((*pos) && !lw6sys_chr_is_space (*pos))
{
pos++;
}
while (lw6sys_chr_is_space (*pos))
{
pos++;
}
if (lw6sys_str_starts_with (pos, _MOD_HTTPD_PROTOCOL_LW6_STRING))
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("httpd LW6 message \"%s\""),
pos);
if (lw6msg_envelope_analyse
(pos, LW6MSG_ENVELOPE_MODE_URL, node_info->const_info.url,
node_info->const_info.password, 0,
node_info->const_info.id_int, &msg, NULL, NULL, remote_id,
NULL, NULL, NULL, remote_url))
{
ret |= LW6SRV_ANALYSE_UNDERSTANDABLE;
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("httpd message \"%s\" OK"), line);
if (msg)
{
/*
* We need to pass msg else remote_url isn't processed
*/
LW6SYS_FREE (msg);
}
}
else
{
if (strchr (line, '\n'))
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("unable to analyse message \"%s\""),
line);
ret |= LW6SRV_ANALYSE_DEAD;
}
else
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_
("unable to analyse message \"%s\" but line does not seem complete, assuming some data is still missing, giving it another chance"),
line);
}
}
}
else
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("out of band httpd \"%s\""),
pos);
ret |= LW6SRV_ANALYSE_UNDERSTANDABLE | LW6SRV_ANALYSE_OOB;
}
}
}
/*
* Here, maybe we didn't recognize HTTPD protocol, but since we're
* in timeout, we decide so send an error 500 answer anyway.
*/
if (lw6net_tcp_is_alive (tcp_accepter->sock)
&& !_mod_httpd_timeout_ok (httpd_context,
tcp_accepter->creation_timestamp))
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_
("timeout on receive (first_line=\"%s\") so sending request to http handler, which will probably return error 500"),
line);
ret |= (LW6SRV_ANALYSE_UNDERSTANDABLE | LW6SRV_ANALYSE_OOB);
}
return ret;
}
|
|||||
| ↓ | base64_decode_ctx | 18 | 37 | 78 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/glb/gnulib-base64.c |
bool
base64_decode_ctx (struct base64_decode_context * ctx,
const char *in, size_t inlen, char *out, size_t * outlen)
{
size_t outleft = *outlen;
bool ignore_newlines = ctx != NULL;
bool flush_ctx = false;
unsigned int ctx_i = 0;
if (ignore_newlines)
{
ctx_i = ctx->i;
flush_ctx = inlen == 0;
}
while (true)
{
size_t outleft_save = outleft;
if (ctx_i == 0 && !flush_ctx)
{
while (true)
{
/* Save a copy of outleft, in case we need to re-parse this
block of four bytes. */
outleft_save = outleft;
if (!decode_4 (in, inlen, &out, &outleft))
break;
in += 4;
inlen -= 4;
}
}
if (inlen == 0 && !flush_ctx)
break;
/* Handle the common case of 72-byte wrapped lines.
This also handles any other multiple-of-4-byte wrapping. */
if (inlen && *in == '\n' && ignore_newlines)
{
++in;
--inlen;
continue;
}
/* Restore OUT and OUTLEFT. */
out -= outleft_save - outleft;
outleft = outleft_save;
{
char const *in_end = in + inlen;
char const *non_nl;
if (ignore_newlines)
non_nl = get_4 (ctx, &in, in_end, &inlen);
else
non_nl = in; /* Might have nl in this case. */
/* If the input is empty or consists solely of newlines (0 non-newlines),
then we're done. Likewise if there are fewer than 4 bytes when not
flushing context and not treating newlines as garbage. */
if (inlen == 0 || (inlen < 4 && !flush_ctx && ignore_newlines))
{
inlen = 0;
break;
}
if (!decode_4 (non_nl, inlen, &out, &outleft))
break;
inlen = in_end - in;
}
}
*outlen -= outleft;
return inlen == 0;
}
|
|||||
| ↓ | lw6msg_word_first | 18 | 31 | 74 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/msg/msg-word.c |
int
lw6msg_word_first (lw6msg_word_t * word, char **next, char *msg)
{
int ret = 0;
int i = 0, j = 0;
int len = 0;
word->len = 0;
word->buf[0] = '\0';
if (next)
{
(*next) = NULL;
}
while (lw6sys_chr_is_space (msg[i]))
{
i++;
}
j = i;
if (msg[i] == _QUOTE)
{
i++;
j++;
/*
* Note: (len=(j-i)<=...) must really be the first test else len is false
*/
while ((len = (j - i)) <= LW6MSG_MAX_WORD_SIZE && msg[j]
&& msg[j] != _QUOTE && !lw6sys_chr_is_eol (msg[j]))
{
j++;
}
}
else
{
/*
* Note: (len=(j-i)<=...) must really be the first test else len is false
*/
while ((len = (j - i)) <= LW6MSG_MAX_WORD_SIZE && msg[j]
&& !lw6sys_chr_is_space (msg[j]) && !lw6sys_chr_is_eol (msg[j]))
{
j++;
}
}
if (i < j || msg[j] == _QUOTE)
{
if (len <= LW6MSG_MAX_WORD_SIZE)
{
word->len = len;
memcpy (word->buf, msg + i, len);
word->buf[len] = '\0';
if (next)
{
if (msg[j] == _QUOTE)
{
j++;
}
while (lw6sys_chr_is_space (msg[j]))
{
j++;
}
(*next) = msg + j;
}
ret = 1;
}
else
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("word too long"));
}
}
return ret;
}
|
|||||
| ↓ | pop_texture | 18 | 25 | 66 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/map/map-hexa.c |
static int
pop_texture (lw6sys_hexa_serializer_t * hexa_serializer,
lw6map_texture_t * texture)
{
int ret = 1;
int x, y;
lw6sys_color_8_t color = LW6SYS_COLOR_8_BLACK;
ret = ret
&& lw6sys_hexa_serializer_pop_int32 (hexa_serializer, &(texture->w));
ret = ret
&& lw6sys_hexa_serializer_pop_int32 (hexa_serializer, &(texture->h));
ret = ret
&& lw6sys_hexa_serializer_pop_int32 (hexa_serializer,
&(texture->has_alpha));
if (texture->w >= LW6MAP_MIN_TEXTURE_WIDTH
&& texture->w <= LW6MAP_MAX_TEXTURE_WIDTH
&& texture->h >= LW6MAP_MIN_TEXTURE_HEIGHT
&& texture->h <= LW6MAP_MAX_TEXTURE_HEIGHT)
{
texture->data =
(lw6sys_color_8_t *) LW6SYS_CALLOC (texture->w *
texture->h *
sizeof (lw6sys_color_8_t));
if (texture->data)
{
for (y = 0; y < texture->h && ret; ++y)
{
for (x = 0; x < texture->w && ret; ++x)
{
ret = ret
&& lw6sys_hexa_serializer_pop_color (hexa_serializer,
&color);
lw6map_texture_set (texture, x, y, color);
}
}
}
else
{
ret = 0;
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("texture shape out of range (%dx%d)"), texture->w,
texture->h);
ret = 0;
}
ret = ret
&& lw6sys_hexa_serializer_pop_color (hexa_serializer,
&(texture->guessed_color_base.bg));
ret = ret
&& lw6sys_hexa_serializer_pop_color (hexa_serializer,
&(texture->guessed_color_base.fg));
ret = ret
&& lw6sys_hexa_serializer_pop_color (hexa_serializer,
&(texture->
guessed_color_alternate.bg));
ret = ret
&& lw6sys_hexa_serializer_pop_color (hexa_serializer,
&(texture->
guessed_color_alternate.fg));
return ret;
}
|
|||||
| ↓ | test_display | 18 | 164 | 279 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/dsp/dsp-test.c |
static int
test_display (char *gfx_backend_name)
{
int ret = 0;
LW6SYS_TEST_FUNCTION_BEGIN;
{
int argc = TEST_ARGC;
char *argv[TEST_ARGC] = { TEST_ARGV0 };
lw6dsp_backend_t *display = NULL;
lw6gui_keypress_t *keypress = NULL;
lw6dsp_param_t param;
lw6gui_menu_t *menu = NULL;
lw6gui_video_mode_t video_mode;
char *repr = NULL;
float progress_value = 0.0f;
lw6sys_progress_t progress;
int i;
int ticks;
int nb_frames = 0;
lw6map_level_t *level = NULL;
lw6ker_game_struct_t *game_struct = NULL;
lw6ker_game_state_t *game_state = NULL;
lw6pil_pilot_t *pilot = NULL;
lw6sys_progress_default (&progress, &progress_value);
display = lw6dsp_create_backend (argc, argv, gfx_backend_name);
if (display)
{
repr = lw6dsp_repr (display);
if (repr)
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("display repr is \"%s\""),
repr);
LW6SYS_FREE (repr);
}
lw6dsp_param_zero (¶m);
param.video_mode.width = TEST_WIDTH1;
param.video_mode.height = TEST_HEIGHT1;
param.video_mode.fullscreen = TEST_FULLSCREEN1;
param.misc.target_fps = TEST_FRAMES_PER_SEC;
param.misc.mask =
LW6GUI_DISPLAY_BACKGROUND | LW6GUI_DISPLAY_PREVIEW |
LW6GUI_DISPLAY_MAP | LW6GUI_DISPLAY_FIGHTERS |
LW6GUI_DISPLAY_CURSORS | LW6GUI_DISPLAY_MENU | LW6GUI_DISPLAY_META |
LW6GUI_DISPLAY_LOG | LW6GUI_DISPLAY_FPS;
param.look = lw6gui_look_new (NULL);
if (param.look)
{
if (lw6dsp_init (display, ¶m, NULL))
{
repr = lw6dsp_repr (display);
if (repr)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("display repr is \"%s\""), repr);
LW6SYS_FREE (repr);
}
lw6dsp_get_video_mode (display, &video_mode);
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("video mode is %dx%d fullscreen=%d"),
video_mode.width, video_mode.height,
video_mode.fullscreen);
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("displaying background"));
sleep_and_report (display, TEST_SLEEP_LONG);
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("changing resolution"));
param.video_mode.width = TEST_WIDTH2;
param.video_mode.height = TEST_HEIGHT2;
param.video_mode.fullscreen = TEST_FULLSCREEN2;
param.misc.repeat_settings.delay = TEST_REPEAT_DELAY;
param.misc.repeat_settings.interval = TEST_REPEAT_INTERVAL;
param.misc.repeat_settings.double_click_delay =
TEST_DOUBLE_CLICK_DELAY;
param.misc.log_timeout = TEST_LOG_TIMEOUT;
lw6dsp_update (display, ¶m);
sleep_and_report (display, TEST_SLEEP_LONG);
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("displaying menu"));
param.menu = menu_new (TEST_NB_MENUITEMS1);
if (param.menu)
{
lw6dsp_update (display, ¶m);
sleep_and_report (display, TEST_SLEEP_SHORT);
while (param.menu->nb_items > 0)
{
lw6gui_menu_remove (param.menu, 0, 0);
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("displaying menu with %d items"),
param.menu->nb_items);
lw6dsp_update (display, ¶m);
sleep_and_report (display, TEST_SLEEP_SHORT);
}
lw6gui_menu_free (param.menu);
param.menu = menu_new (TEST_NB_MENUITEMS2);
if (param.menu)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("displaying big menu (%d items)"),
param.menu->nb_items);
lw6dsp_update (display, ¶m);
sleep_and_report (display, TEST_SLEEP_SHORT);
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("nb items displayed is %d"),
param.menu->nb_items_displayed);
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_
("scrolling to middle of big menu (%d)"),
param.menu->nb_items / 2);
lw6gui_menu_select (param.menu,
param.menu->nb_items / 2,
TEST_MENU_ALLOW_SCROLL, 0);
lw6dsp_update (display, ¶m);
sleep_and_report (display, TEST_SLEEP_SHORT);
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("nb items displayed is %d"),
param.menu->nb_items_displayed);
menu = param.menu;
param.menu = NULL;
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("big menu disappears"));
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("this warning should appear for %d seconds on the screen"),
TEST_LOG_TIMEOUT);
lw6sys_log (LW6SYS_LOG_ERROR, _("this error too"));
lw6dsp_update (display, ¶m);
sleep_and_report (display, TEST_SLEEP_SHORT);
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("big menu is back again"));
param.menu = menu;
lw6dsp_update (display, ¶m);
sleep_and_report (display, TEST_SLEEP_SHORT);
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("loading a map"));
param.misc.progress = &progress_value;
lw6dsp_update (display, ¶m);
level =
level_new (TEST_MAP, TEST_WIDTH2, TEST_HEIGHT2,
&progress);
if (level)
{
param.level = level;
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("displaying a map"));
lw6dsp_update (display, ¶m);
sleep_and_report (display, TEST_SLEEP_LONG);
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("build struct"));
game_struct =
game_struct_new (param.level, &progress);
if (game_struct)
{
param.game_struct = game_struct;
lw6dsp_update (display, ¶m);
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("build state"));
game_state =
game_state_new (param.game_struct,
&progress);
if (game_state)
{
param.game_state = game_state;
lw6dsp_update (display, ¶m);
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("displaying a game"));
sleep_and_report (display,
TEST_SLEEP_LONG);
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_
("start play with game state"));
for (i = 0; i < TEST_NB_ROUNDS; ++i)
{
lw6ker_game_state_do_round
(game_state);
lw6dsp_update (display, ¶m);
}
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_
("stop play with game state"));
pilot = pilot_new (game_state, &progress);
if (pilot)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_
("start play with pilot"));
sleep_and_report (display,
TEST_SLEEP_LONG);
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_
("stop play with pilot"));
param.pilot = NULL;
lw6dsp_update (display, ¶m);
lw6pil_pilot_free (pilot);
pilot = NULL;
}
param.game_state = NULL;
lw6dsp_update (display, ¶m);
lw6ker_game_state_free (game_state);
game_state = NULL;
ret = 1;
}
param.game_struct = NULL;
lw6dsp_update (display, ¶m);
lw6ker_game_struct_free (game_struct);
game_struct = NULL;
}
param.level = NULL;
lw6dsp_update (display, ¶m);
lw6map_free (level);
level = NULL;
}
lw6gui_menu_free (param.menu);
param.menu = NULL;
}
}
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_
("checking what happens when replicated objects are freed in the param (menu, for instance)"));
sleep_and_report (display, TEST_SLEEP_SHORT);
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_
("now applying the params, nothing should be displayed but the background"));
lw6dsp_update (display, ¶m);
sleep_and_report (display, TEST_SLEEP_LONG);
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_
("pumping events, try to press random keys while having the focus on the game window, you should get one log message per keypress, test will end after %d seconds"),
(int) (TEST_INPUT_TICKS / LW6SYS_TICKS_PER_SEC));
ticks = lw6sys_get_uptime ();
while ((!lw6sys_signal_poll_quit ())
&& lw6sys_get_uptime () < ticks + TEST_INPUT_TICKS)
{
/*
* Note, there's no sleep in this sloop, should be CPU greedy,
* it's interesting to see how display reacts.
*/
lw6dsp_update (display, ¶m);
keypress =
lw6gui_keyboard_pop_keypress (&
(display->input->
keyboard));
if (keypress)
{
repr = lw6gui_keypress_repr (keypress);
if (repr)
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("%s"), repr);
LW6SYS_FREE (repr);
}
lw6gui_keypress_free (keypress);
}
}
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("done with events"));
nb_frames = lw6dsp_get_nb_frames (display);
lw6dsp_quit (display);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unable to start display"));
}
lw6gui_look_free (param.look);
}
else
{
ret = 0;
}
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("frames=%d"), nb_frames);
lw6dsp_destroy_backend (display);
}
}
LW6SYS_TEST_FUNCTION_END;
return ret;
}
|
|||||
| ↓ | _lw6ker_cursor_sanity_check | 18 | 15 | 54 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/ker/ker-cursor.c |
int
_lw6ker_cursor_sanity_check (lw6ker_cursor_t * cursor,
lw6sys_whd_t * shape, lw6map_rules_t * rules)
{
int ret = 1;
if ((cursor->letter < 'a') || (cursor->letter > 'z'))
{
lw6sys_log (LW6SYS_LOG_WARNING, _x_ ("invalid letter '%c' for cursor"),
cursor->letter);
ret = 0;
}
if (rules)
{
if (cursor->pot_offset < 0
|| cursor->pot_offset > rules->max_cursor_pot_offset)
{
lw6sys_log (LW6SYS_LOG_WARNING, _x_ ("bad cursor_pot_offset %d"),
cursor->pot_offset);
ret = 0;
}
}
if ((cursor->enabled
&& ((!lw6sys_check_id_64 (cursor->node_id))
|| (!lw6sys_check_id_16 (cursor->cursor_id))
|| cursor->team_color < 0
|| cursor->team_color >= LW6MAP_MAX_NB_TEAMS))
|| ((!cursor->enabled)
&& (cursor->node_id != 0 || cursor->cursor_id != 0
|| cursor->team_color != LW6MAP_TEAM_COLOR_INVALID)))
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("inconsistent enabled cursor values enabled=%d node_id=%"
LW6SYS_PRINTF_LL "x cursor_id=%x team_color=%d"),
cursor->enabled, cursor->node_id, (int) cursor->cursor_id,
cursor->team_color);
ret = 0;
}
if (shape)
{
if ((!lw6sys_shape_check_pos (shape, &cursor->pos))
|| (!lw6sys_shape_check_pos (shape, &cursor->apply_pos)))
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("bad cursor position shape=%dx%d pos=%d,%d apply_pos=%d,%d"),
shape->w, shape->h, cursor->pos.x, cursor->pos.y,
cursor->apply_pos.x, cursor->apply_pos.y);
}
}
return ret;
}
|
|||||
| ↓ | lw6net_tcp_connect | 23 | 57 | 206 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/net/net-tcp.c |
int
lw6net_tcp_connect (char *ip, int port, int delay_msec)
{
int sock = -1;
int connect_ret = 0;
int connect_async = 0;
int select_ret = 0;
int connected = 0;
struct sockaddr_in name;
/*
int enable = 1;
int disable = 0;
struct linger li;
*/
fd_set write;
struct timeval tv;
int64_t origin = 0;
#ifdef LW6_MS_WINDOWS
int winerr = 0;
#endif
sock = socket (AF_INET, SOCK_STREAM, 0);
if (sock >= 0)
{
if (lw6net_socket_set_blocking_mode (sock, 0))
{
name.sin_family = AF_INET;
name.sin_addr.s_addr = INADDR_ANY;
name.sin_port = 0;
if (bind (sock, (struct sockaddr *) &name, sizeof (name)) >= 0)
{
name.sin_family = AF_INET;
if (_lw6net_inet_aton (&name.sin_addr, ip))
{
name.sin_port = htons (port);
connect_ret =
connect (sock, (struct sockaddr *) &name, sizeof (name));
if (connect_ret >= 0)
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("connect on \"%s:%d\" returned with a successfull code %d, this is very strange since we should be in non-blocking mode"),
ip, port, connect_ret);
}
else
{
#ifdef LW6_MS_WINDOWS
winerr = WSAGetLastError ();
switch (winerr)
{
/*
* Fixed 35104 (warning on windows build) by specifically
* adding both INPROGRESS and WOULDBLOCK in acceptable values.
*/
case WSAEINPROGRESS:
case WSAEWOULDBLOCK:
connect_async = 1;
break;
/*
* UNREACH is not reported as an error, only an info,
* it's very common not to be able to reach host, it
* can be down or you can just be playing locally.
*/
case WSAEHOSTUNREACH:
case WSAEHOSTDOWN:
lw6sys_log (LW6SYS_LOG_INFO,
_x_
("can't connect on \"%s:%d\", host unreachable or down"),
ip, port);
break;
default:
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("connect on \"%s:%d\" failed, did not return WSAEINPROGRESS or WSAEWOULDBLOCK (code=%d)"),
ip, port, winerr);
lw6net_last_error ();
}
#else
switch (errno)
{
/*
* Fixed 35104 (warning on windows build) by specifically
* adding both INPROGRESS and WOULDBLOCK in acceptable values.
*/
case EINPROGRESS:
case EWOULDBLOCK:
connect_async = 1;
break;
/*
* UNREACH is not reported as an error, only an info,
* it's very common not to be able to reach host, it
* can be down or you can just be playing locally.
*/
case EHOSTUNREACH:
case EHOSTDOWN:
lw6sys_log (LW6SYS_LOG_INFO,
_x_
("can't connect on \"%s:%d\", host unreachable or down"),
ip, port);
break;
default:
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("connect on \"%s:%d\" failed, did not return EINPROGRESS or EWOULDBLOCK (code=%d)"),
ip, port, errno);
lw6net_last_error ();
}
#endif
if (connect_async)
{
FD_ZERO (&write);
FD_SET (sock, &write);
_lw6net_delay_msec_to_timeval (&tv, delay_msec);
origin = lw6sys_get_timestamp ();
while (!connected
&& (lw6sys_get_timestamp () <
(origin + delay_msec)))
{
select_ret =
select (sock + 1, NULL, &write, NULL, &tv);
if (select_ret > 0)
{
if (FD_ISSET (sock, &write))
{
connected = 1;
}
}
}
}
}
if (connected)
{
/*
// Added this code copied/paste from accept.
// don't know if it's usefull
// see also https://savannah.gnu.org/bugs/?34060
li.l_onoff = 0;
li.l_linger = 0;
if (setsockopt (sock, SOL_SOCKET, SO_KEEPALIVE,
(char *) &enable, sizeof (int)))
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("setsockopt(SO_KEEPALIVE) failed"));
lw6net_last_error ();
}
if (setsockopt (sock, SOL_SOCKET, SO_OOBINLINE,
(char *) &disable, sizeof (int)))
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("setsockopt(SO_OOBINLINE) failed"));
lw6net_last_error ();
}
if (setsockopt (sock, SOL_SOCKET, SO_LINGER,
(char *) &li, sizeof (struct linger)))
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("setsockopt(SO_LINGER) failed"));
lw6net_last_error ();
}
*/
lw6sys_log (LW6SYS_LOG_INFO,
_x_ ("socket %d connected on %s:%d"), sock,
ip, port);
_lw6net_counters_register_socket (&
(_lw6net_global_context->
counters));
}
else
{
/*
* Here, no peculiar warning, connect() is definitely
* the kind of function which *will* fail very
* often, we certainly don't want this to fill our
* log...
*/
}
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING, _x_ ("bind() failed"));
lw6net_last_error ();
}
}
}
if (lw6net_socket_is_valid (sock) && !connected)
{
if (close (sock))
{
lw6sys_log (LW6SYS_LOG_WARNING, _x_ ("close() failed"));
lw6net_last_error ();
}
sock = -1;
}
return sock;
}
|
|||||
| ↓ | test_menu | 17 | 89 | 209 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/gui/gui-test.c |
static int
test_menu ()
{
int ret = 1;
LW6SYS_TEST_FUNCTION_BEGIN;
{
lw6gui_menu_t *menu = NULL;
char *repr;
menu =
lw6gui_menu_new (TEST_MENU_TITLE1, TEST_MENU_HELP1, TEST_MENU_POPUP1,
TEST_MENU_ESC, TEST_MENU_ENABLE_ESC);
if (menu)
{
lw6gui_menu_set_title (menu, TEST_MENU_TITLE2);
lw6gui_menu_set_help (menu, TEST_MENU_HELP2);
lw6gui_menu_set_popup (menu, TEST_MENU_POPUP2);
lw6gui_menu_close_popup (menu);
if (!lw6gui_menu_has_popup (menu))
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("no popup after close, OK"));
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("popup reported to exist after being closed"));
ret = 0;
}
lw6gui_menu_set_popup (menu, TEST_MENU_POPUP2);
if (lw6gui_menu_has_popup (menu))
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("popup defined, OK"));
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("no popup reported when it's just been set"));
ret = 0;
}
repr = lw6gui_menu_repr (menu);
if (repr)
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("menu repr is %s"), repr);
LW6SYS_FREE (repr);
}
else
{
ret = 0;
}
if (!lw6gui_menu_is_same (menu, menu))
{
lw6sys_log (LW6SYS_LOG_WARNING, _x_ ("menu comparison failed"));
}
lw6gui_menu_free (menu);
}
else
{
ret = 0;
}
}
{
lw6gui_menu_t *menu = NULL;
lw6gui_menu_t *menu2 = NULL;
lw6gui_menuitem_t *menuitem1 = NULL;
lw6gui_menuitem_t *menuitem2 = NULL;
lw6gui_menuitem_t *menuitem3 = NULL;
char *repr;
int menuitem_id;
lw6sys_list_t *breadcrumbs = NULL;
breadcrumbs = lw6sys_list_new (lw6sys_free_callback);
if (breadcrumbs)
{
lw6sys_list_push_back (&breadcrumbs,
lw6sys_str_copy (TEST_MENU_BREADCRUMBS1));
lw6sys_list_push_back (&breadcrumbs,
lw6sys_str_copy (TEST_MENU_BREADCRUMBS2));
}
if (breadcrumbs)
{
menu =
lw6gui_menu_new (TEST_MENU_TITLE1, TEST_MENU_HELP1,
TEST_MENU_POPUP1, TEST_MENU_ESC,
TEST_MENU_ENABLE_ESC);
if (menu)
{
lw6gui_menu_set_title (menu, TEST_MENU_TITLE2);
lw6gui_menu_set_breadcrumbs (menu, breadcrumbs);
menuitem1 =
lw6gui_menuitem_new (TEST_MENUITEM_LABEL1,
TEST_MENUITEM_TOOLTIP1,
TEST_MENUITEM_VALUE1, 1, 0, 0);
if (menuitem1)
{
menuitem2 =
lw6gui_menuitem_new (TEST_MENUITEM_LABEL2,
TEST_MENUITEM_TOOLTIP2,
TEST_MENUITEM_VALUE2, 1, 0, 0);
if (menuitem2)
{
menuitem3 =
lw6gui_menuitem_new (TEST_MENUITEM_LABEL3,
TEST_MENUITEM_TOOLTIP3,
TEST_MENUITEM_VALUE3, 1, 0, 0);
if (menuitem3)
{
lw6gui_menu_append (menu, menuitem1, 0);
lw6gui_menu_insert (menu, menuitem2, 0, 0);
lw6gui_menu_insert (menu, menuitem3, 1, 0);
lw6gui_menu_select (menu, 2, TEST_MENU_ALLOW_SCROLL1,
0);
lw6gui_menu_remove (menu, 0, 0);
lw6gui_menu_select (menu, 0, TEST_MENU_ALLOW_SCROLL2,
0);
menuitem_id =
lw6gui_menu_append_for_id_use (menu,
TEST_MENUITEM_LABEL4,
TEST_MENUITEM_TOOLTIP4,
TEST_MENUITEM_VALUE4,
1, 0, 0, 0);
if (menuitem_id)
{
lw6gui_menu_sync_using_id (menu, menuitem_id,
TEST_MENUITEM_LABEL1,
TEST_MENUITEM_TOOLTIP1,
TEST_MENUITEM_VALUE1,
1, 0, 0, 0);
lw6gui_menu_remove_using_id (menu, menuitem_id,
0);
}
lw6gui_menu_update_display_range (menu,
TEST_MAX_DISPLAYED_ITEMS);
lw6gui_menu_center (menu, 1,
TEST_MAX_DISPLAYED_ITEMS);
repr = lw6gui_menu_repr (menu);
if (repr)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("menu repr is %s"), repr);
LW6SYS_FREE (repr);
}
else
{
ret = 0;
}
menu2 = lw6gui_menu_dup (menu);
if (menu2)
{
if (lw6gui_menu_is_same (menu, menu2))
{
lw6gui_menu_sync (menu2, menu);
repr = lw6gui_menu_repr (menu2);
if (repr)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_
("menu duplicate repr is %s"),
repr);
LW6SYS_FREE (repr);
}
else
{
ret = 0;
}
}
else
{
ret = 0;
}
lw6gui_menu_free (menu2);
}
else
{
ret = 0;
}
}
else
{
ret = 0;
}
}
else
{
ret = 0;
}
}
else
{
ret = 0;
}
lw6gui_menu_free (menu);
}
else
{
ret = 0;
}
lw6sys_list_free (breadcrumbs);
}
else
{
ret = 0;
}
}
LW6SYS_TEST_FUNCTION_END;
return ret;
}
|
|||||
| ↓ | stage1 | 17 | 81 | 144 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/tsk/tsk-loader.c |
static void
stage1 (_lw6tsk_loader_data_t * loader_data)
{
int request_number = 0;
char *map_path = NULL;
char *relative_path = NULL;
lw6sys_assoc_t *default_param = NULL;
lw6sys_assoc_t *forced_param = NULL;
lw6map_level_t *level = NULL;
int display_w = 0;
int display_h = 0;
int bench_value = 0;
int magic_number = 0;
lw6map_level_t *src2 = NULL;
lw6sys_progress_t progress;
float dummy = 0.0f;
int ok = 0;
progress.value = loader_data->progress;
if (!(progress.value))
{
progress.value = &dummy;
}
LOADER_LOCK;
request_number = loader_data->request_number;
if (loader_data->stage1.map_path && loader_data->stage1.relative_path)
{
lw6sys_log (LW6SYS_LOG_INFO,
_x_
("async load stage1, request_number %d, level \"%s\""),
request_number, loader_data->stage1.relative_path);
(*(progress.value)) = _LW6TSK_LOADER_PROGRESS_STAGE1_BEGIN;
map_path = lw6sys_str_copy (loader_data->stage1.map_path);
relative_path = lw6sys_str_copy (loader_data->stage1.relative_path);
default_param =
lw6sys_assoc_dup (loader_data->stage1.default_param,
(lw6sys_dup_func_t) lw6sys_str_copy);
forced_param =
lw6sys_assoc_dup (loader_data->stage1.forced_param,
(lw6sys_dup_func_t) lw6sys_str_copy);
display_w = loader_data->stage1.display_w;
display_h = loader_data->stage1.display_h;
bench_value = loader_data->stage1.bench_value;
magic_number = loader_data->stage1.magic_number;
stage1_clear_request (&(loader_data->stage1));
}
LOADER_UNLOCK;
if (map_path && relative_path)
{
progress.min = _LW6TSK_LOADER_PROGRESS_STAGE1_BEGIN_MAP;
progress.max = _LW6TSK_LOADER_PROGRESS_STAGE1_END_MAP;
lw6sys_progress_begin (&progress);
level =
lw6ldr_read_relative (map_path, relative_path, default_param,
forced_param, display_w, display_h, bench_value,
magic_number, loader_data->user_dir, &progress);
if (level)
{
lw6sys_progress_end (&progress);
}
}
if (map_path)
{
LW6SYS_FREE (map_path);
map_path = NULL;
}
if (relative_path)
{
LW6SYS_FREE (relative_path);
relative_path = NULL;
}
if (default_param)
{
lw6sys_assoc_free (default_param);
default_param = NULL;
}
if (forced_param)
{
lw6sys_assoc_free (forced_param);
forced_param = NULL;
}
if (level)
{
char *repr = NULL;
repr = lw6map_repr (level);
if (repr)
{
progress.min = _LW6TSK_LOADER_PROGRESS_STAGE1_BEGIN_DUP;
progress.max = _LW6TSK_LOADER_PROGRESS_STAGE1_END_DUP;
lw6sys_progress_begin (&progress);
src2 = lw6map_dup (level, &progress);
LOADER_LOCK;
if (request_number == loader_data->request_number)
{
lw6sys_progress_end (&progress);
stage1_clear_response (&(loader_data->stage1));
loader_data->stage1.level = level;
lw6sys_log (LW6SYS_LOG_INFO,
_x_
("async load stage1 done, request_number %d, level \"%s\""),
request_number, repr);
stage2_clear_request (&(loader_data->stage2));
loader_data->stage2.src = src2;
ok = 1;
}
else if (request_number < loader_data->request_number)
{
lw6sys_log (LW6SYS_LOG_INFO,
_x_
("async load stage1 abort, request number %d < %d, level \"%s\""),
request_number, loader_data->request_number, repr);
if (src2)
{
lw6map_free (src2);
src2 = NULL;
}
lw6map_free (level);
level = NULL;
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("async load stage1, inconsistent request number %d > %d, level \"%s\""),
request_number, loader_data->request_number, repr);
}
LOADER_UNLOCK;
LW6SYS_FREE (repr);
repr = NULL;
}
}
if (ok)
{
(*(progress.value)) = _LW6TSK_LOADER_PROGRESS_STAGE1_END;
}
}
|
|||||
| ↓ | test_manager | 17 | 69 | 130 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/tsk/tsk-test.c |
static int
test_manager ()
{
int ret = 1;
LW6SYS_TEST_FUNCTION_BEGIN;
{
lw6tsk_loader_t *manager = NULL;
char *repr;
int i;
char *map_path;
lw6sys_assoc_t *default_param;
lw6sys_assoc_t *forced_param;
lw6map_level_t *level = NULL;
lw6ker_game_struct_t *game_struct = NULL;
lw6ker_game_state_t *game_state = NULL;
int done = 0;
float progress = 0.0f;
char *user_dir;
user_dir = lw6sys_get_default_user_dir ();
if (user_dir)
{
manager = lw6tsk_loader_new (TEST_MANAGER_SLEEP, user_dir, &progress);
if (manager)
{
map_path = lw6sys_get_default_map_path ();
if (map_path)
{
default_param = lw6sys_assoc_new (lw6sys_free_callback);
forced_param = lw6sys_assoc_new (lw6sys_free_callback);
lw6sys_assoc_set (&default_param, TEST_OPTION_KEY1,
lw6sys_str_copy (TEST_OPTION_VALUE1));
lw6sys_assoc_set (&forced_param, TEST_OPTION_KEY2,
lw6sys_str_copy (TEST_OPTION_VALUE2));
if (default_param && forced_param)
{
lw6tsk_loader_push (manager, map_path, TEST_LOAD_MAP,
default_param, forced_param,
TEST_DISPLAY_WIDTH,
TEST_DISPLAY_HEIGHT,
LW6LDR_DEFAULT_BENCH_VALUE,
LW6LDR_DEFAULT_MAGIC_NUMBER);
lw6sys_sleep (TEST_LOOP_SLEEP);
lw6tsk_loader_push (manager, map_path, TEST_LOAD_MAP,
default_param, forced_param,
TEST_DISPLAY_WIDTH,
TEST_DISPLAY_HEIGHT,
LW6LDR_DEFAULT_BENCH_VALUE,
LW6LDR_DEFAULT_MAGIC_NUMBER);
for (i = 0; i < TEST_LOOP_N && !done; i++)
{
lw6sys_sleep (TEST_LOOP_SLEEP);
repr = lw6tsk_loader_repr (manager);
if (repr)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("waiting for manager \"%s\""),
repr);
LW6SYS_FREE (repr);
}
if (lw6tsk_loader_pop
(&level, &game_struct, &game_state, manager))
{
if (level && game_struct && game_state)
{
done = 1;
repr = lw6ker_game_struct_repr (game_struct);
if (repr)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_
("loaded game_struct \"%s\""),
repr);
LW6SYS_FREE (repr);
}
repr = lw6ker_game_state_repr (game_state);
if (repr)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_
("loaded game_state \"%s\""),
repr);
LW6SYS_FREE (repr);
}
lw6ker_game_state_free (game_state);
game_state = NULL;
lw6ker_game_struct_free (game_struct);
game_struct = NULL;
lw6map_free (level);
level = NULL;
}
if (level)
{
repr = lw6map_repr (level);
if (repr)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("loaded map \"%s\""),
repr);
LW6SYS_FREE (repr);
}
lw6map_free (level);
level = NULL;
}
}
}
lw6sys_assoc_free (default_param);
lw6sys_assoc_free (forced_param);
}
LW6SYS_FREE (map_path);
}
lw6tsk_loader_free (manager);
}
else
{
ret = 0;
}
LW6SYS_FREE (user_dir);
}
else
{
ret = 0;
}
}
LW6SYS_TEST_FUNCTION_END;
return ret;
}
|
|||||
| ↓ | _lw6pil_compute_thread_func | 17 | 68 | 149 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/pil/pil-compute.c |
void
_lw6pil_compute_thread_func (lw6pil_worker_t * worker)
{
lw6pil_command_t *command = NULL;
lw6sys_list_t *commands = NULL;
u_int32_t team_mask_even = 0;
u_int32_t team_mask_odd = 0;
_lw6pil_spread_data_t spread_data;
void *spread_thread;
memset (&spread_data, 0, sizeof (_lw6pil_spread_data_t));
while (worker->run)
{
commands = NULL;
command = NULL;
lw6sys_spinlock_lock (worker->commands_spinlock);
if (worker->commands && !lw6sys_list_is_empty (worker->commands))
{
commands = worker->commands;
worker->commands =
lw6sys_list_new ((lw6sys_free_func_t) lw6pil_command_free);
if (!worker->commands)
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("worker->commands is NULL"));
}
}
lw6sys_spinlock_unlock (worker->commands_spinlock);
if (commands)
{
lw6sys_sort (&commands, _lw6pil_command_sort_callback);
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("worker global compute begin %d"),
worker->current_round);
lw6sys_mutex_lock (worker->global_mutex);
while (worker->run && commands
&& (command = lw6sys_list_pop_front (&commands)) != NULL)
{
command->round =
lw6sys_max (command->round, worker->current_round);
while (worker->run && worker->current_round < command->round)
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("worker compute begin %d"),
worker->current_round);
lw6sys_mutex_lock (worker->compute_mutex);
lw6ker_team_mask_best (&team_mask_even,
&team_mask_odd, worker->game_state);
worker->target_round = command->round;
if (worker->game_state->game_struct->rules.spread_thread)
{
// even compute
spread_data.game_state = worker->game_state;
spread_data.team_mask = team_mask_odd;
spread_thread =
lw6sys_thread_create ((lw6sys_thread_callback_func_t)
_lw6pil_spread_thread_func,
NULL, (void *) &spread_data);
lw6ker_game_state_do_move (worker->game_state,
team_mask_even);
if (spread_thread)
{
lw6sys_thread_join (spread_thread);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unable to spawn spread_thread"));
_lw6pil_spread_thread_func (&spread_data);
}
// odd compute
spread_data.game_state = worker->game_state;
spread_data.team_mask = team_mask_even;
spread_thread =
lw6sys_thread_create ((lw6sys_thread_callback_func_t)
_lw6pil_spread_thread_func,
NULL, (void *) &spread_data);
lw6ker_game_state_do_move (worker->game_state,
team_mask_odd);
if (spread_thread)
{
lw6sys_thread_join (spread_thread);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unable to spawn spread_thread"));
_lw6pil_spread_thread_func (&spread_data);
}
lw6ker_game_state_finish_round (worker->game_state);
}
else
{
lw6ker_game_state_do_round (worker->game_state);
}
worker->current_round++;
if (lw6ker_game_state_is_over (worker->game_state))
{
worker->over = 1;
}
else
{
if (worker->current_round !=
lw6ker_game_state_get_rounds (worker->game_state))
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("possible race condition, worker and game_state do not report the same round number (%d vs %d)"),
worker->current_round,
lw6ker_game_state_get_rounds
(worker->game_state));
}
}
worker->computed_rounds++;
lw6sys_mutex_unlock (worker->compute_mutex);
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("worker compute end %d"),
worker->current_round);
}
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("worker execute begin %d"),
worker->current_round);
lw6sys_mutex_lock (worker->compute_mutex);
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("worker execute command %s"),
command->text);
lw6pil_command_execute (worker->game_state, command);
lw6sys_mutex_unlock (worker->compute_mutex);
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("worker execute end %d"),
worker->current_round);
lw6pil_command_free (command);
}
lw6sys_mutex_unlock (worker->global_mutex);
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("worker global compute end %d"),
worker->current_round);
if (commands)
{
// commands could be NULL if stopped by worker->run==0
lw6sys_list_free (commands);
}
}
else
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("worker idle"));
lw6sys_idle ();
}
}
}
|
|||||
| ↓ | _do_grease | 17 | 56 | 107 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/ldr/ldr-grease.c |
static int
_do_grease (lw6map_layer_t * layer, lw6map_rules_t * rules,
_grease_table_t grease_table, int mode,
lw6sys_progress_t * progress)
{
int ret = 0;
int x, y, tx, ty;
int size;
lw6sys_whd_t shape;
lw6map_layer_t tmp;
int table_entry;
shape = layer->shape;
tmp.shape = layer->shape;
size = shape.w * shape.h * sizeof (u_int8_t);
tmp.data = LW6SYS_MALLOC (size);
if (tmp.data)
{
memcpy (tmp.data, layer->data, size);
for (y = 0; y < shape.h; ++y)
{
for (x = 0; x < shape.w; ++x)
{
table_entry = 0;
ty = y - 1;
tx = x;
lw6map_coords_fix_xy (rules, &shape, &tx, &ty);
if (lw6map_layer_get (&tmp, tx, ty))
{
if (mode)
{
table_entry |= 0x1;
}
}
else
{
if (!mode)
{
table_entry |= 0x1;
}
}
ty = y;
tx = x + 1;
lw6map_coords_fix_xy (rules, &shape, &tx, &ty);
if (lw6map_layer_get (&tmp, tx, ty))
{
if (mode)
{
table_entry |= 0x2;
}
}
else
{
if (!mode)
{
table_entry |= 0x2;
}
}
ty = y + 1;
tx = x;
lw6map_coords_fix_xy (rules, &shape, &tx, &ty);
if (lw6map_layer_get (&tmp, tx, ty))
{
if (mode)
{
table_entry |= 0x4;
}
}
else
{
if (!mode)
{
table_entry |= 0x4;
}
}
ty = y;
tx = x - 1;
lw6map_coords_fix_xy (rules, &shape, &tx, &ty);
if (lw6map_layer_get (&tmp, tx, ty))
{
if (mode)
{
table_entry |= 0x8;
}
}
else
{
if (!mode)
{
table_entry |= 0x8;
}
}
if (grease_table[table_entry])
{
lw6map_layer_set (layer, tx, ty, mode);
}
}
}
ret = 1;
LW6SYS_FREE (tmp.data);
}
return ret;
}
|
|||||
| ↓ | _mod_http_get | 17 | 55 | 207 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/cli/mod-http/mod-http-get.c |
char *
_mod_http_get (_mod_http_context_t * http_context, char *url, char *password)
{
char *ret = NULL;
CURL *curl_handle;
CURLcode res;
_memory_struct_t chunk;
char *authorization = NULL;
int64_t origin = lw6sys_get_timestamp ();
chunk.memory = NULL; /* we expect realloc(NULL, size) to work */
chunk.size = 0; /* no data at this point */
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("GET \"%s\""), url);
/*
* We use this lock because CURL might use gethostbyname internally.
* Not locking gives segfault error, typically:
* "0x0077502f in Curl_getaddrinfo_ex () from /usr/lib/libcurl.so.4"
* Note that we could lock *only* the curl_easy_perform function,
* but in practice we would barely gain any time, and the safety
* of being sure all CURL functions are serialized has some value.
*/
if (lw6net_dns_lock ())
{
/*
* Check if timeout is OK for if we had many locks, we can have
* a timeout between now and the end of the call
*/
if (_mod_http_timeout_ok (http_context, origin))
{
/* init the curl session */
curl_handle = curl_easy_init ();
if (curl_handle)
{
/*
* Complicated, not sure this is 100% mandatory, but
* reading http://horstr.blogspot.com/2008/04/on-libcurl-openssl-and-thread-safety.html
* I came to the conclusion it might not harm
*/
res = curl_easy_setopt (curl_handle, CURLOPT_NOSIGNAL, 1);
if (res == CURLE_OK)
{
/* specify URL to get */
res = curl_easy_setopt (curl_handle, CURLOPT_URL, url);
if (res == CURLE_OK)
{
res =
curl_easy_setopt (curl_handle, CURLOPT_WRITEFUNCTION,
_write_memory_callback);
if (res == CURLE_OK)
{
/* we pass our 'chunk' struct to the callback function */
res =
curl_easy_setopt (curl_handle, CURLOPT_WRITEDATA,
(void *) &chunk);
if (res == CURLE_OK)
{
/*
* Don't waist a full minute when
* firewall is in DROP mode
*/
res =
curl_easy_setopt (curl_handle,
CURLOPT_CONNECTTIMEOUT,
http_context->data.
consts.connect_timeout);
if (res == CURLE_OK)
{
/*
* Don't wait forever is server doesn't answer,
* this only happens if server is buggy, but
* it *can* be buggy. Or malicious.
*/
res =
curl_easy_setopt (curl_handle,
CURLOPT_TIMEOUT,
http_context->data.
consts.global_timeout);
if (res == CURLE_OK)
{
/* some servers don't like requests that are made without a user-agent
field, so we provide one */
res =
curl_easy_setopt (curl_handle,
CURLOPT_USERAGENT,
lw6sys_build_get_package_tarname
());
if (res == CURLE_OK)
{
if (password)
{
authorization =
lw6sys_new_sprintf ("%s:%s",
lw6sys_build_get_package_tarname
(),
password);
if (authorization)
{
lw6sys_log
(LW6SYS_LOG_DEBUG,
_x_
("using authorization \"%s\""),
authorization);
/* tell libcurl we can use "any" auth, which lets the lib pick one, but it
also costs one extra round-trip and possibly sending of all the PUT
data twice!!! */
res =
curl_easy_setopt
(curl_handle,
CURLOPT_HTTPAUTH,
(long) CURLAUTH_ANY);
if (res != CURLE_OK)
{
_print_error
("curl_easy_setopt(CURLOPT_HTTPAUTH)",
res);
}
/* set user name and password for the authentication */
res =
curl_easy_setopt
(curl_handle,
CURLOPT_USERPWD,
authorization);
if (res != CURLE_OK)
{
_print_error
("curl_easy_setopt(CURLOPT_USERPWD)",
res);
}
LW6SYS_FREE (authorization);
}
}
/* get it! */
res =
curl_easy_perform (curl_handle);
if (res == CURLE_OK)
{
/* should be OK */
}
else
{
_print_error
("curl_easy_perform", res);
}
}
else
{
_print_error
("curl_easy_setopt(CURLOPT_USERAGENT)",
res);
}
}
else
{
_print_error
("curl_easy_setopt(CURLOPT_TIMEOUT)",
res);
}
}
else
{
_print_error
("curl_easy_setopt(CURLOPT_CONNECTTIMEOUT)",
res);
}
}
else
{
_print_error
("curl_easy_setopt(CURLOPT_WRITEDATA)", res);
}
}
else
{
_print_error
("curl_easy_setopt(CURLOPT_WRITEFUNCTION)", res);
}
}
else
{
_print_error ("curl_easy_setopt(CURLOPT_URL)", res);
}
}
else
{
_print_error ("curl_easy_setopt(CURLOPT_NOSIGNAL)", res);
}
/* cleanup curl stuff */
curl_easy_cleanup (curl_handle);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unable to initialize CURL handle"));
}
if (chunk.memory)
{
ret = chunk.memory;
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("response=\"%s\""), ret);
}
}
lw6net_dns_unlock ();
}
return ret;
}
|
|||||
| ↓ | lw6gui_menu_sync | 17 | 47 | 118 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/gui/gui-menu.c |
int
lw6gui_menu_sync (lw6gui_menu_t * dst, lw6gui_menu_t * src)
{
int ret = 0;
int i, d;
lw6gui_menuitem_t *item = NULL;
if (dst && src)
{
if (!lw6sys_str_is_same (dst->title, src->title))
{
lw6gui_menu_set_title (dst, src->title);
}
if (!lw6sys_str_is_same (dst->help, src->help))
{
lw6gui_menu_set_help (dst, src->help);
}
if (!lw6sys_str_is_same (dst->popup, src->popup))
{
lw6gui_menu_set_popup (dst, src->popup);
}
d = dst->nb_items - src->nb_items;
if (d > 0)
{
for (i = 0; i < d; ++i)
{
/*
* We remove the first item, it might not be perfect but
* we don't care, items will be synchronized later
*/
lw6gui_menu_remove (dst, 0, 0);
}
}
if (d < 0)
{
for (i = 0; i < -d; ++i)
{
/*
* We add any item, we just don't care, synchronisation
* of items will fix things.
*/
item = lw6gui_menuitem_dup (src->items[i]);
if (item)
{
lw6gui_menu_append (dst, item, 0);
}
}
}
lw6gui_menuitem_sync (dst->esc_item, src->esc_item);
if (dst->nb_items == src->nb_items)
{
for (i = 0; i < src->nb_items; ++i)
{
lw6gui_menuitem_sync (dst->items[i], src->items[i]);
}
dst->selected_item = src->selected_item;
/*
* Note the src <-> dst inversion for the following values
*/
src->first_item_displayed = dst->first_item_displayed;
src->nb_items_displayed = dst->nb_items_displayed;
src->order_of_selected_on_display =
dst->order_of_selected_on_display;
/*
* The rest is "normal", copied from src to dst
*/
dst->allow_scroll = src->allow_scroll;
if (src->breadcrumbs)
{
if (dst->breadcrumbs)
{
/*
* Lazy test on size only
*/
if (lw6sys_list_length (dst->breadcrumbs) !=
lw6sys_list_length (src->breadcrumbs))
{
lw6sys_list_free (dst->breadcrumbs);
dst->breadcrumbs =
lw6sys_list_dup (src->breadcrumbs,
(lw6sys_dup_func_t) lw6sys_str_copy);
}
}
else
{
dst->breadcrumbs =
lw6sys_list_dup (src->breadcrumbs,
(lw6sys_dup_func_t) lw6sys_str_copy);
}
}
else
{
if (dst->breadcrumbs)
{
lw6sys_list_free (dst->breadcrumbs);
dst->breadcrumbs = NULL;
}
}
ret = 1;
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("unable to sync menus, dst has %d items while src has %d items"),
dst->nb_items, src->nb_items);
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING, _x_ ("menus are not syncable"));
}
return ret;
}
|
|||||
| ↓ | _lw6sys_bazooka_register_realloc_2 | 17 | 45 | 91 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/sys/sys-bazooka.c |
int
_lw6sys_bazooka_register_realloc_2 (char *ptr, char *ptr2, int size,
char *file, int line)
{
int ret = 1;
#ifndef LW6_OPTIMIZE
bazooka_lock ();
if (bazooka_data)
{
int i;
char *file_only;
for (i = _hash_index (ptr); i < bazooka_size; ++i)
{
if (bazooka_data[i].ptr == ptr)
{
if (bazooka_eraser && bazooka_data[i].size < size)
{
memset (ptr2 + bazooka_data[i].size,
BAZOOKA_ERASER_REALLOC_2,
size - bazooka_data[i].size);
}
memset (&(bazooka_data[i]), 0, sizeof (_lw6sys_bazooka_t));
if (ptr == ptr2)
{
bazooka_data[i].ptr = ptr2; // was NULL because of memset
bazooka_data[i].size = size;
file_only = strrchr (file, '/');
if (file_only && *file_only)
{
file_only++;
}
else
{
file_only = file;
}
strncpy (bazooka_data[i].file, file_only,
_LW6SYS_BAZOOKA_FILE_SIZE - 1);
bazooka_data[i].line = line;
bazooka_data[i].timestamp = lw6sys_get_timestamp ();
}
break; // important to leave loop, else serious perfomance problem
}
}
if (bazooka_trustable && i == bazooka_size)
{
ret = 0;
}
if (ptr != ptr2)
{
/*
* It's really important to relocate
* entry if ptr!= ptr2 else _hash_index()
* will be useless
*/
for (i = _hash_index (ptr2); i < bazooka_size; ++i)
{
if (bazooka_data[i].ptr == NULL)
{
memset (&(bazooka_data[i]), 0, sizeof (_lw6sys_bazooka_t));
bazooka_data[i].ptr = ptr2;
bazooka_data[i].size = size;
file_only = strrchr (file, '/');
if (file_only && *file_only)
{
file_only++;
}
else
{
file_only = file;
}
strncpy (bazooka_data[i].file, file_only,
_LW6SYS_BAZOOKA_FILE_SIZE - 1);
bazooka_data[i].line = line;
bazooka_data[i].timestamp = lw6sys_get_timestamp ();
break; // important to leave loop, else serious perfomance problem
}
}
if (i == bazooka_size)
{
_big_cleanup ();
}
}
}
bazooka_unlock ();
#endif
return ret;
}
|
|||||
| ↓ | lw6map_coords_fix_xy | 17 | 41 | 86 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/map/map-coords.c |
void
lw6map_coords_fix_xy (lw6map_rules_t * rules, lw6sys_whd_t * shape, int *x,
int *y)
{
if ((*x) < 0 || (*y) < 0 || (*x) >= shape->w || (*y) >= shape->h)
{
/*
* small optimization: we only declare variables now, this
* way when the coords are within map boundaries, code
* remains minimalist.
*/
int w;
int h;
int x_polarity;
int y_polarity;
int tmp_x;
int tmp_y;
w = shape->w;
h = shape->h;
x_polarity = rules->x_polarity;
y_polarity = rules->y_polarity;
tmp_x = *x;
tmp_y = *y;
if (x_polarity > 0)
{
while (tmp_x >= w)
{
tmp_x -= w;
}
while (tmp_x < 0)
{
tmp_x += w;
}
}
if (y_polarity > 0)
{
while (tmp_y >= h)
{
tmp_y -= h;
}
while (tmp_y < 0)
{
tmp_y += h;
}
}
if (x_polarity < 0)
{
while (tmp_x >= w)
{
tmp_x -= w;
tmp_y = h - 1 - tmp_y;
}
while (tmp_x < 0)
{
tmp_x += w;
tmp_y = h - 1 - tmp_y;
}
}
if (y_polarity < 0)
{
while (tmp_y >= h)
{
tmp_x = w - 1 - tmp_x;
tmp_y -= h;
}
while (tmp_y < 0)
{
tmp_x = w - 1 - tmp_x;
tmp_y += h;
}
}
/*
* Last, we check for absolute limits, this will also
* handle the 0 polarity case.
*/
tmp_x = lw6sys_max (0, lw6sys_min (tmp_x, w - 1));
tmp_y = lw6sys_max (0, lw6sys_min (tmp_y, h - 1));
// done, affect values
(*x) = tmp_x;
(*y) = tmp_y;
}
}
|
|||||
| ↓ | _update_msg_list_by_seq_with_search | 17 | 39 | 93 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/dat/dat-stack.c |
static int
_update_msg_list_by_seq_with_search (_lw6dat_stack_t * stack,
lw6sys_list_t ** msg_list, int seq,
int serial, int search_inc,
int search_dec)
{
int ret = 0;
_lw6dat_atom_t *atom = NULL;
char *full_str = NULL;
char *msg = NULL;
char *cmd = NULL;
int seq_from_len = 0;
int i, n;
int no_hole = 1;
if (serial >= stack->serial_min && serial <= stack->serial_max)
{
atom = _lw6dat_stack_get_atom (stack, serial);
if (atom && atom->seq == seq)
{
serial -= atom->order_i;
if (serial >= stack->serial_min && serial <= stack->serial_max)
{
n = atom->order_n;
msg =
(char *)
LW6SYS_CALLOC (((_LW6DAT_HEADER_MAX_SIZE +
(_LW6DAT_ATOM_MAX_SIZE * n)) +
1) * sizeof (char));
if (msg)
{
full_str = _lw6dat_atom_get_full_str (atom);
seq_from_len =
atom->cmd_str_offset - atom->seq_from_cmd_str_offset;
if (seq_from_len > 0
&& seq_from_len < _LW6DAT_HEADER_MAX_SIZE)
{
memcpy (msg, full_str + atom->seq_from_cmd_str_offset,
seq_from_len);
cmd = msg + seq_from_len;
for (i = 0; i < n && no_hole; ++i)
{
atom = _lw6dat_stack_get_atom (stack, serial + i);
if (atom)
{
full_str = _lw6dat_atom_get_full_str (atom);
if (full_str)
{
memcpy (cmd + (i * _LW6DAT_ATOM_MAX_SIZE),
full_str + atom->cmd_str_offset,
strlen (full_str +
atom->cmd_str_offset));
}
}
else
{
no_hole = 0;
}
}
if (no_hole)
{
if (search_dec)
{
_update_msg_list_by_seq_with_search (stack,
msg_list,
seq,
serial - 1,
0, 1);
}
lw6sys_list_push_front (msg_list, msg);
if (search_inc)
{
_update_msg_list_by_seq_with_search (stack,
msg_list,
seq,
serial + n,
1, 0);
}
ret = 1;
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("bad seq_from_len=%d"), seq_from_len);
}
}
}
}
}
return ret;
}
|
|||||
| ↓ | lw6net_if_guess_local | 17 | 36 | 109 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/net/net-if.c |
char *
lw6net_if_guess_local ()
{
char *ret = NULL;
#ifdef LW6_MS_WINDOWS
/*
* use GetAdaptersInfo
* http://msdn.microsoft.com/en-us/library/aa365917.aspx
*/
PIP_ADAPTER_INFO pAdapterInfo = NULL;
PIP_ADAPTER_INFO pAdapter = NULL;
DWORD dwRetVal = 0;
ULONG ulOutBufLen = sizeof (IP_ADAPTER_INFO);
pAdapterInfo = (IP_ADAPTER_INFO *) LW6SYS_CALLOC (sizeof (IP_ADAPTER_INFO));
if (pAdapterInfo)
{
// Make an initial call to GetAdaptersInfo to get
// the necessary size into the ulOutBufLen variable
if (GetAdaptersInfo (pAdapterInfo, &ulOutBufLen) ==
ERROR_BUFFER_OVERFLOW)
{
LW6SYS_FREE (pAdapterInfo);
pAdapterInfo = (IP_ADAPTER_INFO *) LW6SYS_CALLOC (ulOutBufLen);
}
if (pAdapterInfo)
{
if ((dwRetVal =
GetAdaptersInfo (pAdapterInfo, &ulOutBufLen)) == NO_ERROR)
{
pAdapter = pAdapterInfo;
while (pAdapter && !ret)
{
if (pAdapter->IpAddressList.IpAddress.String &&
strlen (pAdapter->IpAddressList.IpAddress.String) >
0
&& strcmp (pAdapter->IpAddressList.IpAddress.String,
LW6NET_ADDRESS_LOOPBACK) != 0)
{
ret =
lw6sys_str_copy (pAdapter->IpAddressList.
IpAddress.String);
}
pAdapter = pAdapter->Next;
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("GetAdaptersInfo failed with error %d"),
dwRetVal);
}
}
}
if (pAdapterInfo)
{
LW6SYS_FREE (pAdapterInfo);
}
#else
/*
* use getifaddrs
* http://www.kernel.org/doc/man-pages/online/pages/man3/getifaddrs.3.html#EXAMPLE
*/
struct ifaddrs *ifaddr, *ifa;
int family, s;
char host[NI_MAXHOST];
if (!getifaddrs (&ifaddr))
{
/* Walk through linked list, maintaining head pointer so we
can free list later */
for (ifa = ifaddr; ifa != NULL && !ret; ifa = ifa->ifa_next)
{
family = ifa->ifa_addr->sa_family;
if (family == AF_INET)
{
if (!(s = getnameinfo (ifa->ifa_addr,
sizeof (struct sockaddr_in),
host, NI_MAXHOST, NULL, 0,
NI_NUMERICHOST)))
{
if (strcmp (host, LW6NET_ADDRESS_LOOPBACK))
{
ret = lw6sys_str_copy (host);
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("getnameinfo() failed \"%s\""),
gai_strerror (s));
}
}
}
freeifaddrs (ifaddr);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING, _x_ ("getifaddrs failed"));
}
#endif
return ret;
}
|
|||||
| ↓ | lw6bot_create_backend | 17 | 36 | 89 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/bot/bot-register.c |
lw6bot_backend_t *
lw6bot_create_backend (int argc, char *argv[], char *name)
{
lw6bot_backend_t *backend = NULL;
#ifdef LW6_ALLINONE
if (name && !strcmp (name, "brute"))
{
backend = mod_brute_create_backend ();
}
if (name && !strcmp (name, "follow"))
{
backend = mod_follow_create_backend ();
}
if (name && !strcmp (name, "idiot"))
{
backend = mod_idiot_create_backend ();
}
if (name && !strcmp (name, "random"))
{
backend = mod_random_create_backend ();
}
if (backend)
{
backend->argc = argc;
backend->argv = argv;
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("bot backend \"%s\" does not exist"), name);
}
#else
lw6dyn_dl_handle_t *backend_handle = NULL;
backend_handle = lw6dyn_dlopen_backend (argc, argv, "bot", name);
if (backend_handle)
{
char *init_func_name;
lw6bot_backend_t *(*init_func) ();
init_func_name =
lw6sys_new_sprintf (LW6DYN_CREATE_BACKEND_FUNC_FORMAT, name);
if (init_func_name)
{
init_func = lw6dyn_dlsym (backend_handle, init_func_name);
if (init_func)
{
backend = init_func ();
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("unable to find function \"%s\" in server backend \"%s\""),
init_func_name, name);
}
LW6SYS_FREE (init_func_name);
}
}
if (backend && backend_handle)
{
backend->dl_handle = backend_handle;
backend->argc = argc;
backend->argv = argv;
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unable to open server backend \"%s\""), name);
}
#endif
if (backend)
{
static u_int32_t seq_id = 0;
backend->id = 0;
while (!(backend->id))
{
backend->id = ++seq_id;
}
}
return backend;
}
|
|||||
| ↓ | _mod_ogg_unload_consts | 17 | 33 | 69 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/snd/mod-ogg/mod-ogg-const.c |
void
_mod_ogg_unload_consts (_mod_ogg_context_t * context)
{
if (context->const_data.file_splash)
{
LW6SYS_FREE (context->const_data.file_splash);
}
if (context->const_data.file_valid)
{
LW6SYS_FREE (context->const_data.file_valid);
}
if (context->const_data.file_select)
{
LW6SYS_FREE (context->const_data.file_select);
}
if (context->const_data.file_no)
{
LW6SYS_FREE (context->const_data.file_no);
}
if (context->const_data.file_start)
{
LW6SYS_FREE (context->const_data.file_start);
}
if (context->const_data.file_death)
{
LW6SYS_FREE (context->const_data.file_death);
}
if (context->const_data.file_bell)
{
LW6SYS_FREE (context->const_data.file_bell);
}
if (context->const_data.file_score)
{
LW6SYS_FREE (context->const_data.file_score);
}
if (context->const_data.file_hello)
{
LW6SYS_FREE (context->const_data.file_hello);
}
if (context->const_data.file_goodbye)
{
LW6SYS_FREE (context->const_data.file_goodbye);
}
if (context->const_data.file_water1)
{
LW6SYS_FREE (context->const_data.file_water1);
}
if (context->const_data.file_water2)
{
LW6SYS_FREE (context->const_data.file_water2);
}
if (context->const_data.file_water3)
{
LW6SYS_FREE (context->const_data.file_water3);
}
if (context->const_data.file_water4)
{
LW6SYS_FREE (context->const_data.file_water4);
}
if (context->const_data.file_water5)
{
LW6SYS_FREE (context->const_data.file_water5);
}
if (context->const_data.file_water6)
{
LW6SYS_FREE (context->const_data.file_water6);
}
memset (&context->const_data, 0, sizeof (_mod_ogg_const_data_t));
}
|
|||||
| ↓ | joystick_button_index | 17 | 30 | 73 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/gfx/mod-gl/gl-utils/gl-utils-event.c |
static int
joystick_button_index (SDL_Event * event,
mod_gl_utils_const_data_t * const_data, int i)
{
int ret = -1;
switch (i)
{
case LW6GUI_JOYSTICK1_ID:
if (event->jbutton.button == const_data->joystick1_button_a_index)
{
ret = LW6GUI_JOYSTICK_BUTTON_ID_A;
}
if (event->jbutton.button == const_data->joystick1_button_b_index)
{
ret = LW6GUI_JOYSTICK_BUTTON_ID_B;
}
if (event->jbutton.button == const_data->joystick1_button_c_index)
{
ret = LW6GUI_JOYSTICK_BUTTON_ID_C;
}
if (event->jbutton.button == const_data->joystick1_button_d_index)
{
ret = LW6GUI_JOYSTICK_BUTTON_ID_D;
}
if (event->jbutton.button == const_data->joystick1_button_e_index)
{
ret = LW6GUI_JOYSTICK_BUTTON_ID_E;
}
if (event->jbutton.button == const_data->joystick1_button_f_index)
{
ret = LW6GUI_JOYSTICK_BUTTON_ID_F;
}
break;
case LW6GUI_JOYSTICK2_ID:
if (event->jbutton.button == const_data->joystick2_button_a_index)
{
ret = LW6GUI_JOYSTICK_BUTTON_ID_A;
}
if (event->jbutton.button == const_data->joystick2_button_b_index)
{
ret = LW6GUI_JOYSTICK_BUTTON_ID_B;
}
if (event->jbutton.button == const_data->joystick2_button_c_index)
{
ret = LW6GUI_JOYSTICK_BUTTON_ID_C;
}
if (event->jbutton.button == const_data->joystick2_button_d_index)
{
ret = LW6GUI_JOYSTICK_BUTTON_ID_D;
}
if (event->jbutton.button == const_data->joystick2_button_e_index)
{
ret = LW6GUI_JOYSTICK_BUTTON_ID_E;
}
if (event->jbutton.button == const_data->joystick2_button_f_index)
{
ret = LW6GUI_JOYSTICK_BUTTON_ID_F;
}
break;
}
/*
* If button is outside our range we still take it in account but with
* a non-modifiable binding.
*/
if (ret < 0 && const_data->joystick_all_buttons)
{
ret = event->jbutton.button % LW6GUI_NB_JOYSTICK_BUTTONS;
}
return ret;
}
|
|||||
| ↓ | test_url | 16 | 60 | 127 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/sys/sys-test.c |
static int
test_url ()
{
int ret = 1;
LW6SYS_TEST_FUNCTION_BEGIN;
{
char *url;
url = lw6sys_url_http_from_ip_port (TEST_URL_IP_1, TEST_URL_PORT_1);
if (url)
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("url from \"%s:%d\" is \"%s\""),
TEST_URL_IP_1, TEST_URL_PORT_1, url);
LW6SYS_FREE (url);
}
else
{
ret = 0;
}
url = lw6sys_url_http_from_ip_port (TEST_URL_IP_2, TEST_URL_PORT_2);
if (url)
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("url from \"%s:%d\"is \"%s\""),
TEST_URL_IP_2, TEST_URL_PORT_2, url);
LW6SYS_FREE (url);
}
else
{
ret = 0;
}
if (lw6sys_url_is_canonized (TEST_URL_NOT_CANONIZED))
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("url \"%s\" reported as canonized, but it isn't"),
TEST_URL_NOT_CANONIZED);
ret = 0;
}
url = lw6sys_url_canonize (TEST_URL_CANONIZE_1);
if (url)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("canonical url for \"%s\" is \"%s\""),
TEST_URL_CANONIZE_1, url);
if (!lw6sys_url_is_canonized (url))
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("url \"%s\" not reported as canonized"), url);
ret = 0;
}
LW6SYS_FREE (url);
}
url = lw6sys_url_canonize (TEST_URL_CANONIZE_2);
if (url)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("canonical url for \"%s\" is \"%s\""),
TEST_URL_CANONIZE_2, url);
if (!lw6sys_url_is_canonized (url))
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("url \"%s\" not reported as canonized"), url);
ret = 0;
}
LW6SYS_FREE (url);
}
url = lw6sys_url_canonize (TEST_URL_CANONIZE_3);
if (url)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("canonical url for \"%s\" is \"%s\""),
TEST_URL_CANONIZE_3, url);
if (!lw6sys_url_is_canonized (url))
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("url \"%s\" not reported as canonized"), url);
ret = 0;
}
LW6SYS_FREE (url);
}
url = lw6sys_url_canonize (TEST_URL_CANONIZE_4);
if (url)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("canonical url for \"%s\" is \"%s\""),
TEST_URL_CANONIZE_4, url);
if (!lw6sys_url_is_canonized (url))
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("url \"%s\" not reported as canonized"), url);
ret = 0;
}
LW6SYS_FREE (url);
}
url = lw6sys_url_canonize (TEST_URL_CANONIZE_5);
if (url)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("canonical url for \"%s\" is \"%s\""),
TEST_URL_CANONIZE_5, url);
if (!lw6sys_url_is_canonized (url))
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("url \"%s\" not reported as canonized"), url);
ret = 0;
}
LW6SYS_FREE (url);
}
url = lw6sys_url_canonize (TEST_URL_CANONIZE_6);
if (url)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("canonical url for \"%s\" is \"%s\""),
TEST_URL_CANONIZE_6, url);
if (!lw6sys_url_is_canonized (url))
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("url \"%s\" not reported as canonized"), url);
ret = 0;
}
LW6SYS_FREE (url);
}
}
LW6SYS_TEST_FUNCTION_END;
return ret;
}
|
|||||
| ↓ | _mod_ogg_init | 16 | 48 | 133 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/snd/mod-ogg/mod-ogg-setup.c |
_mod_ogg_context_t *
_mod_ogg_init (int argc, char *argv[], float fx_volume, float water_volume,
float music_volume)
{
_mod_ogg_context_t *snd_context = NULL;
int sdl_ok = 1;
int ok = 0;
SDL_version version;
int pan1 = 0;
int pan2 = 0;
lw6sys_log (LW6SYS_LOG_INFO,
_x_ ("ogg init volume=%01.2f/%01.2f/%01.2f"), fx_volume,
water_volume, music_volume);
snd_context =
(_mod_ogg_context_t *) LW6SYS_CALLOC (sizeof (_mod_ogg_context_t));
if (snd_context)
{
if (_mod_ogg_path_init (snd_context, argc, argv))
{
memset (&version, 0, sizeof (SDL_version));
SDL_VERSION (&version);
lw6sys_log (LW6SYS_LOG_INFO,
_x_ ("SDL header version when compiled %u.%u.%u"),
version.major, version.minor, version.patch);
version = *SDL_Linked_Version ();
lw6sys_log (LW6SYS_LOG_INFO,
_x_ ("SDL linked version now at runtime %u.%u.%u"),
version.major, version.minor, version.patch);
_mod_ogg_load_consts (snd_context);
if (lw6sys_sdl_register ())
{
sdl_ok = !SDL_Init (SDL_INIT_EVENTTHREAD);
}
if (!SDL_WasInit (SDL_INIT_EVENTTHREAD))
{
lw6sys_log (LW6SYS_LOG_INFO,
_x_
("unable to start SDL event thread, using poll() function"));
}
sdl_ok = sdl_ok && (SDL_WasInit (SDL_INIT_AUDIO)
|| !SDL_InitSubSystem (SDL_INIT_AUDIO));
if (sdl_ok)
{
if (!Mix_OpenAudio
(snd_context->const_data.frequency,
(snd_context->const_data.bits ==
8) ? AUDIO_U8 : AUDIO_S16SYS,
snd_context->const_data.channels,
snd_context->const_data.chunksize))
{
snd_context->mixer.nb_channels = Mix_AllocateChannels (-1);
if (snd_context->mixer.nb_channels > _MOD_OGG_CHANNEL_FX0)
{
Mix_GroupChannel (_MOD_OGG_CHANNEL_WATER1,
_MOD_OGG_CHANNEL_GROUP_WATER);
Mix_GroupChannel (_MOD_OGG_CHANNEL_WATER2,
_MOD_OGG_CHANNEL_GROUP_WATER);
Mix_GroupChannels (_MOD_OGG_CHANNEL_FX0,
snd_context->mixer.nb_channels - 1,
_MOD_OGG_CHANNEL_GROUP_FX);
/*
* For some reason panning does not use MIX_MAX_VOLUME
*/
pan1 = snd_context->const_data.water_pan1 * 255.0f;
pan2 = snd_context->const_data.water_pan2 * 255.0f;
if (!Mix_SetPanning
(_MOD_OGG_CHANNEL_WATER1, pan1, pan2))
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("unable to set panning on channel %d (%s)"),
_MOD_OGG_CHANNEL_WATER1,
Mix_GetError ());
}
if (!Mix_SetPanning
(_MOD_OGG_CHANNEL_WATER2, pan2, pan1))
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("unable to set panning on channel %d (%s)"),
_MOD_OGG_CHANNEL_WATER2,
Mix_GetError ());
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("not enough channels (%d) to handle both water and sound fx"),
snd_context->mixer.nb_channels);
}
_mod_ogg_set_fx_volume (snd_context, fx_volume);
_mod_ogg_set_water_volume (snd_context, water_volume);
_mod_ogg_set_music_volume (snd_context, music_volume);
if (_mod_ogg_load_fx (snd_context)
&& _mod_ogg_load_water (snd_context))
{
ok = 1;
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("SDL_mixer init error: \"%s\""),
Mix_GetError ());
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("SDL init error: \"%s\""), SDL_GetError ());
}
}
}
if (!ok)
{
lw6sys_log (LW6SYS_LOG_WARNING, _x_ ("unable to init mod_ogg"));
_mod_ogg_quit (snd_context);
snd_context = NULL;
}
return snd_context;
}
|
|||||
| ↓ | _lw6p2p_node_close | 16 | 40 | 103 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/p2p/p2p-node.c |
void
_lw6p2p_node_close (_lw6p2p_node_t * node)
{
char *query = NULL;
_lw6p2p_srv_oob_callback_data_t *srv_oob = NULL;
_lw6p2p_cli_oob_callback_data_t *cli_oob = NULL;
int i = 0;
if (node)
{
/*
* It's important to test it here, indeed, we can't assume
* db is still here when closing node *if* node is closed
* by garbage collector.
*/
if (!node->closed)
{
node->closed = 1;
if (_lw6p2p_db_lock (node->db))
{
query =
lw6sys_new_sprintf (_lw6p2p_db_get_query
(node->db,
_LW6P2P_DELETE_NODE_BY_ID_SQL),
node->node_id_str);
if (query)
{
_lw6p2p_db_exec_ignore_data (node->db, query);
LW6SYS_FREE (query);
}
/*
* OK this is paranoid, we already deleted it by ID but...
* who knows, well, never be too sure ;)
*/
query =
lw6sys_new_sprintf (_lw6p2p_db_get_query
(node->db,
_LW6P2P_DELETE_NODE_BY_URL_SQL),
node->public_url);
if (query)
{
_lw6p2p_db_exec_ignore_data (node->db, query);
LW6SYS_FREE (query);
}
_lw6p2p_db_unlock (node->db);
}
for (i = 0; i < LW6P2P_MAX_NB_TENTACLES; ++i)
{
_lw6p2p_tentacle_clear (&(node->tentacles[i]));
}
if (node->srv_oobs)
{
while (node->srv_oobs && !lw6sys_list_is_empty (node->srv_oobs))
{
srv_oob =
(_lw6p2p_srv_oob_callback_data_t *)
lw6sys_list_pop_front (&(node->srv_oobs));
_lw6p2p_srv_oob_callback_data_free (srv_oob);
}
if (!(node->srv_oobs))
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("NULL srv_oobs after emptying"));
}
}
if (node->cli_oobs)
{
while (node->cli_oobs && !lw6sys_list_is_empty (node->cli_oobs))
{
cli_oob =
(_lw6p2p_cli_oob_callback_data_t *)
lw6sys_list_pop_front (&(node->cli_oobs));
_lw6p2p_cli_oob_callback_data_free (cli_oob);
}
if (!(node->cli_oobs))
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("NULL cli_oobs after emptying"));
}
}
_lw6p2p_backends_clear_srv (&(node->backends));
_lw6p2p_backends_clear_cli (&(node->backends));
if (node->listener)
{
lw6srv_stop (node->listener);
node->listener = NULL;
}
}
else
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("closing closed node"));
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING, _x_ ("trying to close NULL node"));
}
}
|
|||||
| ↓ | lw6cli_create_backend | 16 | 37 | 95 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/cli/cli-register.c |
lw6cli_backend_t *
lw6cli_create_backend (int argc, char *argv[], char *name)
{
lw6cli_backend_t *backend = NULL;
#ifdef LW6_ALLINONE
if (name && !strcmp (name, "tcp"))
{
backend = mod_tcp_create_backend ();
}
if (name && !strcmp (name, "udp"))
{
backend = mod_udp_create_backend ();
}
#ifdef MOD_HTTP
if (name && !strcmp (name, "http"))
{
backend = mod_http_create_backend ();
}
#endif
if (backend)
{
backend->argc = argc;
backend->argv = argv;
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("client backend \"%s\" does not exist"), name);
}
#else
lw6dyn_dl_handle_t *backend_handle = NULL;
backend_handle = lw6dyn_dlopen_backend (argc, argv, "cli", name);
if (backend_handle)
{
char *init_func_name;
lw6cli_backend_t *(*init_func) ();
init_func_name =
lw6sys_new_sprintf (LW6DYN_CREATE_BACKEND_FUNC_FORMAT, name);
if (init_func_name)
{
init_func = lw6dyn_dlsym (backend_handle, init_func_name);
if (init_func)
{
backend = init_func ();
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("unable to find function \"%s\" in client backend \"%s\""),
init_func_name, name);
}
LW6SYS_FREE (init_func_name);
}
}
if (backend && backend_handle)
{
backend->dl_handle = backend_handle;
backend->argc = argc;
backend->argv = argv;
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unable to open client backend \"%s\""), name);
}
#endif
if (backend)
{
static u_int32_t seq_id = 0;
backend->id = 0;
while (!(backend->id))
{
backend->id = ++seq_id;
}
backend->name = lw6sys_str_copy (name);
if (!(backend->name))
{
lw6cli_destroy_backend (backend);
}
}
return backend;
}
|
|||||
| ↓ | lw6srv_create_backend | 16 | 37 | 92 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/srv/srv-register.c |
lw6srv_backend_t *
lw6srv_create_backend (int argc, char *argv[], char *name)
{
lw6srv_backend_t *backend = NULL;
#ifdef LW6_ALLINONE
if (name && !strcmp (name, "tcpd"))
{
backend = mod_tcpd_create_backend ();
}
if (name && !strcmp (name, "udpd"))
{
backend = mod_udpd_create_backend ();
}
if (name && !strcmp (name, "httpd"))
{
backend = mod_httpd_create_backend ();
}
if (backend)
{
backend->argc = argc;
backend->argv = argv;
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("server backend \"%s\" does not exist"), name);
}
#else
lw6dyn_dl_handle_t *backend_handle = NULL;
backend_handle = lw6dyn_dlopen_backend (argc, argv, "srv", name);
if (backend_handle)
{
char *init_func_name;
lw6srv_backend_t *(*init_func) ();
init_func_name =
lw6sys_new_sprintf (LW6DYN_CREATE_BACKEND_FUNC_FORMAT, name);
if (init_func_name)
{
init_func = lw6dyn_dlsym (backend_handle, init_func_name);
if (init_func)
{
backend = init_func ();
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("unable to find function \"%s\" in server backend \"%s\""),
init_func_name, name);
}
LW6SYS_FREE (init_func_name);
}
}
if (backend && backend_handle)
{
backend->dl_handle = backend_handle;
backend->argc = argc;
backend->argv = argv;
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unable to open server backend \"%s\""), name);
}
#endif
if (backend)
{
static u_int32_t seq_id = 0;
backend->id = 0;
while (!(backend->id))
{
backend->id = ++seq_id;
}
backend->name = lw6sys_str_copy (name);
if (!(backend->name))
{
lw6srv_destroy_backend (backend);
}
}
return backend;
}
|
|||||
| ↓ | _do_info | 16 | 37 | 124 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/cli/mod-tcp/mod-tcp-oob.c |
static int
_do_info (_mod_tcp_context_t * tcp_context, lw6nod_info_t * node_info,
lw6cli_oob_data_t * oob_data, char *url, lw6sys_url_t * parsed_url,
char *ip)
{
int ret = 0;
int eom = 0;
int sock = -1;
int64_t origin = 0;
char *request = NULL;
char *response = NULL;
lw6sys_assoc_t *assoc = NULL;
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("connecting in TCP on %s:%d"), ip,
parsed_url->port);
assoc = lw6sys_assoc_new (lw6sys_free_callback);
if (assoc)
{
sock =
lw6net_tcp_connect (ip, parsed_url->port,
tcp_context->data.consts.connect_timeout * 1000);
if (sock >= 0)
{
request =
lw6msg_oob_generate_request (LW6MSG_OOB_INFO, url,
node_info->const_info.password,
node_info->const_info.url);
if (request)
{
/*
* We calculate origin only now for connect() time isn't
* relevant on mod-tcp when connected, since we do it
* only once at the beginning. This might give mod-tcp
* an advantage over mod-http but after all, this is
* logical.
*/
origin = lw6sys_get_timestamp ();
if (lw6net_send_line_tcp (sock, request))
{
/*
* Here we use idle and not snooze for we're concerned
* with the exact time it takes to ping the server.
*/
lw6sys_idle ();
while (_mod_tcp_oob_should_continue
(tcp_context, oob_data, sock) && !eom)
{
while (_mod_tcp_oob_should_continue
(tcp_context, oob_data, sock)
&& ((response = lw6net_recv_line_tcp (sock)) ==
NULL) && !eom)
{
/*
* Here we use idle and not snooze for we're concerned
* with the exact time it takes to ping the server.
*/
lw6sys_idle ();
}
if (response)
{
if (strlen (response) == 0)
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("end of message detected"));
eom = 1;
}
else
{
if (assoc)
{
if (lw6msg_utils_parse_key_value_to_assoc
(&assoc, response))
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("parsed line \"%s\""),
response);
}
else
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_
("unable to parse line \"%s\", ignoring"),
response);
}
}
}
LW6SYS_FREE (response);
}
else
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_
("inconsistent response from %s:%d"),
ip, parsed_url->port);
}
}
}
LW6SYS_FREE (request);
}
lw6net_socket_close (sock);
}
if (assoc)
{
if (oob_data->verify_callback_func)
{
/*
* It's safe to call this here even if, for instance,
* origin is wrong for the verify callback should check
* for right values in the assoc.
*/
ret =
oob_data->
verify_callback_func (oob_data->verify_callback_data, url, ip,
parsed_url->port,
lw6sys_get_timestamp () - origin,
assoc);
}
lw6sys_assoc_free (assoc);
}
}
return ret;
}
|
|||||
| ↓ | decode_4 | 16 | 32 | 64 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/glb/gnulib-base64.c |
static inline bool
decode_4 (char const *in, size_t inlen, char **outp, size_t * outleft)
{
char *out = *outp;
if (inlen < 2)
return false;
if (!isbase64 (in[0]) || !isbase64 (in[1]))
return false;
if (*outleft)
{
*out++ = ((b64[to_uchar (in[0])] << 2) | (b64[to_uchar (in[1])] >> 4));
--*outleft;
}
if (inlen == 2)
return_false;
if (in[2] == '=')
{
if (inlen != 4)
return_false;
if (in[3] != '=')
return_false;
}
else
{
if (!isbase64 (in[2]))
return_false;
if (*outleft)
{
*out++ = (((b64[to_uchar (in[1])] << 4) & 0xf0)
| (b64[to_uchar (in[2])] >> 2));
--*outleft;
}
if (inlen == 3)
return_false;
if (in[3] == '=')
{
if (inlen != 4)
return_false;
}
else
{
if (!isbase64 (in[3]))
return_false;
if (*outleft)
{
*out++ = (((b64[to_uchar (in[2])] << 6) & 0xc0)
| b64[to_uchar (in[3])]);
--*outleft;
}
}
}
*outp = out;
return true;
}
|
|||||
| ↓ | _add_node_html | 16 | 30 | 62 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/srv/mod-httpd/mod-httpd-oob.c |
static void
_add_node_html (void *func_data, void *data)
{
char **list = (char **) func_data;
char *tmp = NULL;
lw6nod_info_t *verified_node = (lw6nod_info_t *) data;
char *title = NULL;
char *description = NULL;
char *escaped_url = NULL;
char *escaped_title = NULL;
char *escaped_description = NULL;
if (list && (*list) && verified_node && verified_node->const_info.url)
{
title = verified_node->const_info.title;
if ((!title) || (title && strlen (title) == 0))
{
title = verified_node->const_info.url;
}
description = verified_node->const_info.description;
if ((!description) || (description && strlen (description) == 0))
{
description = verified_node->const_info.url;
}
escaped_url =
lw6sys_escape_html_attribute (verified_node->const_info.url);
if (escaped_url)
{
escaped_title = lw6sys_escape_html_attribute (title);
if (escaped_title)
{
escaped_description =
lw6sys_escape_html_attribute (description);
if (escaped_description)
{
if (strlen (*list) > 0)
{
tmp =
lw6sys_new_sprintf
("%s, %s", *list,
escaped_url, escaped_description, escaped_title);
}
else
{
tmp =
lw6sys_new_sprintf
("%s", escaped_url,
escaped_description, escaped_title);
}
LW6SYS_FREE (escaped_description);
}
LW6SYS_FREE (escaped_title);
}
LW6SYS_FREE (escaped_url);
}
if (tmp)
{
LW6SYS_FREE (*list);
(*list) = tmp;
}
}
}
|
|||||
| ↓ | lw6sys_find_in_dir_and_path | 16 | 29 | 63 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/sys/sys-path.c |
char *
lw6sys_find_in_dir_and_path (char *dir, char *path, char *file)
{
char *ret = NULL;
char *file_only = NULL;
char *tmp = NULL;
char *full_path;
lw6sys_list_t *dirs = NULL;
file_only = file;
tmp = strrchr (file, DIR_SEP_CHAR_UNIX);
if (tmp)
{
file_only = tmp + 1;
}
tmp = strrchr (file, DIR_SEP_CHAR_MS_WINDOWS);
if (tmp)
{
file_only = tmp + 1;
}
if (dir && !ret)
{
full_path = lw6sys_path_concat (dir, file_only);
if (full_path)
{
if ((!ret) && lw6sys_file_exists (full_path))
{
ret = full_path;
}
else
{
LW6SYS_FREE (full_path);
}
}
}
if (path && !ret)
{
dirs = lw6sys_env_split (path);
if (dirs)
{
while (dirs
&& ((dir = (char *) lw6sys_list_pop_front (&dirs)) != NULL))
{
full_path = lw6sys_path_concat (dir, file_only);
if (full_path)
{
if ((!ret) && lw6sys_file_exists (full_path))
{
ret = full_path;
}
else
{
LW6SYS_FREE (full_path);
}
}
LW6SYS_FREE (dir);
}
// normally dirs is already freed here
}
}
return ret;
}
|
|||||
| ↓ | _lw6ldr_rgba_read_jpeg | 16 | 84 | 172 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/ldr/ldr-rgba.c |
int
_lw6ldr_rgba_read_jpeg (_lw6ldr_image_rgba_t * image, char *jpeg_file,
lw6sys_progress_t * progress)
{
int ret = 0;
FILE *f = NULL;
struct jpeg_decompress_struct cinfo;
struct jpeg_error_mgr jerr;
JSAMPARRAY buffer;
int row_stride;
int i;
int j;
unsigned char **buf;
int memory_ok;
int size_ok;
int max_width;
int max_height;
lw6sys_progress_begin (progress);
/*
* This function probably lacks many error checks.
*/
f = fopen (jpeg_file, "rb");
if (f != NULL)
{
memset (&cinfo, 0, sizeof (cinfo));
jpeg_create_decompress (&cinfo);
cinfo.err = jpeg_std_error (&jerr);
jpeg_stdio_src (&cinfo, f);
jpeg_read_header (&cinfo, TRUE);
memory_ok = 1;
size_ok = 1;
max_width =
lw6sys_max (LW6MAP_MAX_BODY_WIDTH, LW6MAP_MAX_TEXTURE_WIDTH);
max_height =
lw6sys_max (LW6MAP_MAX_BODY_HEIGHT, LW6MAP_MAX_TEXTURE_HEIGHT);
if (cinfo.output_width > max_width || cinfo.output_height > max_height)
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("can't load RGBA JPEG file \"%s\", it is too big (size=%dx%d max=%dx%d)"),
jpeg_file, (int) cinfo.output_width,
(int) cinfo.output_height, max_width, max_height);
size_ok = 0;
}
if (size_ok)
{
jpeg_start_decompress (&cinfo);
buf =
(unsigned char **) LW6SYS_MALLOC (cinfo.output_height *
sizeof (unsigned char *));
if (buf)
{
for (j = 0; j < cinfo.output_height; ++j)
{
buf[j] =
(unsigned char *) LW6SYS_MALLOC (cinfo.output_width * 4 *
sizeof (unsigned char));
if (!buf[j])
{
memory_ok = 0;
}
}
}
else
{
memory_ok = 0;
}
if (memory_ok)
{
switch (cinfo.output_components)
{
case 3: // color
row_stride = cinfo.output_width * cinfo.output_components;
buffer = (*cinfo.mem->alloc_sarray)
((j_common_ptr) & cinfo, JPOOL_IMAGE, row_stride, 1);
while (cinfo.output_scanline < cinfo.output_height)
{
lw6sys_progress_update (progress, 0,
cinfo.output_height,
cinfo.output_scanline);
j =
lw6sys_max (lw6sys_min
(cinfo.output_scanline,
cinfo.output_height - 1), 0);
jpeg_read_scanlines (&cinfo, buffer, 1);
for (i = 0; i < cinfo.output_width; i++)
{
buf[j][i * 4 + 0] = buffer[0][i * 3 + 0];
buf[j][i * 4 + 1] = buffer[0][i * 3 + 1];
buf[j][i * 4 + 2] = buffer[0][i * 3 + 2];
buf[j][i * 4 + 3] = 255;
}
}
image->w = cinfo.output_width;
image->h = cinfo.output_height;
image->data = buf;
ret = 1;
break;
case 1: // grayscale
row_stride = cinfo.output_width * cinfo.output_components;
buffer = (*cinfo.mem->alloc_sarray)
((j_common_ptr) & cinfo, JPOOL_IMAGE, row_stride, 1);
while (cinfo.output_scanline < cinfo.output_height)
{
lw6sys_progress_update (progress, 0,
cinfo.output_height,
cinfo.output_scanline);
j =
lw6sys_max (lw6sys_min
(cinfo.output_scanline,
cinfo.output_height - 1), 0);
jpeg_read_scanlines (&cinfo, buffer, 1);
for (i = 0; i < cinfo.output_width; i++)
{
buf[j][i * 4 + 0] =
buf[j][i * 4 + 1] = buf[j][i * 4 + 2] =
buffer[0][i];
buf[j][i * 4 + 3] = 255;
}
}
image->w = cinfo.output_width;
image->h = cinfo.output_height;
image->data = buf;
ret = 1;
break;
default:
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("unable to handle jpeg file output_components must be 3 (RGB) but is %d"),
cinfo.output_components);
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("unable to allocate memory for RGBA JPEG file"));
}
jpeg_finish_decompress (&cinfo);
}
jpeg_destroy_decompress (&cinfo);
fclose (f);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unable to read jpeg file \"%s\""), jpeg_file);
}
if (!ret)
{
_lw6ldr_rgba_clear (image);
}
lw6sys_progress_end (progress);
return ret;
}
|
|||||
| ↓ | lw6net_tcp_send | 16 | 44 | 101 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/net/net-tcp.c |
int
lw6net_tcp_send (int sock, char *buf, int len, int delay_msec, int loop)
{
int ret = 0;
fd_set write;
struct timeval tv;
int select_ret;
int total_sent = 0;
int sent = 0;
int chunk_size;
#ifdef LW6_MS_WINDOWS
int winerr = 0;
#endif
if (lw6net_socket_is_valid (sock))
{
ret = 1;
chunk_size = _lw6net_global_context->const_data.chunk_size;
total_sent = 0;
while (total_sent != len && ret)
{
FD_ZERO (&write);
FD_SET (sock, &write);
_lw6net_delay_msec_to_timeval (&tv, delay_msec);
select_ret = select (sock + 1, NULL, &write, NULL, &tv);
switch (select_ret)
{
case -1:
#ifdef LW6_MS_WINDOWS
winerr = WSAGetLastError ();
if (winerr != WSAEINTR && winerr != WSAENOBUFS)
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("select() failed, code=%d"), winerr);
lw6net_last_error ();
ret = 0;
}
#else
if (errno != EINTR && errno != ENOBUFS)
{
lw6sys_log (LW6SYS_LOG_WARNING, _x_ ("select() failed"));
lw6net_last_error ();
ret = 0;
}
#endif
break;
case 1:
if (FD_ISSET (sock, &write))
{
sent = send (sock,
buf + total_sent,
lw6sys_min (len - total_sent, chunk_size), 0);
if (sent > 0 && sent <= len - total_sent)
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("%d bytes sent on TCP socket %d"),
sent, sock);
total_sent += sent;
}
else
{
lw6sys_log (LW6SYS_LOG_INFO,
_x_
("can't send data on TCP socket %d (%d bytes put)"),
sock, sent);
ret = 0;
}
}
break;
default:
lw6sys_log (LW6SYS_LOG_INFO,
_x_
("can't send data on socket %d (select returned %d)"),
sock, select_ret);
ret = 0;
}
if ((!loop) && (total_sent != len))
{
lw6sys_log (LW6SYS_LOG_INFO,
_x_ ("can't send data on socket %d (%d/%d)"), sock,
total_sent, len);
ret = 0;
}
}
if (total_sent > 0)
{
_lw6net_counters_register_send (&
(_lw6net_global_context->counters),
total_sent);
_lw6net_log_tcp_send (&(_lw6net_global_context->log),
buf, total_sent);
}
}
return ret;
}
|
|||||
| ↓ | _display_bitmap_array | 15 | 83 | 193 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/gfx/mod-gl/gl-view/gl-flat/gl-flat-display.c |
static void
_display_bitmap_array (mod_gl_utils_context_t * utils_context,
_mod_gl_view_flat_context_t * flat_context,
mod_gl_utils_bitmap_array_t * bitmap_array,
lw6gui_look_t * look, int x_polarity, int y_polarity)
{
float wave_length;
float step_for_waves;
float step_for_border_x;
float step_for_border_y;
float step_x = 0.0f;
float step_y = 0.0f;
float x, y;
lw6gui_rect_t rect;
int i;
lw6gui_quad_t quad;
lw6gui_quad_t source_quad;
mod_gl_utils_bitmap_t *bitmap = NULL;
float map_x1, map_y1, map_x2, map_y2;
float texture_x1, texture_y1, texture_x2, texture_y2;
int use_waves = 0;
int waves_cycle = 0;
float waves_cycle_offset = 0.0f;
float waves_scale_x = 0.0f;
float waves_scale_y = 0.0f;
mod_gl_utils_bitmap_t *last_bitmap = NULL;
if (bitmap_array->layout.source.w > 0 && bitmap_array->layout.source.h > 0
&& flat_context->viewport.map_main.w > 0
&& flat_context->viewport.map_main.h > 0)
{
/*
* Now *before* we draw (generating textures between begin & end
* isn't correct, we bind all textures, so that they are
* generated if needed.
*/
for (i = 0; i < bitmap_array->layout.nb_tiles; ++i)
{
bitmap = mod_gl_utils_bitmap_array_get (bitmap_array, i);
mod_gl_utils_bitmap_bind (utils_context, bitmap);
}
mod_gl_utils_display_quad_begin (utils_context);
/*
* there's a *2 on the denom because we add w and h on the first
* member, want we want is nb_waves on an average *per side*
*/
wave_length =
(flat_context->viewport.map_visible.w +
flat_context->viewport.map_visible.h) /
((float) (flat_context->const_data.nb_waves * 2));
use_waves = look->style.waves;
if (use_waves)
{
step_for_waves =
wave_length /
((float) flat_context->const_data.vertices_per_wave);
waves_cycle = mod_gl_utils_timer_get_cycle (utils_context);
waves_cycle_offset =
((float) (waves_cycle)) /
((float) flat_context->const_data.waves_period);
waves_scale_x =
(flat_context->const_data.waves_amplitude * wave_length *
flat_context->viewport.map_shape.w) /
flat_context->viewport.map_main.w;
waves_scale_y =
(flat_context->const_data.waves_amplitude * wave_length *
flat_context->viewport.map_shape.h) /
flat_context->viewport.map_main.h;
}
else
{
step_for_waves =
(float) (flat_context->viewport.map_visible.w +
flat_context->viewport.map_visible.h);
}
step_for_border_x =
bitmap_array->layout.border_size * flat_context->viewport.map_main.w /
((float) bitmap_array->layout.source.w);
step_for_border_y =
bitmap_array->layout.border_size * flat_context->viewport.map_main.h /
((float) bitmap_array->layout.source.h);
step_x =
(step_for_waves <
step_for_border_x) ? step_for_waves : step_for_border_x;
step_y =
(step_for_waves <
step_for_border_y) ? step_for_waves : step_for_border_y;
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_
("step_for_waves=%f step_for_border_x=%f step_for_border_y=%f step_x=%f step_y=%f"),
step_for_waves, step_for_border_x, step_for_border_y,
step_x, step_y);
for (y = flat_context->viewport.map_visible.y1;
y < flat_context->viewport.map_visible.y2 - step_y / 2.0f;
y += step_y)
{
for (x = flat_context->viewport.map_visible.x1;
x < flat_context->viewport.map_visible.x2 - step_x / 2.0f;
x += step_x)
{
lw6gui_viewport_screen_to_map (&(flat_context->viewport),
&map_x1, &map_y1, x, y, 0);
lw6gui_viewport_screen_to_map (&(flat_context->viewport),
&map_x2, &map_y2, x + step_x,
y + step_y, 0);
if (use_waves)
{
map_x1 +=
waves_scale_x *
cos ((waves_cycle_offset +
(x / wave_length)) * M_PI * 2.0f);
map_y1 +=
waves_scale_y *
sin ((waves_cycle_offset +
(y / wave_length)) * M_PI * 2.0f);
map_x2 +=
waves_scale_x *
cos ((waves_cycle_offset +
((x + step_x) / wave_length)) * M_PI * 2.0f);
map_y2 +=
waves_scale_y *
sin ((waves_cycle_offset +
((y + step_y) / wave_length)) * M_PI * 2.0f);
}
map_x1 *=
((float) bitmap_array->layout.source.w) /
((float) flat_context->viewport.map_shape.w);
map_y1 *=
((float) bitmap_array->layout.source.h) /
((float) flat_context->viewport.map_shape.h);
map_x2 *=
((float) bitmap_array->layout.source.w) /
((float) flat_context->viewport.map_shape.w);
map_y2 *=
((float) bitmap_array->layout.source.h) /
((float) flat_context->viewport.map_shape.h);
source_quad.p1.x = map_x1;
source_quad.p1.y = map_y1;
source_quad.p2.x = map_x2;
source_quad.p2.y = map_y1;
source_quad.p3.x = map_x2;
source_quad.p3.y = map_y2;
source_quad.p4.x = map_x1;
source_quad.p4.y = map_y2;
if (lw6gui_rect_array_get_tile_and_quad
(&(bitmap_array->layout), &rect, &i, &quad, &source_quad,
x_polarity, y_polarity))
{
bitmap = mod_gl_utils_bitmap_array_get (bitmap_array, i);
texture_x1 =
(quad.p1.x -
((float) rect.x1)) /
((float) bitmap_array->layout.tile_size);
texture_y1 =
(quad.p1.y -
((float) rect.y1)) /
((float) bitmap_array->layout.tile_size);
texture_x2 =
(quad.p3.x -
((float) rect.x1)) /
((float) bitmap_array->layout.tile_size);
texture_y2 =
(quad.p3.y -
((float) rect.y1)) /
((float) bitmap_array->layout.tile_size);
// TMP2("%f,%f",x,y);
if (last_bitmap == bitmap)
{
mod_gl_utils_bitmap_bind_no_gen (utils_context, bitmap);
}
else
{
mod_gl_utils_display_quad_end (utils_context);
mod_gl_utils_bitmap_bind (utils_context, bitmap);
last_bitmap = bitmap;
mod_gl_utils_display_quad_begin (utils_context);
}
if (bitmap)
{
mod_gl_utils_display_quad_do (utils_context,
bitmap->texture, x, y,
x + step_x, y + step_y,
texture_x1, texture_y1,
texture_x2, texture_y2);
}
}
}
}
mod_gl_utils_display_quad_end (utils_context);
}
}
|
|||||
| ↓ | stage2 | 15 | 69 | 123 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/tsk/tsk-loader.c |
static void
stage2 (_lw6tsk_loader_data_t * loader_data)
{
int request_number = 0;
lw6map_level_t *level = NULL;
lw6ker_game_struct_t *game_struct = NULL;
lw6ker_game_state_t *game_state = NULL;
lw6sys_progress_t progress;
float dummy = 0.0f;
int ok = 0;
progress.value = loader_data->progress;
if (!(progress.value))
{
progress.value = &dummy;
}
LOADER_LOCK;
request_number = loader_data->request_number;
if (loader_data->stage2.src)
{
lw6sys_log (LW6SYS_LOG_INFO,
_x_ ("async load stage2, request_number %d"),
request_number);
(*(progress.value)) = _LW6TSK_LOADER_PROGRESS_STAGE2_BEGIN;
progress.min = _LW6TSK_LOADER_PROGRESS_STAGE2_BEGIN_MAP;
progress.max = _LW6TSK_LOADER_PROGRESS_STAGE2_END_MAP;
lw6sys_progress_begin (&progress);
level = lw6map_dup (loader_data->stage2.src, &progress);
lw6sys_progress_end (&progress);
stage2_clear_request (&(loader_data->stage2));
}
LOADER_UNLOCK;
if (level)
{
progress.min = _LW6TSK_LOADER_PROGRESS_STAGE2_BEGIN_STRUCT;
progress.max = _LW6TSK_LOADER_PROGRESS_STAGE2_END_STRUCT;
lw6sys_progress_begin (&progress);
game_struct = lw6ker_game_struct_new (level, &progress);
if (game_struct)
{
lw6sys_progress_end (&progress);
}
else
{
lw6map_free (level);
level = NULL;
}
}
if (level && game_struct)
{
progress.min = _LW6TSK_LOADER_PROGRESS_STAGE2_BEGIN_STATE;
progress.max = _LW6TSK_LOADER_PROGRESS_STAGE2_END_STATE;
lw6sys_progress_begin (&progress);
game_state = lw6ker_game_state_new (game_struct, &progress);
if (game_state)
{
lw6sys_progress_end (&progress);
}
else
{
lw6ker_game_struct_free (game_struct);
game_struct = NULL;
lw6map_free (level);
level = NULL;
}
}
if (level && game_struct && game_state)
{
char *repr = NULL;
repr = lw6ker_game_state_repr (game_state);
if (repr)
{
LOADER_LOCK;
if (request_number == loader_data->request_number)
{
stage1_clear_response (&(loader_data->stage1));
stage2_clear_response (&(loader_data->stage2));
loader_data->stage2.level = level;
loader_data->stage2.game_struct = game_struct;
loader_data->stage2.game_state = game_state;
lw6sys_log (LW6SYS_LOG_INFO,
_x_
("async load stage2 done, request_number %d, game_state \"%s\""),
request_number, repr);
ok = 1;
}
else if (request_number < loader_data->request_number)
{
lw6sys_log (LW6SYS_LOG_INFO,
_x_
("async load stage2 abort, request number %d < %d, game_state \"%s\""),
request_number, loader_data->request_number, repr);
lw6ker_game_state_free (game_state);
game_state = NULL;
lw6ker_game_struct_free (game_struct);
game_struct = NULL;
lw6map_free (level);
level = NULL;
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("async load stage2, inconsistent request number %d > %d, game_state \"%s\""),
request_number, loader_data->request_number, repr);
}
LOADER_UNLOCK;
LW6SYS_FREE (repr);
repr = NULL;
}
}
if (ok)
{
(*(progress.value)) = _LW6TSK_LOADER_PROGRESS_STAGE2_END;
}
}
|
|||||
| ↓ | _lw6p2p_tentacle_poll | 15 | 55 | 131 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/p2p/p2p-tentacle.c |
void
_lw6p2p_tentacle_poll (_lw6p2p_tentacle_t * tentacle,
lw6nod_info_t * node_info,
lw6cnx_ticket_table_t * ticket_table,
int next_foo_delay)
{
int i;
char *msg;
int64_t now;
lw6cnx_connection_t *cnx = NULL;
u_int32_t ticket_sig = 0;
now = lw6sys_get_timestamp ();
if (!tentacle->hello_sent)
{
msg = lw6msg_cmd_generate_hello (node_info);
if (msg)
{
for (i = 0; i < tentacle->nb_cli_connections; ++i)
{
cnx = tentacle->cli_connections[i];
ticket_sig =
lw6msg_ticket_calc_sig (lw6cnx_ticket_table_get_send
(ticket_table, cnx->remote_id_str),
cnx->local_id_int, cnx->remote_id_int,
msg);
if (lw6cli_send
(tentacle->backends->cli_backends[i], cnx, ticket_sig,
ticket_sig, cnx->local_id_int, cnx->remote_id_int, msg))
{
tentacle->hello_sent = 1;
}
}
LW6SYS_FREE (msg);
}
}
for (i = 0; i < tentacle->nb_cli_connections; ++i)
{
cnx = tentacle->cli_connections[i];
if (lw6cnx_connection_should_send_foo (cnx, now))
{
lw6cnx_connection_init_foo_bar_key (cnx, now, next_foo_delay);
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("preparing foo with foo_bar_key=%08x"),
cnx->foo_bar_key);
msg = lw6msg_cmd_generate_foo (node_info, cnx->foo_bar_key);
if (msg)
{
ticket_sig =
lw6msg_ticket_calc_sig (lw6cnx_ticket_table_get_send
(ticket_table, cnx->remote_id_str),
cnx->local_id_int, cnx->remote_id_int,
msg);
lw6cli_send (tentacle->backends->cli_backends[i], cnx,
ticket_sig, ticket_sig, cnx->local_id_int,
cnx->remote_id_int, msg);
LW6SYS_FREE (msg);
}
if (!lw6cnx_ticket_table_was_recv_exchanged
(ticket_table, cnx->remote_id_str))
{
msg =
lw6msg_cmd_generate_ticket (node_info,
lw6cnx_ticket_table_get_recv
(ticket_table,
cnx->remote_id_str));
if (msg)
{
ticket_sig =
lw6msg_ticket_calc_sig (lw6cnx_ticket_table_get_send
(ticket_table,
cnx->remote_id_str),
cnx->local_id_int,
cnx->remote_id_int, msg);
lw6cli_send (tentacle->backends->cli_backends[i], cnx,
ticket_sig, ticket_sig, cnx->local_id_int,
cnx->remote_id_int, msg);
LW6SYS_FREE (msg);
}
}
}
lw6cli_poll (tentacle->backends->cli_backends[i], cnx);
}
for (i = 0; i < tentacle->nb_srv_connections; ++i)
{
cnx = tentacle->srv_connections[i];
if (lw6cnx_connection_should_send_foo (cnx, now))
{
lw6cnx_connection_init_foo_bar_key (cnx, now, next_foo_delay);
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("preparing foo with foo_bar_key=%08x"),
cnx->foo_bar_key);
msg = lw6msg_cmd_generate_foo (node_info, cnx->foo_bar_key);
if (msg)
{
ticket_sig =
lw6msg_ticket_calc_sig (lw6cnx_ticket_table_get_send
(ticket_table, cnx->remote_id_str),
cnx->local_id_int, cnx->remote_id_int,
msg);
lw6srv_send (tentacle->backends->srv_backends[i], cnx,
ticket_sig, ticket_sig, cnx->local_id_int,
cnx->remote_id_int, msg);
LW6SYS_FREE (msg);
}
if (!lw6cnx_ticket_table_was_recv_exchanged
(ticket_table, cnx->remote_id_str))
{
msg =
lw6msg_cmd_generate_ticket (node_info,
lw6cnx_ticket_table_get_recv
(ticket_table,
cnx->remote_id_str));
if (msg)
{
ticket_sig =
lw6msg_ticket_calc_sig (lw6cnx_ticket_table_get_send
(ticket_table,
cnx->remote_id_str),
cnx->local_id_int,
cnx->remote_id_int, msg);
lw6srv_send (tentacle->backends->srv_backends[i], cnx,
ticket_sig, ticket_sig, cnx->local_id_int,
cnx->remote_id_int, msg);
LW6SYS_FREE (msg);
}
}
}
lw6srv_poll (tentacle->backends->srv_backends[i], cnx);
}
}
|
|||||
| ↓ | lw6sys_url_parse | 15 | 53 | 102 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/sys/sys-url.c |
lw6sys_url_t *
lw6sys_url_parse (char *url)
{
lw6sys_url_t *ret = NULL;
char *tmp = NULL;
char *pos = NULL;
char *seek = NULL;
char seek_c = '\0';
ret = (lw6sys_url_t *) LW6SYS_CALLOC (sizeof (lw6sys_url_t));
if (ret)
{
tmp = lw6sys_str_copy (url);
lw6sys_str_cleanup_ascii7 (tmp);
if (lw6sys_str_starts_with (tmp, _HTTPS))
{
ret->use_ssl = 1;
}
pos = tmp;
seek = strstr (pos, _DOT_DOT_SLASH_SLASH);
if (seek)
{
pos = seek + strlen (_DOT_DOT_SLASH_SLASH);
}
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("interpreting host, remaining string is \"%s\""), pos);
seek = pos;
while (_is_host (*seek))
{
seek++;
}
seek_c = (*seek);
(*seek) = '\0';
lw6sys_str_tolower (pos);
if (strlen (pos) > 0)
{
ret->host = lw6sys_str_copy (pos);
}
else
{
ret->host = lw6sys_str_copy (_LOCALHOST);
}
(*seek) = seek_c;
pos = seek;
if ((*pos) == _DOT_DOT)
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("port detected, remaining string is \"%s\""), pos);
pos++;
seek = pos;
while (_is_port (*seek))
{
seek++;
}
seek_c = (*seek);
(*seek) = '\0';
ret->port = lw6sys_atoi (pos);
(*seek) = seek_c;
pos = seek;
}
else
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("no port detected, remaining string is \"%s\""),
pos);
if (ret->use_ssl)
{
ret->port = _HTTPS_PORT;
}
else
{
ret->port = _HTTP_PORT;
}
}
if (ret->port <= 0 || ret->port > _MAX_PORT)
{
ret->port = _HTTP_PORT;
}
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("interpreting URI, remaining string is \"%s\""), pos);
if (strlen (pos) > 0 && (*pos) == _SLASH)
{
ret->uri = lw6sys_escape_http_uri (pos);
}
else
{
ret->uri = lw6sys_new_sprintf ("%c", _SLASH);
}
if (ret->host && ret->uri)
{
// OK
}
else
{
lw6sys_url_free (ret);
ret = NULL;
}
LW6SYS_FREE (tmp);
}
return ret;
}
|
|||||
| ↓ | lw6ldr_print_examples | 15 | 52 | 91 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/ldr/ldr-print.c |
int
lw6ldr_print_examples (char *user_dir)
{
int ret = 0;
char *example_dir = NULL;
char *filename = NULL;
FILE *f;
int rules_ok = 0;
int hints_ok = 0;
int style_ok = 0;
int teams_ok = 0;
example_dir = lw6sys_path_concat (user_dir, EXAMPLE_DIR);
if (example_dir)
{
if (!lw6sys_dir_exists (example_dir))
{
lw6sys_create_dir (example_dir);
}
if (lw6sys_dir_exists (example_dir))
{
filename = lw6sys_path_concat (example_dir, _LW6LDR_FILE_RULES_XML);
if (filename)
{
f = fopen (filename, "wb");
if (f)
{
lw6sys_log (LW6SYS_LOG_INFO,
_x_
("writing example map rules file in \"%s\""),
filename);
lw6ldr_print_example_rules_xml (f);
rules_ok = 1;
fclose (f);
}
LW6SYS_FREE (filename);
}
filename = lw6sys_path_concat (example_dir, _LW6LDR_FILE_HINTS_XML);
if (filename)
{
f = fopen (filename, "wb");
if (f)
{
lw6sys_log (LW6SYS_LOG_INFO,
_x_
("writing example map hints file in \"%s\""),
filename);
lw6ldr_print_example_hints_xml (f);
hints_ok = 1;
fclose (f);
}
LW6SYS_FREE (filename);
}
filename = lw6sys_path_concat (example_dir, _LW6LDR_FILE_STYLE_XML);
if (filename)
{
f = fopen (filename, "wb");
if (f)
{
lw6sys_log (LW6SYS_LOG_INFO,
_x_
("writing example map style file in \"%s\""),
filename);
lw6ldr_print_example_style_xml (f);
style_ok = 1;
fclose (f);
}
LW6SYS_FREE (filename);
}
filename = lw6sys_path_concat (example_dir, _LW6LDR_FILE_TEAMS_XML);
if (filename)
{
f = fopen (filename, "wb");
if (f)
{
lw6sys_log (LW6SYS_LOG_INFO,
_x_
("writing example map teams file in \"%s\""),
filename);
lw6ldr_print_example_teams_xml (f);
teams_ok = 1;
fclose (f);
}
LW6SYS_FREE (filename);
}
}
LW6SYS_FREE (example_dir);
}
ret = (rules_ok && hints_ok && style_ok && teams_ok);
return ret;
}
|
|||||
| ↓ | _test_base64_ok | 15 | 50 | 171 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/glb/glb-test.c |
static int
_test_base64_ok (char *test_str, int log_all)
{
int ret = 1;
char *base64_str = NULL;
char *str = NULL;
base64_str = lw6glb_base64_encode_str (test_str);
if (base64_str)
{
if (log_all)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("base64 encoded version of \"%s\" is \"%s\""),
test_str, base64_str);
}
else
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("base64 encoding, result \"%s\""), base64_str);
}
str = lw6glb_base64_decode_str (base64_str);
if (str)
{
if (lw6sys_str_is_same (str, test_str))
{
if (log_all)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_
("base64 string \"%s\" correctly decoded to \"%s\""),
base64_str, str);
}
else
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_
("base64 string \"%s\" correctly decoded"),
base64_str);
}
}
else
{
if (log_all)
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("base64 string \"%s\" decoded to \"%s\" but should be \"%s\""),
base64_str, str, test_str);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("base64 string decoded but result is different"));
}
ret = 0;
}
LW6SYS_FREE (str);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unable to decode \"%s\" from base64"),
base64_str);
ret = 0;
}
LW6SYS_FREE (base64_str);
}
else
{
if (log_all)
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unable to encode \"%s\" in base64"), test_str);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING, _x_ ("unable to encode in base64"));
}
ret = 0;
}
base64_str =
lw6glb_base64_encode_str_prefix (test_str, _TEST_BASE64_PREFIX);
if (base64_str)
{
if (log_all)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_
("base64 encoded version of \"%s\" is \"%s\" (prefix=\"%s\")"),
test_str, base64_str, _TEST_BASE64_PREFIX);
}
else
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_
("base64 encoding result is \"%s\" (prefix=\"%s\")"),
base64_str, _TEST_BASE64_PREFIX);
}
str = lw6glb_base64_decode_str_prefix (base64_str, _TEST_BASE64_PREFIX);
if (str)
{
if (lw6sys_str_is_same (str, test_str))
{
if (log_all)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_
("base64 string \"%s\" correctly decoded to \"%s\" (prefix=\"%s\")"),
base64_str, str, _TEST_BASE64_PREFIX);
}
else
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_
("base64 string \"%s\" correctly decoded (prefix=\"%s\")"),
base64_str, _TEST_BASE64_PREFIX);
}
}
else
{
if (log_all)
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("base64 string \"%s\" decoded to \"%s\" but should be \"%s\" (prefix=\"%s\")"),
base64_str, str, test_str, _TEST_BASE64_PREFIX);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("base64 string decoded but result is different (prefix=\"%s\")"),
_TEST_BASE64_PREFIX);
}
ret = 0;
}
LW6SYS_FREE (str);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("unable to decode \"%s\" from base64 (prefix=\"%s\")"),
base64_str, _TEST_BASE64_PREFIX);
ret = 0;
}
LW6SYS_FREE (base64_str);
}
else
{
if (log_all)
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("unable to encode \"%s\" in base64 (prefix=\"%s\")"),
test_str, _TEST_BASE64_PREFIX);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unable to encode in base64 (prefix=\"%s\")"),
_TEST_BASE64_PREFIX);
}
ret = 0;
}
return ret;
}
|
|||||
| ↓ | _lw6ker_game_state_finish_round | 15 | 50 | 152 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/ker/ker-gamestate.c |
void
_lw6ker_game_state_finish_round (_lw6ker_game_state_t * game_state)
{
int total_rounds;
int rounds;
int nb_teams;
int team_color;
int32_t nb_cursors = 0;
int32_t nb_fighters = 0;
int32_t nb_fighters_to_delete = 0;
int i;
total_rounds = _lw6ker_game_state_get_total_rounds (game_state);
rounds = _lw6ker_game_state_get_rounds (game_state);
nb_teams = _lw6ker_game_state_get_nb_teams (game_state);
game_state->max_reached_teams =
lw6sys_max (game_state->max_reached_teams, nb_teams);
for (team_color = 0; team_color < LW6MAP_MAX_NB_TEAMS; ++team_color)
{
_lw6ker_game_state_get_team_info (game_state, team_color, &nb_cursors,
&nb_fighters);
if (nb_cursors == 0)
{
if (game_state->map_state.teams[team_color].active)
{
/*
* This should be a rare case, how come there are no cursors for a team?
* Still, with an alliance system, it could theorically happen.
*/
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("no cursors for team %d, removing it"),
team_color);
_lw6ker_game_state_remove_team_internal (game_state,
team_color);
}
}
else
{
if (nb_fighters == 0)
{
if (game_state->game_struct->rules.respawn_team)
{
if (game_state->map_state.teams[team_color].respawn_round ==
0)
{
/*
* We unset all weapons once someone looses to avoid
* artificial killing sprees on unfair settings.
*/
_lw6ker_weapon_unset_all (&(game_state->map_state));
_lw6ker_map_state_frag (&(game_state->map_state),
team_color,
game_state->game_struct->rules.
frags_mode,
game_state->game_struct->rules.
frags_to_distribute,
game_state->game_struct->rules.
frags_fade_out);
game_state->map_state.teams[team_color].respawn_round =
rounds +
(game_state->game_struct->rules.respawn_delay *
game_state->game_struct->rules.rounds_per_sec);
}
if (game_state->map_state.teams[team_color].respawn_round <=
rounds)
{
_lw6ker_game_state_remove_team_internal (game_state,
team_color);
game_state->map_state.teams[team_color].respawn_round =
0;
/*
* We don't delete more than half of the fighters but still,
* we do need to delete some.
*/
nb_fighters_to_delete =
lw6sys_min (lw6ker_per100_2
(game_state->map_state.map_struct->
room_for_armies,
game_state->game_struct->rules.
single_army_size),
_lw6ker_game_state_get_nb_active_fighters
(game_state) / 2);
_lw6ker_map_state_remove_fighters (&
(game_state->map_state),
nb_fighters_to_delete);
/*
* Cancelling then adding will have the effect to repopulate the team
*/
_lw6ker_game_state_add_team_internal (game_state,
team_color,
game_state->game_struct->
rules.respawn_position_mode);
}
}
else
{
/*
* We unset all weapons once someone looses to avoid
* artificial killing sprees on unfair settings.
*/
_lw6ker_weapon_unset_all (&(game_state->map_state));
/*
* OK this is hell we do it manually but high-level functions
* all require a node-id...
*/
_lw6ker_game_state_remove_team_internal (game_state,
team_color);
for (i = 0; i < LW6MAP_MAX_NB_CURSORS; ++i)
{
if (game_state->map_state.cursor_array.cursors[i].
team_color == team_color)
{
_lw6ker_cursor_disable (&
(game_state->map_state.
cursor_array.cursors[i]));
game_state->map_state.cursor_array.nb_cursors--;
}
}
}
}
}
}
// First good reason to finish : time up
if (rounds >= total_rounds)
{
game_state->over = 1;
}
// Second good reason to finish : in classical mode, only one left
if ((!game_state->game_struct->rules.respawn_team) &&
(nb_teams <= 1) && (game_state->max_reached_teams >= 2))
{
game_state->over = 1;
}
if (!game_state->over)
{
_lw6ker_history_set (&(game_state->global_history),
&(game_state->map_state.armies),
(rounds * LW6KER_HISTORY_SIZE) / total_rounds);
_lw6ker_history_add (&(game_state->latest_history),
&(game_state->map_state.armies));
game_state->moves += game_state->game_struct->rules.moves_per_round;
game_state->spreads += game_state->game_struct->rules.spreads_per_round;
game_state->rounds++;
}
}
|
|||||
| ↓ | new_target | 15 | 46 | 99 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/bot/mod-idiot/mod-idiot-move.c |
static int
new_target (_mod_idiot_context_t * idiot_context, lw6bot_data_t * data)
{
int team_color = LW6MAP_TEAM_COLOR_INVALID;
int x = -1;
int y = -1;
int z = 0;
int ret = 0;
int i = 0;
int found = 0;
int fighter_id = -1;
lw6ker_fighter_t *fighter = NULL;
lw6sys_whd_t shape = { 0, 0, 0 };
lw6ker_cursor_t cursor;
if (lw6ker_game_state_get_cursor
(data->game_state, &cursor, data->param.cursor_id))
{
x = cursor.pos.x;
y = cursor.pos.y;
team_color = cursor.team_color;
lw6ker_game_state_get_shape (data->game_state, &shape);
idiot_context->start_pos_x = x;
idiot_context->start_pos_y = y;
for (i = 0; i < _MOD_IDIOT_NB_RETRIES && !found; ++i)
{
x = lw6sys_random (shape.w);
y = lw6sys_random (shape.h);
idiot_context->target_pos_x = x;
idiot_context->target_pos_y = y;
if (data->param.iq >= _MOD_IDIOT_IQ_LIMIT1
&& data->param.iq < _MOD_IDIOT_IQ_LIMIT2)
{
// here, we don't search anymore, just choose random
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_
("idiot bot acting randomly, choosed %d,%d"), x, y);
found = 1;
}
else
{
for (z = 0; z < shape.d && !found; ++z)
{
fighter_id =
lw6ker_game_state_get_fighter_id (data->game_state, x, y,
z);
if (fighter_id >= 0)
{
fighter =
lw6ker_game_state_get_fighter_by_id (data->game_state,
fighter_id);
if (fighter != NULL)
{
if (data->param.iq >= _MOD_IDIOT_IQ_LIMIT2
&& fighter->team_color != team_color)
{
// default behavior, find an opponent
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_
("idiot bot acting normally, choosed opponent of color %d at %d,%d"),
fighter->team_color, x, y);
found = 1;
}
if (data->param.iq < _MOD_IDIOT_IQ_LIMIT1
&& fighter->team_color == team_color)
{
// acting stupid, centering on self
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_
("idiot bot acting stupid, choosed self color %d at %d,%d"),
fighter->team_color, x, y);
found = 1;
}
}
}
}
if (!found)
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("idiot bot found nothing at %d,%d"), x, y);
}
}
}
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_
("idiot bot moved start=%d,%d target=%d,%d after %d tries"),
idiot_context->start_pos_x, idiot_context->start_pos_y,
idiot_context->target_pos_x, idiot_context->target_pos_y,
i);
ret = found;
}
return ret;
}
|
|||||
| ↓ | _commit_draft | 15 | 39 | 101 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/pil/pil-pilot.c |
static int
_commit_draft (_lw6pil_pilot_t * pilot)
{
int ret = 1;
char *command_text = NULL;
lw6pil_command_t *command = NULL;
lw6pil_command_t *command_dup = NULL;
lw6sys_list_t *replay = NULL;
int last_sync_draft_from_reference = 0;
/*
* Process the commands for the draft threads.
*/
if (!lw6sys_list_is_empty (pilot->unverified_queue))
{
/*
* Add unverified events to replay list
*/
while (pilot->unverified_queue
&& (command_text =
lw6sys_list_pop_front (&(pilot->unverified_queue))) != NULL)
{
command = lw6pil_command_new (command_text, pilot->seq_0);
if (command)
{
last_sync_draft_from_reference =
_lw6pil_pilot_seq2round (pilot,
pilot->last_sync_draft_from_reference_seq);
if (command->round > last_sync_draft_from_reference
&& pilot->replay)
{
lw6sys_list_push_front (&(pilot->replay), command);
}
else
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("ignoring unverified command \"%s\""),
command->text);
lw6pil_command_free (command);
}
}
LW6SYS_FREE (command_text);
}
if (pilot->unverified_queue)
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unverified_queue should be NULL, but isn't"));
}
pilot->unverified_queue = lw6sys_list_new (lw6sys_free_callback);
/*
* Now filter replay events, push them, and keep them for next time
*/
if (!lw6sys_list_is_empty (pilot->replay))
{
sync_draft_from_reference (pilot);
lw6sys_spinlock_lock (pilot->draft.commands_spinlock);
replay = lw6sys_list_new ((lw6sys_free_func_t) lw6pil_command_free);
if (replay)
{
while (pilot->replay
&& (command =
(lw6pil_command_t *)
lw6sys_list_pop_front (&(pilot->replay))))
{
last_sync_draft_from_reference =
_lw6pil_pilot_seq2round (pilot,
pilot->last_sync_draft_from_reference_seq);
if (command->round > last_sync_draft_from_reference)
{
command_dup = lw6pil_command_dup (command);
if (command_dup)
{
lw6sys_list_push_front (&replay, command_dup);
}
lw6sys_list_push_front (&(pilot->draft.commands),
command);
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("draft anticipation of \"%s\""),
command->text);
}
else
{
lw6pil_command_free (command);
}
}
if (pilot->replay)
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("replay should be NULL, but isn't"));
}
pilot->replay = replay;
replay = NULL;
}
lw6sys_spinlock_unlock (pilot->draft.commands_spinlock);
}
}
return ret;
}
|
|||||
| ↓ | mod_gl_utils_shaded_text_update | 15 | 37 | 82 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/gfx/mod-gl/gl-utils/gl-utils-shadedtext.c |
int
mod_gl_utils_shaded_text_update (mod_gl_utils_context_t * utils_context,
mod_gl_utils_shaded_text_t * shaded_text,
char *text, lw6map_color_couple_t * color)
{
int ret = 0;
int change = 0;
SDL_Color color_bg;
SDL_Color color_fg;
SDL_Surface *surface_bg = NULL;
SDL_Surface *surface_fg = NULL;
if ((!shaded_text->text)
|| ((shaded_text->text && strcmp (text, shaded_text->text) != 0)))
{
if (shaded_text->text)
{
LW6SYS_FREE (shaded_text->text);
}
shaded_text->text = lw6sys_str_copy (text);
change = (shaded_text->text != NULL);
}
if (!lw6map_color_is_same (color, &(shaded_text->color)))
{
shaded_text->color = *color;
change = 1;
}
if (change && shaded_text->text)
{
if (shaded_text->bg)
{
mod_gl_utils_bitmap_free (utils_context, shaded_text->bg);
}
if (shaded_text->fg)
{
mod_gl_utils_bitmap_free (utils_context, shaded_text->fg);
}
color_bg = mod_gl_utils_color_8_to_sdl (shaded_text->color.bg);
color_fg = mod_gl_utils_color_8_to_sdl (shaded_text->color.fg);
surface_bg =
mod_gl_utils_blended_text_surface (utils_context,
shaded_text->font,
color_bg, shaded_text->text);
surface_fg =
mod_gl_utils_blended_text_surface (utils_context,
shaded_text->font,
color_fg, shaded_text->text);
if (surface_bg)
{
shaded_text->bg =
mod_gl_utils_surface2bitmap (utils_context, surface_bg,
_DESC_SHADED_TEXT_BG);
if (shaded_text->bg)
{
shaded_text->texture_w = surface_bg->w;
shaded_text->texture_h = surface_bg->h;
}
else
{
mod_gl_utils_delete_surface (utils_context, surface_bg);
}
}
if (surface_fg)
{
shaded_text->fg =
mod_gl_utils_surface2bitmap (utils_context, surface_fg,
_DESC_SHADED_TEXT_FG);
if (shaded_text->fg)
{
shaded_text->texture_w = surface_fg->w;
shaded_text->texture_h = surface_fg->h;
}
else
{
mod_gl_utils_delete_surface (utils_context, surface_fg);
}
}
ret = (shaded_text->bg && shaded_text->fg);
}
return ret;
}
|
|||||
| ↓ | _parse_first_line | 15 | 35 | 72 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/srv/mod-httpd/mod-httpd-request.c |
static int
_parse_first_line (_mod_httpd_request_t * request)
{
int ret = 0;
char *pos = NULL;
char *seek = NULL;
char seek_c = '\0';
if (lw6sys_str_starts_with
(request->first_line, _MOD_HTTPD_PROTOCOL_GET_STRING))
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("this is a GET"));
request->get_head_post = _MOD_HTTPD_GET;
}
if (lw6sys_str_starts_with
(request->first_line, _MOD_HTTPD_PROTOCOL_HEAD_STRING))
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("this is a HEAD"));
request->get_head_post = _MOD_HTTPD_HEAD;
}
if (lw6sys_str_starts_with
(request->first_line, _MOD_HTTPD_PROTOCOL_POST_STRING))
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("this is a POST"));
request->get_head_post = _MOD_HTTPD_POST;
}
pos = request->first_line;
while ((*pos) && !lw6sys_chr_is_space (*pos))
{
pos++;
}
while (lw6sys_chr_is_space (*pos))
{
pos++;
}
seek = pos;
/*
* Here we ignore what's after ? or #, this is typically not
* standard compliant but LW6 does not interpret this.
*/
while ((*seek) && (!lw6sys_chr_is_space (*seek)) && (*seek) != '?'
&& (*seek) != '#')
{
seek++;
}
seek_c = (*seek);
(*seek) = '\0';
request->uri = lw6sys_str_copy (pos);
(*seek) = seek_c;
if (request->uri)
{
if (strlen (request->uri) == 0)
{
LW6SYS_FREE (request->uri);
request->uri = lw6sys_str_copy ("/");
}
}
if (request->uri)
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("REQUEST_URI=\"%s\""), request->uri);
if (!strcmp (request->uri, _MOD_HTTPD_OOB_PING_TXT))
{
request->password_ok = 1;
}
ret = 1;
}
return ret;
}
|
|||||
| ↓ | update_devel_list | 15 | 33 | 75 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/dyn/dyn-list.c |
static void
update_devel_list (lw6sys_assoc_t ** list, char *top_level_lib, int depth)
{
char *dir1 = NULL;
char *dir2 = NULL;
char *dir3 = NULL;
DIR *dir_handle = NULL;
struct dirent *dir_entry = NULL;
struct dirent *dir_entry_result = NULL;
int dir_entry_size;
int eod = 0;
if (depth >= 0 && depth < _LW6DYN_DEVEL_NB_DEPTHS)
{
dir1 =
lw6sys_new_sprintf (LIST_DEVEL_DIR1_FORMAT,
_LW6DYN_DEVEL_DEPTH_STRINGS
[depth], top_level_lib);
if (dir1)
{
if (lw6sys_dir_exists (dir1))
{
dir_handle = opendir (dir1);
if (dir_handle)
{
while (!eod)
{
dir_entry_size = sizeof (struct dirent) + NAME_MAX + 1;
dir_entry =
(struct dirent *) LW6SYS_CALLOC (dir_entry_size);
if (dir_entry)
{
readdir_r (dir_handle, dir_entry,
&dir_entry_result);
if (dir_entry_result
&& (dir_entry_result == dir_entry))
{
if (dir_entry->d_name
&& !strncmp (LIST_DEVEL_MOD_PREFIX_STR,
dir_entry->d_name,
LIST_DEVEL_MOD_PREFIX_SIZE))
{
dir2 =
lw6sys_path_concat (dir1,
dir_entry->d_name);
if (dir2)
{
dir3 = lw6sys_path_concat (dir2,
LIST_DEVEL_DIR3_NAME);
if (dir3)
{
if (lw6sys_dir_exists (dir3))
{
update_list (list, dir3);
}
LW6SYS_FREE (dir3);
}
LW6SYS_FREE (dir2);
}
}
}
else
{
eod = 1;
}
LW6SYS_FREE (dir_entry);
}
}
closedir (dir_handle);
}
}
LW6SYS_FREE (dir1);
}
}
}
|
|||||
| ↓ | _mod_httpd_request_parse_cmd | 15 | 30 | 75 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/srv/mod-httpd/mod-httpd-request.c |
_mod_httpd_request_t *
_mod_httpd_request_parse_cmd (_mod_httpd_reply_thread_data_t *
reply_thread_data)
{
_mod_httpd_request_t *request = NULL;
lw6cnx_connection_t *cnx = reply_thread_data->cnx;
int eof = 0;
char *line = NULL;
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("process httpd cmd"));
request =
(_mod_httpd_request_t *) LW6SYS_CALLOC (sizeof (_mod_httpd_request_t));
if (request)
{
request->client_ip = lw6sys_str_copy (cnx->remote_ip);
if (_mod_httpd_reply_thread_should_continue (reply_thread_data))
{
request->first_line =
lw6net_recv_line_tcp (reply_thread_data->sock);
if (request->first_line)
{
if (_parse_first_line (request))
{
if (lw6sys_str_is_null_or_empty (cnx->password))
{
request->password_ok = 1;
}
while ((!eof)
&&
_mod_httpd_reply_thread_should_continue
(reply_thread_data))
{
line = lw6net_recv_line_tcp (reply_thread_data->sock);
if (line)
{
if (strlen (line) == 0)
{
eof = 1;
}
else
{
_parse_header (request, line,
cnx->local_url, cnx->password);
}
LW6SYS_FREE (line);
}
}
}
}
}
if ((!request->first_line) || (request->get_head_post == 0)
|| (!request->uri))
{
/*
* OK, not parseable, we put dummy (empty) values in all fields to
* avoid suspicious NULL-string bugs, and let the following code
* return error 500.
*/
if (request->first_line)
{
LW6SYS_FREE (request->first_line);
}
if (request->uri)
{
LW6SYS_FREE (request->uri);
}
request->first_line = lw6sys_str_copy (_ERROR_FIRST_LINE);
request->get_head_post = 0;
request->uri = lw6sys_str_copy (_ERROR_URI);
}
}
return request;
}
|
|||||
| ↓ | lw6glb_base64_decode_bin_prefix | 15 | 30 | 75 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/glb/glb-base64.c |
char *
lw6glb_base64_decode_bin_prefix (int *size, char *base64_str, char *prefix)
{
char *ret = NULL;
int in_len = 0;
size_t out_len = 0;
int decode_ret = 0;
int prefix_len = 0;
int c = '\0';
int cut = 0;
if (prefix)
{
prefix_len = strlen (prefix);
}
if (prefix && prefix_len > 0)
{
if (lw6sys_str_starts_with (base64_str, prefix))
{
base64_str += prefix_len;
}
else
{
base64_str = NULL;
}
}
if (base64_str)
{
/*
* We calculate strlen manually else program can sometimes pathetically
* fail on stupid trailing "\n" or such.
*/
in_len = 0;
while (((c = base64_str[in_len]) != '\0') && !lw6sys_chr_is_space (c)
&& !lw6sys_chr_is_eol (c))
{
in_len++;
}
out_len = in_len;
ret = (char *) LW6SYS_CALLOC (out_len + 1);
if (ret)
{
if (in_len > 0)
{
/*
* We try several decoding sessions truncating the string
* by 0,1,2 & 3 characters to allow decoding of truncated
* base64 string, this is usefull when trying to get
* informations from long encoded URLs for instance.
*/
while (decode_ret != 1 && (cut < _CUT_MAX && cut < in_len))
{
decode_ret =
base64_decode (base64_str, in_len - cut, ret, &out_len);
cut++;
}
if (decode_ret == 1)
{
(*size) = out_len;
}
else
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("base64 decode failed, decode_ret=%d"),
decode_ret);
LW6SYS_FREE (ret);
ret = NULL;
}
}
}
}
return ret;
}
|
|||||
| ↓ | _mod_httpd_request_parse_oob | 15 | 29 | 75 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/srv/mod-httpd/mod-httpd-request.c |
_mod_httpd_request_t *
_mod_httpd_request_parse_oob (_mod_httpd_context_t * httpd_context,
lw6nod_info_t * node_info,
lw6srv_oob_data_t * oob_data)
{
_mod_httpd_request_t *request = NULL;
int eof = 0;
char *line = NULL;
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("process httpd oob"));
request =
(_mod_httpd_request_t *) LW6SYS_CALLOC (sizeof (_mod_httpd_request_t));
if (request)
{
request->client_ip = lw6sys_str_copy (oob_data->remote_ip);
if (_mod_httpd_oob_should_continue (httpd_context, oob_data))
{
request->first_line = lw6net_recv_line_tcp (oob_data->sock);
if (request->first_line)
{
if (_parse_first_line (request))
{
if (lw6sys_str_is_null_or_empty
(node_info->const_info.password))
{
request->password_ok = 1;
}
while ((!eof)
&& _mod_httpd_oob_should_continue (httpd_context,
oob_data))
{
line = lw6net_recv_line_tcp (oob_data->sock);
if (line)
{
if (strlen (line) == 0)
{
eof = 1;
}
else
{
_parse_header (request, line,
node_info->const_info.url,
node_info->const_info.password);
}
LW6SYS_FREE (line);
}
}
}
}
}
if ((!request->first_line) || (request->get_head_post == 0)
|| (!request->uri))
{
/*
* OK, not parseable, we put dummy (empty) values in all fields to
* avoid suspicious NULL-string bugs, and let the following code
* return error 500.
*/
if (request->first_line)
{
LW6SYS_FREE (request->first_line);
}
if (request->uri)
{
LW6SYS_FREE (request->uri);
}
request->first_line = lw6sys_str_copy (_ERROR_FIRST_LINE);
request->get_head_post = 0;
request->uri = lw6sys_str_copy (_ERROR_URI);
}
}
return request;
}
|
|||||
| ↓ | _lw6p2p_tentacle_clear | 15 | 28 | 55 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/p2p/p2p-tentacle.c |
void
_lw6p2p_tentacle_clear (_lw6p2p_tentacle_t * tentacle)
{
int i = 0;
if (tentacle->nb_srv_connections > 0 && tentacle->srv_connections)
{
for (i = 0; i < tentacle->nb_srv_connections; ++i)
{
if (tentacle->srv_connections[i])
{
lw6srv_close (tentacle->backends->srv_backends[i],
tentacle->srv_connections[i]);
}
}
LW6SYS_FREE (tentacle->srv_connections);
}
if (tentacle->nb_cli_connections > 0 && tentacle->cli_connections)
{
for (i = 0; i < tentacle->nb_cli_connections; ++i)
{
if (tentacle->cli_connections[i])
{
lw6cli_close (tentacle->backends->cli_backends[i],
tentacle->cli_connections[i]);
}
}
LW6SYS_FREE (tentacle->cli_connections);
}
if (tentacle->local_url)
{
LW6SYS_FREE (tentacle->local_url);
}
if (tentacle->remote_url)
{
LW6SYS_FREE (tentacle->remote_url);
}
if (tentacle->remote_ip)
{
LW6SYS_FREE (tentacle->remote_ip);
}
if (tentacle->password)
{
LW6SYS_FREE (tentacle->password);
}
if (tentacle->local_id_str)
{
LW6SYS_FREE (tentacle->local_id_str);
}
if (tentacle->remote_id_str)
{
LW6SYS_FREE (tentacle->remote_id_str);
}
memset (tentacle, 0, sizeof (_lw6p2p_tentacle_t));
}
|
|||||
| ↓ | lw6gui_menuitem_is_same | 15 | 13 | 24 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/gui/gui-menuitem.c |
int
lw6gui_menuitem_is_same (lw6gui_menuitem_t * menuitem_a,
lw6gui_menuitem_t * menuitem_b)
{
int ret = 1;
if (((!menuitem_a) && menuitem_b) || (menuitem_a && (!menuitem_b)))
{
ret = 0;
}
if (menuitem_a && menuitem_b)
{
ret = ret && !strcmp (menuitem_a->label, menuitem_b->label);
ret = ret && menuitem_a->value == menuitem_b->value;
ret = ret && menuitem_a->enabled == menuitem_b->enabled;
ret = ret && menuitem_a->selected == menuitem_b->selected;
ret = ret && menuitem_a->colored == menuitem_b->colored;
ret = ret && menuitem_a->last_change == menuitem_b->last_change;
ret = ret && menuitem_a->last_select == menuitem_b->last_select;
ret = ret && menuitem_a->last_unselect == menuitem_b->last_unselect;
}
return ret;
}
|
|||||
| ↓ | _simulate | 14 | 74 | 109 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/sim/sim-simulate.c |
static int
_simulate (int argc, char *argv[], lw6sim_results_t * results,
lw6ker_game_struct_t * game_struct, int mask, char *bot_backend)
{
int ret = 0;
lw6ker_game_state_t *game_state = NULL;
int nb_cursors = 0;
u_int64_t node_id;
int cursors_colors[LW6MAP_MAX_NB_TEAMS];
u_int16_t cursors_ids[LW6MAP_MAX_NB_TEAMS];
lw6bot_backend_t *cursors_bots[LW6MAP_MAX_NB_TEAMS];
lw6ker_cursor_t cursor;
int i, j;
int round, nb_rounds;
lw6bot_seed_t seed;
int x = 0, y = 0;
lw6ker_score_array_t score_array;
int bonus;
memset (cursors_colors, 0, sizeof (cursors_colors));
memset (cursors_ids, 0, sizeof (cursors_ids));
memset (cursors_bots, 0, sizeof (cursors_bots));
memset (&cursor, 0, sizeof (lw6ker_cursor_t));
node_id = lw6sys_generate_id_64 ();
nb_rounds =
game_struct->rules.rounds_per_sec * game_struct->rules.total_time;
game_state = lw6ker_game_state_new (game_struct, NULL);
if (game_state)
{
seed.game_state = game_state;
seed.pilot = NULL;
seed.dirty_read = 0;
seed.param.speed = LW6MAP_TEAMS_DEFAULT_BOT_SPEED;
seed.param.speed = LW6MAP_TEAMS_DEFAULT_BOT_IQ;
ret = 1;
lw6ker_game_state_register_node (game_state, node_id);
for (i = 0; i < LW6MAP_MAX_NB_TEAMS; ++i)
{
if (lw6ker_team_mask_is_concerned (i, mask))
{
cursors_colors[nb_cursors] = i;
cursors_ids[nb_cursors] = lw6sys_generate_id_16 ();
lw6ker_game_state_add_cursor (game_state, node_id,
cursors_ids[nb_cursors], i);
cursors_bots[nb_cursors] =
lw6bot_create_backend (argc, argv, bot_backend);
if (cursors_bots[nb_cursors])
{
seed.param.cursor_id = cursors_ids[nb_cursors];
ret = ret && lw6bot_init (cursors_bots[nb_cursors], &seed);
}
nb_cursors++;
}
}
for (round = 0; round < nb_rounds; ++round)
{
if (!(round % _LW6SIM_BOT_ROUNDS_PERIOD))
{
for (i = 0; i < nb_cursors; ++i)
{
if (cursors_bots[i])
{
lw6bot_next_move (cursors_bots[i], &x, &y);
lw6ker_cursor_reset (&cursor);
cursor.pos.x = x;
cursor.pos.y = y;
cursor.node_id = node_id;
cursor.cursor_id = cursors_ids[i];
lw6ker_game_state_set_cursor (game_state, &cursor);
}
}
}
lw6ker_game_state_do_round (game_state);
}
lw6ker_score_array_update (&score_array, game_state);
for (i = 0; i < score_array.nb_scores; ++i)
{
j = score_array.scores[i].team_color;
if (lw6map_team_color_is_valid (j))
{
bonus = score_array.scores[i].consolidated_percent;
results->absolute[j] += bonus;
lw6sys_log (LW6SYS_LOG_INFO,
_x_ ("bonus for team %d is %d, new absolute is %d"),
j, bonus, results->absolute[j]);
}
}
for (i = 0; i < nb_cursors; ++i)
{
if (cursors_bots[i])
{
lw6bot_quit (cursors_bots[i]);
lw6bot_destroy_backend (cursors_bots[i]);
}
}
lw6ker_game_state_free (game_state);
}
return ret;
}
|
|||||
| ↓ | _load_consts | 14 | 6 | 22 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/srv/mod-httpd/mod-httpd-data.c |
static int
_load_consts (_mod_httpd_consts_t * consts, char *consts_file)
{
int ret = 0;
lw6sys_log (LW6SYS_LOG_INFO, _x_ ("reading \"%s\""), consts_file);
ret =
lw6cfg_read_key_value_xml_file (consts_file, _read_callback,
(void *) consts);
if (ret)
{
ret = consts->http_version && consts->header_description
&& consts->header_keywords && consts->content_type_html
&& consts->content_type_txt && consts->content_type_jpeg
&& consts->content_type_ico && consts->error_401 && consts->error_403
&& consts->error_404 && consts->error_405 && consts->error_500
&& consts->auth_realm;
}
return ret;
}
|
|||||
| ↓ | lw6map_test | 14 | 6 | 21 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/map/map-test.c |
int
lw6map_test (int mode)
{
int ret = 0;
if (lw6sys_false ())
{
/*
* Just to make sure most functions are stuffed in the binary
*/
lw6sys_test (mode);
lw6map_test (mode);
}
ret = test_new () && test_color () && test_coords ()
&& test_defaults () && test_dup () && test_exp ()
&& test_hexa () && test_local_info () && test_meta_layer ()
&& test_rules () && test_style () && test_teams () && test_weapon ();
return ret;
}
|
|||||
| ↓ | lw6sys_options_log | 14 | 53 | 84 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/sys/sys-options.c |
void
lw6sys_options_log (int argc, char *argv[])
{
char *path = NULL;
path = lw6sys_get_cwd (argc, argv);
if (path)
{
lw6sys_log (LW6SYS_LOG_INFO, _x_ ("cwd is \"%s\""), path);
LW6SYS_FREE (path);
}
path = lw6sys_get_run_dir (argc, argv);
if (path)
{
lw6sys_log (LW6SYS_LOG_INFO, _x_ ("run dir is \"%s\""), path);
LW6SYS_FREE (path);
}
path = lw6sys_get_user_dir (argc, argv);
if (path)
{
lw6sys_log (LW6SYS_LOG_INFO, _x_ ("user dir is \"%s\""), path);
LW6SYS_FREE (path);
}
path = lw6sys_get_config_file (argc, argv);
if (path)
{
lw6sys_log (LW6SYS_LOG_INFO, _x_ ("config file is \"%s\""), path);
LW6SYS_FREE (path);
}
path = lw6sys_get_log_file (argc, argv);
if (path)
{
lw6sys_log (LW6SYS_LOG_INFO, _x_ ("log file is \"%s\""), path);
LW6SYS_FREE (path);
}
path = lw6sys_get_prefix (argc, argv);
if (path)
{
lw6sys_log (LW6SYS_LOG_INFO, _x_ ("prefix is \"%s\""), path);
LW6SYS_FREE (path);
}
path = lw6sys_get_mod_dir (argc, argv);
if (path)
{
lw6sys_log (LW6SYS_LOG_INFO, _x_ ("mod dir is \"%s\""), path);
LW6SYS_FREE (path);
}
path = lw6sys_get_data_dir (argc, argv);
if (path)
{
lw6sys_log (LW6SYS_LOG_INFO, _x_ ("data dir is \"%s\""), path);
LW6SYS_FREE (path);
}
path = lw6sys_get_music_dir (argc, argv);
if (path)
{
lw6sys_log (LW6SYS_LOG_INFO, _x_ ("music dir is \"%s\""), path);
LW6SYS_FREE (path);
}
path = lw6sys_get_music_path (argc, argv);
if (path)
{
lw6sys_log (LW6SYS_LOG_INFO, _x_ ("music path is \"%s\""), path);
LW6SYS_FREE (path);
}
path = lw6sys_get_map_dir (argc, argv);
if (path)
{
lw6sys_log (LW6SYS_LOG_INFO, _x_ ("map dir is \"%s\""), path);
LW6SYS_FREE (path);
}
path = lw6sys_get_map_path (argc, argv);
if (path)
{
lw6sys_log (LW6SYS_LOG_INFO, _x_ ("map path is \"%s\""), path);
LW6SYS_FREE (path);
}
path = lw6sys_get_script_file (argc, argv);
if (path)
{
lw6sys_log (LW6SYS_LOG_INFO, _x_ ("script file is \"%s\""), path);
LW6SYS_FREE (path);
}
}
|
|||||
| ↓ | _update_game_surface | 14 | 49 | 110 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/gfx/mod-gl/gl-utils/gl-utils-game.c |
static void
_update_game_surface (mod_gl_utils_context_t * utils_context,
SDL_Surface * surface,
lw6ker_game_state_t * game_state,
lw6gui_look_t * look, int x0, int y0, int w, int h)
{
int x, y, z, x1, y1, d;
int safe_x = 0, safe_y = 0;
int fighter_id, hidden;
lw6ker_fighter_t *fighter;
Uint32 color;
float hidden_layer_alpha;
int team_color;
lw6map_rules_t *rules = NULL;
lw6sys_whd_t shape = { 0, 0, 0 };
int bytes_per_pixel;
lw6ker_game_state_get_shape (game_state, &shape);
rules = &(game_state->game_struct->rules);
hidden_layer_alpha = look->style.hidden_layer_alpha;
x1 = x0 + w;
y1 = y0 + h;
d = shape.d;
bytes_per_pixel = surface->format->BytesPerPixel;
if (x1 - x0 <= surface->w && y1 - y0 <= surface->h)
{
for (y = y0; y < y1; ++y)
{
for (x = x0; x < x1; ++x)
{
safe_x = x;
safe_y = y;
lw6map_coords_fix_xy (rules, &shape, &safe_x, &safe_y);
fighter_id = -1;
hidden = 0;
for (z = 0; z < d && fighter_id < 0; ++z)
{
fighter_id =
lw6ker_game_state_get_fighter_id (game_state,
safe_x, safe_y, z);
/*
* It's important to test d>1 else a call
* to get_zone_id is done when it's not needed,
* and this function does cost CPU. When d==1 hidden
* just makes no sense.
*/
if (d > 1 && fighter_id < 0)
{
hidden =
lw6ker_game_struct_is_fg
(game_state->game_struct, safe_x, safe_y, z);
}
}
if (fighter_id >= 0)
{
fighter =
lw6ker_game_state_get_fighter_by_id (game_state,
fighter_id);
team_color = fighter->team_color;
if (team_color >= 0)
{
/*
* We need to cache & check team_color for in dirty read
* mode, team_color could be negative even if fighter was
* reported active just before.
*/
color = mod_gl_utils_get_shaded_color_for_fighter
(utils_context, team_color, fighter->health);
if (hidden)
{
mod_gl_utils_force_color32_alpha (&color,
hidden_layer_alpha);
}
}
if (bytes_per_pixel == 4)
{
mod_gl_utils_putpixel_4_bytes_per_pixel (surface,
x - x0, y - y0,
color);
}
else
{
mod_gl_utils_putpixel (surface, x - x0, y - y0, color);
}
}
else
{
if (bytes_per_pixel == 4)
{
mod_gl_utils_putpixel_4_bytes_per_pixel (surface,
x - x0, y - y0,
0);
}
else
{
mod_gl_utils_putpixel (surface, x - x0, y - y0, 0);
}
}
}
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("wrong surface dimension x0=%d x1=%d surface->w=%d y0=%d y1=%d surface->h=%d"),
x0, x1, surface->w, y0, y1, surface->h);
}
}
|
|||||
| ↓ | _lw6ker_map_state_remove_fighters | 14 | 47 | 105 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/ker/ker-mapstate.c |
int
_lw6ker_map_state_remove_fighters (_lw6ker_map_state_t * map_state,
int32_t nb_fighters)
{
int32_t i, j;
int ret = 0;
int32_t nb_fighters_removed = 0;
int32_t fighters_to_remove_per_team[LW6MAP_MAX_NB_TEAMS];
int32_t fighters_to_remove_total = 0;
int64_t this_team_fighters = 0;
int64_t active_fighters = 0;
lw6ker_fighter_t *fighter = NULL;
int team_color;
memset (fighters_to_remove_per_team, 0,
sizeof (fighters_to_remove_per_team));
if (map_state->armies.active_fighters > 0)
{
active_fighters = map_state->armies.active_fighters;
for (i = 0; i < LW6MAP_MAX_NB_TEAMS; ++i)
{
this_team_fighters = map_state->armies.fighters_per_team[i];
fighters_to_remove_per_team[i] =
(nb_fighters * this_team_fighters) / active_fighters;
fighters_to_remove_total += fighters_to_remove_per_team[i];
}
}
if (fighters_to_remove_total <= nb_fighters)
{
for (i = nb_fighters; fighters_to_remove_total < nb_fighters; ++i)
{
/*
* i is just used as a pseudo-random value to cycle
* amoung teams
*/
j = i % LW6MAP_MAX_NB_TEAMS;
if (map_state->armies.fighters_per_team[j] >
fighters_to_remove_per_team[j] + 1)
{
fighters_to_remove_per_team[j]++;
fighters_to_remove_total++;
}
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("strange, fighters_to_remove_total=%d but nb_fighters=%d"),
fighters_to_remove_total, nb_fighters);
}
if (nb_fighters <= map_state->armies.active_fighters)
{
while (nb_fighters_removed < nb_fighters)
{
/*
* To remove fighters, we used to simply pseudo-randomly
* pass the current map, trying not to process
* low-numbered fighters systematically to avoid
* disadvantaging "first" teams, and whenever we
* encounter a fighter, we deleted it.
* Now it has evolved a bit, we check the fighter belongs
* to a team that still has some fighters to give, hence
* giving all teams reasonnable chances to survive.
* This should solve https://savannah.gnu.org/bugs/?28030
*/
for (i = 0;
i < LW6MAP_MAX_NB_TEAMS && nb_fighters_removed < nb_fighters;
++i)
{
for (j = i;
j < map_state->armies.active_fighters
&& nb_fighters_removed < nb_fighters;
j += LW6MAP_MAX_NB_TEAMS)
{
fighter = &(map_state->armies.fighters[j]);
team_color = fighter->team_color;
if (fighters_to_remove_per_team[team_color] > 0)
{
_lw6ker_map_state_remove_fighter (map_state, j);
fighters_to_remove_per_team[team_color]--;
fighters_to_remove_total--;
nb_fighters_removed++;
}
}
}
}
if (fighters_to_remove_total != 0)
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("fighters_to_remove_total=%d and should be 0"),
fighters_to_remove_total);
}
ret = 1;
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("can't remove %d fighters, map only has %d"),
nb_fighters, map_state->armies.active_fighters);
}
return ret;
}
|
|||||
| ↓ | _mod_gl_menu_cylinder_display_menu | 14 | 45 | 120 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/gfx/mod-gl/gl-menu/gl-cylinder/gl-cylinder-display.c |
void
_mod_gl_menu_cylinder_display_menu (mod_gl_utils_context_t * utils_context,
_mod_gl_menu_cylinder_context_t *
cylinder_context, lw6gui_look_t * look,
lw6gui_menu_t * menu)
{
int i, j, n;
int blink_state;
lw6gui_menuitem_t *menuitem;
float popup_x, popup_y, popup_w, popup_h;
char *popup = NULL;
mod_gl_utils_set_render_mode_3d_menu (utils_context);
prepare_view (utils_context, cylinder_context);
lw6gui_menu_update_display_range (menu,
cylinder_context->
const_data.max_displayed_items);
blink_state =
mod_gl_utils_timer_get_uptime (utils_context) /
(cylinder_context->const_data.sphere_blink_period / 2) % 2;
n = menu->nb_items_displayed + 2;
if (menu->first_item_displayed > 0)
{
draw_spheres (utils_context, cylinder_context, 0, n,
blink_state, cylinder_context->const_data.nb_spheres);
}
if (menu->first_item_displayed + menu->nb_items_displayed < menu->nb_items)
{
draw_spheres (utils_context, cylinder_context, n - 1, n,
blink_state ? 0 : 1,
cylinder_context->const_data.nb_spheres);
}
for (i = 0; i < menu->nb_items_displayed; ++i)
{
j = i + menu->first_item_displayed;
menuitem = menu->items[j];
if (menuitem->selected)
{
cylinder_context->i_right_point = i;
cylinder_context->j_tooltip = j;
}
draw_button (utils_context, cylinder_context, look, menuitem, i + 1, n);
}
if (menu->esc_item->enabled)
{
draw_button (utils_context, cylinder_context, look, menu->esc_item, -1,
n);
}
if (lw6gui_menu_has_popup (menu))
{
popup = menu->popup;
if (!lw6sys_str_is_null_or_empty (popup))
{
if ((!lw6sys_str_is_same
(popup, utils_context->menucache_array.popup_str))
|| (!utils_context->menucache_array.popup_bitmap))
{
if (utils_context->menucache_array.popup_str)
{
LW6SYS_FREE (utils_context->menucache_array.popup_str);
utils_context->menucache_array.popup_str = NULL;
}
if (utils_context->menucache_array.popup_bitmap)
{
mod_gl_utils_bitmap_free (utils_context,
utils_context->
menucache_array.popup_bitmap);
utils_context->menucache_array.popup_bitmap = NULL;
}
utils_context->menucache_array.popup_str =
lw6sys_str_copy (popup);
utils_context->menucache_array.popup_bitmap =
mod_gl_utils_multiline_text_write (utils_context,
utils_context->
font_data.menu, popup,
&(look->style.
color_set.menu_color_default),
cylinder_context->
const_data.popup_alpha_bg,
cylinder_context->
const_data.popup_max_width,
cylinder_context->
const_data.popup_max_height,
cylinder_context->
const_data.popup_border_size,
cylinder_context->
const_data.popup_margin_size,
cylinder_context->
const_data.popup_reformat_width);
}
if (utils_context->menucache_array.popup_bitmap)
{
mod_gl_utils_set_render_mode_2d_blend (utils_context);
popup_w =
(utils_context->video_mode.width *
cylinder_context->const_data.popup_relative_size *
utils_context->menucache_array.popup_bitmap->surface->w) /
cylinder_context->const_data.popup_max_width;
popup_h =
(popup_w *
utils_context->menucache_array.popup_bitmap->surface->h) /
utils_context->menucache_array.popup_bitmap->surface->w;
popup_x = (utils_context->video_mode.width - popup_w) / 2;
popup_y = (utils_context->video_mode.height - popup_h) / 2;
mod_gl_utils_bitmap_display (utils_context,
utils_context->
menucache_array.popup_bitmap,
popup_x, popup_y,
popup_x + popup_w,
popup_y + popup_h);
}
}
}
}
|
|||||
| ↓ | _tcp_accepter_reply | 14 | 44 | 125 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/p2p/p2p-node.c |
static int
_tcp_accepter_reply (void *func_data, void *data)
{
int ret = 1;
_lw6p2p_node_t *node = (_lw6p2p_node_t *) func_data;
lw6srv_tcp_accepter_t *tcp_accepter = (lw6srv_tcp_accepter_t *) data;
_lw6p2p_srv_oob_callback_data_t *srv_oob = NULL;
int i = 0;
int analyse_tcp_ret = 0;
u_int64_t remote_id = 0;
char *remote_url = NULL;
int tentacle_index = -1;
lw6net_tcp_peek (tcp_accepter->sock, tcp_accepter->first_line,
LW6SRV_PROTOCOL_BUFFER_SIZE, 0);
for (i = 0; i < node->backends.nb_srv_backends && ret; ++i)
{
analyse_tcp_ret =
lw6srv_analyse_tcp (node->backends.srv_backends[i], tcp_accepter,
node->node_info, &remote_id, NULL);
if (analyse_tcp_ret & LW6SRV_ANALYSE_DEAD)
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("dead accepter, scheduling it for deletion"));
if (lw6net_socket_is_valid (tcp_accepter->sock))
{
lw6net_socket_close (tcp_accepter->sock);
tcp_accepter->sock = LW6NET_SOCKET_INVALID;
}
ret = 0;
}
else
{
if (analyse_tcp_ret & LW6SRV_ANALYSE_UNDERSTANDABLE)
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_
("understood accepter, scheduling it for deletion"));
ret = 0; // will be filtered
if (analyse_tcp_ret & LW6SRV_ANALYSE_OOB)
{
srv_oob =
_lw6p2p_srv_oob_callback_data_new (node->backends.
srv_backends[i],
node->node_info,
tcp_accepter->
client_id.client_ip,
tcp_accepter->
client_id.client_port,
tcp_accepter->sock,
NULL);
if (srv_oob)
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("process srv_oob (tcp)"));
srv_oob->srv_oob->thread =
lw6sys_thread_create (_lw6p2p_srv_oob_callback, NULL,
srv_oob);
lw6sys_lifo_push (&(node->srv_oobs), srv_oob);
}
}
else
{
tentacle_index =
_lw6p2p_node_find_tentacle (node, remote_id);
if (tentacle_index < 0)
{
/*
* We analyse again, but this time querying for
* remote_url. The first call does not do this
* to save time, since protocol analysis must
* really remain simple. Besides this "double"
* anlysis is rare since it only concerns one
* message at the beginning of each incoming
* connection.
*/
analyse_tcp_ret =
lw6srv_analyse_tcp (node->backends.srv_backends[i],
tcp_accepter, node->node_info,
&remote_id, &remote_url);
if (remote_id != 0 && remote_url != NULL)
{
if (_lw6p2p_node_register_tentacle
(node, remote_url,
tcp_accepter->client_id.client_ip, remote_id))
{
tentacle_index =
_lw6p2p_node_find_tentacle (node, remote_id);
}
else
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_
("can't create tentacle with \"%s\""),
remote_url);
}
LW6SYS_FREE (remote_url);
}
else
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("wrong id/url"));
}
}
if (tentacle_index >= 0
&& tentacle_index < LW6P2P_MAX_NB_TENTACLES)
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("feed srv (tcp)"));
lw6srv_feed_with_tcp (node->backends.srv_backends[i],
node->tentacles
[tentacle_index].srv_connections
[i], tcp_accepter);
}
else
{
lw6net_socket_close (tcp_accepter->sock);
tcp_accepter->sock = LW6NET_SOCKET_INVALID;
}
}
}
}
}
return ret;
}
|
|||||
| ↓ | _display_cursor | 14 | 43 | 132 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/gfx/mod-gl/gl-view/gl-flat/gl-flat-display.c |
static void
_display_cursor (mod_gl_utils_context_t * utils_context,
_mod_gl_view_flat_context_t * flat_context,
lw6gui_look_t * look, lw6ker_game_state_t * game_state,
lw6pil_local_cursor_t * local_cursor, int i, int x, int y,
int even_odd)
{
float cursor_x = 0.0f;
float cursor_y = 0.0f;
float cursor_w = 0.0f;
float cursor_h = 0.0f;
float cursor_avg = 0.0f;
float text_x1 = 0.0f;
float text_y1 = 0.0f;
float text_x2 = 0.0f;
float text_y2 = 0.0f;
float text_dw = 0.0f;
float text_dh = 0.0f;
if (local_cursor && local_cursor->is_main && local_cursor->mouse_controlled)
{
x = local_cursor->x;
y = local_cursor->y;
}
lw6gui_viewport_map_to_screen (&(flat_context->viewport), &cursor_x,
&cursor_y, x, y, 0);
if (local_cursor)
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("cursor %x is local"),
local_cursor->cursor_id);
if (local_cursor->mouse_controlled)
{
cursor_x = utils_context->input.mouse.screen_pointer.pos_x;
cursor_y = utils_context->input.mouse.screen_pointer.pos_y;
}
else
{
lw6gui_viewport_map_to_screen (&(flat_context->viewport), &cursor_x,
&cursor_y, local_cursor->x,
local_cursor->y, 0);
}
cursor_x = lw6sys_max (cursor_x, flat_context->viewport.map_visible.x1);
cursor_x = lw6sys_min (cursor_x, flat_context->viewport.map_visible.x2);
cursor_y = lw6sys_max (cursor_y, flat_context->viewport.map_visible.y1);
cursor_y = lw6sys_min (cursor_y, flat_context->viewport.map_visible.y2);
}
else
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("displaying non-local cursor"));
}
if (cursor_x >= flat_context->viewport.map_visible.x1 &&
cursor_y >= flat_context->viewport.map_visible.y1 &&
cursor_x <= flat_context->viewport.map_visible.x2 &&
cursor_y <= flat_context->viewport.map_visible.y2)
{
cursor_avg =
(utils_context->video_mode.width +
utils_context->video_mode.height) *
flat_context->const_data.cursor_size * look->style.cursor_size;
if (lw6ker_game_state_get_charge_per1000
(game_state,
flat_context->cursors_context.cursor[i].team_color) >= 1000)
{
cursor_w = cursor_h =
(utils_context->video_mode.width +
utils_context->video_mode.height) *
lw6sys_math_heartbeat (mod_gl_utils_timer_get_uptime
(utils_context),
flat_context->const_data.
cursor_heartbeat_period,
flat_context->
const_data.cursor_size_heartbeat_min,
flat_context->
const_data.cursor_size_heartbeat_max) *
look->style.cursor_size;
}
else
{
cursor_w = cursor_h = cursor_avg;
}
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("display cursor %d %0.1f , %0.1f - %0.1f x %0.1f"), i,
cursor_x, cursor_y, cursor_w, cursor_h);
if (even_odd || !look->style.blink_cursor)
{
_display_cursor_bitmap (utils_context, flat_context, cursor_x,
cursor_y, cursor_w, cursor_h,
flat_context->cursors_context.bitmap_fg_bg);
_display_cursor_bitmap (utils_context, flat_context, cursor_x,
cursor_y, cursor_w, cursor_h,
flat_context->cursors_context.
cursor[i].bitmap_color);
}
if (flat_context->cursors_context.cursor[i].
shaded_text_letter->texture_h > 0)
{
text_y1 =
cursor_y + (flat_context->const_data.cursor_relative_text_y1 -
0.5) * cursor_avg;
text_y2 =
cursor_y + (flat_context->const_data.cursor_relative_text_y2 -
0.5) * cursor_avg;
text_x1 =
cursor_x + (flat_context->const_data.cursor_relative_text_x1 -
0.5) * cursor_avg;
text_x2 =
text_x1 +
((text_y2 -
text_y1) *
(flat_context->cursors_context.cursor[i].
shaded_text_letter->texture_w)) /
flat_context->cursors_context.cursor[i].
shaded_text_letter->texture_h;
text_dw =
flat_context->const_data.cursor_relative_text_dw * cursor_avg;
text_dh =
flat_context->const_data.cursor_relative_text_dh * cursor_avg;
mod_gl_utils_shaded_text_display (utils_context,
flat_context->
cursors_context.cursor[i].
shaded_text_letter, text_x1,
text_y1, text_x2, text_y2,
text_dw, text_dh);
}
}
}
|
|||||
| ↓ | _find_best_dir | 14 | 41 | 122 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/ker/ker-move.c |
static inline int32_t
_find_best_dir (_lw6ker_map_state_t * map_state, lw6ker_fighter_t * fighter,
int parity)
{
int32_t ret = fighter->last_direction;
int32_t zone_id =
_lw6ker_map_struct_get_zone_id (map_state->map_struct, fighter->pos.x,
fighter->pos.y, fighter->pos.z);
_lw6ker_zone_state_t *zone_states =
map_state->teams[fighter->team_color].gradient;
if (zone_id >= 0)
{
if (zone_states[zone_id].direction_to_cursor >= 0)
{
/*
* OK, it was cached...
*/
ret = zone_states[zone_id].direction_to_cursor;
}
else
{
/*
* Nothing in cache, we calculate it
*/
int32_t i;
_lw6ker_zone_struct_t *zone_structs = map_state->map_struct->zones;
int32_t neighbour_zone_id;
_lw6ker_zone_struct_t *fighter_zone_struct;
fighter_zone_struct = &(zone_structs[zone_id]);
int32_t best_potential = zone_states[zone_id].potential;
ret = -1;
if (parity)
{
if (fighter_zone_struct->one_way_dir_odd >= 0)
{
ret = fighter_zone_struct->one_way_dir_odd;
}
else
{
for (i = 0; i < LW6KER_NB_DIRS; ++i)
{
neighbour_zone_id = fighter_zone_struct->link[i];
if (neighbour_zone_id >= 0)
{
if (zone_states[neighbour_zone_id].potential >
best_potential)
{
best_potential =
zone_states[neighbour_zone_id].potential;
ret = i;
}
}
}
}
}
else
{
if (fighter_zone_struct->one_way_dir_even >= 0)
{
ret = fighter_zone_struct->one_way_dir_even;
}
else
{
for (i = LW6KER_NB_DIRS - 1; i >= 0; --i)
{
neighbour_zone_id = fighter_zone_struct->link[i];
if (neighbour_zone_id >= 0)
{
if (zone_states[neighbour_zone_id].potential >
best_potential)
{
best_potential =
zone_states[neighbour_zone_id].potential;
ret = i;
}
}
}
}
}
if (ret < 0)
{
/*
* Now, in most cases, if we can't find an adjacent square
* which is closer, it just means we are in the square
* where the cursor is. So we go straight to it.
* Fortunately this information is cached in
* closest_cursor_pos.
*/
ret =
_CALL_FIND_STRAIGHT_DIR (fighter->pos.x, fighter->pos.y,
zone_states
[zone_id].closest_cursor_pos,
parity);
}
if (ret < 0)
{
/*
* this can happen, for _find_straight_dir is very likely
* to return -1
*/
ret = fighter->last_direction;
}
// cache for later use
zone_states[zone_id].direction_to_cursor = ret;
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("fighter with incorrect zone_id=%d (pos=%d,%d,%d)"),
zone_id, (int) fighter->pos.x, (int) fighter->pos.y,
(int) fighter->pos.z);
}
return ret;
}
|
|||||
| ↓ | _dir_list_add_entries | 14 | 40 | 88 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/sys/sys-path.c |
static void
_dir_list_add_entries (lw6sys_list_t ** list, char *dir,
lw6sys_dir_list_filter_func_t filter_func,
void *func_data, int *n)
{
#ifdef LW6_MS_WINDOWS
WIN32_FIND_DATA dir_entry;
HANDLE dir_handle = INVALID_HANDLE_VALUE;
char *dir_wildcard = NULL;
#else
struct dirent *dir_entry = NULL;
struct dirent *dir_entry_result = NULL;
int dir_entry_size = 0;
DIR *dir_handle = NULL;
#endif
int old_n = 0;
int eod = 0;
if (n)
{
old_n = *n;
}
#ifdef LW6_MS_WINDOWS
memset (&dir_entry, 0, sizeof (WIN32_FIND_DATA));
if (strlen (dir) + 2 < MAX_PATH)
{
dir_wildcard = lw6sys_path_concat (dir, "*");
if (dir_wildcard)
{
dir_handle = FindFirstFile (dir_wildcard, &dir_entry);
LW6SYS_FREE (dir_wildcard);
}
}
if (dir_handle != INVALID_HANDLE_VALUE)
{
while (!eod)
{
_dir_list_add_entry (list, dir,
dir_entry.cFileName, filter_func, func_data,
n);
memset (&dir_entry, 0, sizeof (WIN32_FIND_DATA));
if (!FindNextFile (dir_handle, &dir_entry))
{
eod = 1;
}
}
FindClose (dir_handle);
}
else
{
lw6sys_log (LW6SYS_LOG_INFO, "", _x_ ("no files in dir \"%s\""), dir);
}
#else
dir_handle = opendir (dir);
if (dir_handle)
{
while (!eod)
{
dir_entry_size = sizeof (struct dirent) + NAME_MAX + 1;
dir_entry = (struct dirent *) LW6SYS_CALLOC (dir_entry_size);
if (dir_entry)
{
readdir_r (dir_handle, dir_entry, &dir_entry_result);
if (dir_entry_result && (dir_entry_result == dir_entry))
{
_dir_list_add_entry (list,
dir, dir_entry->d_name, filter_func,
func_data, n);
}
else
{
eod = 1;
}
LW6SYS_FREE (dir_entry);
}
}
closedir (dir_handle);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING, _x_ ("couldn't read dir \"%s\""), dir);
}
#endif
if (n && ((*n) == old_n))
{
lw6sys_log (LW6SYS_LOG_INFO, _x_ ("nothing in dir \"%s\""), dir);
}
}
|
|||||
| ↓ | command_set_parse | 14 | 40 | 78 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/pil/pil-command.c |
static int
command_set_parse (lw6pil_command_t * command, char *command_args)
{
int ret = 0;
char *pos;
char *seek;
seek = command_args;
pos = seek;
while (!is_spc (*seek))
{
seek++;
}
if (*seek)
{
(*seek) = '\0';
seek++;
command->args.set.cursor_id = lw6sys_id_atol (pos);
pos = seek;
if (lw6sys_check_id_16 (command->args.set.cursor_id))
{
while (!is_spc (*seek))
{
seek++;
}
if (*seek)
{
(*seek) = '\0';
seek++;
command->args.set.x = lw6sys_atoi (pos);
pos = seek;
while (!is_spc (*seek))
{
seek++;
}
if (*seek)
{
(*seek) = '\0';
command->args.set.y = lw6sys_atoi (pos);
seek++;
pos = seek;
while (!is_spc (*seek))
{
seek++;
}
if (*seek)
{
(*seek) = '\0';
command->args.set.fire = lw6sys_atoi (pos);
if (command->args.set.fire == 0
|| command->args.set.fire == 1)
{
seek++;
pos = seek;
command->args.set.fire2 = lw6sys_atoi (pos);
if (command->args.set.fire2 == 0
|| command->args.set.fire2 == 1)
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_
("%s command parsed cursor_id=%x, x=%d, y=%d, fire=%d, fire2=%d"),
LW6PIL_COMMAND_TEXT_SET,
(int) command->args.set.cursor_id,
command->args.set.x,
command->args.set.y,
command->args.set.fire,
command->args.set.fire2);
ret = 1;
}
}
}
}
}
}
}
return ret;
}
|
|||||
| ↓ | test_udp | 14 | 38 | 86 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/net/net-test.c |
static int
test_udp ()
{
int ret = 1;
LW6SYS_TEST_FUNCTION_BEGIN;
{
int sock1 = -1;
int sock2 = -1;
int ret_tmp = 0;
char *buf1_send = NULL;
char *buf1_recv = NULL;
int size;
char *incoming_ip = NULL;
int incoming_port = 0;
if (prepare_2_udp_socks (&sock1, &sock2))
{
size = strlen (TEST_BUF1_STR) + 1;
buf1_send = lw6sys_str_copy (TEST_BUF1_STR);
buf1_recv = LW6SYS_CALLOC (strlen (TEST_BUF1_STR) + 1);
if (buf1_send && buf1_recv)
{
if (lw6net_udp_send
(sock2, buf1_send, size,
LW6NET_ADDRESS_LOOPBACK, LW6NET_DEFAULT_PORT) == size)
{
lw6sys_delay (TEST_UDP_DELAY);
if (lw6net_udp_peek
(sock1, buf1_recv, size,
&incoming_ip, &incoming_port) == size)
{
if (incoming_ip)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_
("%d bytes available on socket %d (%s:%d)"),
size, sock1, incoming_ip, incoming_port);
LW6SYS_FREE (incoming_ip);
}
if (lw6net_udp_recv
(sock1, buf1_recv, size,
&incoming_ip, &incoming_port) == size)
{
if (incoming_ip)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_
("received \"%s\" on socket %d (%s:%d)"),
buf1_recv, sock1, incoming_ip,
incoming_port);
LW6SYS_FREE (incoming_ip);
}
ret_tmp = 1;
}
}
}
}
}
if (buf1_send)
{
LW6SYS_FREE (buf1_send);
}
if (buf1_recv)
{
LW6SYS_FREE (buf1_recv);
}
if (sock1 >= 0)
{
lw6net_socket_close (sock1);
}
if (sock2 >= 0)
{
lw6net_socket_close (sock2);
}
if (!ret_tmp)
{
ret = 0;
}
}
LW6SYS_TEST_FUNCTION_END;
return ret;
}
|
|||||
| ↓ | new_path | 14 | 34 | 69 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/bot/mod-follow/mod-follow-move.c |
static int
new_path (_mod_follow_context_t * follow_context, lw6bot_data_t * data)
{
int looser;
lw6ker_cursor_t cursor;
int ret = 0;
lw6sys_whd_t shape = { 0, 0, 0 };
lw6sys_xyz_t current_pos;
lw6sys_xyz_t next_pos;
int looping = 0;
int i;
lw6ker_game_state_get_shape (data->game_state, &shape);
if (lw6ker_game_state_get_cursor
(data->game_state, &cursor, data->param.cursor_id))
{
looser =
lw6ker_game_state_get_looser (data->game_state, cursor.team_color);
if (looser >= 0 && looser < LW6MAP_MAX_NB_TEAMS)
{
current_pos = cursor.pos;
follow_context->nb_steps = 0;
while (follow_context->nb_steps <
_MOD_FOLLOW_MAX_PATH_SIZE && !looping)
{
lw6ker_move_get_best_next_pos
(data->game_state, &next_pos, ¤t_pos, looser);
for (i =
lw6sys_max (0,
follow_context->nb_steps
-
_MOD_FOLLOW_LOOPING_BUFFER_SIZE);
i < follow_context->nb_steps && !looping; ++i)
{
if (follow_context->step[i].x ==
next_pos.x
&& follow_context->step[i].y ==
next_pos.y && follow_context->step[i].z == next_pos.z)
{
looping = 1;
}
}
follow_context->step[follow_context->nb_steps] = next_pos;
current_pos = next_pos;
follow_context->nb_steps++;
}
ret = 1;
}
}
if (!ret)
{
if (cursor.pos.x <= 0 && cursor.pos.y <= 0)
{
follow_context->step[0].x = shape.w / 2;
follow_context->step[0].y = shape.h / 2;
follow_context->step[0].z = 0;
}
else
{
follow_context->step[0] = cursor.pos;
}
follow_context->nb_steps = 1;
}
follow_context->current_step = 0;
return ret;
}
|
|||||
| ↓ | _node_set_verified_callback | 14 | 33 | 80 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/nod/nod-test.c |
static void
_node_set_verified_callback (void *data)
{
lw6nod_info_t *info = (lw6nod_info_t *) data;
lw6sys_list_t *list = NULL;
char *url = NULL;
lw6nod_info_t *verified_node = NULL;
int64_t stop_timestamp = 0;
int first_time = 1;
stop_timestamp = lw6sys_get_timestamp () + _TEST_DELAY_MS;
while (lw6sys_get_timestamp () < stop_timestamp)
{
list = lw6nod_info_new_verified_nodes ();
if (list)
{
url = lw6sys_url_http_from_ip_port (_TEST_IP_1, _TEST_PORT);
if (url)
{
verified_node =
lw6nod_info_new (_TEST_PROGRAM, _TEST_VERSION, _TEST_CODENAME,
_TEST_STAMP, _TEST_ID_1, url, _TEST_TITLE,
_TEST_DESCRIPTION, NULL, _TEST_BENCH,
_TEST_OPEN_RELAY, _TEST_UPTIME,
_TEST_IDLE_SCREENSHOT_SIZE,
_TEST_IDLE_SCREENSHOT_DATA);
if (verified_node && list)
{
lw6sys_list_push_front (&list, verified_node);
}
LW6SYS_FREE (url);
}
url = lw6sys_url_http_from_ip_port (_TEST_IP_2, _TEST_PORT);
if (url)
{
verified_node =
lw6nod_info_new (_TEST_PROGRAM, _TEST_VERSION, _TEST_CODENAME,
_TEST_STAMP, _TEST_ID_2, url, _TEST_TITLE,
_TEST_DESCRIPTION, NULL, _TEST_BENCH,
_TEST_OPEN_RELAY, _TEST_UPTIME,
_TEST_IDLE_SCREENSHOT_SIZE,
_TEST_IDLE_SCREENSHOT_DATA);
if (verified_node && list)
{
lw6sys_list_push_front (&list, verified_node);
}
LW6SYS_FREE (url);
}
url = lw6sys_url_http_from_ip_port (_TEST_IP_3, _TEST_PORT);
if (url)
{
verified_node =
lw6nod_info_new (_TEST_PROGRAM, _TEST_VERSION, _TEST_CODENAME,
_TEST_STAMP, _TEST_ID_3, url, _TEST_TITLE,
_TEST_DESCRIPTION, NULL, _TEST_BENCH,
_TEST_OPEN_RELAY, _TEST_UPTIME,
_TEST_IDLE_SCREENSHOT_SIZE,
_TEST_IDLE_SCREENSHOT_DATA);
if (verified_node && list)
{
lw6sys_list_push_front (&list, verified_node);
}
LW6SYS_FREE (url);
}
if (first_time)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("setting list of verified nodes"));
first_time = 0;
}
if (list)
{
lw6nod_info_set_verified_nodes (info, list);
}
// no need to free hash
}
}
}
|
|||||
| ↓ | _unload_consts | 14 | 29 | 61 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/srv/mod-httpd/mod-httpd-data.c |
static int
_unload_consts (_mod_httpd_consts_t * consts)
{
int ret = 1;
if (consts->http_version)
{
LW6SYS_FREE (consts->http_version);
}
if (consts->header_description)
{
LW6SYS_FREE (consts->header_description);
}
if (consts->header_keywords)
{
LW6SYS_FREE (consts->header_keywords);
}
if (consts->content_type_html)
{
LW6SYS_FREE (consts->content_type_html);
}
if (consts->content_type_txt)
{
LW6SYS_FREE (consts->content_type_txt);
}
if (consts->content_type_jpeg)
{
LW6SYS_FREE (consts->content_type_jpeg);
}
if (consts->content_type_ico)
{
LW6SYS_FREE (consts->content_type_ico);
}
if (consts->error_401)
{
LW6SYS_FREE (consts->error_401);
}
if (consts->error_403)
{
LW6SYS_FREE (consts->error_403);
}
if (consts->error_404)
{
LW6SYS_FREE (consts->error_404);
}
if (consts->error_405)
{
LW6SYS_FREE (consts->error_405);
}
if (consts->error_500)
{
LW6SYS_FREE (consts->error_500);
}
if (consts->auth_realm)
{
LW6SYS_FREE (consts->auth_realm);
}
memset (consts, 0, sizeof (_mod_httpd_consts_t));
return ret;
}
|
|||||
| ↓ | base64_encode | 14 | 24 | 40 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/glb/gnulib-base64.c |
void
base64_encode (const char *in, size_t inlen, char *out, size_t outlen)
{
/*
* Modified to fit URL requirements, see:
* http://en.wikipedia.org/wiki/Base64#URL_applications
* http://tools.ietf.org/html/rfc4648 "base64url"
*/
// static const char b64str[64] =
// "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
static const char b64str[64] =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
while (inlen && outlen)
{
*out++ = b64str[(to_uchar (in[0]) >> 2) & 0x3f];
if (!--outlen)
break;
*out++ = b64str[((to_uchar (in[0]) << 4)
+ (--inlen ? to_uchar (in[1]) >> 4 : 0)) & 0x3f];
if (!--outlen)
break;
*out++ =
(inlen
? b64str[((to_uchar (in[1]) << 2)
+ (--inlen ? to_uchar (in[2]) >> 6 : 0)) & 0x3f] : '=');
if (!--outlen)
break;
*out++ = inlen ? b64str[to_uchar (in[2]) & 0x3f] : '=';
if (!--outlen)
break;
if (inlen)
inlen--;
if (inlen)
in += 3;
}
if (outlen)
*out = '\0';
}
|
|||||
| ↓ | pop_body | 14 | 22 | 53 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/map/map-hexa.c |
static int
pop_body (lw6sys_hexa_serializer_t * hexa_serializer, lw6map_body_t * body)
{
int ret = 1;
int layer;
lw6sys_whd_t shape_min =
{ LW6MAP_MIN_BODY_WIDTH, LW6MAP_MIN_BODY_HEIGHT, LW6MAP_MIN_BODY_DEPTH };
lw6sys_whd_t shape_max =
{ LW6MAP_MAX_BODY_WIDTH, LW6MAP_MAX_BODY_HEIGHT, LW6MAP_MAX_BODY_DEPTH };
ret = ret
&& lw6sys_hexa_serializer_pop_int32 (hexa_serializer, &(body->checksum));
ret = ret
&& lw6sys_hexa_serializer_pop_whd (hexa_serializer, &(body->shape));
if (lw6sys_shape_check_min_max_whd (&body->shape, &shape_min, &shape_max))
{
for (layer = 0; layer < body->shape.d; ++layer)
{
ret = ret
&& pop_layer (hexa_serializer, &(body->layers[layer]),
&(body->shape));
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("map shape out of range (%dx%dx%d)"), body->shape.w,
body->shape.h, body->shape.d);
ret = 0;
}
ret = ret
&& pop_meta_layer (hexa_serializer, &(body->glue), &(body->shape));
ret = ret
&& pop_meta_layer (hexa_serializer, &(body->boost), &(body->shape));
ret = ret
&& pop_meta_layer (hexa_serializer, &(body->danger), &(body->shape));
ret = ret
&& pop_meta_layer (hexa_serializer, &(body->medicine), &(body->shape));
ret = ret
&& pop_meta_layer (hexa_serializer, &(body->one_way_north),
&(body->shape));
ret = ret
&& pop_meta_layer (hexa_serializer, &(body->one_way_east),
&(body->shape));
ret = ret
&& pop_meta_layer (hexa_serializer, &(body->one_way_south),
&(body->shape));
ret = ret
&& pop_meta_layer (hexa_serializer, &(body->one_way_west),
&(body->shape));
return ret;
}
|
|||||
| ↓ | _mod_ogg_is_music_file | 14 | 21 | 62 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/snd/mod-ogg/mod-ogg-music.c |
int
_mod_ogg_is_music_file (_mod_ogg_context_t * ogg_context, char *music_file)
{
int ret = 0;
int i = 0;
char *music_file_tmp = NULL;
if (music_file && strlen (music_file) > 0)
{
/*
* We copy this for we're going to modify it in place
*/
music_file_tmp = lw6sys_str_copy (music_file);
if (music_file_tmp)
{
lw6sys_str_tolower (music_file_tmp);
if ((ogg_context->music.filter == NULL)
|| (strlen (ogg_context->music.filter) == 0)
|| (strstr (music_file_tmp, ogg_context->music.filter)))
{
if ((ogg_context->music.exclude == NULL)
|| (strlen (ogg_context->music.exclude) == 0)
|| (!strstr (music_file_tmp, ogg_context->music.exclude)))
{
while (_MUSIC_EXTS[i])
{
if (strstr (music_file_tmp, _MUSIC_EXTS[i]))
{
ret = 1;
}
i++;
}
}
}
LW6SYS_FREE (music_file_tmp);
}
if (ret)
{
if (lw6sys_file_exists (music_file))
{
ret = 1;
}
else
{
ret = 0;
lw6sys_log (LW6SYS_LOG_INFO,
_x_
("file \"%s\" is not a music file, it can't be opened"),
music_file);
}
}
else
{
lw6sys_log (LW6SYS_LOG_INFO,
_x_
("file \"%s\" is not a music file, extension is unknown"),
music_file);
}
}
return ret;
}
|
|||||
| ↓ | push_body | 14 | 17 | 24 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/map/map-hexa.c |
static int
push_body (lw6sys_hexa_serializer_t * hexa_serializer, lw6map_body_t * body)
{
int ret = 1;
int layer;
ret = ret
&& lw6sys_hexa_serializer_push_int32 (hexa_serializer, body->checksum);
ret = ret && lw6sys_hexa_serializer_push_whd (hexa_serializer, body->shape);
for (layer = 0; layer < body->shape.d && ret; ++layer)
{
ret = ret && push_layer (hexa_serializer, &(body->layers[layer]));
}
ret = ret && push_meta_layer (hexa_serializer, &(body->glue));
ret = ret && push_meta_layer (hexa_serializer, &(body->boost));
ret = ret && push_meta_layer (hexa_serializer, &(body->danger));
ret = ret && push_meta_layer (hexa_serializer, &(body->medicine));
ret = ret && push_meta_layer (hexa_serializer, &(body->one_way_north));
ret = ret && push_meta_layer (hexa_serializer, &(body->one_way_east));
ret = ret && push_meta_layer (hexa_serializer, &(body->one_way_south));
ret = ret && push_meta_layer (hexa_serializer, &(body->one_way_west));
return ret;
}
|
|||||
| ↓ | lw6gui_keyboard_sync | 14 | 13 | 39 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/gui/gui-keyboard.c |
int
lw6gui_keyboard_sync (lw6gui_keyboard_t * dst, lw6gui_keyboard_t * src)
{
int ret = 1;
int i;
lw6gui_keypress_t *keypress;
ret = lw6gui_button_sync (&(dst->arrow_up), &(src->arrow_up)) &&
lw6gui_button_sync (&(dst->arrow_down), &(src->arrow_down)) &&
lw6gui_button_sync (&(dst->arrow_left), &(src->arrow_left)) &&
lw6gui_button_sync (&(dst->arrow_right), &(src->arrow_right)) &&
lw6gui_button_sync (&(dst->key_enter), &(src->key_enter)) &&
lw6gui_button_sync (&(dst->key_esc), &(src->key_esc)) &&
lw6gui_button_sync (&(dst->key_ctrl), &(src->key_ctrl)) &&
lw6gui_button_sync (&(dst->key_alt), &(src->key_alt)) &&
lw6gui_button_sync (&(dst->key_pgup), &(src->key_pgup)) &&
lw6gui_button_sync (&(dst->key_pgdown), &(src->key_pgdown));
/*
* We use raw list functions to pop/push objects to avoid
* re-construction the object
*/
while (!lw6sys_list_is_empty (src->queue))
{
keypress = (lw6gui_keypress_t *) lw6sys_list_pop_front (&(src->queue));
if (keypress)
{
lw6sys_list_push_back (&(dst->queue), (void *) keypress);
}
}
for (i = 0; i < LW6GUI_NB_KEYS; ++i)
{
ret = lw6gui_button_sync (&(dst->keys_state[i]), &(src->keys_state[i]))
&& ret;
}
return ret;
}
|
|||||
| ↓ | lw6hlp_print_about | 17 | 48 | 90 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/hlp/hlp-print.c |
void
lw6hlp_print_about (char *keyword, FILE * f)
{
char *doc_str = NULL;
lw6hlp_type_t type = LW6HLP_TYPE_VOID;
char *default_value = NULL;
int min_value = 0;
int max_value = 0;
char *type_str = NULL;
char *tmp = NULL;
int values_set = 0;
doc_str =
lw6sys_str_reformat (lw6hlp_about
(&type, &default_value, &min_value, &max_value,
keyword), LW6SYS_REFORMAT_DEFAULT_PREFIX,
LW6SYS_REFORMAT_DEFAULT_NB_COLUMNS);
if (doc_str)
{
switch (type)
{
case LW6HLP_TYPE_STR:
type_str = _x_ ("string");
break;
case LW6HLP_TYPE_INT:
type_str = _x_ ("integer");
break;
case LW6HLP_TYPE_FLOAT:
type_str = _x_ ("float");
break;
case LW6HLP_TYPE_BOOL:
type_str = _x_ ("boolean");
break;
case LW6HLP_TYPE_COLOR:
type_str = _x_ ("color");
break;
default:
// stay NULL
break;
}
if (type_str && type != LW6HLP_TYPE_VOID)
{
tmp = lw6sys_new_sprintf (_x_ ("Type: %s"), type_str);
if (tmp)
{
fprintf (f, "%s\n\n", tmp);
LW6SYS_FREE (tmp);
}
}
if (default_value)
{
/*
* Previous versions of the game used to print a dot "."
* after the default value but this is confusing when
* the default is "." or "" ...
*/
tmp = lw6sys_new_sprintf (_x_ ("Default value: %s"), default_value);
if (tmp)
{
values_set = 1;
fprintf (f, "%s\n", tmp);
LW6SYS_FREE (tmp);
}
}
if (min_value != 0 || max_value != 0)
{
tmp = lw6sys_new_sprintf (_x_ ("Min value: %d"), min_value);
if (tmp)
{
values_set = 1;
fprintf (f, "%s\n", tmp);
LW6SYS_FREE (tmp);
}
tmp = lw6sys_new_sprintf (_x_ ("Max value: %d"), max_value);
if (tmp)
{
values_set = 1;
fprintf (f, "%s\n", tmp);
LW6SYS_FREE (tmp);
}
}
if (values_set)
{
fprintf (f, "\n");
}
fprintf (f, "%s", doc_str);
fflush (stdout);
LW6SYS_FREE (doc_str);
}
}
|
|||||
| ↓ | _mod_tcp_poll | 16 | 53 | 138 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/cli/mod-tcp/mod-tcp-message.c |
void
_mod_tcp_poll (_mod_tcp_context_t * tcp_context,
lw6cnx_connection_t * connection)
{
_mod_tcp_specific_data_t *specific_data =
(_mod_tcp_specific_data_t *) connection->backend_specific_data;
_mod_tcp_connect_data_t *connect_data = NULL;
char buffer[LW6CLI_CONTENT_BUFFER_SIZE + 1];
char *envelope_line = NULL;
char *msg = NULL;
u_int32_t physical_ticket_sig = 0;
u_int32_t logical_ticket_sig = 0;
u_int64_t physical_from_id = 0;
u_int64_t physical_to_id = 0;
u_int64_t logical_from_id = 0;
u_int64_t logical_to_id = 0;
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("mod_tcp poll"));
switch (specific_data->state)
{
case _MOD_TCP_STATE_CLOSED:
connect_data =
(_mod_tcp_connect_data_t *)
LW6SYS_CALLOC (sizeof (_mod_tcp_connect_data_t));
if (connect_data)
{
connect_data->tcp_context = tcp_context;
connect_data->connection = connection;
specific_data->state = _MOD_TCP_STATE_CONNECTING;
specific_data->connect_thread =
lw6sys_thread_create (_mod_tcp_connect_func, NULL, connect_data);
if (specific_data->connect_thread)
{
// OK
}
else
{
specific_data->state = _MOD_TCP_STATE_CLOSED;
LW6SYS_FREE (connect_data);
}
}
break;
case _MOD_TCP_STATE_CONNECTING:
// nothing to do, just wait until it's connected or not
break;
case _MOD_TCP_STATE_CONNECT_DONE:
if (specific_data->connect_thread)
{
lw6sys_thread_join (specific_data->connect_thread);
specific_data->connect_thread = NULL;
}
if (lw6net_socket_is_valid (specific_data->sock))
{
specific_data->state = _MOD_TCP_STATE_CONNECTED;
/*
* We schedule a foo/bar soon so that connection does not stay
* "idle" and fires a server error because of a timeout.
*/
lw6cnx_connection_init_foo_bar_key (connection,
lw6sys_get_timestamp (),
LW6SYS_SLEEP_DELAY);
}
else
{
specific_data->state = _MOD_TCP_STATE_CLOSED;
}
break;
case _MOD_TCP_STATE_CONNECTED:
if (lw6net_socket_is_valid (specific_data->sock))
{
if (lw6net_tcp_is_alive (specific_data->sock))
{
memset (buffer, 0, LW6CLI_CONTENT_BUFFER_SIZE + 1);
if (lw6net_tcp_peek
(specific_data->sock, buffer, LW6CLI_CONTENT_BUFFER_SIZE,
0))
{
if (strchr (buffer, '\n'))
{
envelope_line =
lw6net_recv_line_tcp (specific_data->sock);
if (envelope_line)
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_
("mod_tcp received envelope \"%s\""),
envelope_line);
if (lw6msg_envelope_analyse
(envelope_line, LW6MSG_ENVELOPE_MODE_TELNET,
connection->local_url, connection->password,
connection->remote_id_int,
connection->local_id_int, &msg,
&physical_ticket_sig, &logical_ticket_sig,
&physical_from_id, &physical_to_id,
&logical_from_id, &logical_to_id, NULL))
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("mod_tcp analysed msg \"%s\""),
msg);
if (connection->recv_callback_func)
{
connection->recv_callback_func
(connection->recv_callback_data,
(void *) connection, physical_ticket_sig,
logical_ticket_sig, logical_from_id,
logical_to_id, msg);
}
else
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_
("no recv callback defined"));
}
LW6SYS_FREE (msg);
}
LW6SYS_FREE (envelope_line);
}
}
}
}
else
{
lw6net_socket_close (specific_data->sock);
specific_data->sock = LW6NET_SOCKET_INVALID;
specific_data->state = _MOD_TCP_STATE_CLOSED;
}
}
else
{
specific_data->sock = LW6NET_SOCKET_INVALID;
specific_data->state = _MOD_TCP_STATE_CLOSED;
}
break;
default:
lw6sys_log (LW6SYS_LOG_WARNING, _x_ ("unvalid state %d"),
specific_data->state);
}
}
|
|||||
| ↓ | _lw6ker_map_struct_lazy_compare | 13 | 8 | 35 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/ker/ker-mapstruct.c |
int
_lw6ker_map_struct_lazy_compare (_lw6ker_map_struct_t *
map_struct_a, _lw6ker_map_struct_t *
map_struct_b)
{
int ret = 0;
if (map_struct_a && map_struct_b)
{
if (map_struct_a == map_struct_b)
{
ret = 1;
}
else
{
ret = (map_struct_a->shape.w == map_struct_b->shape.w) &&
(map_struct_a->shape.h == map_struct_b->shape.h) &&
(map_struct_a->shape.d == map_struct_b->shape.d) &&
(map_struct_a->nb_places == map_struct_b->nb_places) &&
(map_struct_a->nb_zones == map_struct_b->nb_zones) &&
(map_struct_a->nb_slots == map_struct_b->nb_slots) &&
(map_struct_a->nb_usable_slots == map_struct_b->nb_usable_slots)
&& (map_struct_a->room_for_armies ==
map_struct_b->room_for_armies)
&& (map_struct_a->max_zone_size == map_struct_b->max_zone_size);
}
}
if (!ret)
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("map_structs do not look the same"));
}
return ret;
}
|
|||||
| ↓ | test_node | 13 | 50 | 120 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/nod/nod-test.c |
static int
test_node ()
{
int ret = 1;
LW6SYS_TEST_FUNCTION_BEGIN;
{
lw6nod_info_t *info = NULL;
void *thread_add_discovered = NULL;
void *thread_pop_discovered = NULL;
void *thread_set_verified = NULL;
void *thread_map_verified = NULL;
void *thread_update = NULL;
void *thread_dup_dyn = NULL;
char *url = NULL;
lw6sys_list_t *list = NULL;
ret = 0;
info =
lw6nod_info_new (_TEST_PROGRAM, _TEST_VERSION, _TEST_CODENAME,
_TEST_STAMP, _TEST_ID, _TEST_URL, _TEST_TITLE,
_TEST_DESCRIPTION, _TEST_PASSWORD, _TEST_BENCH,
_TEST_OPEN_RELAY, _TEST_UPTIME,
_TEST_IDLE_SCREENSHOT_SIZE,
_TEST_IDLE_SCREENSHOT_DATA);
if (info)
{
lw6nod_info_update (info, _TEST_COMMUNITY, _TEST_ROUND, _TEST_LEVEL,
_TEST_REQUIRED_BENCH, _TEST_NB_COLORS,
_TEST_MAX_NB_COLORS, _TEST_NB_CURSORS,
_TEST_MAX_NB_CURSORS, _TEST_NB_NODES,
_TEST_MAX_NB_NODES, _TEST_GAME_SCREENSHOT_SIZE,
_TEST_GAME_SCREENSHOT_DATA);
lw6nod_info_idle (info);
lw6nod_info_update (info, _TEST_COMMUNITY, _TEST_ROUND, _TEST_LEVEL,
_TEST_REQUIRED_BENCH, _TEST_NB_COLORS,
_TEST_MAX_NB_COLORS, _TEST_NB_CURSORS,
_TEST_MAX_NB_CURSORS, _TEST_NB_NODES,
_TEST_MAX_NB_NODES, _TEST_GAME_SCREENSHOT_SIZE,
_TEST_GAME_SCREENSHOT_DATA);
if (lw6nod_info_add_discovered_node (info, _TEST_URL))
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("add \"%s\""), _TEST_URL);
list = lw6nod_info_pop_discovered_nodes (info);
if (list && !lw6sys_list_is_empty (list))
{
url = lw6sys_list_pop_front (&list);
if (url)
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("pop \"%s\""), url);
LW6SYS_FREE (url);
}
}
if (list)
{
lw6sys_list_free (list);
}
}
/*
* Threads are (on purpose) started in what seems an illogical order,
* the idea is to be sure to see how program behaves when querying the
* object in various cases, including unprobable ones.
*/
thread_map_verified =
lw6sys_thread_create (_node_map_verified_callback, NULL, info);
if (thread_map_verified)
{
thread_set_verified =
lw6sys_thread_create (_node_set_verified_callback, NULL, info);
if (thread_set_verified)
{
thread_pop_discovered =
lw6sys_thread_create (_node_pop_discovered_callback, NULL,
info);
if (thread_pop_discovered)
{
thread_add_discovered =
lw6sys_thread_create (_node_add_discovered_callback,
NULL, info);
if (thread_add_discovered)
{
thread_update =
lw6sys_thread_create (_node_update_callback,
NULL, info);
if (thread_update)
{
thread_dup_dyn =
lw6sys_thread_create (_node_dup_dyn_callback,
NULL, info);
if (thread_dup_dyn)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_
("6 threads started, each one querying the same node info object"));
ret = 1;
lw6sys_thread_join (thread_dup_dyn);
}
lw6sys_thread_join (thread_update);
}
lw6sys_thread_join (thread_add_discovered);
}
lw6sys_thread_join (thread_pop_discovered);
}
lw6sys_thread_join (thread_set_verified);
}
lw6sys_thread_join (thread_map_verified);
}
lw6nod_info_free (info);
}
}
LW6SYS_TEST_FUNCTION_END;
return ret;
}
|
|||||
| ↓ | _do_info | 13 | 39 | 89 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/cli/mod-http/mod-http-oob.c |
static int
_do_info (_mod_http_context_t * http_context, lw6nod_info_t * node_info,
lw6cli_oob_data_t * oob_data, char *url, lw6sys_url_t * parsed_url,
char *ip, char *password_checksum)
{
int ret = 0;
char *response = NULL;
char *info_url = NULL;
int64_t origin = 0;
lw6sys_assoc_t *assoc = NULL;
char *seek = NULL;
char *pos = NULL;
char seek_c = '\0';
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("connecting in HTTP on %s:%d"), ip,
parsed_url->port);
assoc = lw6sys_assoc_new (lw6sys_free_callback);
if (assoc)
{
origin = lw6sys_get_timestamp ();
info_url = lw6sys_str_concat (url, _MOD_HTTP_OOB_INFO_TXT);
if (info_url)
{
response =
_mod_http_get (http_context, info_url, password_checksum);
if (response)
{
if (_mod_http_oob_should_continue (http_context, oob_data))
{
pos = seek = response;
while (*seek)
{
while (*seek && !lw6sys_chr_is_eol (*seek))
{
seek++;
}
if (*seek)
{
seek_c = *seek;
(*seek) = '\0';
if (strlen (pos) > 0)
{
if (lw6msg_utils_parse_key_value_to_assoc
(&assoc, pos))
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("parsed line \"%s\""),
pos);
}
else
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_
("unable to parse line \"%s\", ignoring"),
pos);
}
}
*seek = (seek_c);
seek++;
pos = seek;
}
}
}
LW6SYS_FREE (response);
}
else
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("no response from %s:%d"),
ip, parsed_url->port);
}
LW6SYS_FREE (info_url);
}
if (assoc)
{
if (oob_data->verify_callback_func)
{
ret =
oob_data->
verify_callback_func (oob_data->verify_callback_data, url, ip,
parsed_url->port,
lw6sys_get_timestamp () - origin,
assoc);
}
lw6sys_assoc_free (assoc);
}
}
return ret;
}
|
|||||
| ↓ | _udp_buffer_reply | 13 | 38 | 113 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/p2p/p2p-node.c |
static int
_udp_buffer_reply (void *func_data, void *data)
{
int ret = 1;
_lw6p2p_node_t *node = (_lw6p2p_node_t *) func_data;
lw6srv_udp_buffer_t *udp_buffer = (lw6srv_udp_buffer_t *) data;
_lw6p2p_srv_oob_callback_data_t *srv_oob = NULL;
int i = 0;
int analyse_udp_ret = 0;
u_int64_t remote_id = 0;
char *remote_url = NULL;
int tentacle_index = -1;
for (i = 0; i < node->backends.nb_srv_backends && ret; ++i)
{
analyse_udp_ret =
lw6srv_analyse_udp (node->backends.srv_backends[i], udp_buffer,
node->node_info, &remote_id, NULL);
if (analyse_udp_ret & LW6SRV_ANALYSE_DEAD)
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("dead buffer, scheduling it for deletion"));
ret = 0;
}
else
{
if (analyse_udp_ret & LW6SRV_ANALYSE_UNDERSTANDABLE)
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_
("understood buffer, scheduling it for deletion"));
ret = 0; // will be filtered
if (analyse_udp_ret & LW6SRV_ANALYSE_OOB)
{
srv_oob =
_lw6p2p_srv_oob_callback_data_new (node->backends.
srv_backends[i],
node->node_info,
udp_buffer->client_id.
client_ip,
udp_buffer->client_id.
client_port,
node->listener->
udp_sock,
udp_buffer->line);
if (srv_oob)
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("process srv_oob (udp)"));
srv_oob->srv_oob->thread =
lw6sys_thread_create (_lw6p2p_srv_oob_callback, NULL,
srv_oob);
lw6sys_lifo_push (&(node->srv_oobs), srv_oob);
}
}
else
{
tentacle_index =
_lw6p2p_node_find_tentacle (node, remote_id);
if (tentacle_index < 0)
{
/*
* We analyse again, but this time querying for
* remote_url. The first call does not do this
* to save time, since protocol analysis must
* really remain simple. Besides this "double"
* anlysis is rare since it only concerns one
* message at the beginning of each incoming
* connection.
*/
analyse_udp_ret =
lw6srv_analyse_udp (node->backends.srv_backends[i],
udp_buffer, node->node_info,
&remote_id, &remote_url);
if (remote_id != 0 && remote_url != NULL)
{
if (_lw6p2p_node_register_tentacle
(node, remote_url,
udp_buffer->client_id.client_ip, remote_id))
{
tentacle_index =
_lw6p2p_node_find_tentacle (node, remote_id);
}
else
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_
("can't create tentacle with \"%s\""),
remote_url);
}
LW6SYS_FREE (remote_url);
}
else
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("wrong id/url"));
}
}
if (tentacle_index >= 0
&& tentacle_index < LW6P2P_MAX_NB_TENTACLES)
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("feed srv (udp)"));
lw6srv_feed_with_udp (node->backends.srv_backends[i],
node->tentacles
[tentacle_index].srv_connections
[i], udp_buffer);
}
}
}
}
}
return ret;
}
|
|||||
| ↓ | _mod_udpd_process_oob | 13 | 38 | 105 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/srv/mod-udpd/mod-udpd-oob.c |
int
_mod_udpd_process_oob (_udpd_context_t * udpd_context,
lw6nod_info_t * node_info,
lw6srv_oob_data_t * oob_data)
{
int ret = 0;
char *request_line = NULL;
int syntax_ok = 0;
char *command = NULL;
int password_ok = 0;
char *given_public_url = NULL;
char *response = NULL;
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("process udpd oob"));
if (_mod_udpd_oob_should_continue (udpd_context, oob_data))
{
request_line = oob_data->first_line;
if (request_line)
{
if (lw6msg_oob_analyse_request (&syntax_ok, &command, &password_ok,
&given_public_url, request_line,
node_info->const_info.url,
node_info->const_info.password))
{
if (lw6sys_str_is_same_no_case (command, LW6MSG_OOB_PING))
{
lw6sys_log (LW6SYS_LOG_INFO,
_x_ ("mod_udpd %s response to %s:%d"),
LW6MSG_OOB_PONG, oob_data->remote_ip,
oob_data->remote_port);
response = lw6msg_oob_generate_pong (node_info);
}
if (lw6sys_str_is_same_no_case (command, LW6MSG_OOB_INFO))
{
lw6sys_log (LW6SYS_LOG_INFO,
_x_ ("mod_udpd %s response to %s:%d"),
LW6MSG_OOB_INFO, oob_data->remote_ip,
oob_data->remote_port);
response = lw6msg_oob_generate_info (node_info);
}
if (lw6sys_str_is_same_no_case (command, LW6MSG_OOB_LIST))
{
lw6sys_log (LW6SYS_LOG_INFO,
_x_ ("mod_udpd %s response to %s:%d"),
LW6MSG_OOB_LIST, oob_data->remote_ip,
oob_data->remote_port);
response = lw6msg_oob_generate_list (node_info);
}
if (given_public_url)
{
if (strlen (given_public_url) > 0)
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_
("discovered node \"%s\" from given url"),
given_public_url);
lw6nod_info_add_discovered_node (node_info,
given_public_url);
}
LW6SYS_FREE (given_public_url);
}
}
else
{
if (syntax_ok && !password_ok)
{
lw6sys_log (LW6SYS_LOG_INFO,
_x_ ("mod_udpd %s response to %s:%d"),
LW6MSG_FORBIDDEN, oob_data->remote_ip,
oob_data->remote_port);
response = lw6sys_new_sprintf ("%s\n", LW6MSG_FORBIDDEN);
}
else
{
lw6sys_log (LW6SYS_LOG_INFO,
_x_ ("mod_udpd %s response to %s:%d"),
LW6MSG_ERROR, oob_data->remote_ip,
oob_data->remote_port);
response = lw6sys_new_sprintf ("%s\n", LW6MSG_ERROR);
}
}
}
}
if (response)
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("sending OOB response \"%s\" on UDP to %s:%d"),
response, oob_data->remote_ip, oob_data->remote_port);
lw6net_udp_send (oob_data->sock, response, strlen (response),
oob_data->remote_ip, oob_data->remote_port);
}
else
{
lw6net_send_line_udp (oob_data->sock, LW6MSG_ERROR,
oob_data->remote_ip, oob_data->remote_port);
}
if (response)
{
LW6SYS_FREE (response);
}
return ret;
}
|
|||||
| ↓ | _mod_httpd_init | 13 | 36 | 83 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/srv/mod-httpd/mod-httpd-setup.c |
_mod_httpd_context_t *
_mod_httpd_init (int argc, char *argv[], lw6srv_listener_t * listener)
{
_mod_httpd_context_t *httpd_context = NULL;
char *user_dir;
char *data_dir;
char *httpd_dir;
int ok = 0;
lw6sys_log (LW6SYS_LOG_INFO, _x_ ("httpd init"));
httpd_context =
(_mod_httpd_context_t *) LW6SYS_CALLOC (sizeof (_mod_httpd_context_t));
if (httpd_context)
{
data_dir = lw6sys_get_data_dir (argc, argv);
if (data_dir)
{
if (_mod_httpd_load_data (&(httpd_context->data), data_dir))
{
user_dir = lw6sys_get_user_dir (argc, argv);
if (user_dir)
{
if (!lw6sys_dir_exists (user_dir))
{
lw6sys_create_dir (user_dir);
}
httpd_dir = lw6sys_path_concat (user_dir, _HTTPD_DIR);
if (httpd_dir)
{
if (!lw6sys_dir_exists (httpd_dir))
{
lw6sys_create_dir (httpd_dir);
}
httpd_context->access_log_file =
lw6sys_path_concat (httpd_dir, _ACCESS_LOG_FILE);
if (httpd_context->access_log_file)
{
if (lw6sys_clear_file
(httpd_context->access_log_file))
{
httpd_context->access_log_mutex =
lw6sys_mutex_create ();
if (httpd_context->access_log_mutex)
{
ok = 1;
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("can't init \"%s\""),
httpd_context->access_log_file);
}
}
LW6SYS_FREE (httpd_dir);
}
LW6SYS_FREE (user_dir);
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("couldn't read mod-httpd data from \"%s\""),
data_dir);
}
LW6SYS_FREE (data_dir);
}
if (!ok)
{
_mod_httpd_quit (httpd_context);
httpd_context = NULL;
}
}
if (!httpd_context)
{
lw6sys_log (LW6SYS_LOG_ERROR, _("can't initialize mod_httpd"));
}
return httpd_context;
}
|
|||||
| ↓ | lw6sys_hexa_serializer_pop_str | 13 | 32 | 59 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/sys/sys-hexa.c |
int
lw6sys_hexa_serializer_pop_str (lw6sys_hexa_serializer_t * hexa_serializer,
char **value)
{
int ret = 0;
char *end_zero = NULL;
int offset_zero;
int len;
u_int8_t *buf = NULL;
int pos;
int i;
for (pos = hexa_serializer->pos;
(pos < hexa_serializer->buf_size - 2) && (!end_zero); pos += 2)
{
if (hexa_serializer->buf[pos] == '0'
&& hexa_serializer->buf[pos + 1] == '0')
{
end_zero = (char *) (hexa_serializer->buf + pos);
}
}
if (end_zero)
{
offset_zero = (end_zero - hexa_serializer->buf) - hexa_serializer->pos;
len = offset_zero / 2;
buf = (u_int8_t *) LW6SYS_CALLOC (len + 1);
if (buf)
{
ret = 1;
for (i = 0; i < len + 1; ++i)
{
ret = ret && pop_raw (hexa_serializer, buf + i, 1);
}
buf[len] = '\0'; // just to be sure
if (ret && value)
{
(*value) = (char *) buf;
}
else
{
LW6SYS_FREE (buf);
}
buf = NULL;
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING, _x_ ("unable to find \"%s\""), HEXA_0);
}
if (buf && !ret)
{
LW6SYS_FREE (buf);
buf = NULL;
}
return ret;
}
|
|||||
| ↓ | _cmd_with_backends | 13 | 32 | 89 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/p2p/p2p-test.c |
static int
_cmd_with_backends (char *cli_backends, char *srv_backends)
{
int ret = 1;
lw6p2p_db_t *db12 = NULL;
lw6p2p_db_t *db34 = NULL;
lw6p2p_db_t *db56 = NULL;
lw6p2p_node_t *node1 = NULL;
lw6p2p_node_t *node2 = NULL;
lw6p2p_node_t *node3 = NULL;
lw6p2p_node_t *node4 = NULL;
lw6p2p_node_t *node5 = NULL;
lw6p2p_node_t *node6 = NULL;
int64_t end_timestamp = 0;
lw6sys_list_t *entries = NULL;
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("testing cmd with backends \"%s\" and \"%s\""),
cli_backends, srv_backends);
ret = 0;
end_timestamp = lw6sys_get_timestamp () + TEST_NODE_CMD_DURATION;
if (_init_nodes
(cli_backends, srv_backends, &db12, &db34, &db56, &node1, &node2,
&node3, &node4, &node5, &node6))
{
if (_lw6p2p_node_register_tentacle
((_lw6p2p_node_t *) node1, _TEST_NODE_PUBLIC_URL2, _TEST_NODE_IP2,
lw6p2p_node_get_id (node2))
&& _lw6p2p_node_register_tentacle ((_lw6p2p_node_t *) node2,
_TEST_NODE_PUBLIC_URL1,
_TEST_NODE_IP1,
lw6p2p_node_get_id (node1))
&& _lw6p2p_node_register_tentacle ((_lw6p2p_node_t *) node1,
_TEST_NODE_PUBLIC_URL3,
_TEST_NODE_IP3,
lw6p2p_node_get_id (node3))
&& _lw6p2p_node_register_tentacle ((_lw6p2p_node_t *) node3,
_TEST_NODE_PUBLIC_URL1,
_TEST_NODE_IP1,
lw6p2p_node_get_id (node1))
&& _lw6p2p_node_register_tentacle ((_lw6p2p_node_t *) node1,
_TEST_NODE_PUBLIC_URL4,
_TEST_NODE_IP4,
lw6p2p_node_get_id (node4))
&& _lw6p2p_node_register_tentacle ((_lw6p2p_node_t *) node4,
_TEST_NODE_PUBLIC_URL1,
_TEST_NODE_IP1,
lw6p2p_node_get_id (node1))
&& _lw6p2p_node_register_tentacle ((_lw6p2p_node_t *) node4,
_TEST_NODE_PUBLIC_URL2,
_TEST_NODE_IP2,
lw6p2p_node_get_id (node2))
&& _lw6p2p_node_register_tentacle ((_lw6p2p_node_t *) node6,
_TEST_NODE_PUBLIC_URL2,
_TEST_NODE_IP2,
lw6p2p_node_get_id (node2))
&& _lw6p2p_node_register_tentacle ((_lw6p2p_node_t *) node5,
_TEST_NODE_PUBLIC_URL1,
_TEST_NODE_IP1,
lw6p2p_node_get_id (node1)))
{
while (lw6sys_get_timestamp () < end_timestamp)
{
lw6p2p_node_poll (node1);
lw6p2p_node_poll (node2);
lw6p2p_node_poll (node3);
lw6p2p_node_poll (node4);
lw6p2p_node_poll (node5);
lw6p2p_node_poll (node6);
lw6sys_idle ();
}
entries = lw6p2p_node_get_entries (node1);
if (entries)
{
lw6sys_list_map (entries, _print_entry_callback,
(void *) node1);
lw6sys_list_free (entries);
}
ret = 1;
}
_quit_nodes (db12, db34, db56, node1, node2, node3, node4, node5,
node6);
}
return ret;
}
|
|||||
| ↓ | lw6net_dns_gethostbyname | 13 | 32 | 83 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/net/net-dns.c |
char *
lw6net_dns_gethostbyname (char *name)
{
char *ret = NULL;
struct hostent *h;
struct in_addr addr;
char *ntoa_ret = NULL;
char *cached_ret = NULL;
char *to_put_in_cache = NULL;
_lw6net_dns_t *dns = &(_lw6net_global_context->dns);
if (lw6net_dns_is_ip (name))
{
/*
* Yes, gethostbyname would do the job and *not* convert
* a valid IP but we would need to acquire the lock...
* Another solution would be to use gethostbyname_r which
* is reentrant but it's non-standard, so in the general
* case we go for the mutex/lock option to avoid race
* conditions. Ideal implementation would use
* gethostbyname_r when available.
*/
ret = lw6sys_str_copy (name);
}
else
{
if (lw6sys_mutex_lock (dns->dns_cache_mutex))
{
cached_ret = lw6sys_hash_get (dns->dns_cache, name);
if (cached_ret)
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("cached DNS \"%s\" -> \"%s\""), name,
cached_ret);
ret = lw6sys_str_copy (cached_ret);
}
lw6sys_mutex_unlock (dns->dns_cache_mutex);
}
/*
* At this stage cached_ret is NOT NULL if something is in the cache
* but the pointer could be wrong since we unlocked. In pratice cache
* entries are never removed, but it's safer to rely on ret which has
* been copied locally.
*/
if (!ret)
{
if (lw6net_dns_lock ())
{
h = gethostbyname (name);
if (h && h->h_addrtype == AF_INET && h->h_length >= 4
&& h->h_addr_list[0])
{
addr.s_addr = *((u_long *) (h->h_addr_list[0]));
ntoa_ret = inet_ntoa (addr);
if (ntoa_ret)
{
lw6sys_log (LW6SYS_LOG_INFO,
_x_ ("DNS request \"%s\" -> \"%s\""), name,
ntoa_ret);
to_put_in_cache = lw6sys_str_copy (ntoa_ret);
ret = lw6sys_str_copy (ntoa_ret);
}
}
lw6net_dns_unlock ();
}
}
}
if (to_put_in_cache)
{
if (lw6sys_mutex_lock (dns->dns_cache_mutex))
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("put in DNS cache \"%s\" -> \"%s\""), name,
to_put_in_cache);
lw6sys_hash_set (dns->dns_cache, name, to_put_in_cache);
lw6sys_mutex_unlock (dns->dns_cache_mutex);
}
}
return ret;
}
|
|||||
| ↓ | lw6snd_create_backend | 13 | 32 | 86 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/snd/snd-register.c |
lw6snd_backend_t *
lw6snd_create_backend (int argc, char *argv[], char *name)
{
lw6snd_backend_t *backend = NULL;
#ifdef LW6_ALLINONE
#ifdef MOD_CSOUND
if (name && !strcmp (name, "csound"))
{
backend = mod_csound_create_backend ();
}
#endif
#ifdef MOD_OGG
if (name && !strcmp (name, "ogg"))
{
backend = mod_ogg_create_backend ();
}
#endif
if (backend)
{
backend->argc = argc;
backend->argv = argv;
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("sound backend \"%s\" does not exist"), name);
}
#else
lw6dyn_dl_handle_t *backend_handle = NULL;
backend_handle = lw6dyn_dlopen_backend (argc, argv, "snd", name);
if (backend_handle)
{
char *init_func_name;
lw6snd_backend_t *(*init_func) ();
init_func_name =
lw6sys_new_sprintf (LW6DYN_CREATE_BACKEND_FUNC_FORMAT, name);
if (init_func_name)
{
init_func = lw6dyn_dlsym (backend_handle, init_func_name);
if (init_func)
{
backend = init_func ();
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("unable to find function \"%s\" in sound backend \"%s\""),
init_func_name, name);
}
LW6SYS_FREE (init_func_name);
}
}
if (backend && backend_handle)
{
backend->dl_handle = backend_handle;
backend->argc = argc;
backend->argv = argv;
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unable to open sound backend \"%s\""), name);
}
#endif
if (backend)
{
static u_int32_t seq_id = 0;
backend->id = 0;
while (!(backend->id))
{
backend->id = ++seq_id;
}
}
return backend;
}
|
|||||
| ↓ | _mod_ogg_play_music_random | 13 | 31 | 64 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/snd/mod-ogg/mod-ogg-music.c |
int
_mod_ogg_play_music_random (_mod_ogg_context_t * ogg_context,
char *music_path, char *music_filter,
char *music_exclude)
{
int ret = 0;
lw6sys_list_t *list = NULL;
char *music_file = NULL;
char *path = NULL;
int i = 0;
int j = 0;
int n = 0;
if (music_filter && strlen (music_filter) > 0)
{
ogg_context->music.filter = lw6sys_str_copy (music_filter);
lw6sys_str_tolower (ogg_context->music.filter);
}
if (music_exclude && strlen (music_exclude) > 0)
{
ogg_context->music.exclude = lw6sys_str_copy (music_exclude);
lw6sys_str_tolower (ogg_context->music.exclude);
}
list =
lw6sys_path_list (music_path, _is_music_callback_func,
(void *) ogg_context, &n);
if (list)
{
j = lw6sys_random (n);
while (list
&& ((path = ((char *) lw6sys_list_pop_front (&list))) != NULL))
{
if ((i == j) && (!music_file))
{
music_file = path;
}
else
{
LW6SYS_FREE (path);
}
i++;
}
if (music_file)
{
ret = _mod_ogg_play_music_file (ogg_context, music_file);
LW6SYS_FREE (music_file);
}
// list is freed at this stage
}
if (ogg_context->music.filter)
{
LW6SYS_FREE (ogg_context->music.filter);
ogg_context->music.filter = NULL;
}
if (ogg_context->music.exclude)
{
LW6SYS_FREE (ogg_context->music.exclude);
ogg_context->music.exclude = NULL;
}
return ret;
}
|
|||||
| ↓ | get_file_common | 13 | 29 | 69 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/sys/sys-options.c |
static char *
get_file_common (char *mask1, char *prefix1, char *mask2, char *prefix2,
char *sub)
{
char *system_dir = NULL;
char *top_srcdir = NULL;
char *file = NULL;
if (file == NULL)
{
system_dir =
lw6sys_new_sprintf (mask1, prefix1,
lw6sys_build_get_package_tarname (),
lw6sys_build_get_version ());
if (system_dir)
{
file = lw6sys_path_concat (system_dir, sub);
if (file)
{
if (!lw6sys_file_exists (file))
{
// file doesn't exist, we ignore it
LW6SYS_FREE (file);
file = NULL;
}
}
LW6SYS_FREE (system_dir);
}
}
if (file == NULL)
{
system_dir =
lw6sys_new_sprintf (mask2, prefix2,
lw6sys_build_get_package_tarname (),
lw6sys_build_get_version ());
if (system_dir)
{
file = lw6sys_path_concat (system_dir, sub);
if (file)
{
if (!lw6sys_file_exists (file))
{
// file doesn't exist, we ignore it
LW6SYS_FREE (file);
file = NULL;
}
}
LW6SYS_FREE (system_dir);
}
}
if (file == NULL && strlen (sub) > 0)
{
top_srcdir = lw6sys_build_get_top_srcdir ();
file = lw6sys_path_concat (top_srcdir, sub);
if (file)
{
if (!lw6sys_file_exists (file))
{
// file doesn't exist, we ignore it
LW6SYS_FREE (file);
file = NULL;
}
}
}
return file;
}
|
|||||
| ↓ | get_dir_common | 13 | 29 | 69 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/sys/sys-options.c |
static char *
get_dir_common (char *mask1, char *prefix1, char *mask2, char *prefix2,
char *sub)
{
char *system_dir = NULL;
char *top_srcdir = NULL;
char *dir = NULL;
if (dir == NULL)
{
system_dir =
lw6sys_new_sprintf (mask1, prefix1,
lw6sys_build_get_package_tarname (),
lw6sys_build_get_version ());
if (system_dir)
{
dir = lw6sys_path_concat (system_dir, sub);
if (dir)
{
if (!lw6sys_dir_exists (dir))
{
// directory doesn't exist, we ignore it
LW6SYS_FREE (dir);
dir = NULL;
}
}
LW6SYS_FREE (system_dir);
}
}
if (dir == NULL)
{
system_dir =
lw6sys_new_sprintf (mask2, prefix2,
lw6sys_build_get_package_tarname (),
lw6sys_build_get_version ());
if (system_dir)
{
dir = lw6sys_path_concat (system_dir, sub);
if (dir)
{
if (!lw6sys_dir_exists (dir))
{
// directory doesn't exist, we ignore it
LW6SYS_FREE (dir);
dir = NULL;
}
}
LW6SYS_FREE (system_dir);
}
}
if (dir == NULL && strlen (sub) > 0)
{
top_srcdir = lw6sys_build_get_top_srcdir ();
dir = lw6sys_path_concat (top_srcdir, sub);
if (dir)
{
if (!lw6sys_dir_exists (dir))
{
// directory doesn't exist, we ignore it
LW6SYS_FREE (dir);
dir = NULL;
}
}
}
return dir;
}
|
|||||
| ↓ | lw6cnx_connection_new | 13 | 28 | 57 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/cnx/cnx-connection.c |
lw6cnx_connection_t *
lw6cnx_connection_new (char *local_url, char *remote_url,
char *remote_ip, int remote_port,
char *password, u_int64_t local_id,
u_int64_t remote_id,
int dns_ok, int network_reliability,
lw6cnx_recv_callback_t recv_callback_func,
void *recv_callback_data)
{
lw6cnx_connection_t *ret = NULL;
ret = (lw6cnx_connection_t *) LW6SYS_CALLOC (sizeof (lw6cnx_connection_t));
if (ret)
{
ret->local_url = lw6sys_str_copy (local_url);
ret->remote_url = lw6sys_str_copy (remote_url);
ret->remote_ip = lw6sys_str_copy (remote_ip);
ret->remote_port = remote_port;
if (password && strlen (password) > 0)
{
ret->password = lw6sys_str_copy (password);
ret->password_send_checksum =
lw6cnx_password_checksum (remote_url, password);
}
else
{
ret->password = lw6sys_str_copy ("");
ret->password_send_checksum =
lw6sys_str_copy (_DEFAULT_SEND_PASSWORD_CHECKSUM);
}
ret->local_id_int = local_id;
ret->local_id_str = lw6sys_id_ltoa (local_id);
ret->remote_id_int = remote_id;
ret->remote_id_str = lw6sys_id_ltoa (remote_id);
ret->dns_ok = dns_ok ? 1 : 0;
ret->network_reliability = network_reliability;
ret->recv_callback_func = recv_callback_func;
ret->recv_callback_data = recv_callback_data;
ret->send_mutex = lw6sys_mutex_create ();
ret->ping_msec = LW6CNX_WORST_PING_MSEC;
if (ret->local_url && ret->remote_url && ret->remote_ip && ret->password
&& ret->password_send_checksum && ret->local_id_str
&& ret->remote_id_str && ret->send_mutex)
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("created connection with \"%s\""), remote_url);
}
else
{
lw6cnx_connection_free (ret);
ret = NULL;
}
}
return ret;
}
|
|||||
| ↓ | _lw6ker_game_state_add_cursor | 13 | 26 | 92 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/ker/ker-gamestate.c |
int
_lw6ker_game_state_add_cursor (_lw6ker_game_state_t * game_state,
u_int64_t node_id,
u_int16_t cursor_id, int team_color)
{
int ret = 0;
lw6map_rules_t *rules = NULL;
int team_exists = 0;
int real_team_color = LW6MAP_TEAM_COLOR_INVALID;
int32_t x = 0;
int32_t y = 0;
if (check_node_id (game_state, node_id))
{
rules = &(game_state->game_struct->rules);
if (!_lw6ker_game_state_cursor_exists (game_state, cursor_id))
{
team_exists =
_lw6ker_game_state_team_exists (game_state, team_color);
real_team_color = team_color;
if (team_exists)
{
if ((rules->color_conflict_mode == 1
&&
!_lw6ker_cursor_array_is_color_owned_by (&
(game_state->
map_state.
cursor_array),
node_id,
team_color))
|| rules->color_conflict_mode == 2)
{
real_team_color =
_lw6ker_map_state_get_free_team_color (&
(game_state->
map_state));
}
}
if (lw6map_team_color_is_valid (real_team_color))
{
if (lw6map_exp_is_team_color_allowed (rules, team_color))
{
if (real_team_color != team_color)
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_
("color shift: real_team_color=%d team_color=%d"),
real_team_color, team_color);
}
if (!_lw6ker_game_state_team_exists
(game_state, real_team_color))
{
_lw6ker_game_state_add_team (game_state, node_id,
real_team_color);
}
if (_lw6ker_game_state_team_exists
(game_state, real_team_color))
{
if (_lw6ker_cursor_get_start_xy
(&x, &y, real_team_color,
rules->start_position_mode,
_lw6ker_game_state_get_rounds (game_state),
&(game_state->map_state.shape), rules))
{
ret =
_lw6ker_cursor_array_enable (&
(game_state->map_state.
cursor_array),
node_id, cursor_id,
real_team_color, x,
y);
}
}
}
}
else
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("unable to add team %d, game is full"),
(int) team_color);
}
}
else
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("cursor %x already exists"),
(int) cursor_id);
}
}
return ret;
}
|
|||||
| ↓ | lw6tsk_loader_pop | 13 | 26 | 54 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/tsk/tsk-loader.c |
int
lw6tsk_loader_pop (lw6map_level_t ** level,
lw6ker_game_struct_t ** game_struct,
lw6ker_game_state_t ** game_state,
lw6tsk_loader_t * loader)
{
int ret = 0;
_lw6tsk_loader_data_t *loader_data;
loader_data = (_lw6tsk_loader_data_t *) loader->data;
LOADER_LOCK;
if (level)
{
(*level) = NULL;
}
if (game_struct)
{
(*game_struct) = NULL;
}
if (game_state)
{
(*game_state) = NULL;
}
if (level)
{
if (loader_data->stage1.level)
{
(*level) = loader_data->stage1.level;
loader_data->stage1.level = NULL; // do not free!
ret = 1;
}
}
if (level && game_struct && game_state)
{
if (loader_data->stage2.level && loader_data->stage2.game_struct
&& loader_data->stage2.game_state && (!(*level)))
{
(*level) = loader_data->stage2.level;
(*game_struct) = loader_data->stage2.game_struct;
(*game_state) = loader_data->stage2.game_state;
loader_data->stage2.level = NULL; // do not free!
loader_data->stage2.game_struct = NULL; // do not free!
loader_data->stage2.game_state = NULL; // do not free!
ret = 1;
}
}
LOADER_UNLOCK;
return ret;
}
|
|||||
| ↓ | get_file_argc_argv | 13 | 26 | 59 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/sys/sys-options.c |
static char *
get_file_argc_argv (int argc, char *argv[], char *mask1, char *prefix1,
char *mask2, char *prefix2, char *sub)
{
char *file = NULL;
char *run_dir = NULL;
char *run_dir_rel = NULL;
file = get_file_common (mask1, prefix1, mask2, prefix2, sub);
if (file == NULL && strlen (sub) > 0)
{
run_dir = lw6sys_get_run_dir (argc, argv);
if (run_dir)
{
file = lw6sys_path_concat (run_dir, sub);
if (file)
{
if (!lw6sys_file_exists (file))
{
LW6SYS_FREE (file);
file = NULL;
// file doesn't exist, we ignore it
if (RUN_REL && strlen (RUN_REL))
{
run_dir_rel = lw6sys_path_concat (run_dir, RUN_REL);
if (run_dir_rel)
{
if (lw6sys_dir_exists (run_dir_rel))
{
file = lw6sys_path_concat (run_dir_rel, sub);
if (file)
{
if (!lw6sys_file_exists (file))
{
LW6SYS_FREE (file);
file = NULL;
// file doesn't exist, we ignore it
}
}
}
LW6SYS_FREE (run_dir_rel);
}
}
}
}
LW6SYS_FREE (run_dir);
}
}
if (file == NULL)
{
// if not installed, if no source, then search in local directory
file = lw6sys_path_concat (".", sub);
}
return file;
}
|
|||||
| ↓ | get_dir_argc_argv | 13 | 26 | 59 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/sys/sys-options.c |
static char *
get_dir_argc_argv (int argc, char *argv[], char *mask1, char *prefix1,
char *mask2, char *prefix2, char *sub)
{
char *dir = NULL;
char *run_dir = NULL;
char *run_dir_rel;
dir = get_dir_common (mask1, prefix1, mask2, prefix2, sub);
if (dir == NULL && strlen (sub) > 0)
{
run_dir = lw6sys_get_run_dir (argc, argv);
if (run_dir)
{
dir = lw6sys_path_concat (run_dir, sub);
if (dir)
{
if (!lw6sys_dir_exists (dir))
{
// directory doesn't exist, we ignore it
LW6SYS_FREE (dir);
dir = NULL;
if (RUN_REL && strlen (RUN_REL))
{
run_dir_rel = lw6sys_path_concat (run_dir, RUN_REL);
if (run_dir_rel)
{
if (lw6sys_dir_exists (run_dir_rel))
{
dir = lw6sys_path_concat (run_dir_rel, sub);
if (dir)
{
if (!lw6sys_dir_exists (dir))
{
LW6SYS_FREE (dir);
dir = NULL;
// directory doesn't exist, we ignore it
}
}
}
LW6SYS_FREE (run_dir_rel);
}
}
}
}
LW6SYS_FREE (run_dir);
}
}
if (dir == NULL)
{
// if not installed, if no source, then search in local directory
dir = lw6sys_path_concat (".", sub);
}
return dir;
}
|
|||||
| ↓ | _lw6ker_weapon_get_latest_weapon | 13 | 23 | 60 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/ker/ker-weapon.c |
int
_lw6ker_weapon_get_latest_weapon (_lw6ker_map_state_t * map_state,
int round, int *team_color, int *weapon_id,
int *per1000_left)
{
int i;
int found = LW6MAP_TEAM_COLOR_INVALID;
int ret = 0;
int latest_round = 0;
for (i = 0; i < LW6MAP_MAX_NB_TEAMS; ++i)
{
if (map_state->teams[i].active &&
map_state->teams[i].weapon_id >= LW6MAP_MIN_WEAPON_ID
&& map_state->teams[i].weapon_id <= LW6MAP_MAX_WEAPON_ID
&& map_state->teams[i].weapon_first_round <= round
&& map_state->teams[i].weapon_last_round >= round)
{
if (map_state->teams[i].weapon_first_round > latest_round)
{
latest_round = map_state->teams[i].weapon_first_round;
found = i;
ret = 1;
}
}
}
if (team_color)
{
(*team_color) = found;
}
if (weapon_id)
{
if (found != LW6MAP_TEAM_COLOR_INVALID)
{
(*weapon_id) = map_state->teams[found].weapon_id;
}
else
{
(*weapon_id) = LW6MAP_WEAPON_NONE;
}
}
if (per1000_left)
{
if (found != LW6MAP_TEAM_COLOR_INVALID)
{
(*per1000_left) =
_lw6ker_team_get_weapon_per1000_left (&(map_state->teams[found]),
round);
}
else
{
(*per1000_left) = 0;
}
}
return ret;
}
|
|||||
| ↓ | lw6gfx_test | 13 | 19 | 50 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/gfx/gfx-test.c |
int
lw6gfx_test (int mode)
{
int ret = 0;
lw6gfx_backend_t *backend = NULL;
int argc = TEST_ARGC;
char *argv[TEST_ARGC] = { TEST_ARGV0 };
if (lw6sys_false ())
{
/*
* Just to make sure most functions are stuffed in the binary
*/
lw6sys_test (mode);
lw6cfg_test (mode);
lw6map_test (mode);
lw6ker_test (mode);
lw6pil_test (mode);
lw6gui_test (mode);
lw6vox_test (mode);
/*
* No lw6dyn_test, see https://savannah.gnu.org/bugs/index.php?35017
* this function is available only in non-allinone mode.
*/
// lw6dyn_test (mode);
}
if (mode)
{
#ifdef MOD_GL
backend = lw6gfx_create_backend (argc, argv, "gl");
if (backend)
{
ret = (test_init (backend) && test_resolution (backend)
&& test_splash (backend)
&& test_background (backend) && test_menu (backend)
&& test_view (backend)
&& test_hud (backend)
&& test_events (backend) && test_quit (backend)) || ret;
lw6gfx_destroy_backend (backend);
}
#endif
}
else
{
ret = 1;
}
return ret;
}
|
|||||
| ↓ | lw6snd_test | 13 | 18 | 52 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/snd/snd-test.c |
int
lw6snd_test (int mode)
{
int ret = 1;
lw6snd_backend_t *backend;
int argc = TEST_ARGC;
char *argv[TEST_ARGC] = { TEST_ARGV0 };
if (lw6sys_false ())
{
/*
* Just to make sure most functions are stuffed in the binary
*/
lw6sys_test (mode);
lw6cfg_test (mode);
/*
* No lw6dyn_test, see https://savannah.gnu.org/bugs/index.php?35017
* this function is available only in non-allinone mode.
*/
// lw6dyn_test (mode);
}
if (mode)
{
#ifdef MOD_OGG
backend = lw6snd_create_backend (argc, argv, "ogg");
if (backend)
{
ret = test_init (backend) && test_play_fx (backend)
&& test_play_water (backend) && test_play_music (backend)
&& test_quit (backend) && ret;
lw6snd_destroy_backend (backend);
}
#endif
#ifdef MOD_CSOUND
backend = lw6snd_create_backend (argc, argv, "csound");
if (backend)
{
ret = test_init (backend) && test_play_fx (backend)
&& test_quit (backend) && ret;
lw6snd_destroy_backend (backend);
}
#endif
}
else
{
ret = 1;
}
return ret;
}
|
|||||
| ↓ | push_texture | 13 | 17 | 41 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/map/map-hexa.c |
static int
push_texture (lw6sys_hexa_serializer_t * hexa_serializer,
lw6map_texture_t * texture)
{
int ret = 1;
int x, y;
ret = ret
&& lw6sys_hexa_serializer_push_int32 (hexa_serializer, texture->w);
ret = ret
&& lw6sys_hexa_serializer_push_int32 (hexa_serializer, texture->h);
ret = ret
&& lw6sys_hexa_serializer_push_int32 (hexa_serializer,
texture->has_alpha);
for (y = 0; y < texture->h && ret; ++y)
{
for (x = 0; x < texture->w && ret; ++x)
{
ret = ret
&& lw6sys_hexa_serializer_push_color (hexa_serializer,
lw6map_texture_get (texture,
x, y));
}
}
ret = ret && lw6sys_hexa_serializer_push_color (hexa_serializer,
texture->
guessed_color_base.bg);
ret = ret
&& lw6sys_hexa_serializer_push_color (hexa_serializer,
texture->guessed_color_base.fg);
ret = ret
&& lw6sys_hexa_serializer_push_color (hexa_serializer,
texture->
guessed_color_alternate.bg);
ret = ret
&& lw6sys_hexa_serializer_push_color (hexa_serializer,
texture->
guessed_color_alternate.fg);
return ret;
}
|
|||||
| ↓ | _scm_lw6p2p_node_new | 13 | 100 | 161 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/lw6-funcs.c |
static SCM
_scm_lw6p2p_node_new (SCM db, SCM param)
{
lw6p2p_node_t *c_node;
SCM ret = SCM_BOOL_F;
SCM client_backends = SCM_BOOL_F;
SCM server_backends = SCM_BOOL_F;
SCM bind_ip = SCM_BOOL_F;
SCM bind_port = SCM_BOOL_F;
SCM broadcast = SCM_BOOL_F;
SCM public_url = SCM_BOOL_F;
SCM password = SCM_BOOL_F;
SCM title = SCM_BOOL_F;
SCM description = SCM_BOOL_F;
SCM bench = SCM_BOOL_F;
SCM open_relay = SCM_BOOL_F;
SCM known_nodes = SCM_BOOL_F;
SCM network_reliability = SCM_BOOL_F;
SCM trojan = SCM_BOOL_F;
lw6p2p_db_t *c_db;
char *c_client_backends;
char *c_server_backends;
char *c_bind_ip;
int c_bind_port;
int c_broadcast;
char *c_public_url;
char *c_password;
char *c_title;
char *c_description;
int c_open_relay;
int c_bench;
char *c_known_nodes;
int c_network_reliability;
int c_trojan;
LW6SYS_SCRIPT_FUNCTION_BEGIN;
if (lw6_global.net_initialized)
{
client_backends =
scm_assoc_ref (param, scm_from_locale_string ("client-backends"));
server_backends =
scm_assoc_ref (param, scm_from_locale_string ("server-backends"));
bind_ip = scm_assoc_ref (param, scm_from_locale_string ("bind-ip"));
bind_port = scm_assoc_ref (param, scm_from_locale_string ("bind-port"));
broadcast = scm_assoc_ref (param, scm_from_locale_string ("broadcast"));
public_url =
scm_assoc_ref (param, scm_from_locale_string ("public-url"));
password = scm_assoc_ref (param, scm_from_locale_string ("password"));
title = scm_assoc_ref (param, scm_from_locale_string ("title"));
description =
scm_assoc_ref (param, scm_from_locale_string ("description"));
bench = scm_assoc_ref (param, scm_from_locale_string ("bench"));
open_relay =
scm_assoc_ref (param, scm_from_locale_string ("open-relay"));
known_nodes =
scm_assoc_ref (param, scm_from_locale_string ("known-nodes"));
network_reliability =
scm_assoc_ref (param, scm_from_locale_string ("network-reliability"));
trojan = scm_assoc_ref (param, scm_from_locale_string ("trojan"));
SCM_ASSERT (SCM_SMOB_PREDICATE
(lw6_global.smob_types.db, db), db, SCM_ARG1, __FUNCTION__);
SCM_ASSERT (SCM_CONSP (param)
|| param == SCM_EOL, param, SCM_ARG2, __FUNCTION__);
SCM_ASSERT (scm_is_string (client_backends), param, SCM_ARG2,
__FUNCTION__);
SCM_ASSERT (scm_is_string (server_backends), param, SCM_ARG2,
__FUNCTION__);
SCM_ASSERT (scm_is_string (bind_ip), param, SCM_ARG2, __FUNCTION__);
SCM_ASSERT (scm_is_integer (bind_port), param, SCM_ARG2, __FUNCTION__);
SCM_ASSERT (SCM_BOOLP (broadcast), param, SCM_ARG2, __FUNCTION__);
SCM_ASSERT (scm_is_string (public_url), param, SCM_ARG2, __FUNCTION__);
SCM_ASSERT (scm_is_string (password), param, SCM_ARG2, __FUNCTION__);
SCM_ASSERT (scm_is_string (title), param, SCM_ARG2, __FUNCTION__);
SCM_ASSERT (scm_is_string (description), param, SCM_ARG2, __FUNCTION__);
SCM_ASSERT (scm_is_integer (bench), param, SCM_ARG2, __FUNCTION__);
SCM_ASSERT (SCM_BOOLP (open_relay), param, SCM_ARG2, __FUNCTION__);
SCM_ASSERT (scm_is_string (known_nodes), param, SCM_ARG2, __FUNCTION__);
SCM_ASSERT (scm_is_integer (network_reliability), param, SCM_ARG2,
__FUNCTION__);
SCM_ASSERT (SCM_BOOLP (trojan), param, SCM_ARG2, __FUNCTION__);
c_db = lw6_scm_to_db (db);
if (c_db)
{
c_client_backends = to_0str (client_backends);
if (c_client_backends)
{
c_server_backends = to_0str (server_backends);
if (c_server_backends)
{
c_bind_ip = to_0str (bind_ip);
if (c_bind_ip)
{
c_bind_port = scm_to_int (bind_port);
c_broadcast = SCM_NFALSEP (broadcast);
c_public_url = to_0str (public_url);
if (c_public_url)
{
c_title = to_0str (title);
if (c_title)
{
c_description = to_0str (description);
if (c_description)
{
c_password = to_0str (password);
if (c_password)
{
c_bench = scm_to_int (bench);
c_open_relay = SCM_NFALSEP (open_relay);
c_known_nodes = to_0str (known_nodes);
if (c_known_nodes)
{
c_network_reliability =
scm_to_int (network_reliability);
c_trojan = SCM_NFALSEP (trojan);
c_node =
lw6p2p_node_new
(lw6_global.argc,
lw6_global.argv, c_db,
c_client_backends,
c_server_backends, c_bind_ip,
c_bind_port, c_broadcast,
c_public_url,
c_title,
c_description, c_password,
c_bench, c_open_relay,
c_known_nodes,
c_network_reliability, c_trojan);
if (c_node)
{
ret =
lw6_make_scm_node (c_node,
db);
}
LW6SYS_FREE (c_known_nodes);
}
LW6SYS_FREE (c_password);
}
LW6SYS_FREE (c_description);
}
LW6SYS_FREE (c_title);
}
LW6SYS_FREE (c_public_url);
}
LW6SYS_FREE (c_bind_ip);
}
LW6SYS_FREE (c_server_backends);
}
LW6SYS_FREE (c_client_backends);
}
}
}
LW6SYS_SCRIPT_FUNCTION_END;
return ret;
}
|
|||||
| ↓ | lw6msg_z_decode | 17 | 46 | 123 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/msg/msg-z.c |
char *
lw6msg_z_decode (char *msg)
{
char *ret = NULL;
int in_len = 0;
int out_len = 0;
int z_ret = Z_BUF_ERROR;
char *in_buf = NULL;
int out_alloc_len = 0;
if (lw6sys_str_starts_with_no_case (msg, LW6MSG_Z_PREFIX))
{
in_buf =
lw6glb_base64_decode_bin_prefix (&in_len, msg, LW6MSG_Z_PREFIX);
if (in_buf)
{
out_alloc_len = 1; // too small, on purpose, to check auto-extend works
z_ret = Z_BUF_ERROR;
while (z_ret == Z_BUF_ERROR && !ret)
{
out_len = out_alloc_len;
ret = (char *) LW6SYS_MALLOC (out_alloc_len);
if (ret)
{
z_ret = _z_decode (ret, &out_len, in_buf, in_len);
switch (z_ret)
{
case Z_OK:
/*
* Very important, we check we have the room for '\0'
*/
if (out_len < out_alloc_len)
{
// OK
ret[out_len] = '\0';
}
else
{
out_alloc_len++;
z_ret = Z_BUF_ERROR;
}
break;
case Z_DATA_ERROR:
lw6sys_log (LW6SYS_LOG_INFO,
_x_ ("corrupted zlib data"));
break;
case Z_BUF_ERROR:
out_alloc_len += in_len + 1;
break;
}
}
else
{
z_ret = Z_MEM_ERROR;
}
if (z_ret != Z_OK)
{
if (ret)
{
LW6SYS_FREE (ret);
ret = NULL;
}
}
}
if (ret)
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("z-decode \"%s\" -> \"%s\""),
msg, ret);
}
else
{
switch (z_ret)
{
case Z_BUF_ERROR:
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("zlib error, buffer is too small (in_len=%d out_len=%d)"),
in_len, out_len);
break;
case Z_MEM_ERROR:
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("zlib error, not enough memory (in_len=%d out_len=%d)"),
in_len, out_len);
break;
case Z_DATA_ERROR:
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("zlib error, data error (in_len=%d out_len=%d)"),
in_len, out_len);
break;
case Z_STREAM_ERROR:
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("zlib error, stream error (in_len=%d out_len=%d)"),
in_len, out_len);
break;
default:
lw6sys_log (LW6SYS_LOG_WARNING, _x_ ("zlib error, ret=%d"),
z_ret);
break;
}
}
LW6SYS_FREE (in_buf);
}
else
{
lw6sys_log (LW6SYS_LOG_INFO,
_x_
("unable to decode \"%s\" as base64 prefixed by \"%s\""),
msg, LW6MSG_Z_PREFIX);
}
}
else
{
/*
* We consider it wasn't z-encoded, keep it the same
*/
ret = lw6sys_str_copy (msg);
}
return ret;
}
|
|||||
| ↓ | lw6sys_escape_html_attribute | 15 | 34 | 68 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/sys/sys-escape.c |
char *
lw6sys_escape_html_attribute (char *src)
{
char *ret = NULL;
int len = 0;
int i = 0, j = 0, k = 0;
unsigned char c;
char *quot = NULL;
src = lw6sys_str_empty_if_null (src);
len = lw6sys_min (strlen (src), _ESCAPE_HTML_ATTRIBUTE_MAX_LEN);
ret = (char *) LW6SYS_CALLOC (_ESCAPE_HTML_ATTRIBUTE_LEN * len + 1);
if (ret)
{
for (i = 0, j = 0; i < len && j < _ESCAPE_HTML_ATTRIBUTE_MAX_LEN; ++i)
{
c = src[i];
c = lw6sys_max (' ', c);
if (c != _ESCAPE_HTML_ATTRIBUTE_QUOT_CHAR
&& c != _ESCAPE_HTML_ATTRIBUTE_LT_CHAR
&& c != _ESCAPE_HTML_ATTRIBUTE_GT_CHAR
&& c != _ESCAPE_HTML_ATTRIBUTE_AMP_CHAR)
{
ret[j++] = c;
}
else
{
switch (c)
{
case _ESCAPE_HTML_ATTRIBUTE_QUOT_CHAR:
quot = _ESCAPE_HTML_ATTRIBUTE_QUOT_STR;
break;
case _ESCAPE_HTML_ATTRIBUTE_LT_CHAR:
quot = _ESCAPE_HTML_ATTRIBUTE_LT_STR;
break;
case _ESCAPE_HTML_ATTRIBUTE_GT_CHAR:
quot = _ESCAPE_HTML_ATTRIBUTE_GT_STR;
break;
case _ESCAPE_HTML_ATTRIBUTE_AMP_CHAR:
quot = _ESCAPE_HTML_ATTRIBUTE_AMP_STR;
break;
default:
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unable to find a substitude for char %d"),
(int) c);
quot = "";
}
for (k = 0; k < _ESCAPE_HTML_ATTRIBUTE_LEN && quot[k]; ++k)
{
ret[j++] = quot[k];
}
}
}
if (j <= _ESCAPE_HTML_ATTRIBUTE_LEN * len)
{
ret[j++] = '\0';
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("html attribute escape string too long %d for %d/%d"),
j, _ESCAPE_HTML_ATTRIBUTE_LEN * len, len);
}
}
return ret;
}
|
|||||
| ↓ | lw6net_tcp_recv | 13 | 42 | 94 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/net/net-tcp.c |
int
lw6net_tcp_recv (int sock, char *buf, int len, int delay_msec, int loop)
{
int ret = 0;
fd_set read;
struct timeval tv;
int select_ret;
int total_received = 0;
int received;
int chunk_size;
if (lw6net_socket_is_valid (sock))
{
ret = 1;
chunk_size = _lw6net_global_context->const_data.chunk_size;
memset (buf, 0, len);
total_received = 0;
while (total_received != len && ret)
{
FD_ZERO (&read);
FD_SET (sock, &read);
_lw6net_delay_msec_to_timeval (&tv, delay_msec);
select_ret = select (sock + 1, &read, NULL, NULL, &tv);
switch (select_ret)
{
case -1:
if (errno != EINTR)
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("error receiving data on socket %d (select error %d)"),
sock, errno);
lw6net_last_error ();
ret = 0;
}
break;
case 1:
if (FD_ISSET (sock, &read))
{
received = recv (sock,
buf + total_received,
lw6sys_min (len - total_received,
chunk_size), 0);
if (received > 0 && received <= len - total_received)
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("%d bytes received on TCP socket %d"),
received, sock);
total_received += received;
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("can't recv data on socket %d (got %d bytes)"),
sock, received);
lw6net_last_error ();
ret = 0;
}
}
break;
default:
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("can't recv data on socket %d (select returned %d)"),
sock, select_ret);
lw6net_last_error ();
ret = 0;
}
if ((!loop) && (total_received != len))
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("can't recv data on socket %d (%d/%d)"), sock,
total_received, len);
lw6net_last_error ();
ret = 0;
}
}
if (total_received > 0)
{
_lw6net_counters_register_recv (&
(_lw6net_global_context->counters),
total_received);
_lw6net_log_tcp_recv (&(_lw6net_global_context->log),
buf, total_received);
}
}
return ret;
}
|
|||||
| ↓ | test_assoc | 12 | 58 | 83 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/sys/sys-test.c |
static int
test_assoc ()
{
int ret = 1;
lw6sys_assoc_t *assoc;
lw6sys_assoc_t *assoc_copy;
LW6SYS_TEST_FUNCTION_BEGIN;
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("new/delete on assoc"));
assoc = lw6sys_assoc_new (NULL);
lw6sys_assoc_free (assoc);
}
{
int a = 3, b = 5, c = 7;
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("set/unset/has_key/get/map on int assoc"));
assoc = lw6sys_assoc_new (NULL);
lw6sys_assoc_set (&assoc, "a", (void *) &a);
lw6sys_assoc_set (&assoc, "b", (void *) &b);
lw6sys_assoc_set (&assoc, "c", (void *) &a);
lw6sys_assoc_set (&assoc, "c", (void *) &c);
lw6sys_assoc_unset (assoc, "b");
lw6sys_assoc_map (assoc, &assoc_map_func, &ret);
lw6sys_assoc_sort_and_map (assoc, &assoc_map_func, &ret);
ret = ret && lw6sys_assoc_has_key (assoc, "a");
ret = ret && !lw6sys_assoc_has_key (assoc, "b");
ret = ret && !lw6sys_assoc_has_key (assoc, "this key does not exist");
ret = ret && (*((int *) lw6sys_assoc_get (assoc, "a")) == 3);
ret = ret && ((int *) lw6sys_assoc_get (assoc, "b") == NULL);
ret = ret && (*((int *) lw6sys_assoc_get (assoc, "c")) == 7);
lw6sys_assoc_free (assoc);
}
{
char *str1, *str2, *str3;
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("testing free_func callback and dup on string assoc"));
assoc = lw6sys_assoc_new (&lw6sys_free_callback);
str1 = LW6SYS_MALLOC (5);
strncpy (str1, _TEST_LIST_STR1, 5);
lw6sys_assoc_set (&assoc, _TEST_ASSOC_KEY1, (void *) str1);
str2 = LW6SYS_MALLOC (5);
strncpy (str2, _TEST_LIST_STR2, 5);
lw6sys_assoc_set (&assoc, _TEST_ASSOC_KEY2, (void *) str2);
str3 = LW6SYS_MALLOC (5);
strncpy (str3, _TEST_LIST_STR3, 5);
lw6sys_assoc_set (&assoc, _TEST_ASSOC_KEY3, (void *) str3);
lw6sys_assoc_unset (assoc, _TEST_ASSOC_KEY1);
lw6sys_assoc_unset (assoc, _TEST_ASSOC_KEY3);
assoc_copy =
lw6sys_assoc_dup (assoc, (lw6sys_dup_func_t) lw6sys_str_copy);
ret = ret && !lw6sys_assoc_has_key (assoc_copy, _TEST_ASSOC_KEY1);
ret = ret && lw6sys_assoc_has_key (assoc_copy, _TEST_ASSOC_KEY2);
ret = ret && !lw6sys_assoc_has_key (assoc_copy, _TEST_ASSOC_KEY3);
ret = ret
&& strcmp ((char *) lw6sys_assoc_get (assoc_copy, _TEST_ASSOC_KEY2),
_TEST_LIST_STR2) == 0;
lw6sys_assoc_free (assoc_copy);
lw6sys_assoc_free (assoc);
}
{
int a = 3, b = 5;
lw6sys_list_t *keys;
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("testing keys on int assoc"));
assoc = lw6sys_assoc_new (NULL);
lw6sys_assoc_set (&assoc, "a", (void *) &a);
lw6sys_assoc_set (&assoc, "b", (void *) &b);
lw6sys_assoc_set (&assoc, "b", (void *) &b);
keys = lw6sys_assoc_keys (assoc);
lw6sys_assoc_free (assoc);
ret = ret && lw6sys_list_length (keys) == 2;
lw6sys_list_free (keys);
}
LW6SYS_TEST_FUNCTION_END;
return ret;
}
|
|||||
| ↓ | test_hash | 12 | 58 | 82 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/sys/sys-test.c |
static int
test_hash ()
{
int ret = 1;
lw6sys_hash_t *hash;
lw6sys_hash_t *hash_copy;
LW6SYS_TEST_FUNCTION_BEGIN;
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("new/delete on hash"));
hash = lw6sys_hash_new (NULL, 7);
lw6sys_hash_free (hash);
}
{
int a = 3, b = 5, c = 7;
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("set/unset/has_key/get/map on int hash"));
hash = lw6sys_hash_new (NULL, 7);
lw6sys_hash_set (hash, "a", (void *) &a);
lw6sys_hash_set (hash, "b", (void *) &b);
lw6sys_hash_set (hash, "c", (void *) &a);
lw6sys_hash_set (hash, "c", (void *) &c);
lw6sys_hash_unset (hash, "b");
lw6sys_hash_map (hash, &assoc_map_func, &ret);
lw6sys_hash_sort_and_map (hash, &assoc_map_func, &ret);
ret = ret && lw6sys_hash_has_key (hash, "a");
ret = ret && !lw6sys_hash_has_key (hash, "b");
ret = ret && !lw6sys_hash_has_key (hash, "this key does not exist");
ret = ret && (*((int *) lw6sys_hash_get (hash, "a")) == 3);
ret = ret && ((int *) lw6sys_hash_get (hash, "b") == NULL);
ret = ret && (*((int *) lw6sys_hash_get (hash, "c")) == 7);
lw6sys_hash_free (hash);
}
{
char *str1, *str2, *str3;
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("testing free_func callback and dup on string hash"));
hash = lw6sys_hash_new (&lw6sys_free_callback, 7);
str1 = LW6SYS_MALLOC (5);
strncpy (str1, _TEST_LIST_STR1, 5);
lw6sys_hash_set (hash, _TEST_ASSOC_KEY1, (void *) str1);
str2 = LW6SYS_MALLOC (5);
strncpy (str2, _TEST_LIST_STR2, 5);
lw6sys_hash_set (hash, _TEST_ASSOC_KEY2, (void *) str2);
str3 = LW6SYS_MALLOC (5);
strncpy (str3, _TEST_LIST_STR3, 5);
lw6sys_hash_set (hash, _TEST_ASSOC_KEY3, (void *) str3);
lw6sys_hash_unset (hash, _TEST_ASSOC_KEY1);
lw6sys_hash_unset (hash, _TEST_ASSOC_KEY3);
hash_copy = lw6sys_hash_dup (hash, (lw6sys_dup_func_t) lw6sys_str_copy);
ret = ret && !lw6sys_hash_has_key (hash_copy, _TEST_ASSOC_KEY1);
ret = ret && lw6sys_hash_has_key (hash_copy, _TEST_ASSOC_KEY2);
ret = ret && !lw6sys_hash_has_key (hash_copy, _TEST_ASSOC_KEY3);
ret = ret
&& strcmp ((char *) lw6sys_hash_get (hash_copy, _TEST_ASSOC_KEY2),
_TEST_LIST_STR2) == 0;
lw6sys_hash_free (hash_copy);
lw6sys_hash_free (hash);
}
{
int a = 3, b = 5;
lw6sys_list_t *keys;
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("testing keys on int hash"));
hash = lw6sys_hash_new (NULL, 7);
lw6sys_hash_set (hash, "a", (void *) &a);
lw6sys_hash_set (hash, "b", (void *) &b);
lw6sys_hash_set (hash, "b", (void *) &b);
keys = lw6sys_hash_keys (hash);
lw6sys_hash_free (hash);
ret = ret && lw6sys_list_length (keys) == 2;
lw6sys_list_free (keys);
}
LW6SYS_TEST_FUNCTION_END;
return ret;
}
|
|||||
| ↓ | lw6sys_options_log_defaults | 12 | 45 | 75 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/sys/sys-options.c |
void
lw6sys_options_log_defaults ()
{
char *path = NULL;
path = lw6sys_get_default_user_dir ();
if (path)
{
lw6sys_log (LW6SYS_LOG_INFO, _x_ ("default user dir is \"%s\""), path);
LW6SYS_FREE (path);
}
path = lw6sys_get_default_config_file ();
if (path)
{
lw6sys_log (LW6SYS_LOG_INFO, _x_ ("default config file is \"%s\""),
path);
LW6SYS_FREE (path);
}
path = lw6sys_get_default_log_file ();
if (path)
{
lw6sys_log (LW6SYS_LOG_INFO, _x_ ("default log file is \"%s\""), path);
LW6SYS_FREE (path);
}
path = lw6sys_get_default_prefix ();
if (path)
{
lw6sys_log (LW6SYS_LOG_INFO, _x_ ("default prefix is \"%s\""), path);
LW6SYS_FREE (path);
}
path = lw6sys_get_default_mod_dir ();
if (path)
{
lw6sys_log (LW6SYS_LOG_INFO, _x_ ("default mod dir is \"%s\""), path);
LW6SYS_FREE (path);
}
path = lw6sys_get_default_data_dir ();
if (path)
{
lw6sys_log (LW6SYS_LOG_INFO, _x_ ("default data dir is \"%s\""), path);
LW6SYS_FREE (path);
}
path = lw6sys_get_default_music_dir ();
if (path)
{
lw6sys_log (LW6SYS_LOG_INFO, _x_ ("default music dir is \"%s\""), path);
LW6SYS_FREE (path);
}
path = lw6sys_get_default_music_path ();
if (path)
{
lw6sys_log (LW6SYS_LOG_INFO, _x_ ("default music path is \"%s\""),
path);
LW6SYS_FREE (path);
}
path = lw6sys_get_default_map_dir ();
if (path)
{
lw6sys_log (LW6SYS_LOG_INFO, _x_ ("default map dir is \"%s\""), path);
LW6SYS_FREE (path);
}
path = lw6sys_get_default_map_path ();
if (path)
{
lw6sys_log (LW6SYS_LOG_INFO, _x_ ("default map path is \"%s\""), path);
LW6SYS_FREE (path);
}
path = lw6sys_get_default_script_file ();
if (path)
{
lw6sys_log (LW6SYS_LOG_INFO, _x_ ("default script file is \"%s\""),
path);
LW6SYS_FREE (path);
}
}
|
|||||
| ↓ | _lw6dat_stack_calc_serial_draft_and_reference | 12 | 40 | 84 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/dat/dat-stack.c |
int
_lw6dat_stack_calc_serial_draft_and_reference (_lw6dat_stack_t * stack)
{
int ret = 0;
int seq = 0;
int serial = 0;
_lw6dat_atom_t *atom = NULL;
int atom_complete = 1;
int atoms_no_hole = 1;
int order_i = 0;
int order_n = 0;
serial = lw6sys_max (stack->serial_min, stack->serial_reference + 1);
seq = _lw6dat_stack_get_seq_reference (stack);
while (serial <= stack->serial_max)
{
atom = _lw6dat_stack_get_atom (stack, serial);
if (atom)
{
if (atom->order_i == 0)
{
atom_complete = 1;
seq = atom->seq;
order_n = atom->order_n;
for (order_i = 1;
order_i < order_n && serial + order_i <= stack->serial_max;
++order_i)
{
atom = _lw6dat_stack_get_atom (stack, serial + order_i);
if (atom)
{
if (atom->seq != seq)
{
atom_complete = 0;
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("bad seq %d should be %d for atom \"%s\""),
atom->seq, seq,
_lw6dat_atom_get_full_str (atom));
}
if (atom->order_i != order_i)
{
atom_complete = 0;
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("bad order_i %d should be %d for atom \"%s\""),
atom->order_i, order_i,
_lw6dat_atom_get_full_str (atom));
}
}
else
{
atom_complete = 0;
}
}
if (order_i == order_n && atom_complete)
{
stack->serial_draft = serial;
if (atoms_no_hole)
{
stack->serial_reference = serial;
}
}
else
{
atoms_no_hole = 0;
}
serial += order_i;
}
else
{
atoms_no_hole = 0;
serial++;
}
}
else
{
atoms_no_hole = 0;
serial++;
}
}
return ret;
}
|
|||||
| ↓ | _scm_lw6gui_menu_new | 12 | 40 | 84 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/lw6-funcs.c |
static SCM
_scm_lw6gui_menu_new (SCM title, SCM help, SCM popup, SCM esc, SCM enable_esc)
{
SCM ret = SCM_BOOL_F;
char *c_title = NULL;
char *c_help = NULL;
char *c_popup = NULL;
char *c_esc = NULL;
int c_enable_esc = 0;
lw6gui_menu_t *c_menu = NULL;
LW6SYS_SCRIPT_FUNCTION_BEGIN;
if (SCM_NFALSEP (title))
{
SCM_ASSERT (scm_is_string (title), title, SCM_ARG1, __FUNCTION__);
}
if (SCM_NFALSEP (help))
{
SCM_ASSERT (scm_is_string (help), help, SCM_ARG2, __FUNCTION__);
}
if (SCM_NFALSEP (popup))
{
SCM_ASSERT (scm_is_string (popup), popup, SCM_ARG3, __FUNCTION__);
}
SCM_ASSERT (scm_is_string (esc), esc, SCM_ARG4, __FUNCTION__);
SCM_ASSERT (SCM_BOOLP (enable_esc), enable_esc, SCM_ARG5, __FUNCTION__);
if (SCM_NFALSEP (title))
{
c_title = to_0str (title);
}
else
{
c_title = lw6sys_str_copy (LW6SYS_STR_EMPTY);
}
if (c_title)
{
if (SCM_NFALSEP (help))
{
c_help = to_0str (help);
}
else
{
c_help = lw6sys_str_copy (LW6SYS_STR_EMPTY);
}
if (c_help)
{
if (SCM_NFALSEP (popup))
{
c_popup = to_0str (popup);
}
else
{
c_popup = lw6sys_str_copy (LW6SYS_STR_EMPTY);
}
if (c_popup)
{
c_esc = to_0str (esc);
if (c_esc)
{
c_enable_esc = SCM_NFALSEP (enable_esc);
c_menu =
lw6gui_menu_new (c_title, c_help, c_popup, c_esc,
c_enable_esc);
if (c_menu)
{
ret = lw6_make_scm_menu (c_menu);
}
LW6SYS_FREE (c_esc);
}
LW6SYS_FREE (c_popup);
}
LW6SYS_FREE (c_help);
}
LW6SYS_FREE (c_title);
}
LW6SYS_SCRIPT_FUNCTION_END;
return ret;
}
|
|||||
| ↓ | test_events | 12 | 39 | 85 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/gfx/gfx-test.c |
static int
test_events (lw6gfx_backend_t * backend)
{
int ret = 1;
LW6SYS_TEST_FUNCTION_BEGIN;
{
lw6gui_look_t *look = NULL;
lw6gui_input_t *input = NULL;
lw6gui_keypress_t *keypress = NULL;
char *repr = NULL;
int64_t ticks = 0;
look = lw6gui_look_new (NULL);
if (look)
{
ticks = lw6sys_get_uptime ();
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_
("now for %d seconds you can move mouse, touch keyboard, punch joystick"),
TEST_DURATION_EVENTS / 1000);
input = lw6gfx_pump_events (backend);
while (lw6sys_get_uptime () < ticks + TEST_DURATION_EVENTS
&& !lw6sys_signal_poll_quit ())
{
if (!lw6gfx_display (backend,
LW6GUI_DISPLAY_BACKGROUND, look, NULL,
NULL, NULL, 0, NULL, 0.0f, 0, 0, NULL, 0, 0,
0, 0))
{
lw6sys_log (LW6SYS_LOG_WARNING, _x_ ("display error"));
ret = 0;
}
lw6sys_sleep (TEST_SLEEP);
input = lw6gfx_pump_events (backend);
if (lw6gui_button_pop_press (&(input->mouse.button_left)))
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("left mouse button pressed at %dx%d"),
input->mouse.screen_pointer.pos_x,
input->mouse.screen_pointer.pos_y);
}
if (lw6gui_button_pop_press (&(input->mouse.button_right)))
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("right mouse button pressed at %d,%d"),
input->mouse.screen_pointer.pos_x,
input->mouse.screen_pointer.pos_y);
}
if (lw6gui_button_pop_press (&(input->mouse.wheel_up)))
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("mouse wheel up"));
}
if (lw6gui_button_pop_press (&(input->mouse.wheel_down)))
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("mouse wheel down"));
}
keypress = lw6gui_keyboard_pop_keypress (&(input->keyboard));
if (keypress)
{
repr = lw6gui_keypress_repr (keypress);
if (repr)
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("%s"), repr);
LW6SYS_FREE (repr);
}
lw6gui_keypress_free (keypress);
}
if (lw6sys_signal_poll_quit ())
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("a QUIT event was detected"));
}
}
lw6gui_look_free (look);
}
else
{
ret = 0;
}
}
LW6SYS_TEST_FUNCTION_END;
return ret;
}
|
|||||
| ↓ | add_subdirs | 12 | 38 | 85 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/ldr/ldr-dir.c |
static void
add_subdirs (lw6sys_list_t ** entries, lw6sys_assoc_t ** entries_index,
char *absolute_path, char *relative_path, int player_exp)
{
#ifdef LW6_MS_WINDOWS
WIN32_FIND_DATA dir_entry;
HANDLE dir_handle = INVALID_HANDLE_VALUE;
char *dir_wildcard = NULL;
#else
struct dirent *dir_entry = NULL;
struct dirent *dir_entry_result = NULL;
int dir_entry_size = 0;
DIR *dir_handle = NULL;
#endif
int n = 0;
int eod = 0;
#ifdef LW6_MS_WINDOWS
memset (&dir_entry, 0, sizeof (WIN32_FIND_DATA));
if (strlen (absolute_path) + 2 < MAX_PATH)
{
dir_wildcard = lw6sys_path_concat (absolute_path, "*");
if (dir_wildcard)
{
dir_handle = FindFirstFile (dir_wildcard, &dir_entry);
LW6SYS_FREE (dir_wildcard);
}
}
if (dir_handle != INVALID_HANDLE_VALUE)
{
while (!eod)
{
add_entry (entries, entries_index, absolute_path, relative_path,
dir_entry.cFileName, &n, player_exp);
memset (&dir_entry, 0, sizeof (WIN32_FIND_DATA));
if (!FindNextFile (dir_handle, &dir_entry))
{
eod = 1;
}
}
FindClose (dir_handle);
}
else
{
lw6sys_log (LW6SYS_LOG_INFO, "", _x_ ("no files in dir \"%s\""),
absolute_path);
}
#else
dir_handle = opendir (absolute_path);
if (dir_handle)
{
while (!eod)
{
dir_entry_size = sizeof (struct dirent) + NAME_MAX + 1;
dir_entry = (struct dirent *) LW6SYS_CALLOC (dir_entry_size);
if (dir_entry)
{
readdir_r (dir_handle, dir_entry, &dir_entry_result);
if (dir_entry_result && (dir_entry_result == dir_entry))
{
add_entry (entries, entries_index, absolute_path,
relative_path, dir_entry->d_name, &n,
player_exp);
}
else
{
eod = 1;
}
LW6SYS_FREE (dir_entry);
}
}
if (n == 0)
{
lw6sys_log (LW6SYS_LOG_INFO,
_x_ ("no maps in dir \"%s\""), absolute_path);
}
closedir (dir_handle);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING, "",
_x_ ("couldn't read map dir \"%s\""), absolute_path);
}
#endif
}
|
|||||
| ↓ | _lw6ker_game_struct_dup | 12 | 37 | 92 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/ker/ker-gamestruct.c |
_lw6ker_game_struct_t *
_lw6ker_game_struct_dup (_lw6ker_game_struct_t * game_struct,
lw6sys_progress_t * progress)
{
_lw6ker_game_struct_t *ret = NULL;
lw6sys_progress_begin (progress);
ret =
(_lw6ker_game_struct_t *) LW6SYS_CALLOC (sizeof (_lw6ker_game_struct_t));
if (ret)
{
memcpy (ret, game_struct, sizeof (_lw6ker_game_struct_t));
lw6sys_progress_update (progress, 0, 8, 1);
/*
* Set id after the memcpy, else will be overwritten
*/
ret->id = 0;
while (!ret->id)
{
ret->id = ++seq_id;
}
ret->map_struct.places =
(_lw6ker_place_struct_t *)
LW6SYS_MALLOC (sizeof (_lw6ker_place_struct_t) *
ret->map_struct.nb_places);
lw6sys_progress_update (progress, 0, 8, 2);
if (ret->map_struct.places)
{
memcpy (ret->map_struct.places, game_struct->map_struct.places,
sizeof (_lw6ker_place_struct_t) *
ret->map_struct.nb_places);
}
lw6sys_progress_update (progress, 0, 8, 3);
ret->map_struct.zones =
(_lw6ker_zone_struct_t *)
LW6SYS_MALLOC (sizeof (_lw6ker_zone_struct_t) *
ret->map_struct.nb_zones);
lw6sys_progress_update (progress, 0, 8, 4);
if (ret->map_struct.zones)
{
memcpy (ret->map_struct.zones, game_struct->map_struct.zones,
sizeof (_lw6ker_zone_struct_t) * ret->map_struct.nb_zones);
}
lw6sys_progress_update (progress, 0, 8, 5);
ret->map_struct.slots =
(_lw6ker_slot_struct_t *)
LW6SYS_MALLOC (sizeof (_lw6ker_slot_struct_t) *
ret->map_struct.nb_slots);
lw6sys_progress_update (progress, 0, 8, 6);
if (ret->map_struct.slots)
{
memcpy (ret->map_struct.slots, game_struct->map_struct.slots,
sizeof (_lw6ker_slot_struct_t) * ret->map_struct.nb_slots);
}
lw6sys_progress_update (progress, 0, 8, 7);
if ((!ret->map_struct.zones) || (!ret->map_struct.slots))
{
if (ret->map_struct.zones)
{
LW6SYS_FREE (ret->map_struct.zones);
}
if (ret->map_struct.slots)
{
LW6SYS_FREE (ret->map_struct.slots);
}
LW6SYS_FREE (ret);
ret = NULL;
}
}
if (ret)
{
if (_lw6ker_game_struct_checksum (ret) ==
_lw6ker_game_struct_checksum (game_struct))
{
lw6sys_log (LW6SYS_LOG_INFO, _x_ ("game_struct dup %d->%d"),
game_struct->id, ret->id);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("game_struct checkum mismatch after dup"));
}
}
lw6sys_progress_end (progress);
return ret;
}
|
|||||
| ↓ | _select_other_node_callback | 12 | 36 | 77 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/p2p/p2p-flush.c |
int
_select_other_node_callback (void *func_data, int nb_fields,
char **fields_values, char **fields_names)
{
int ret = 0;
lw6sys_list_t **list_of_node = (lw6sys_list_t **) func_data;
lw6nod_info_t *verified_node = NULL;
char *program = NULL;
char *version = NULL;
char *codename = NULL;
int stamp = 0;
u_int64_t id = 0;
char *url = NULL;
char *title = NULL;
char *description = NULL;
int bench = 0;
int open_relay = 0;
int uptime = 0;
if (nb_fields == _LW6P2P_DB_NODE_NB_FIELDS)
{
if (fields_values[_LW6P2P_DB_NODE_ORDER_ID])
{
id = lw6sys_id_atol (fields_values[_LW6P2P_DB_NODE_ORDER_ID]);
}
program = lw6sys_build_get_package_tarname ();
version = fields_values[_LW6P2P_DB_NODE_ORDER_VERSION];
codename = fields_values[_LW6P2P_DB_NODE_ORDER_CODENAME];
if (fields_values[_LW6P2P_DB_NODE_ORDER_STAMP])
{
stamp = lw6sys_atoi (fields_values[_LW6P2P_DB_NODE_ORDER_STAMP]);
}
url = fields_values[_LW6P2P_DB_NODE_ORDER_URL];
title = fields_values[_LW6P2P_DB_NODE_ORDER_TITLE];
description = fields_values[_LW6P2P_DB_NODE_ORDER_DESCRIPTION];
if (fields_values[_LW6P2P_DB_NODE_ORDER_BENCH])
{
bench = lw6sys_atoi (fields_values[_LW6P2P_DB_NODE_ORDER_BENCH]);
}
if (fields_values[_LW6P2P_DB_NODE_ORDER_OPEN_RELAY])
{
open_relay =
lw6sys_atoi (fields_values[_LW6P2P_DB_NODE_ORDER_OPEN_RELAY]);
}
/*
* uptime will be wrong (0), it could be possible to
* have it but would require a call to _lw6p2p_db_now
* which in turn requires a pointer on node object...
*/
if (id && url && title && description)
{
verified_node =
lw6nod_info_new (program, version, codename, stamp, id, url,
title, description, NULL, bench, open_relay,
uptime, 0, NULL);
if (verified_node && list_of_node)
{
lw6sys_list_push_front (list_of_node, verified_node);
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("database contains uncomplete entry for some node"));
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("request for other nodes should return %d fields but returned %d"),
_LW6P2P_DB_NODE_NB_FIELDS, nb_fields);
}
return ret;
}
|
|||||
| ↓ | lw6sys_progress_split5 | 12 | 36 | 71 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/sys/sys-progress.c |
void
lw6sys_progress_split5 (lw6sys_progress_t * progress1,
lw6sys_progress_t * progress2,
lw6sys_progress_t * progress3,
lw6sys_progress_t * progress4,
lw6sys_progress_t * progress5,
lw6sys_progress_t * progress_src)
{
float limit_a, limit_b, limit_c, limit_d;
if (progress_src)
{
limit_a = (4.0f * progress_src->min + progress_src->max) / 5.0f;
limit_b = (3.0f * progress_src->min + 2.0f * progress_src->max) / 5.0f;
limit_c = (2.0f * progress_src->min + 3.0f * progress_src->max) / 5.0f;
limit_d = (progress_src->min + 4.0f * progress_src->max) / 5.0f;
if (progress1)
{
progress1->min = progress_src->min;
progress1->max = limit_a;
progress1->value = progress_src->value;
}
if (progress2)
{
progress2->min = limit_a;
progress2->max = limit_b;
progress2->value = progress_src->value;
}
if (progress3)
{
progress3->min = limit_b;
progress3->max = limit_c;
progress3->value = progress_src->value;
}
if (progress4)
{
progress4->min = limit_c;
progress4->max = limit_d;
progress4->value = progress_src->value;
}
if (progress5)
{
progress5->min = limit_d;
progress5->max = progress_src->max;
progress5->value = progress_src->value;
}
}
else
{
if (progress1)
{
memset (progress1, 0, sizeof (lw6sys_progress_t));
}
if (progress2)
{
memset (progress2, 0, sizeof (lw6sys_progress_t));
}
if (progress3)
{
memset (progress3, 0, sizeof (lw6sys_progress_t));
}
if (progress4)
{
memset (progress4, 0, sizeof (lw6sys_progress_t));
}
if (progress5)
{
memset (progress5, 0, sizeof (lw6sys_progress_t));
}
}
}
|
|||||
| ↓ | _lw6sys_bazooka_register_free | 12 | 33 | 72 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/sys/sys-bazooka.c |
int
_lw6sys_bazooka_register_free (char *ptr)
{
int ret = 1;
#ifndef LW6_OPTIMIZE
int i;
bazooka_lock ();
bazooka_free_count++;
bazooka_malloc_current_count--;
if (bazooka_free_count > bazooka_malloc_count)
{
lw6sys_log_critical (_x_ ("problem, more free (%d) than malloc (%d)"),
bazooka_free_count, bazooka_malloc_count);
}
#ifdef LW6_PARANOID
{
int same = 0;
for (i = _hash_index (ptr), same = 1; i < _LW6SYS_BAZOOKA_ALLOC_MIN; ++i)
{
if (ptr[i] != BAZOOKA_ERASER_FREE)
{
same = 0;
break;
}
}
if (same)
{
ret = 0;
}
}
#endif
if (bazooka_data)
{
for (i = _hash_index (ptr); i < bazooka_size; ++i)
{
if (bazooka_data[i].ptr == ptr)
{
bazooka_free_bytes += bazooka_data[i].size;
bazooka_malloc_current_bytes -= bazooka_data[i].size;
if (bazooka_free_bytes > bazooka_malloc_bytes)
{
lw6sys_log_critical (_x_
("problem, more bytes freed (%d) than malloced (%d)"),
bazooka_free_bytes,
bazooka_malloc_bytes);
}
if (bazooka_eraser)
{
memset (bazooka_data[i].ptr, BAZOOKA_ERASER_FREE,
bazooka_data[i].size);
}
memset (&(bazooka_data[i]), 0, sizeof (_lw6sys_bazooka_t));
break; // important to leave loop, else serious perfomance problem
}
}
if (bazooka_trustable && i == bazooka_size)
{
ret = 0;
}
}
bazooka_unlock ();
#endif
return ret;
}
|
|||||
| ↓ | test_tcp | 12 | 33 | 84 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/net/net-test.c |
static int
test_tcp ()
{
int ret = 1;
LW6SYS_TEST_FUNCTION_BEGIN;
{
int sock1 = -1;
int sock2 = -1;
int ret_tmp = 0;
char *buf1_send = NULL;
char *buf1_recv = NULL;
int size;
int received;
/*
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_("trying to connect on unreachable point %s:%d"),
TEST_UNREACHABLE_IP, TEST_UNREACHABLE_PORT);
handler =
lw6net_tcp_async_connect_init (TEST_UNREACHABLE_IP,
TEST_UNREACHABLE_PORT);
*/
if (prepare_2_tcp_socks (&sock1, &sock2))
{
size = strlen (TEST_BUF1_STR) + 1;
buf1_send = lw6sys_str_copy (TEST_BUF1_STR);
buf1_recv = LW6SYS_CALLOC (strlen (TEST_BUF1_STR) + 1);
if (buf1_send && buf1_recv)
{
if (lw6net_tcp_send
(sock1, buf1_send, size, TEST_TCP_STREAM_DELAY, 1))
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("sent \"%s\" on TCP socket %d"),
buf1_send, sock1);
received =
lw6net_tcp_peek (sock2, NULL, size, TEST_TCP_STREAM_DELAY);
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_
("%d bytes available on TCP socket %d"),
received, sock2);
if (received == size
&& lw6net_tcp_recv (sock2,
buf1_recv, size,
TEST_TCP_STREAM_DELAY, 1))
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_
("received \"%s\" on TCP socket %d"),
buf1_recv, sock2);
ret_tmp = 1;
}
}
}
}
if (!ret_tmp)
{
ret = 0;
}
if (buf1_send)
{
LW6SYS_FREE (buf1_send);
}
if (buf1_recv)
{
LW6SYS_FREE (buf1_recv);
}
if (sock1 >= 0)
{
lw6net_socket_close (sock1);
}
if (sock2 >= 0)
{
lw6net_socket_close (sock2);
}
}
LW6SYS_TEST_FUNCTION_END;
return ret;
}
|
|||||
| ↓ | init | 12 | 30 | 99 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/dsp/dsp-thread.c |
void static
init (_lw6dsp_data_t * data)
{
int ok = 0;
lw6gui_fullscreen_modes_t fullscreen_modes;
data->video_mode_requested = data->param.video_mode;
data->gfx_backend =
lw6gfx_create_backend (data->argc, data->argv, data->gfx_backend_name);
if (data->gfx_backend)
{
lw6gfx_get_fullscreen_modes (data->gfx_backend,
&data->fullscreen_modes);
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("dsp init requested %dx%d fullscreen=%d mode"),
data->video_mode_requested.width,
data->video_mode_requested.height,
data->video_mode_requested.fullscreen);
if (lw6gfx_init
(data->gfx_backend, &(data->video_mode_requested),
data->resize_callback))
{
/*
* We call it here too for it seems to work better once init
* has been called...
*/
lw6gfx_get_fullscreen_modes (data->gfx_backend,
&data->fullscreen_modes);
if (lw6gfx_get_video_mode
(data->gfx_backend, &(data->video_mode_obtained)))
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("dsp init obtained %dx%d fullscreen=%d mode"),
data->video_mode_obtained.width,
data->video_mode_obtained.height,
data->video_mode_obtained.fullscreen);
ok = 1;
}
else
{
lw6gfx_quit (data->gfx_backend);
}
}
if (!ok)
{
if (data->video_mode_obtained.width <= 0
|| data->video_mode_obtained.height <= 0)
{
if (lw6gfx_get_fullscreen_modes
(data->gfx_backend, &fullscreen_modes))
{
data->video_mode_requested.width =
fullscreen_modes.standard.width;
data->video_mode_requested.height =
fullscreen_modes.standard.height;
}
}
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("couldn't set up mode, trying fallback %dx%d fullscreen=%d, trying fallback %dx%d fullscreen=%d"),
data->video_mode_requested.width,
data->video_mode_requested.height,
data->video_mode_requested.fullscreen);
if (lw6gfx_init
(data->gfx_backend, &(data->video_mode_requested),
data->resize_callback))
{
if (lw6gfx_get_video_mode
(data->gfx_backend, &(data->video_mode_obtained)))
{
ok = 1;
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_
("dsp init obtained %dx%d fullscreen=%d mode"),
data->video_mode_obtained.width,
data->video_mode_obtained.height,
data->video_mode_obtained.fullscreen);
}
else
{
lw6gfx_quit (data->gfx_backend);
}
}
}
if (!ok)
{
lw6gfx_destroy_backend (data->gfx_backend);
data->gfx_backend = NULL;
}
}
if (!ok)
{
data->failed = 1;
}
data->started = 1;
}
|
|||||
| ↓ | _do_list | 12 | 30 | 86 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/cli/mod-tcp/mod-tcp-oob.c |
static int
_do_list (_mod_tcp_context_t * tcp_context, lw6nod_info_t * node_info,
lw6cli_oob_data_t * oob_data, char *url, lw6sys_url_t * parsed_url,
char *ip)
{
int ret = 0;
int eom = 0;
int sock = -1;
char *request = NULL;
char *response = NULL;
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("connecting in TCP on %s:%d"), ip,
parsed_url->port);
sock =
lw6net_tcp_connect (ip, parsed_url->port,
tcp_context->data.consts.connect_timeout * 1000);
if (sock >= 0)
{
request =
lw6msg_oob_generate_request (LW6MSG_OOB_LIST, url,
node_info->const_info.password,
node_info->const_info.url);
if (request)
{
if (lw6net_send_line_tcp (sock, request))
{
lw6sys_snooze ();
while (_mod_tcp_oob_should_continue
(tcp_context, oob_data, sock) && !eom)
{
while (_mod_tcp_oob_should_continue
(tcp_context, oob_data, sock)
&& ((response = lw6net_recv_line_tcp (sock)) ==
NULL) && !eom)
{
lw6sys_snooze ();
}
if (response)
{
ret = 1;
if (strlen (response) == 0)
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("end of message detected"));
eom = 1;
}
else
{
if (lw6sys_url_is_canonized (response))
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_
("list from %s:%d \"%s\" contains \"%s\", registering it"),
ip, parsed_url->port, url,
response);
lw6nod_info_add_discovered_node (node_info,
response);
}
else
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_
("list from %s:%d \"%s\" contains non-canonized url \"%s\""),
ip, parsed_url->port, url,
response);
ret = 0;
}
}
LW6SYS_FREE (response);
}
else
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("inconsistent response from %s:%d"),
ip, parsed_url->port);
}
}
}
LW6SYS_FREE (request);
}
lw6net_socket_close (sock);
}
return ret;
}
|
|||||
| ↓ | lw6srv_test | 12 | 29 | 58 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/srv/srv-test.c |
int
lw6srv_test (int mode)
{
int ret = 0;
lw6srv_backend_t *backend[TEST_NB_BACKENDS];
lw6srv_listener_t *listener = NULL;
int argc = TEST_ARGC;
char *argv[TEST_ARGC] = { TEST_ARGV0 };
if (lw6sys_false ())
{
/*
* Just to make sure most functions are stuffed in the binary
*/
lw6sys_test (mode);
lw6glb_test (mode);
lw6cfg_test (mode);
lw6net_test (mode);
lw6nod_test (mode);
lw6cnx_test (mode);
lw6msg_test (mode);
/*
* No lw6dyn_test, see https://savannah.gnu.org/bugs/index.php?35017
* this function is available only in non-allinone mode.
*/
// lw6dyn_test (mode);
}
ret = _test_oob () && _test_tcp_accepter () && _test_udp_buffer ();
if (ret)
{
if (lw6net_init (argc, argv, _TEST_NET_LOG))
{
backend[0] = lw6srv_create_backend (argc, argv, "tcpd");
backend[1] = lw6srv_create_backend (argc, argv, "udpd");
backend[2] = lw6srv_create_backend (argc, argv, "httpd");
if (backend[0] && backend[1] && backend[2])
{
listener =
lw6srv_start (LW6NET_ADDRESS_ANY, LW6NET_DEFAULT_PORT);
if (listener)
{
ret = _test_init (backend, listener) && _test_quit (backend)
&& ret;
lw6srv_stop (listener);
}
lw6srv_destroy_backend (backend[0]);
lw6srv_destroy_backend (backend[1]);
lw6srv_destroy_backend (backend[2]);
}
lw6net_quit ();
}
}
return ret;
}
|
|||||
| ↓ | mod_gl_utils_clear_menucache | 12 | 29 | 56 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/gfx/mod-gl/gl-utils/gl-utils-menucache.c |
void
mod_gl_utils_clear_menucache (mod_gl_utils_context_t * context)
{
mod_gl_utils_menucache_array_t *menucache_array;
int i;
char *key;
mod_gl_utils_bitmap_t *bitmap;
menucache_array = &(context->menucache_array);
for (i = 0; i < MOD_GL_UTILS_MENUCACHE_ARRAY_SIZE; ++i)
{
if ((key = menucache_array->item_array[i].key) != NULL)
{
LW6SYS_FREE (key);
}
if ((bitmap = menucache_array->item_array[i].bitmap) != NULL)
{
mod_gl_utils_bitmap_free (context, bitmap);
}
}
if (menucache_array->tooltip_str)
{
LW6SYS_FREE (menucache_array->tooltip_str);
}
if (menucache_array->tooltip_bitmap)
{
mod_gl_utils_bitmap_free (context, menucache_array->tooltip_bitmap);
}
if (menucache_array->help_str)
{
LW6SYS_FREE (menucache_array->help_str);
}
if (menucache_array->help_bitmap)
{
mod_gl_utils_bitmap_free (context, menucache_array->help_bitmap);
}
if (menucache_array->breadcrumbs_str)
{
LW6SYS_FREE (menucache_array->breadcrumbs_str);
}
if (menucache_array->breadcrumbs_bitmap)
{
mod_gl_utils_bitmap_free (context, menucache_array->breadcrumbs_bitmap);
}
if (menucache_array->popup_str)
{
LW6SYS_FREE (menucache_array->popup_str);
}
if (menucache_array->popup_bitmap)
{
mod_gl_utils_bitmap_free (context, menucache_array->popup_bitmap);
}
memset (menucache_array, 0, sizeof (mod_gl_utils_menucache_array_t));
}
|
|||||
| ↓ | lw6cli_test | 12 | 28 | 58 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/cli/cli-test.c |
int
lw6cli_test (int mode)
{
int ret = 0;
lw6cli_backend_t *backend;
int argc = TEST_ARGC;
char *argv[TEST_ARGC] = { TEST_ARGV0 };
if (lw6sys_false ())
{
/*
* Just to make sure most functions are stuffed in the binary
*/
lw6sys_test (mode);
lw6glb_test (mode);
lw6cfg_test (mode);
lw6net_test (mode);
lw6nod_test (mode);
lw6cnx_test (mode);
lw6msg_test (mode);
/*
* No lw6dyn_test, see https://savannah.gnu.org/bugs/index.php?35017
* this function is available only in non-allinone mode.
*/
// lw6dyn_test (mode);
}
if (lw6net_init (argc, argv, _TEST_NET_LOG))
{
ret = 1;
backend = lw6cli_create_backend (argc, argv, "tcp");
if (backend)
{
ret = test_init (backend) && test_quit (backend) && ret;
lw6cli_destroy_backend (backend);
}
backend = lw6cli_create_backend (argc, argv, "udp");
if (backend)
{
ret = test_init (backend) && test_quit (backend) && ret;
lw6cli_destroy_backend (backend);
}
#ifdef MOD_HTTP
backend = lw6cli_create_backend (argc, argv, "http");
if (backend)
{
ret = test_init (backend) && test_quit (backend) && ret;
lw6cli_destroy_backend (backend);
}
#endif
lw6net_quit ();
}
return ret;
}
|
|||||
| ↓ | lw6tsk_loader_new | 12 | 27 | 66 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/tsk/tsk-loader.c |
lw6tsk_loader_t *
lw6tsk_loader_new (float sleep, char *user_dir, volatile float *progress)
{
lw6tsk_loader_t *loader = NULL;
_lw6tsk_loader_data_t *loader_data = NULL;
loader = (lw6tsk_loader_t *) LW6SYS_CALLOC (sizeof (lw6tsk_loader_t));
if (loader)
{
loader->id = 0;
while (!loader->id)
{
loader->id = ++seq_id;
}
loader_data =
(_lw6tsk_loader_data_t *)
LW6SYS_CALLOC (sizeof (_lw6tsk_loader_data_t));
loader->data = loader_data;
if (loader->data)
{
loader_data->sleep = sleep;
loader_data->user_dir = lw6sys_str_copy (user_dir);
loader_data->progress = progress;
loader_data->mutex = lw6sys_mutex_create ();
if (loader_data->mutex)
{
loader->thread =
lw6sys_thread_create (loader_callback, loader_join,
loader->data);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unable to create mutex for loader"));
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unable to allocate memory for loader data"));
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unable to allocate memory for loader"));
}
if (loader
&& (!loader->thread || !loader->data
|| (loader_data && !loader_data->user_dir)))
{
if (loader->thread)
{
lw6sys_thread_join (loader->thread);
}
if (loader_data)
{
loader_data_free (loader_data);
}
LW6SYS_FREE (loader);
loader = NULL;
}
return loader;
}
|
|||||
| ↓ | _mod_tcpd_analyse_tcp | 12 | 26 | 83 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/srv/mod-tcpd/mod-tcpd-handshake.c |
int
_mod_tcpd_analyse_tcp (_tcpd_context_t * tcpd_context,
lw6srv_tcp_accepter_t * tcp_accepter,
lw6nod_info_t * node_info,
u_int64_t * remote_id, char **remote_url)
{
int ret = 0;
char *line = NULL;
char *msg = NULL;
line = tcp_accepter->first_line;
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("trying to recognize tcpd protocol in \"%s\""), line);
if (remote_id)
{
(*remote_id) = 0;
}
if (remote_url)
{
(*remote_url) = NULL;
}
if (lw6net_tcp_is_alive (tcp_accepter->sock))
{
if (lw6sys_chr_is_eol (line[0])
|| lw6sys_str_starts_with_no_case (line,
LW6MSG_OOB_PING)
|| lw6sys_str_starts_with_no_case (line,
LW6MSG_OOB_INFO)
|| lw6sys_str_starts_with_no_case (line, LW6MSG_OOB_LIST))
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("recognized tcpd protocol (OOB)"));
ret |= (LW6SRV_ANALYSE_UNDERSTANDABLE | LW6SRV_ANALYSE_OOB);
}
if (lw6sys_str_starts_with_no_case
(line, _MOD_TCPD_PROTOCOL_LW6_STRING))
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("recognized tcpd protocol"));
if (lw6msg_envelope_analyse
(line, LW6MSG_ENVELOPE_MODE_TELNET, node_info->const_info.url,
node_info->const_info.password, 0,
node_info->const_info.id_int, &msg, NULL, NULL, remote_id,
NULL, NULL, NULL, remote_url))
{
ret |= LW6SRV_ANALYSE_UNDERSTANDABLE;
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("tcpd message \"%s\" OK"),
line);
if (msg)
{
/*
* We need to pass msg else remote_url isn't processed
*/
LW6SYS_FREE (msg);
}
}
else
{
if (strchr (line, '\n'))
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("unable to analyse message \"%s\""), line);
ret |= LW6SRV_ANALYSE_DEAD;
}
else
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_
("unable to analyse message \"%s\" but line does not seem complete, assuming some data is still missing, giving it another chance"),
line);
}
}
}
}
else
{
ret |= LW6SRV_ANALYSE_DEAD;
}
return ret;
}
|
|||||
| ↓ | _lw6p2p_data_load | 12 | 25 | 48 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/p2p/p2p-data.c |
int
_lw6p2p_data_load (_lw6p2p_data_t * data, char *data_dir)
{
int ret = 0;
char *p2p_subdir = NULL;
char *consts_file = NULL;
char *sql_dir = NULL;
char *screenshot_dir = NULL;
char *screenshot_file = NULL;
p2p_subdir = lw6sys_path_concat (data_dir, _P2P_SUBDIR);
if (p2p_subdir)
{
consts_file = lw6sys_path_concat (p2p_subdir, _CONSTS_FILE);
sql_dir = lw6sys_path_concat (p2p_subdir, _SQL_DIR);
screenshot_dir = lw6sys_path_concat (p2p_subdir, _SCREENSHOT_DIR);
if (screenshot_dir)
{
screenshot_file =
lw6sys_path_concat (screenshot_dir, _SCREENSHOT_FILE);
}
if (consts_file && sql_dir && screenshot_file)
{
ret = _load_consts (&(data->consts), consts_file)
&& _load_sql (&(data->sql), sql_dir)
&& _load_screenshot (&(data->idle_screenshot), screenshot_file);
}
if (consts_file)
{
LW6SYS_FREE (consts_file);
}
if (sql_dir)
{
LW6SYS_FREE (sql_dir);
}
if (screenshot_dir)
{
LW6SYS_FREE (screenshot_dir);
}
if (screenshot_file)
{
LW6SYS_FREE (screenshot_file);
}
LW6SYS_FREE (p2p_subdir);
}
return ret;
}
|
|||||
| ↓ | _lw6ker_game_state_get_team_info | 12 | 24 | 51 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/ker/ker-gamestate.c |
int
_lw6ker_game_state_get_team_info (_lw6ker_game_state_t *
game_state, int team_color,
int32_t * nb_cursors, int32_t * nb_fighters)
{
int ret = 0;
_lw6ker_team_t *team;
_lw6ker_cursor_array_t *cursor_array;
int i = 0;
if (team_color >= 0 && team_color < LW6MAP_MAX_NB_TEAMS)
{
team = &(game_state->map_state.teams[team_color]);
if (team->active)
{
ret = 1;
if (nb_cursors)
{
(*nb_cursors) = 0;
cursor_array = &(game_state->map_state.cursor_array);
for (i = 0; i < LW6MAP_MAX_NB_CURSORS; ++i)
{
if (cursor_array->cursors[i].enabled
&& cursor_array->cursors[i].team_color == team_color)
{
(*nb_cursors)++;
}
}
}
if (nb_fighters)
{
(*nb_fighters) =
game_state->map_state.armies.fighters_per_team[team_color];
}
}
}
if (!ret)
{
if (nb_cursors)
{
(*nb_cursors) = 0;
}
if (nb_fighters)
{
(*nb_fighters) = 0;
}
}
return ret;
}
|
|||||
| ↓ | _lw6ker_map_state_process_fire | 12 | 23 | 73 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/ker/ker-mapstate.c |
void
_lw6ker_map_state_process_fire (_lw6ker_map_state_t * map_state,
lw6map_rules_t * rules, int round)
{
int32_t i, team_color;
int charge_percent;
for (i = 0; i < LW6MAP_MAX_NB_CURSORS; ++i)
{
if (map_state->cursor_array.cursors[i].enabled
&& (map_state->cursor_array.cursors[i].fire
|| map_state->cursor_array.cursors[i].fire2))
{
team_color = map_state->cursor_array.cursors[i].team_color;
charge_percent =
_lw6ker_team_get_charge_per1000 (&(map_state->teams[team_color]))
/ 10;
if (charge_percent >= 100)
{
if (map_state->cursor_array.cursors[i].fire)
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_
("primary fire team_color=%d charge_percent=%d"),
team_color, charge_percent);
if (_lw6ker_weapon_fire
(map_state, rules, round, team_color, charge_percent))
{
_lw6ker_team_reset_charge (&
(map_state->teams
[team_color]));
}
else if (map_state->cursor_array.cursors[i].fire2)
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_
("secondary fire team_color=%d charge_percent=%d (primary failed)"),
team_color, charge_percent);
if (_lw6ker_weapon_fire2
(map_state, rules, round, team_color,
charge_percent))
{
_lw6ker_team_reset_charge (&
(map_state->teams
[team_color]));
}
}
}
else if (map_state->cursor_array.cursors[i].fire2)
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_
("secondary fire team_color=%d charge_percent=%d"),
team_color, charge_percent);
if (_lw6ker_weapon_fire2
(map_state, rules, round, team_color, charge_percent))
{
_lw6ker_team_reset_charge (&
(map_state->teams
[team_color]));
}
}
}
else
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("can't fire not enough charge for color %d"),
team_color);
}
}
map_state->cursor_array.cursors[i].fire = 0;
}
}
|
|||||
| ↓ | pop_meta_layer | 12 | 21 | 50 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/map/map-hexa.c |
static int
pop_meta_layer (lw6sys_hexa_serializer_t * hexa_serializer,
lw6map_meta_layer_t * meta_layer, lw6sys_whd_t * shape)
{
int ret = 1;
int x, y;
int8_t c = 0;
ret = ret
&& lw6sys_hexa_serializer_pop_whd (hexa_serializer, &(meta_layer->shape));
if (meta_layer->shape.w == shape->w && meta_layer->shape.h == shape->h)
{
meta_layer->data =
(u_int8_t *) LW6SYS_CALLOC (meta_layer->shape.w *
meta_layer->shape.h);
if (meta_layer->data)
{
for (y = 0; y < meta_layer->shape.h && ret; ++y)
{
for (x = 0; x < meta_layer->shape.w && ret; ++x)
{
ret = ret
&& lw6sys_hexa_serializer_pop_int8 (hexa_serializer, &c);
lw6map_meta_layer_set (meta_layer, x, y, c);
}
}
}
else
{
ret = 0;
}
}
else
{
if (meta_layer->shape.w == 0 && meta_layer->shape.h == 0)
{
meta_layer->data = NULL;
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("bad meta_layer shape (%dx%d != %dx%d)"),
meta_layer->shape.w, meta_layer->shape.h, shape->w,
shape->h);
ret = 0;
}
}
return ret;
}
|
|||||
| ↓ | lw6sys_url_canonize | 12 | 21 | 57 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/sys/sys-url.c |
char *
lw6sys_url_canonize (char *url)
{
char *ret = NULL;
lw6sys_url_t *tmp = NULL;
int len = 0;
char *protocol = NULL;
char *tail = NULL;
if (url && strlen (url) > 0)
{
tmp = lw6sys_url_parse (url);
if (tmp)
{
if (tmp->use_ssl)
{
protocol = _HTTPS;
}
else
{
protocol = _HTTP;
}
len = strlen (tmp->uri);
if (len == 0 || (len > 0 && tmp->uri[len - 1] != _SLASH))
{
tail = _SLASH_STR;
}
else
{
tail = _EMPTY_STR;
}
if ((tmp->port == _HTTP_PORT && !tmp->use_ssl)
|| (tmp->port == _HTTPS_PORT && tmp->use_ssl))
{
ret =
lw6sys_new_sprintf ("%s://%s%s%s", protocol, tmp->host,
tmp->uri, tail);
}
else
{
ret =
lw6sys_new_sprintf ("%s://%s:%d%s%s", protocol, tmp->host,
tmp->port, tmp->uri, tail);
}
lw6sys_url_free (tmp);
}
}
else
{
ret = lw6sys_str_copy ("");
}
return ret;
}
|
|||||
| ↓ | test_z | 12 | 21 | 39 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/msg/msg-test.c |
static int
test_z ()
{
int ret = 1;
LW6SYS_TEST_FUNCTION_BEGIN;
{
char *random_str = NULL;
char *z_random_str = NULL;
random_str = lw6sys_str_random (_TEST_Z_MSG_4_LEN);
ret = _test_z_ok (_TEST_Z_MSG_1, 1) && ret;
ret = _test_z_ok (_TEST_Z_MSG_2, 1) && ret;
ret = _test_z_ok (_TEST_Z_MSG_3, 1) && ret;
if (random_str)
{
ret = _test_z_ok (random_str, 0) && ret;
}
ret = _test_z_ko (LW6MSG_Z_PREFIX _TEST_Z_MSG_1, 1) && ret;
ret = _test_z_ko (LW6MSG_Z_PREFIX _TEST_Z_MSG_2, 1) && ret;
ret = _test_z_ko (LW6MSG_Z_PREFIX _TEST_Z_MSG_3, 1) && ret;
if (random_str)
{
z_random_str = lw6sys_str_concat (LW6MSG_Z_PREFIX, random_str);
if (z_random_str)
{
ret = _test_z_ko (z_random_str, 0) && ret;
LW6SYS_FREE (z_random_str);
}
LW6SYS_FREE (random_str);
}
}
LW6SYS_TEST_FUNCTION_END;
return ret;
}
|
|||||
| ↓ | lw6_init_global | 12 | 11 | 52 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/lw6-global.c |
int
lw6_init_global (int argc, char *argv[])
{
int ret = 0;
memset (&lw6_global, 0, sizeof (lw6_global_t));
pthread_mutex_init (&lw6_global.mutex, NULL);
lw6_global.start_time = time (NULL);
lw6_global.argc = argc;
lw6_global.argv = argv;
lw6_global.progress = 0.0f;
LW6_MUTEX_LOCK;
ret =
((lw6_global.dsp_smobs =
lw6sys_assoc_new ((void (*)(void *)) lw6_free_dsp_smob)) != NULL) &&
((lw6_global.snd_smobs =
lw6sys_assoc_new ((void (*)(void *)) lw6_free_snd_smob)) != NULL) &&
((lw6_global.map_smobs =
lw6sys_assoc_new ((void (*)(void *)) lw6_free_map_smob)) != NULL) &&
((lw6_global.menu_smobs =
lw6sys_assoc_new ((void (*)(void *)) lw6_free_menu_smob)) != NULL) &&
((lw6_global.game_struct_smobs =
lw6sys_assoc_new ((void (*)(void *)) lw6_free_game_struct_smob)) !=
NULL)
&&
((lw6_global.game_state_smobs =
lw6sys_assoc_new ((void (*)(void *)) lw6_free_game_state_smob)) != NULL)
&&
((lw6_global.pilot_smobs =
lw6sys_assoc_new ((void (*)(void *)) lw6_free_pilot_smob)) != NULL)
&&
((lw6_global.bot_smobs =
lw6sys_assoc_new ((void (*)(void *)) lw6_free_bot_smob)) != NULL)
&&
((lw6_global.look_smobs =
lw6sys_assoc_new ((void (*)(void *)) lw6_free_look_smob)) != NULL)
&&
((lw6_global.loader_smobs =
lw6sys_assoc_new ((void (*)(void *)) lw6_free_loader_smob)) != NULL) &&
((lw6_global.db_smobs =
lw6sys_assoc_new ((void (*)(void *)) lw6_free_db_smob)) != NULL) &&
((lw6_global.node_smobs =
lw6sys_assoc_new ((void (*)(void *)) lw6_free_node_smob)) != NULL);
LW6_MUTEX_UNLOCK;
return ret;
}
|
|||||
| ↓ | lw6map_is_same | 11 | 9 | 31 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/map/map-level.c |
int
lw6map_is_same (lw6map_level_t * level_a, lw6map_level_t * level_b)
{
int ret = 1;
if (((!level_a) && level_b) || (level_a && (!level_b)))
{
ret = 0;
}
if (level_a && level_b)
{
/*
* We don't compare the whole map (performance...) but assume if
* the metadata is the same, all the parameters are the same,
* the shape is the same, and the body checksum is the same ->
* it's the same map
*/
ret = ret
&& lw6map_metadata_is_same (&(level_a->metadata),
&(level_b->metadata));
ret = ret
&& lw6sys_shape_is_same (&(level_a->body.shape),
&(level_b->body.shape));
ret = ret
&& lw6map_param_is_same (&(level_a->param), &(level_b->param));
ret = ret && (level_a->body.checksum == level_b->body.checksum);
}
return ret;
}
|
|||||
| ↓ | _lw6ker_weapon_fire_escape | 11 | 49 | 85 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/ker/ker-weapon.c |
int
_lw6ker_weapon_fire_escape (_lw6ker_map_state_t * map_state,
lw6map_rules_t * rules, int round, int team_color,
int charge_percent)
{
int ret = 1;
int i = 0, x = 0, y = 0, z = 0;
int pot = 0;
int worst_pot = 0;
int zone_id = 0;
int slot_id = 0;
int old_slot_id = 0;
int new_slot_id = 0;
lw6sys_whd_t shape = { 0, 0, 0 };
lw6ker_fighter_t *fighter = NULL;
int found = 0;
lw6sys_xyz_t new_pos = { 0, 0, 0 };
shape = map_state->map_struct->shape;
for (i = 0; i < map_state->armies.active_fighters; ++i)
{
fighter = &(map_state->armies.fighters[i]);
if (fighter->team_color == team_color)
{
zone_id =
_lw6ker_map_struct_get_zone_id (map_state->map_struct,
fighter->pos.x, fighter->pos.y,
fighter->pos.z);
worst_pot =
map_state->teams[team_color].gradient[zone_id].potential;
found = 0;
for (z = 0; z < shape.d; ++z)
{
for (y = 0; y < shape.h; ++y)
{
for (x = 0; x < shape.w; ++x)
{
slot_id =
_lw6ker_map_struct_slot_index (map_state->map_struct,
x, y, z);
zone_id =
_lw6ker_map_struct_get_zone_id (map_state->map_struct,
x, y, z);
if (slot_id >= 0 && zone_id >= 0)
{
if (map_state->slots[slot_id].fighter_id < 0)
{
pot =
map_state->
teams[team_color].gradient[zone_id].potential;
if (pot < worst_pot)
{
worst_pot = pot;
found = 1;
new_pos.x = x;
new_pos.y = y;
new_pos.z = z;
}
}
}
}
}
}
if (found)
{
old_slot_id =
_lw6ker_map_struct_slot_index (map_state->map_struct,
fighter->pos.x, fighter->pos.y,
fighter->pos.z);
new_slot_id =
_lw6ker_map_struct_slot_index (map_state->map_struct,
new_pos.x, new_pos.y,
new_pos.z);
map_state->slots[new_slot_id].fighter_id = i;
map_state->slots[old_slot_id].fighter_id = -1;
fighter->pos = new_pos;
}
}
}
_register_weapon_instant (map_state, rules, round, team_color,
charge_percent, LW6MAP_WEAPON_ESCAPE);
return ret;
}
|
|||||
| ↓ | test_env | 11 | 44 | 101 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/sys/sys-test.c |
static int
test_env ()
{
int ret = 1;
LW6SYS_TEST_FUNCTION_BEGIN;
{
char *value;
char *concat;
concat = lw6sys_env_concat (TEST_ENV_CONCAT1, TEST_ENV_CONCAT2);
if (concat)
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("ENV concat is \"%s\""), concat);
LW6SYS_FREE (concat);
}
else
{
ret = 0;
}
if (!lw6sys_setenv (TEST_ENV_SETENV_KEYWORD, TEST_ENV_SETENV_VALUE))
{
lw6sys_log (LW6SYS_LOG_WARNING, _x_ ("unable to set ENV \"%s\""),
TEST_ENV_SETENV_KEYWORD);
ret = 0;
}
if (!lw6sys_env_exists_prefixed (TEST_ENV_KEYWORD))
{
lw6sys_log (LW6SYS_LOG_WARNING, _x_ ("ENV \"%s\" doesn't exist"),
TEST_ENV_KEYWORD);
ret = 0;
}
value = lw6sys_getenv_prefixed (TEST_ENV_KEYWORD);
if (value)
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("ENV value for \"%s\" is \"%s\""),
TEST_ENV_KEYWORD, value);
LW6SYS_FREE (value);
}
else
{
ret = 0;
}
value = lw6sys_get_username ();
if (value)
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("username=\"%s\""), value);
LW6SYS_FREE (value);
}
else
{
ret = 0;
}
value = lw6sys_get_hostname ();
if (value)
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("hostname=\"%s\""), value);
LW6SYS_FREE (value);
}
else
{
ret = 0;
}
}
{
lw6sys_list_t *splitted = NULL;
char *data = NULL;
splitted = lw6sys_env_split (TEST_ENV_SPLIT);
if (splitted)
{
lw6sys_list_free (splitted);
}
else
{
ret = 0;
}
splitted = lw6sys_env_split (TEST_ENV_SPLIT);
if (splitted)
{
while (splitted
&& (data = (char *) lw6sys_lifo_pop (&splitted)) != NULL)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("splitted env \"%s\" contains \"%s\""),
TEST_ENV_SPLIT, data);
LW6SYS_FREE (data);
}
//lw6sys_list_free(splitted);
}
else
{
ret = 0;
}
}
LW6SYS_TEST_FUNCTION_END;
return ret;
}
|
|||||
| ↓ | test_password | 11 | 43 | 121 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/cnx/cnx-test.c |
static int
test_password ()
{
int ret = 1;
LW6SYS_TEST_FUNCTION_BEGIN;
{
char *checksum = NULL;
checksum = lw6cnx_password_checksum (NULL, NULL);
if (checksum)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("checksum for password NULL is \"%s\""), checksum);
LW6SYS_FREE (checksum);
}
else
{
ret = 0;
}
checksum = lw6cnx_password_checksum (NULL, "");
if (checksum)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("checksum for empty password is \"%s\""), checksum);
LW6SYS_FREE (checksum);
}
else
{
ret = 0;
}
checksum = lw6cnx_password_checksum (_TEST_PASSWORD_SEED, "");
if (checksum)
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_
("checksum for empty password with seed \"%s\" is \"%s\""),
_TEST_PASSWORD_SEED, checksum);
LW6SYS_FREE (checksum);
}
else
{
ret = 0;
}
checksum =
lw6cnx_password_checksum (_TEST_PASSWORD_SEED, _TEST_PASSWORD1);
if (checksum)
{
if (lw6sys_str_is_same (checksum, _TEST_PASSWORD_CHECKSUM))
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("checksum for password \"%s\" is \"%s\""),
_TEST_PASSWORD1, checksum);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("checksum for password \"%s\" is \"%s\", should be \"%s\""),
_TEST_PASSWORD1, checksum, _TEST_PASSWORD_CHECKSUM);
ret = 0;
}
if (lw6cnx_password_verify
(_TEST_PASSWORD_SEED, _TEST_PASSWORD1, _TEST_PASSWORD1))
{
lw6sys_log (LW6SYS_LOG_NOTICE, _x_ ("same password test works"));
}
else
{
ret = 0;
}
if (lw6cnx_password_verify
(_TEST_PASSWORD_SEED, _TEST_PASSWORD1, checksum))
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("same password test works using checksum"));
}
else
{
ret = 0;
}
if (lw6cnx_password_verify
(_TEST_PASSWORD_SEED, NULL, _TEST_PASSWORD2))
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("same password test works when it's NULL here"));
}
else
{
ret = 0;
}
if (!lw6cnx_password_verify
(_TEST_PASSWORD_SEED, _TEST_PASSWORD1, _TEST_PASSWORD2))
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("same password test detects wrong passwords"));
}
else
{
ret = 0;
}
if (!lw6cnx_password_verify (NULL, _TEST_PASSWORD1, _TEST_PASSWORD2))
{
lw6sys_log (LW6SYS_LOG_NOTICE,
_x_ ("same password test detects wrong seed"));
}
else
{
ret = 0;
}
LW6SYS_FREE (checksum);
}
else
{
ret = 0;
}
}
LW6SYS_TEST_FUNCTION_END;
return ret;
}
|
|||||
| ↓ | _poll_step2_recv_udp | 11 | 42 | 98 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/p2p/p2p-node.c |
static int
_poll_step2_recv_udp (_lw6p2p_node_t * node)
{
int ret = 1;
char buf[LW6NET_UDP_MINIMAL_BUF_SIZE + 1];
char *ip1 = NULL;
char *ip2 = NULL;
int port1 = 0;
int port2 = 0;
char *line = NULL;
lw6srv_udp_buffer_t *udp_buffer = NULL;
char *guessed_public_url = NULL;
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("polling node UDP"));
memset (buf, 0, LW6NET_UDP_MINIMAL_BUF_SIZE + 1);
if (node->listener->udp_sock >= 0)
{
if (lw6net_udp_peek
(node->listener->udp_sock, buf, LW6NET_UDP_MINIMAL_BUF_SIZE, &ip1,
&port1))
{
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("received data from %s:%d"),
ip1, port1);
line =
lw6net_recv_line_udp (node->listener->udp_sock, &ip2, &port2);
if (line)
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("UDP connection from %s:%d"), ip2, port2);
udp_buffer = lw6srv_udp_buffer_new (ip2, port2, line);
if (udp_buffer)
{
lw6sys_list_push_front (&(node->listener->udp_buffers),
udp_buffer);
/*
* Now we register this peer as a potential server,
* it will be qualified as a real server (or not) later
*/
guessed_public_url =
lw6sys_url_http_from_ip_port (ip2, LW6NET_DEFAULT_PORT);
if (guessed_public_url)
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_
("discovered node \"%s\" from guessed url"),
guessed_public_url);
lw6nod_info_add_discovered_node (node->node_info,
guessed_public_url);
LW6SYS_FREE (guessed_public_url);
}
if (node->bind_port != LW6NET_DEFAULT_PORT)
{
guessed_public_url =
lw6sys_url_http_from_ip_port (ip2, node->bind_port);
if (guessed_public_url)
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_
("discovered node \"%s\" from guessed url (using non-standard port %d)"),
guessed_public_url, node->bind_port);
lw6nod_info_add_discovered_node
(node->node_info, guessed_public_url);
LW6SYS_FREE (guessed_public_url);
}
}
line = NULL; // udp_buffer will free it
ip2 = NULL; // udp_buffer will free it
}
else
{
ret = 0;
}
}
else
{
lw6sys_log (LW6SYS_LOG_INFO,
_x_
("udp data received from %s:%d, but it's not correct"),
ip1, port1);
}
}
}
if (ip1)
{
LW6SYS_FREE (ip1);
}
if (ip2)
{
LW6SYS_FREE (ip2);
}
if (line)
{
LW6SYS_FREE (line);
}
return ret;
}
|
|||||
| ↓ | lw6p2p_entry_new | 11 | 37 | 73 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/p2p/p2p-entry.c |
lw6p2p_entry_t *
lw6p2p_entry_new (int creation_timestamp, char *version, char *codename,
int stamp, char *id, char *url, char *title,
char *description, int has_password, int bench,
int open_relay, char *community_id, int round, char *level,
int required_bench, int nb_colors, int max_nb_colors,
int nb_cursors, int max_nb_cursors, int nb_nodes,
int max_nb_nodes, char *ip, int port,
int last_ping_timestamp, int ping_delay_msec, int available)
{
lw6p2p_entry_t *entry = NULL;
entry = (lw6p2p_entry_t *) LW6SYS_CALLOC (sizeof (lw6p2p_entry_t));
if (entry)
{
entry->creation_timestamp = creation_timestamp;
if (version)
{
strncpy (entry->version, version, LW6P2P_VERSION_SIZE);
}
if (codename)
{
strncpy (entry->codename, codename, LW6P2P_CODENAME_SIZE);
}
entry->stamp = stamp;
if (id)
{
strncpy (entry->id, id, LW6P2P_ID_SIZE);
}
if (url)
{
strncpy (entry->url, url, LW6P2P_URL_SIZE);
}
if (title)
{
strncpy (entry->title, title, LW6P2P_TITLE_SIZE);
}
if (description)
{
strncpy (entry->description, description, LW6P2P_DESCRIPTION_SIZE);
}
entry->has_password = has_password;
entry->bench = bench;
entry->open_relay = open_relay;
// variable data
if (community_id)
{
strncpy (entry->community_id, community_id,
LW6P2P_COMMUNITY_ID_SIZE);
}
if (level)
{
strncpy (entry->level, level, LW6P2P_LEVEL_SIZE);
}
entry->required_bench = required_bench;
entry->nb_colors = nb_colors;
entry->max_nb_colors = max_nb_colors;
entry->nb_cursors = nb_cursors;
entry->max_nb_cursors = max_nb_cursors;
entry->nb_nodes = nb_nodes;
entry->max_nb_nodes = max_nb_nodes;
// additionnal data
if (ip)
{
strncpy (entry->ip, ip, LW6P2P_IP_SIZE);
}
entry->port = port;
entry->last_ping_timestamp = last_ping_timestamp;
entry->ping_delay_msec = ping_delay_msec;
}
return entry;
}
|
|||||
| ↓ | _do_ping | 11 | 36 | 88 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/cli/mod-udp/mod-udp-oob.c |
static int
_do_ping (_udp_context_t * udp_context, lw6nod_info_t * node_info,
lw6cli_oob_data_t * oob_data, char *url, lw6sys_url_t * parsed_url,
char *ip)
{
int ret = 0;
int eom = 0;
int sock;
char *request = NULL;
char *response = NULL;
char *given_url = NULL;
char *incoming_ip = NULL;
int incoming_port = 0;
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("connecting in UDP on %s:%d"), ip,
parsed_url->port);
sock = lw6net_udp_client ();
if (sock >= 0)
{
request =
lw6msg_oob_generate_request (LW6MSG_OOB_PING, url,
node_info->const_info.password,
node_info->const_info.url);
if (request)
{
if (lw6net_send_line_udp (sock, request, ip, parsed_url->port))
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("sent UDP OOB request \"%s\" to %s:%d"),
request, ip, parsed_url->port);
lw6sys_snooze ();
while (!eom
&& _mod_udp_oob_should_continue (udp_context, oob_data,
0))
{
response =
lw6net_recv_line_udp (sock, &incoming_ip, &incoming_port);
if (response)
{
eom = 1;
if (lw6sys_str_is_same (ip, incoming_ip)
&& parsed_url->port == incoming_port)
{
given_url = lw6msg_oob_analyse_pong (response);
if (given_url)
{
if (lw6sys_str_is_same (url, given_url))
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_
("ping successfull on %s:%d \"%s\""),
ip, parsed_url->port, url);
ret = 1;
}
else
{
lw6sys_log (LW6SYS_LOG_INFO,
_x_
("mod_udp connected on %s:%d using \"%s\" but server reports \"%s\""),
ip, parsed_url->port, url,
given_url);
lw6nod_info_add_discovered_node (node_info,
given_url);
}
LW6SYS_FREE (given_url);
}
}
else
{
lw6sys_log (LW6SYS_LOG_INFO,
_x_
("received UDP data from %s:%d when expecting it to come from %s:%d"),
incoming_ip, incoming_port, ip,
parsed_url->port);
}
LW6SYS_FREE (response);
LW6SYS_FREE (incoming_ip);
}
lw6sys_snooze ();
}
}
LW6SYS_FREE (request);
}
lw6net_socket_close (sock);
}
return ret;
}
|
|||||
| ↓ | lw6gfx_create_backend | 11 | 30 | 80 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/gfx/gfx-register.c |
lw6gfx_backend_t *
lw6gfx_create_backend (int argc, char *argv[], char *name)
{
lw6gfx_backend_t *backend = NULL;
#ifdef LW6_ALLINONE
#ifdef MOD_GL
if (name && !strcmp (name, "gl"))
{
backend = mod_gl_create_backend ();
}
#endif
if (backend)
{
backend->argc = argc;
backend->argv = argv;
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("graphical backend \"%s\" does not exist"), name);
}
#else
lw6dyn_dl_handle_t *backend_handle = NULL;
backend_handle = lw6dyn_dlopen_backend (argc, argv, "gfx", name);
if (backend_handle)
{
char *init_func_name;
lw6gfx_backend_t *(*init_func) ();
init_func_name =
lw6sys_new_sprintf (LW6DYN_CREATE_BACKEND_FUNC_FORMAT, name);
if (init_func_name)
{
init_func = lw6dyn_dlsym (backend_handle, init_func_name);
if (init_func)
{
backend = init_func ();
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("unable to find function \"%s\" in gfx backend \"%s\""),
init_func_name, name);
}
LW6SYS_FREE (init_func_name);
}
}
if (backend && backend_handle)
{
backend->dl_handle = backend_handle;
backend->argc = argc;
backend->argv = argv;
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unable to open gfx backend \"%s\""), name);
}
#endif
if (backend)
{
static u_int32_t seq_id = 0;
backend->id = 0;
while (!(backend->id))
{
backend->id = ++seq_id;
}
}
return backend;
}
|
|||||
| ↓ | _lw6ker_map_struct_find_free_slot_near | 11 | 30 | 63 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/ker/ker-mapstruct.c |
void
_lw6ker_map_struct_find_free_slot_near (_lw6ker_map_struct_t * map_struct,
lw6sys_xyz_t * there,
lw6sys_xyz_t here)
{
int found = 0;
there->x = there->y = there->z = 0;
if (lw6sys_shape_check_pos (&(map_struct->shape), &here))
{
if (_lw6ker_map_struct_get_zone_id (map_struct, here.x, here.y, here.z)
>= 0)
{
*there = here;
found = 1;
}
else
{
int32_t angle, radius;
int32_t max_radius, max_angle;
lw6sys_xyz_t test;
max_radius = map_struct->shape.w + map_struct->shape.h; // +, not *
for (radius = 0; radius < max_radius && !found; ++radius)
{
max_angle = radius * M_PI * 2;
for (angle = 0; angle < max_angle && !found; ++angle)
{
test.x =
here.x +
(lw6ker_cos ((angle * LW6KER_TRIGO_2PI) / max_angle) *
radius) / LW6KER_TRIGO_RADIUS;
test.y =
here.y -
(lw6ker_sin ((angle * LW6KER_TRIGO_2PI) / max_angle) *
radius) / LW6KER_TRIGO_RADIUS;
test.z = 0;
if (lw6sys_shape_check_pos (&map_struct->shape, &test))
{
for (test.z = 0; test.z < map_struct->shape.d; ++test.z)
{
if (_lw6ker_map_struct_get_zone_id
(map_struct, test.x, test.y, test.z) >= 0)
{
found = 1;
there->x = test.x;
there->y = test.y;
}
}
}
}
}
}
}
if (!found)
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("unable to find a free zone near %dx%d"), here.x,
here.y);
}
}
|
|||||
| ↓ | _do_ping | 11 | 29 | 79 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/cli/mod-tcp/mod-tcp-oob.c |
static int
_do_ping (_mod_tcp_context_t * tcp_context, lw6nod_info_t * node_info,
lw6cli_oob_data_t * oob_data, char *url, lw6sys_url_t * parsed_url,
char *ip)
{
int ret = 0;
int sock;
char *request = NULL;
char *response = NULL;
char *given_url = NULL;
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("connecting in TCP on %s:%d"), ip,
parsed_url->port);
sock =
lw6net_tcp_connect (ip, parsed_url->port,
tcp_context->data.consts.connect_timeout * 1000);
if (sock >= 0)
{
request =
lw6msg_oob_generate_request (LW6MSG_OOB_PING, url,
node_info->const_info.password,
node_info->const_info.url);
if (request)
{
if (lw6net_send_line_tcp (sock, request))
{
lw6sys_snooze ();
while (!ret
&& _mod_tcp_oob_should_continue (tcp_context, oob_data,
sock)
&& ((response = lw6net_recv_line_tcp (sock)) == NULL))
{
lw6sys_snooze ();
}
if (response)
{
if (_mod_tcp_oob_should_continue
(tcp_context, oob_data, sock))
{
given_url = lw6msg_oob_analyse_pong (response);
if (given_url)
{
if (lw6sys_str_is_same (url, given_url))
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_
("ping successfull on %s:%d \"%s\""),
ip, parsed_url->port, url);
ret = 1;
}
else
{
lw6sys_log (LW6SYS_LOG_INFO,
_x_
("mod_tcp connected on %s:%d using \"%s\" but server reports \"%s\""),
ip, parsed_url->port, url,
given_url);
lw6nod_info_add_discovered_node (node_info,
given_url);
}
LW6SYS_FREE (given_url);
}
}
LW6SYS_FREE (response);
}
else
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("no response from %s:%d"), ip,
parsed_url->port);
}
}
LW6SYS_FREE (request);
}
lw6net_socket_close (sock);
}
return ret;
}
|
|||||
| ↓ | _mod_http_process_oob | 11 | 29 | 99 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/cli/mod-http/mod-http-oob.c |
int
_mod_http_process_oob (_mod_http_context_t * http_context,
lw6nod_info_t * node_info,
lw6cli_oob_data_t * oob_data)
{
int ret = 0;
lw6sys_url_t *parsed_url = NULL;
char *ip = NULL;
char *password_checksum = NULL;
lw6sys_log (LW6SYS_LOG_DEBUG, _x_ ("process http oob url=\"%s\""),
oob_data->public_url);
parsed_url = lw6sys_url_parse (oob_data->public_url);
if (parsed_url)
{
if (lw6sys_str_is_same (parsed_url->host, LW6NET_ADDRESS_BROADCAST))
{
// no broadcast in HTTP
ret = 1;
}
else
{
if (node_info->const_info.password
&& strlen (node_info->const_info.password) > 0)
{
password_checksum =
lw6cnx_password_checksum (oob_data->public_url,
node_info->const_info.password);
}
ip = lw6net_dns_gethostbyname (parsed_url->host);
if (ip)
{
if (_mod_http_oob_should_continue (http_context, oob_data))
{
if (_do_ping
(http_context, node_info, oob_data,
oob_data->public_url, parsed_url, ip))
{
lw6sys_log (LW6SYS_LOG_INFO,
_x_
("mod_http client PING on node \"%s\" OK"),
oob_data->public_url);
if (_do_info
(http_context, node_info, oob_data,
oob_data->public_url, parsed_url, ip,
password_checksum))
{
lw6sys_log (LW6SYS_LOG_INFO,
_x_
("mod_http client INFO on node \"%s\" OK"),
oob_data->public_url);
if (_do_list
(http_context, node_info, oob_data,
oob_data->public_url, parsed_url, ip,
password_checksum))
{
lw6sys_log (LW6SYS_LOG_INFO,
_x_
("mod_http client LIST on node \"%s\" OK"),
oob_data->public_url);
ret = 1;
}
else
{
lw6sys_log (LW6SYS_LOG_INFO,
_x_
("mod_http client LIST on node \"%s\" failed"),
oob_data->public_url);
}
}
else
{
lw6sys_log (LW6SYS_LOG_INFO,
_x_
("mod_http client INFO on node \"%s\" failed"),
oob_data->public_url);
}
}
else
{
lw6sys_log (LW6SYS_LOG_INFO,
_x_
("mod_http client PING on node \"%s\" failed"),
oob_data->public_url);
}
}
LW6SYS_FREE (ip);
}
if (password_checksum)
{
LW6SYS_FREE (password_checksum);
}
}
lw6sys_url_free (parsed_url);
}
return ret;
}
|
|||||
| ↓ | update_list | 11 | 27 | 54 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/dyn/dyn-list.c |
static void
update_list (lw6sys_assoc_t ** list, char *path)
{
DIR *dir_handle = NULL;
struct dirent *dir_entry = NULL;
struct dirent *dir_entry_result = NULL;
int dir_entry_size;
int eod = 0;
char *id = NULL;
char *pos = NULL;
dir_handle = opendir (path);
if (dir_handle)
{
while (!eod)
{
dir_entry_size = sizeof (struct dirent) + NAME_MAX + 1;
dir_entry = (struct dirent *) LW6SYS_CALLOC (dir_entry_size);
if (dir_entry)
{
readdir_r (dir_handle, dir_entry, &dir_entry_result);
if (dir_entry_result && (dir_entry_result == dir_entry))
{
if (dir_entry->d_name
&& strstr (dir_entry->d_name, LIST_SO_STR)
&& !strncmp (LIST_LIBMOD_PREFIX_STR, dir_entry->d_name,
LIST_LIBMOD_PREFIX_SIZE))
{
id =
lw6sys_str_copy (dir_entry->d_name +
LIST_LIBMOD_PREFIX_SIZE);
if (id)
{
pos = id;
while (isalnum (*pos))
{
pos++;
}
(*pos) = '\0';
add_backend (list, path, dir_entry->d_name, id);
LW6SYS_FREE (id);
}
}
}
else
{
eod = 1;
}
LW6SYS_FREE (dir_entry);
}
}
closedir (dir_handle);
}
}
|
|||||
| ↓ | _read_bin | 11 | 26 | 70 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/sys/sys-file.c |
static void *
_read_bin (int *filesize, char *filename)
{
char *file_content = NULL;
FILE *f;
int size;
size_t read = 0;
f = fopen (filename, "r");
if (f)
{
fseek (f, 0, SEEK_END);
size = ftell (f);
if (size >= 0)
{
fseek (f, 0, SEEK_SET);
file_content = LW6SYS_CALLOC (size + 1);
if (file_content)
{
clearerr (f);
while ((!feof (f)) && (!ferror (f)) && (read < size))
{
read +=
fread (file_content + read, sizeof (char), size - read,
f);
}
if (read < size)
{
/*
* Under Microsoft platforms, ftell always returns a
* bigger, rounded value, greater than the real size.
*/
#ifndef LW6_MS_WINDOWS
lw6sys_log (LW6SYS_LOG_INFO,
_x_
("couldn't read all of file \"%s\", size was supposed to be %d but only read %d"),
filename, size, read);
#endif
}
else if (read > size)
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("inconsistency in file \"%s\", size is %d but read %d"),
filename, size, read);
}
}
}
fclose (f);
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_ ("can't open file \"%s\" for reading"), filename);
}
if (filesize)
{
if (file_content)
{
(*filesize) = read;
}
else
{
(*filesize) = 0;
}
}
return (void *) file_content;
}
|
|||||
| ↓ | _get_entries | 11 | 24 | 52 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/ldr/ldr-dir.c |
static lw6sys_list_t *
_get_entries (char *map_path, char *relative_path, int player_exp)
{
lw6sys_list_t *entries = NULL;
lw6sys_assoc_t *entries_index = NULL;
lw6sys_list_t *dirs = NULL;
char *dir = NULL;
char *absolute_path = NULL;
entries_index = lw6sys_assoc_new (NULL);
if (entries_index)
{
entries = lw6sys_list_new (free_entry_callback);
if (entries)
{
dirs = lw6sys_env_split (map_path);
if (dirs)
{
while (dirs && (dir = (char *) lw6sys_lifo_pop (&dirs)) != NULL)
{
if (dir)
{
if (strlen (dir) > 0)
{
absolute_path =
lw6sys_path_concat (dir, relative_path);
if (absolute_path)
{
if (lw6sys_dir_exists (absolute_path))
{
add_subdirs (&entries, &entries_index,
absolute_path, relative_path,
player_exp);
}
LW6SYS_FREE (absolute_path);
}
}
LW6SYS_FREE (dir);
}
}
}
}
lw6sys_assoc_free (entries_index);
}
if (entries)
{
lw6sys_sort (&entries, entries_sort_callback);
}
return entries;
}
|
|||||
| ↓ | _lw6ker_map_state_charge | 11 | 24 | 69 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/ker/ker-mapstate.c |
void
_lw6ker_map_state_charge (_lw6ker_map_state_t * map_state,
lw6map_rules_t * rules, int round)
{
int32_t team_color;
int charge_incr = 0;
int charge_percent = 0;
int charge_max = 0;
int nb_teams;
if (rules->use_team_profiles)
{
nb_teams = _lw6ker_map_state_get_nb_teams (map_state);
charge_max =
lw6ker_percent (_LW6KER_CHARGE_LIMIT, rules->weapon_charge_max);
if (rules->weapon_charge_delay > 0 && rules->rounds_per_sec > 0)
{
if (nb_teams > 0)
{
for (team_color = 0; team_color < LW6MAP_MAX_NB_TEAMS;
++team_color)
{
if (map_state->teams[team_color].active
&& rules->team_profile_weapon_mode[team_color] !=
LW6MAP_RULES_TEAM_PROFILE_WEAPON_MODE_NONE &&
_lw6ker_map_state_get_weapon_per1000_left (map_state,
round,
team_color)
<= 0 && !map_state->teams[team_color].offline)
{
charge_incr =
_LW6KER_CHARGE_LIMIT / (rules->weapon_charge_delay *
rules->rounds_per_sec);
if (map_state->armies.active_fighters > 0)
{
charge_percent =
(map_state->armies.fighters_per_team[team_color] *
nb_teams * 100) /
map_state->armies.active_fighters;
}
else
{
charge_percent = 100;
}
charge_percent = (charge_percent + 100) / 2;
charge_incr =
lw6ker_percent (charge_incr, charge_percent);
map_state->teams[team_color].charge += charge_incr;
map_state->teams[team_color].charge =
lw6sys_min (map_state->teams[team_color].charge,
charge_max);
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("new charge for team %d is %d"),
team_color,
map_state->teams[team_color].charge);
}
}
}
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING,
_x_
("bad rules weapon_charge_delay=%d rounds_per_sec=%d"),
rules->weapon_charge_delay, rules->rounds_per_sec);
}
}
}
|
|||||
| ↓ | lw6map_team_color_key_to_index | 11 | 23 | 53 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/map/map-color.c |
int
lw6map_team_color_key_to_index (char *key)
{
int ret = LW6MAP_TEAM_COLOR_INVALID;
if (!strcasecmp (key, LW6DEF_RED))
{
ret = LW6MAP_TEAM_COLOR_RED;
}
else if (!strcasecmp (key, LW6DEF_GREEN))
{
ret = LW6MAP_TEAM_COLOR_GREEN;
}
else if (!strcasecmp (key, LW6DEF_BLUE))
{
ret = LW6MAP_TEAM_COLOR_BLUE;
}
else if (!strcasecmp (key, LW6DEF_YELLOW))
{
ret = LW6MAP_TEAM_COLOR_YELLOW;
}
else if (!strcasecmp (key, LW6DEF_CYAN))
{
ret = LW6MAP_TEAM_COLOR_CYAN;
}
else if (!strcasecmp (key, LW6DEF_MAGENTA))
{
ret = LW6MAP_TEAM_COLOR_MAGENTA;
}
else if (!strcasecmp (key, LW6DEF_ORANGE))
{
ret = LW6MAP_TEAM_COLOR_ORANGE;
}
else if (!strcasecmp (key, LW6DEF_LIGHTBLUE))
{
ret = LW6MAP_TEAM_COLOR_LIGHTBLUE;
}
else if (!strcasecmp (key, LW6DEF_PURPLE))
{
ret = LW6MAP_TEAM_COLOR_PURPLE;
}
else if (!strcasecmp (key, LW6DEF_PINK))
{
ret = LW6MAP_TEAM_COLOR_PINK;
}
else
{
lw6sys_log (LW6SYS_LOG_WARNING, _x_ ("team color key %s isn't valid"),
key);
}
return ret;
}
|
|||||
| ↓ | pop_cursor_texture | 11 | 20 | 31 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/map/map-hexa.c |
static int
pop_cursor_texture (lw6sys_hexa_serializer_t * hexa_serializer,
lw6map_cursor_texture_t * cursor_texture)
{
int ret = 1;
int x, y;
lw6sys_color_8_t color = { 0, 0, 0, 0 };
for (y = 0; y < LW6MAP_CURSOR_TEXTURE_SIZE && ret; ++y)
{
for (x = 0; x < LW6MAP_CURSOR_TEXTURE_SIZE && ret; ++x)
{
ret = ret
&& lw6sys_hexa_serializer_pop_color (hexa_serializer, &color);
lw6map_cursor_texture_layer_set (&(cursor_texture->fg_bg_layer), x,
y, color);
}
}
for (y = 0; y < LW6MAP_CURSOR_TEXTURE_SIZE && ret; ++y)
{
for (x = 0; x < LW6MAP_CURSOR_TEXTURE_SIZE && ret; ++x)
{
ret = ret
&& lw6sys_hexa_serializer_pop_color (hexa_serializer, &color);
lw6map_cursor_texture_layer_set (&(cursor_texture->color_layer), x,
y, color);
}
}
return ret;
}
|
|||||
| ↓ | _guess_moves_per_sec | 11 | 20 | 47 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/ldr/ldr-resampler.c |
static void
_guess_moves_per_sec (lw6map_rules_t * rules, lw6ldr_hints_t * hints, int w,
int h)
{
int moves_per_sec;
int i;
int old_moves_per_round = 0;
int old_rounds_per_sec = 0;
if (hints->guess_moves_per_sec && hints->speed > 0.0f)
{
old_moves_per_round = rules->moves_per_round;
old_rounds_per_sec = rules->rounds_per_sec;
moves_per_sec = sqrt (w * w + h * h) * hints->speed / _RESAMPLER_R2;
rules->moves_per_round = LW6MAP_RULES_MIN_MOVES_PER_ROUND;
for (i = rules->moves_per_round + 1;
i <= LW6MAP_RULES_MAX_MOVES_PER_ROUND; ++i)
{
if (i * rules->rounds_per_sec <= moves_per_sec)
{
rules->moves_per_round = i;
}
}
while (rules->moves_per_round * rules->rounds_per_sec > moves_per_sec
&& rules->rounds_per_sec > LW6MAP_RULES_MIN_ROUNDS_PER_SEC)
{
rules->rounds_per_sec--;
}
while (rules->moves_per_round * rules->rounds_per_sec < moves_per_sec
&& rules->rounds_per_sec < LW6MAP_RULES_MAX_ROUNDS_PER_SEC)
{
rules->rounds_per_sec++;
}
if (old_moves_per_round != rules->moves_per_round
|| old_rounds_per_sec != rules->rounds_per_sec)
{
lw6sys_log (LW6SYS_LOG_INFO,
_x_ ("changing speed from %dx%d to %dx%d"),
old_rounds_per_sec, old_moves_per_round,
rules->rounds_per_sec, rules->moves_per_round);
}
}
else
{
// nothing to do
}
}
|
|||||
| ↓ | lw6gui_menu_new | 11 | 18 | 44 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/gui/gui-menu.c |
lw6gui_menu_t *
lw6gui_menu_new (char *title, char *help, char *popup, char *esc,
int enable_esc)
{
lw6gui_menu_t *menu = NULL;
menu = (lw6gui_menu_t *) LW6SYS_CALLOC (sizeof (lw6gui_menu_t));
if (menu)
{
menu->id = 0;
while (!menu->id)
{
menu->id = ++seq_id;
}
menu->title = lw6sys_str_copy (lw6sys_str_empty_if_null (title));
if (menu->title)
{
menu->help = lw6sys_str_copy (lw6sys_str_empty_if_null (help));
if (menu->help)
{
menu->popup =
lw6sys_str_copy (lw6sys_str_empty_if_null (popup));
if (menu->popup)
{
menu->esc_item =
lw6gui_menuitem_new (esc, NULL, 0, enable_esc, 0, 0);
if (menu->esc_item)
{
// OK
}
}
}
}
if ((!menu->title) || (!menu->help) || (!menu->popup)
|| (!menu->esc_item))
{
lw6gui_menu_free (menu);
menu = NULL;
}
}
return menu;
}
|
|||||
| ↓ | test_base64 | 11 | 17 | 30 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/glb/glb-test.c |
static int
test_base64 ()
{
int ret = 1;
LW6SYS_TEST_FUNCTION_BEGIN;
{
char *random_str = NULL;
random_str = lw6sys_str_random (_TEST_BASE64_STR_4_LEN);
ret = _test_base64_ok (_TEST_BASE64_STR_1, 1) && ret;
ret = _test_base64_ok (_TEST_BASE64_STR_2, 1) && ret;
ret = _test_base64_ok (_TEST_BASE64_STR_3, 1) && ret;
if (random_str)
{
ret = _test_base64_ok (random_str, 0) && ret;
}
ret = _test_base64_ko (_TEST_BASE64_STR_1, 1) && ret;
ret = _test_base64_ko (_TEST_BASE64_STR_2, 1) && ret;
ret = _test_base64_ko (_TEST_BASE64_STR_3, 1) && ret;
if (random_str)
{
ret = _test_base64_ko (random_str, 0) && ret;
LW6SYS_FREE (random_str);
}
}
LW6SYS_TEST_FUNCTION_END;
return ret;
}
|
|||||
| ↓ | push_cursor_texture | 11 | 17 | 34 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/map/map-hexa.c |
static int
push_cursor_texture (lw6sys_hexa_serializer_t * hexa_serializer,
lw6map_cursor_texture_t * cursor_texture)
{
int ret = 1;
int x, y;
for (y = 0; y < LW6MAP_CURSOR_TEXTURE_SIZE && ret; ++y)
{
for (x = 0; x < LW6MAP_CURSOR_TEXTURE_SIZE && ret; ++x)
{
ret = ret
&& lw6sys_hexa_serializer_push_color (hexa_serializer,
lw6map_cursor_texture_layer_get
(&
(cursor_texture->fg_bg_layer),
x, y));
}
}
for (y = 0; y < LW6MAP_CURSOR_TEXTURE_SIZE && ret; ++y)
{
for (x = 0; x < LW6MAP_CURSOR_TEXTURE_SIZE && ret; ++x)
{
ret = ret
&& lw6sys_hexa_serializer_push_color (hexa_serializer,
lw6map_cursor_texture_layer_get
(&
(cursor_texture->color_layer),
x, y));
}
}
return ret;
}
|
|||||
| ↓ | lw6cnx_password_verify | 11 | 15 | 39 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/cnx/cnx-password.c |
int
lw6cnx_password_verify (char *seed, char *password_here,
char *password_received)
{
int ret = 0;
char *checksum = NULL;
if ((!password_here) || (password_here && strlen (password_here) == 0))
{
// no passwd
ret = 1;
}
if (password_here && strlen (password_here) > 0 && password_received
&& strlen (password_received) > 0)
{
if (!(strcmp (password_here, password_received)))
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("password OK, received as clear text"));
ret = 1;
}
else
{
checksum = lw6cnx_password_checksum (seed, password_here);
if (checksum)
{
if (!(strcmp (checksum, password_received)))
{
lw6sys_log (LW6SYS_LOG_DEBUG,
_x_ ("password OK, received as checksum"));
ret = 1;
}
LW6SYS_FREE (checksum);
}
}
}
return ret;
}
|
|||||
| ↓ | _lw6p2p_node_poll | 11 | 12 | 18 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/p2p/p2p-node.c |
int
_lw6p2p_node_poll (_lw6p2p_node_t * node)
{
int ret = 0;
ret = _poll_step1_accept_tcp (node) && ret;
ret = _poll_step2_recv_udp (node) && ret;
ret = _poll_step3_reply (node) && ret;
ret = _poll_step4_cli_oob (node) && ret;
ret = _poll_step5_srv_oob (node) && ret;
ret = _poll_step6_explore_discover_nodes (node) && ret;
ret = _poll_step7_flush_discovered_nodes (node) && ret;
ret = _poll_step8_explore_verify_nodes (node) && ret;
ret = _poll_step9_flush_verified_nodes (node) && ret;
ret = _poll_step10_poll_tentacles (node) && ret;
return ret;
}
|
|||||
| lw6map_rules_update_checksum | 10 | 88 | 99 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/map/map-rules.c | |
| lw6gui_look_is_same | 10 | 8 | 18 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/gui/gui-look.c | |
| test_look | 10 | 56 | 117 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/gui/gui-test.c | |
| draft_zones_to_map_struct | 10 | 48 | 86 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/ker/ker-mapstruct.c | |
| _lw6dat_stack_put_msg | 10 | 46 | 105 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/dat/dat-stack.c | |
| _surface2texture_xywh | 10 | 45 | 105 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/gfx/mod-gl/gl-utils/gl-utils-texture.c | |
| _update_game_surface_raw | 10 | 44 | 89 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/gfx/mod-gl/gl-utils/gl-utils-game.c | |
| test_button | 10 | 40 | 81 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/gui/gui-test.c | |
| test_block | 10 | 38 | 110 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/dat/dat-test.c | |
| _lw6ker_map_struct_init | 10 | 38 | 74 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/ker/ker-mapstruct.c | |
| _mod_httpd_reply_thread_func | 10 | 37 | 105 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/srv/mod-httpd/mod-httpd-replythread.c | |
| _do_info | 10 | 35 | 83 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/cli/mod-udp/mod-udp-oob.c | |
| _lw6p2p_explore_discover_nodes | 10 | 34 | 88 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/p2p/p2p-explore.c | |
| _lw6nod_dyn_info_update | 10 | 34 | 66 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/nod/nod-dyninfo.c | |
| _lw6ker_map_state_sanity_check | 10 | 34 | 71 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/ker/ker-mapstate.c | |
| test_keyboard | 10 | 33 | 87 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/gui/gui-test.c | |
| _do_list | 10 | 33 | 72 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/cli/mod-http/mod-http-oob.c | |
| _lw6ker_game_state_remove_team_internal | 10 | 33 | 114 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/ker/ker-gamestate.c | |
| _mod_gl_menu_cylinder_get_cylinder_right_point | 10 | 32 | 70 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/gfx/mod-gl/gl-menu/gl-cylinder/gl-cylinder-pick.c | |
| lw6gui_menu_dup | 10 | 32 | 61 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/gui/gui-menu.c | |
| lw6gui_joystick_sync | 10 | 3 | 18 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/gui/gui-joystick.c | |
| prepare_2_tcp_socks | 10 | 31 | 74 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/net/net-test.c | |
| test_file | 10 | 30 | 68 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/sys/sys-test.c | |
| _poll_step1_accept_tcp | 10 | 30 | 75 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/p2p/p2p-node.c | |
| lw6gui_mouse_drag_pop | 10 | 30 | 55 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/gui/gui-mouse.c | |
| lw6dsp_create_backend | 10 | 29 | 54 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/dsp/dsp-display.c | |
| lw6p2p_db_reset | 10 | 29 | 74 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/p2p/p2p-db.c | |
| lw6sys_progress_split4 | 10 | 29 | 59 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/sys/sys-progress.c | |
| _commit_reference | 10 | 28 | 66 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/pil/pil-pilot.c | |
| lw6net_init | 10 | 26 | 73 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/net/net-setup.c | |
| _load_htdocs | 10 | 25 | 46 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/srv/mod-httpd/mod-httpd-data.c | |
| lw6sys_arg_match | 10 | 24 | 51 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/sys/sys-arg.c | |
| _quit_nodes | 10 | 24 | 49 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/p2p/p2p-test.c | |
| _lw6p2p_recv_callback | 10 | 24 | 88 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/p2p/p2p-recv.c | |
| lw6dyn_path_find_backend | 10 | 22 | 54 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/dyn/dyn-path.c | |
| lw6map_from_hexa | 10 | 21 | 37 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/map/map-hexa.c | |
| _lw6p2p_node_free | 10 | 21 | 46 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/p2p/p2p-node.c | |
| lw6sys_assoc_set | 10 | 20 | 41 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/sys/sys-assoc.c | |
| pop_layer | 10 | 19 | 41 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/map/map-hexa.c | |
| lw6ldr_metadata_read | 10 | 19 | 43 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/ldr/ldr-metadata.c | |
| _lw6nod_const_info_reset | 10 | 19 | 41 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/nod/nod-constinfo.c | |
| lw6msg_oob_generate_request | 10 | 13 | 40 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/msg/msg-oob.c | |
| draw_button | 9 | 68 | 147 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/gfx/mod-gl/gl-menu/gl-cylinder/gl-cylinder-display.c | |
| lw6cfg_defaults | 9 | 52 | 122 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/cfg/cfg-defaults.c | |
| lw6sys_memory_bazooka_report | 9 | 50 | 101 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/sys/sys-bazooka.c | |
| _scm_lw6ldr_read_relative | 9 | 48 | 91 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/lw6-funcs.c | |
| lw6pil_bench | 9 | 47 | 83 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/pil/pil-bench.c | |
| _lw6sys_msgbox_alert | 9 | 44 | 109 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/sys/sys-log.c | |
| _scm_lw6ldr_get_entries | 9 | 44 | 110 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/lw6-funcs.c | |
| check_map_with_absolute_path | 9 | 40 | 97 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/ldr/ldr-test.c | |
| test_convert | 9 | 40 | 91 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/sys/sys-test.c | |
| _lw6ker_map_state_populate_team | 9 | 39 | 73 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/ker/ker-mapstate.c | |
| test_menu | 9 | 38 | 82 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/gfx/gfx-test.c | |
| _response_index_html | 9 | 37 | 142 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/srv/mod-httpd/mod-httpd-oob.c | |
| _update_gauges | 9 | 33 | 85 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/gfx/mod-gl/gl-hud/gl-floating/gl-floating-context.c | |
| _scm_lw6ker_add_cursor | 9 | 32 | 61 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/lw6-funcs.c | |
| lw6sys_backtrace | 9 | 31 | 63 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/sys/sys-backtrace.c | |
| sha1_process_bytes | 9 | 30 | 66 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/glb/gnulib-sha1.c | |
| _mod_http_send | 9 | 29 | 88 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/cli/mod-http/mod-http-message.c | |
| lw6sys_hash_new | 9 | 28 | 55 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/sys/sys-hash.c | |
| lw6sys_hash_dup | 9 | 28 | 55 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/sys/sys-hash.c | |
| _lw6net_socket_bind | 9 | 28 | 65 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/net/net-socket.c | |
| test_command | 9 | 28 | 52 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/pil/pil-test.c | |
| sha1_stream | 9 | 28 | 69 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/glb/gnulib-sha1.c | |
| parse_option | 9 | 27 | 70 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/cfg/cfg-arg.c | |
| mod_gl_utils_bitmap_refresh | 9 | 27 | 87 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/gfx/mod-gl/gl-utils/gl-utils-bitmap.c | |
| _mod_udp_process_oob | 9 | 27 | 95 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/cli/mod-udp/mod-udp-oob.c | |
| lw6gui_menu_free | 9 | 26 | 60 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/gui/gui-menu.c | |
| _lw6p2p_node_insert_discovered | 9 | 26 | 68 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/p2p/p2p-node.c | |
| add_backend | 9 | 25 | 55 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/dyn/dyn-list.c | |
| _lw6p2p_backends_init_cli | 9 | 25 | 75 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/p2p/p2p-backends.c | |
| lw6sys_vthread_run | 9 | 25 | 76 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/sys/sys-vthread.c | |
| _lw6p2p_backends_init_srv | 9 | 25 | 83 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/p2p/p2p-backends.c | |
| _lw6dat_block_put_atom | 9 | 24 | 65 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/dat/dat-block.c | |
| _mod_http_query_thread_func | 9 | 24 | 51 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/cli/mod-http/mod-http-querythread.c | |
| _lw6dat_stack_init | 9 | 23 | 64 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/dat/dat-stack.c | |
| lw6net_recv_line_udp | 9 | 23 | 52 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/net/net-line.c | |
| _parse_header | 9 | 23 | 48 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/srv/mod-httpd/mod-httpd-request.c | |
| _mod_udpd_analyse_udp | 9 | 22 | 61 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/srv/mod-udpd/mod-udpd-handshake.c | |
| test_local_cursors | 9 | 22 | 67 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/pil/pil-test.c | |
| _load_game | 9 | 19 | 67 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/gfx/mod-gl/gl-splash/gl-splash-data.c | |
| _lw6dsp_param_diff | 9 | 18 | 48 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/dsp/dsp-param.c | |
| mod_gl_utils_bitmap_hash_dump2disk | 9 | 18 | 48 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/gfx/mod-gl/gl-utils/gl-utils-bitmaphash.c | |
| lw6cnx_connection_free | 9 | 17 | 37 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/cnx/cnx-connection.c | |
| lw6map_style_clear | 9 | 16 | 43 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/map/map-style.c | |
| lw6sys_hexa_serializer_pop_color | 9 | 15 | 30 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/sys/sys-hexa.c | |
| lw6net_dns_is_ip | 9 | 15 | 32 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/net/net-dns.c | |
| lw6map_teams_is_same | 9 | 15 | 24 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/map/map-teams.c | |
| lw6sys_assoc_unset | 9 | 15 | 38 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/sys/sys-assoc.c | |
| lw6net_test | 9 | 10 | 27 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/net/net-test.c | |
| _lw6ker_spread_update_gradient | 30 | 54 | 118 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/ker/ker-spread.c | |
| lw6net_tcp_is_alive | 9 | 22 | 51 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/net/net-tcp.c | |
| lw6msg_test | 8 | 8 | 21 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/msg/msg-test.c | |
| lw6sys_str_is_same_no_case | 8 | 7 | 16 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/sys/sys-str.c | |
| lw6sys_str_is_same | 8 | 7 | 16 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/sys/sys-str.c | |
| lw6ker_game_state_get_fighter_safe | 8 | 7 | 23 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/ker/ker-gamestate.c | |
| _display_pie | 8 | 70 | 147 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/gfx/mod-gl/gl-hud/gl-floating/gl-floating-display.c | |
| print_game_state_repr | 8 | 61 | 116 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/ker/ker-test.c | |
| test_algorithm | 8 | 60 | 111 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/ker/ker-test.c | |
| mod_gl_utils_bitmap_array_init_from_surface | 8 | 46 | 90 | me/ufoot/Home/tmp/liquidwar6-0.0.13beta/src/lib/gfx/mod-gl/gl-utils/gl-utils-bitmaparray.c | |
| lw6cfg_must_be_saved | 8 | 4 | 23 | ||