DELTA 29107 530 199 SVN‚¬,‚¬4 ’Qˆ‚™[’QFREECIV_ENDREP DELTA 28351 0 94 SVNž|Ÿ ‰2ˆ•J‰2FREECIV_ENDREP DELTA 27215 0 9791 SVNƒ¦ƒ¤‚¢;mcnŒ‚^ƒQ€R;‡€e™M˜X€‡LƒO²Š"·QŽ»aÁq˜†_ýQ€ƒ†1„C€5”Šr¥„Ÿˆ‚£ˆ†¥8€V#Âo«9€$G¯=€>[¬_ˆ®:ˆ‚B¯=ˆ‰±€)’¼>Œ²zÎK€„(‡I‚‚h€'‚i‚Š: ži‚Z€ƒ‚­E€ U‚±m†‚Û§‚_‚ဂWB‚å~€ I‚æt“—u‚è3…‚ ƒ€.©‚.ƒ‚b¬‰mƒ…“—!ƒŽu2gen_headers/_UNQUOTED([WIKI_URL], ["$WIKI_URL"], [Informational URL]) AC_DEFINE([DEFAULT_SOCK_PORT], [5556], [Connection TCP Port]) AC_DEFINE([FREECIV_JSON_PORT], [6556], [Json Connection TCP Port]) dnl raw default + 1000zip dist-xz]) dnl Use silent rules by default dnl verbose build using make V=1 AM_SILENT_RULES([yesglgtk], AS_HELP_STRING([--with-glgtk], [use gtk3 with GL support (WIP)]), [glgtk=$withval], [glgtk="maybe"]) if test "x$glgtk" = "xyes" ; then gtk3_minver=3.16.0 gtk3_cflags="-DGDK_VERSION_MAX_ALLOWED=GDK_VERSION_3_16 -DGLIB_VERSION_MAX_ALLOWED=GLIB_VERSION_2_42" else gtk3_minver=3.8.0 gtk3_cflags="-DGDK_VERSION_MAX_ALLOWED=GDK_VERSION_3_8 -DGLIB_VERSION_MAX_ALLOWED=GLIB_VERSION_2_36" fi gtk3_cflags="$gtk3_cflags -DGDK_VERSION_MIN_REQUIRED=GDK_VERSION_3_8 -DGLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_36" AC_ARG_WITH([project-definition], AS_HELP_STRING([--with-project-definition=file], [use given project definition file]), [project_definition="${withval}"], [project_definition="${srcdir}/bootstrap/freeciv.project"]) . ${project_definition} AC_DEFINE_UNQUOTED([FREECIV_META_URL], ["$META_URL"], [Metaserver URL]) if test "x$MODPACK_LIST_URL" != "x" ; then AC_DEFINE_UNQUOTED([MODPACK_LIST_URL], ["${MODPACK_LIST_URL}"], [Default modpack list URL])FC_WEB_OPTIONSFC_C99_TOKEN_CONCENATIONif test "x$USE_NLS" = "xyes" ; then AC_DEFINE([FREECIV_ENABLE_NLS], [1], [Native language support enabled]) fi AM_XGETTEXT_OPTION([--keyword=Q_]) AM_XGETTEXT_OPTION([--keyword=PL_:1,2]) AM_XGETTEXT_OPTION([--language=C]) AM_XGETTEXT_OPTION([--escape]) AM_XGETTEXT_OPTION([--add-comments="TRANS:"]) PKG_PROG_PKG_CONFIG if test "x$PKG_CONFIG" = "x" ; then AC_MSG_ERROR([pkg-config not found]) fiPKG_CHECK_MODULES([ICU], [icu-uc],, [AC_MSG_ERROR([icu development files required])]) UTILITY_CFLAGS="${UTILITY_CFLAGS} ${ICU_CFLAGS}" UTILITY_LIBS="${UTILITY_LIBS} ${ICU_LIBS}"[z], [gzgets], [AC_DEFINE([FREECIV_FREECIV_FREECIV_AC_ARG_WITH([tinycthread], AS_HELP_STRING([--with-tinycthread], [build and use tinycthread as thread implementation]), [fctinycthr=${withval}], [fctinycthr=no]) AM_CONDITIONAL([TINYCTHREAD], [test "x$fctinycthr"x$fctinycthr" = "xyes" ; then AC_DEFINE([FREECIV_HAVE_TINYCTHR], [1], [Use tinycthread as thread implementation]) thread_impl=tinycthread AC_DEFINE([FREECIV_ thread_cond=true TINYCTHR_LIBS="\$(top_builddir)/dependencies/tinycthread/libtinycthread.la" AC_SUBST([TINYCTHR_LIBS]) fi if test x$crosser != xyes && test "x$thread_impl" = "xnone"FREECIV_FREECIV_FREECIV_QT-specific overrides FC_QT_CLIENT dnl SDL2-specific overrides FC_SDL2_CLIENT dnl SDL-specific overrides FC_SDL_CLIENT dnl Xaw-specific overrides FC_XAW$gtk3_minverunistd.h sys/utsname.h \ sys/file.h signal.h strings.h execinfo.h \ libgen.h]) AC_CHECK_HEADERS([sys/types.h], [AC_DEFINE([FREECIV_HAVE_SYS_TYPES_H], [1], [sys/types.h available])]) AC_CHECK_HEADERS([locale.h], [AC_DEFINE([FREECIV_HAVE_LOCALE_H], [1], [locale.h available])]) AC_CHECK_HEADERS([libintl.h], [AC_DEFINE([FREECIV_HAVE_LIBINTL_H], [1], [libint.h available])]) AC_HEADER_STDBOOL if test $ac_cv_header_stdbool_h = yes; then AC_DEFINE([FREECIV_HAVE_STDBOOL_H], [1], [Have standard compliant stdbool.h]) fi], [AC_DEFINE([FREECIV_HAVE_INTTYPES_H], [1], [inttypes.h available])]) AC_CHECK_HEADERS([stdint.h], [AC_DEFINE([FREECIV_HAVE_STDINT_H], [1], [stdint.h available])str \ strerror strlcat strlcpy3], [sys_lua=true], [PKG_CHECK_MODULES([LUA], [lua-5.3], [sys_lua=true], [PKG_CHECK_MODULES([LUA], [lua >= 5.3 lua < 5.4popen pclose _longjmp _setjmp]) LUA_CFLAGS="-I\$(top_srcdir)/dependencies/lua-5.3/src" LUA_LIBS="\$(top_builddir)/dependencies/lua-5.3 \${top_builddir}/${project_definition} FC_STORE_CPPFLAGS="$(echo $CPPFLAGS | $SED 's/\\/\\\\/g' | $SED 's/\"/\\\"/g')" AC_DEFINE_UNQUOTED([FC_STORE_CPPFLAGS], ["$FC_STORE_CPPFLAGS"], [These are the CPPFLAGS used in compilation]) FC_STORE_CFLAGS="$(echo $CFLAGS | $SED 's/\\/\\\\/g' | $SED 's/\"/\\\"/g')" AC_DEFINE_UNQUOTED([FC_STORE_CFLAGS], ["$FC_STORE_CFLAGS"FC_STORE_CXXFLAGS="$(echo $CXXFLAGS | $SED 's/\\/\\\\/g' | $SED 's/\"/\\\"/g')" AC_DEFINE_UNQUOTED([FC_STORE_CXXFLAGS], ["$FC_STORE_CXXFLAGS" data/alioicons3/Makefile dependencies/lua-5.3 dependencies/tinycthread/Makefile bootstrapENDREP DELTA 28876 703 5951 SVNÎcÎk ‰&ˆÅ=‰&FREECIV_ENDREP DELTA 29107 2502 29 SVN¬H¬P Š"ˆ¢&Š"FREECIV_ENDREP DELTA 29159 0 539 SVN† †  ‡pˆ†˜‡pFREECIV_† ©:©Bˆ©: * so dENDREP DELTA 29107 3011 215 SVN‘‘M 6D¶ƒS=sys/types.h available */ #undef FREECIV_HAVE_SYS_TYPESENDREP DELTA 27857 0 9792 SVNêgêo †.ˆä9†.FREECIV_ENDREP DELTA 28876 0 581 SVNôaôi ‰ˆë[‰FREECIV_ENDREP DELTA 27799 745 255 SVNáDáL †LˆÚx†LFREECIV_ENDREP DELTA 28639 709 190 SVNFN †Cˆû†CFREECIV_ENDREP DELTA 28351 119 304 SVN‚ü7‚ü? †Uˆ‚õb†UFREECIV_ENDREP DELTA 27275 4517 49 SVN¢¢% ‡ˆ›‡FREECIV_ENDREP DELTA 28955 0 33 SVNå,å4 …sˆß9…sFREECIV_ENDREP DELTA 28764 0 1155 SVN¿s¿{ †ˆ¹\†FREECIV_ENDREP DELTA 10099 366 18013 SVN‚×M„«1ˆ‚°lG…H¤|…q:‡£&ˆ-€5‚ Š6 Œ=€†lSŽ€„ˆwW¦„p˜x…ˆ,o€e‚W¦¨v‚…Z©~¨ƒ\°”=³^¡/µ-‚‚T¶^€aº­Aæ€ Oï}†d»'€O‚[Â8ª„;Å,¢‡RÉx€ M怃>„(Ñ„QÕ.¦K怂L‹@€qK怃ÜG¿M‹?‚Vá\€GM‹?vá\½Læ€M‹?2æC¼‚'è€K‚~ë€!…cï/š-õ%‚Dÿ.€D:‚5€]L‹@}…€ [ˆ4H‰€_e‹'€Oæ}€ƒnƒJ—\€Ž‚ 2¢­¤…)¥ §5€P©<€=I¬=€ƒL‹@€&N瀂4¼n€„zÂT€JVÅ1™L‹@¢O怂PXì4±s…t³'½o´€MRæ}©7·g€‡7L‹@ž² „u³&½o´€MRæ}©7·g€‹L‹@€„8Ræ}­7·g€Œ{L‹@«$È0žÊ €† hÐh€„L‹@€qdÝ+€C‚ÞY˜Sæ|€†kL‹@§Læ€sM‹?¡Læ€qWìl€woï>bí@€‚1ïS€Læ€DOóu€‚KqÐsŽkú€ˆ ‚ƒ@°Uæ€ L‹@[‚Š,~‚Œ€‚…f‚•f€F‚6‚›x€ƒrSõ°Nç€fL‹@‚%‚Ÿ …„9‚¡L’…2‚¦€Ht‚«n—O怄M‹?‚d‚¬Z€[O怅+ƒ‚²€Ou‚µ€S‚¶‚‚¾A€„zL‹@¦Nç€cXì‚x‚Ä‚†Y‚Ç‚‚Í[€FTì€Læ€dL‹@ƒV‚Ïq€0ƒ ‚Ó~€-[ˆ4€…gL怆 L‹@€mL怆|Rì€{Iç€\[ï}€*M怇[ˆ4€kM怈oL‹@€ƒ=M怅 [ˆ4€ƒAM怛RL‹@€ƒM怆-M‹?€UM怉ML‹@€uM怄 #endif #ifdef FREECIV_LOCALE_H #include #endifinclude #include #endif /* utility */ #include "astring.h" #include "fciconv.h" #include "fcintl.h" #include "mem.h" #include "rand.h" #include "string_vector#define PARENT_DIR_OPERATOR ".."\ "data" PATH_SEPARATOR \ "~/.freeciv/" DATASUBDIR #endif #ifndef DEFAULT_SAVE_PATH #define DEFAULT_SAVE_PATH "." PATH_SEPARATOR \ "~/.freeciv/saves" #endif #ifndef DEFAULT_SCENARIO_PATH #define DEFAULT_SCENARIO_PATH \ "." PATH_SEPARATOR \ "data/scenarios" PATH_SEPARATOR \ "~/.freeciv/" DATASUBDIR "/scenarios" PATH_SEPARATOR \ "~/.freeciv/scenarios" #endif /* DEFAULT_SCENARIO_PATH */ /* environment */ #ifndef FREECIV_PATH #define FREECIV_PATH "FREECIV_PATH" #endif #ifndef FREECIV_DATA_PATH #define FREECIV_DATA_PATH "FREECIV_DATA_PATH" #endif #ifndef FREECIV_SAVE_PATH #define FREECIV_SAVE_PATH "FREECIV_SAVE_PATH" #endif #ifndef FREECIV_SCENARIO_PATH #define FREECIV_SCENARIO_PATH "FREECIV_SCENARIO_PATH As well as base64 functions, this string is used for checking for * 'safe' filenames, so should not contain / \ . */ static const char base64url[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"; static struct strvec *data_dir_names = NULL; static struct strvec *save_dir_names = NULL; static struct strvec *scenario_dir_names = NULL; static char *mc_group = NULL; static int compare_file_mtime_ptrs(const struct fileinfo *const *ppa, const struct fileinfo *const *ppb); r=rn=fc_malloc(nlines*(maxlen+1)); log_* Is option some form of option_name. option_name must be full length long version such as "--help"fc tokens={"34", "abc", "54", "87"} using free_tokens()fc_assert_ret_val(NULL != str, -1fc tokens[token] = fc_malloc(len + 1); (void) fc_strlcpy(tokens[token], str, len + 1); Frees a set of tokens created by get_tokens()/ void free_tokens(char **tokens, size_t ntokens) { size_t i; for (i = 0; i < ntokens; i++) { if (tokens[i]) { free(tokens[i])fc_assert_ret_val(0 <= mantissa, NULL); fc_assert_ret_val(0 <= exponent, NULLfc_assert_ret_val(ptr > buf + seplen, NULLfc_assert_ret_val(ptr >= buf, NULL************* Check if the name is safe security-wise. This is intended to be used to make sure an untrusted filename is safe to be used*/ bool is_safe_filename(const char *name) { int i = 0; /* must not be NULL or empty */ if (!name || *name == '\0') { return FALSE; } for (; '\0' != name[i]; i++) { if ('.' != name[i] && NULL == strchr(base64url, name[i])) { return FALSE; } } /* we don't allow the filename to ascend directories */ if (strstr(name, PARENT_DIR_OPERATOR)) { return FALSE; } /* Otherwise, it is okay... */ return TRUE********** Check for valid base64url/ bool is_base64url(const char *s) { size_t i = 0; /* must not be NULL or empty */ if (NULL == s || '\0' == *s) { return FALSE; } for (; '\0' != s[i]; i++) { if (NULL == strchr(base64url, s[i])) { return FALSE; } } return TRUE*** generate a random string meeting criteria such as is_ascii_name(), is_base64url(), and is_safe_filename()/ void randomize_base64url_string(char *s, size_t n) { size_t i = 0; /* must not be NULL or too short */ if (NULL == s || 1 > n) { return; } for (; i < (n - 1); i++) { s[i] = base64url[fc_rand(sizeof(base64url) - 1)]; } s[i] = '\0' return fc_strcoll((const char *) first, (const char *) second return fc_strcoll(*((const char **) first), *((const char **) second). Case-sensitive. Designed to be called from strvec_sort()/ int compare_strings_strvec(const char *const *first, const char *const *second) { return fc_strcoll(*first, *secondfc_assert_ret_val(NULL != s, NULL); while(*s != '\0' && fcvoid remove_leading_spaces(char *s) { char *t; fc_assert_ret(NULL != svoid remove_trailing_spaces(char *s) { char *t; size_t len; fc_assert_ret(NULL != s); len = strlen(s); if (len > 0) { t = s + len -1; while(fc fc_assert_ret(NULL != sfc_snprintf(p, n, "foo%p", p); p = end_of_strn(p, &n); fc_fc_assert_ret_val(0 < (*nleft), NULL); /* space for the terminating nul */ return str + len bool check_strlen(const char *str, size_t len, const char *errmsg) { fc_assert_ret_val_msg(strlen(str) < len, TRUE, errmsg, str, len); const char *errmsg) { (void) check_strlen(str, len, errmsg); return fc_****** Convert 'str' to it's string reprentation if possible. 'pint' can be NULL, then it will only test 'str' only contains a numb*/ bool str_to_int(const char *str, int *pint) { const char *start; fc_assert_ret_val(NULL != str, FALSE); while (fc_isspace(*str)) { /* Skip leading spaces. */ str++; } start = str; if ('-' == *str || '+' == *str) { /* Handle sign. */ str++; } while (fc_isdigit(*str)) { /* Digits. */ str++; } while (fc_isspace(*str)) { /* Ignore trailing spaces. */ str++; } return ('\0' == *str && (NULL == pint || 1 == sscanf(start, "%d", pint)) /* AMIGA */ static bool init = FALSE; static char *home_dir = NULL; if (!init) { char *env = getenv("HOME"); if (env) { home_dir = fc_strdup(env); /* never free()d */ log_verbose("HOME is %s", home_dir); } else { #ifdef WIN32_NATIVE /* some documentation at: * http://justcheckingonall.wordpress.com/2008/05/16/find-shell-folders-win32/ * http://archives.seul.org/or/cvs/Oct-2004/msg00082.html */ LPITEMIDLIST pidl; LPMALLOC pMalloc; if (SUCCEEDED(SHGetSpecialFolderLocation(NULL, CSIDL_APPDATA, &pidl))) { char *home_dir_in_local_encoding = fc_malloc(PATH_MAX); if (SUCCEEDED(SHGetPathFromIDList(pidl, home_dir_in_local_encoding))) { /* convert to internal encoding */ home_dir = local_to_internal_string_malloc(home_dir_in_local_encoding); free(home_dir_in_local_encoding); /* replace backslashes with forward slashes */ char *c; for (c = home_dir; *c != 0; c++) { if (*c == '\\') { *c = '/'; } } } else { free(home_dir_in_local_encoding); home_dir = NULL; log_error("Could not find home directory " "(SHGetPathFromIDList() failed)."); } SHGetMalloc(&pMalloc); if (pMalloc) { pMalloc->lpVtbl->Free(pMalloc, pidl); pMalloc->lpVtbl->Release(pMalloc); } } else { log_error("Could not find home directory " "(SHGetSpecialFolderLocation() failed)."); } #else /* WIN32_NATIVE */ log_error("Could not find home directory (HOME is not set)."); home_dir = NULL; #endif /* WIN32_NATIVE */ } init = TRUE; } return home_dir; #endif /* AMIGA */har *user_username(char *buf, size_t bufsz) {bufszfc_strlcpy(buf, env, bufsz); if (is_ascii_name(buf)) { log_verbose("USER username is %s", buf); return buffc_strlcpy(buf, pwent->pw_name, bufsz); if (is_ascii_name(buf)) { log_verbose("getpwuid username is %s", buf); return buf; } } } #endif /* HAVE_GETPWUID */fc_strlcpy(buf, name, bufsz); if (is_ascii_name(buf)) { log_verbose("GetUserName username is %s", buf); return buf; } } } #endif /* WIN32_NATIVE */ #ifdef ALWAYS_ROOT fc_strlcpy(buf, "name", bufsz); #else fc_snprintf(buf, bufsz, "name%d", (int) getuid()); #endif log_verbose("fake username is %s", buf); fc_assert(is_ascii_name(buf)); return buf***** Returns a list of directory paths, in the order in which they should be searched. Base function for get_data_dirs(), get_save_dirs(), get_scenario_dirs()static struct strvec *base_get_dirs(const char *dir_list) { struct strvec *dirs = strvec_new(); char *path, *tok; path = fc_strdup(dir_list); /* something we can strtok */ tok = strtok(path, PATH_SEPARATOR); do { int i; i = strlen(tok); if (tok[0] == '~') { if (i > 1 && tok[1] != '/') { log_error("For \"%s\" in path cannot expand '~'" " except as '~/'; ignoring", tok); i = 0; /* skip this one */ } else { char *home = user_home_dir(); if (!home) { log_verbose("No HOME, skipping path component %s", tok); i = 0; } else { int len = strlen(home) + i; /* +1 -1 */ char *tmp = fc_malloc(len); fc_snprintf(tmp, len, "%s%s", home, tok + 1); tok = tmp; i = -1; /* flag to free tok below */ strvec_append(dirs, tok); if (i == -1) { free(tok); free(path); return dirs***** Free data dir name vectorsvoid free_data_dir_names(void) { if (data_dir_names != NULL) { strvec_destroy(data_dir_names); data_dir_names = NULL; } if (save_dir_names != NULL) { strvec_destroy(save_dir_names); save_dir_names = NULL; } if (scenario_dir_names != NULL) { strvec_destroy(scenario_dir_names); scenario_dir_names = NULLDATA FREECIV_PATH may also be consulted for backward compatibilitypointer is static and shouldn't be modified, nor destroyed by the user callonst struct strvec *get_data_dirs(void) {NULL == data_dir_names) { const char *path; if ((path = getenv(FREECIV_DATA_PATH)) && '\0' == path[0]) { /* TRANS: configuration error */ log_error(_("\"%s\" is set but empty; trying \"%s\" instead."), FREECIV_DATA_PATH, FREECIV_PATH); path = NULL; } if (NULL == path && (path = getenv(FREECIV_PATH)) && '\0' == path[0]) { /* TRANS: configuration error */ log_error(_("\"%s\" is set but empty; using default \"%s\" " "data directories instead."), FREECIV_PATH, DEFAULT_DATA_PATH); path = NULL; } data_dir_names = base_get_dirs(NULL != path ? path : DEFAULT_DATA_PATH); strvec_remove_duplicate(data_dir_names, strcmp); /* Don't set a path both. */ strvec_iterate(data_dir_names, dirname) { log_verbose("Data path component: %s", dirname); } strvec_iterate_end; } return data_dir_names***** Returns a list of saveSAVEFREECIV_PATH may also be consulted for backward compatibilitypointer is static and shouldn't be modified, nor destroyed by the user callonst struct strvec *get_save_dirs(void) {NULL == save_dir_names) { const char *path; bool from_freeciv_path = FALSE; if ((path = getenv(FREECIV_SAVE_PATH)) && '\0' == path[0]) { /* TRANS: configuration error */ log_error(_("\"%s\" is set but empty; trying \"%s\" instead."), FREECIV_SAVE_PATH, FREECIV_PATH); path = NULL; } if (NULL == path && (path = getenv(FREECIV_PATH))) { if ('\0' == path[0]) { /* TRANS: configuration error */ log_error(_("\"%s\" is set but empty; using default \"%s\" " "save directories instead."), FREECIV_PATH, DEFAULT_SAVE_PATH); path = NULL; } else { from_freeciv_path = TRUE; } } save_dir_names = base_get_dirs(NULL != path ? path : DEFAULT_SAVE_PATH); if (from_freeciv_path) { /* Then also append a "/saves" suffix to every directory. */ char buf[512]; size_t i; for (i = 0; i < strvec_size(save_dir_names); i++) { path = strvec_get(save_dir_names, i); fc_snprintf(buf, sizeof(buf), "%s/saves", path); strvec_insert(save_dir_names, ++i, buf); } } strvec_remove_duplicate(save_dir_names, strcmp); /* Don't set a path both. */ strvec_iterate(save_dir_names, dirname) { log_verbose("Save path component: %s", dirname); } strvec_iterate_end; } return save_dir_names***** Returns a list of scenario directory paths, in the order in which they should be searched. These paths are specified internally or may be set as the environment variable $FREECIV_SCENARIO_PATH (a separated list of directories, where the separator itself is specified internally, platform-dependent). FREECIV_PATH may also be consulted for backward compatibility. '~' at the start of a component (provided followed by '/' or '\0') is expanded as $HOME. The returned pointer is static and shouldn't be modified, nor destroyed by the user callonst struct strvec *get_scenario_dirs(void) {NULL == scenario_dir_names) { const char *path; bool from_freeciv_path = FALSE; if ((path = getenv(FREECIV_SCENARIO_PATH)) && '\0' == path[0]) { /* TRANS: configuration error */ log_error(_("\"%s\" is set but empty; trying \"%s\" instead."), FREECIV_SCENARIO_PATH, FREECIV_PATH); path = NULL; } if (NULL == path && (path = getenv(FREECIV_PATH))) { if ('\0' == path[0]) { /* TRANS: configuration error */ log_error( _("\"%s\" is set but empty; using default \"%s\" " "scenario directories instead."), FREECIV_PATH, DEFAULT_SCENARIO_PATH); path = NULL; } else { from_freeciv_path = TRUE; } } scenario_dir_names = base_get_dirs(NULL != path ? path : DEFAULT_SCENARIO_PATH); if (from_freeciv_path) { /* Then also append subdirs every directory. */ const char *subdirs[] = { "scenarios", "scenario", NULL }; char buf[512]; const char **subdir; size_t i; for (i = 0; i < strvec_size(scenario_dir_names); i++) { path = strvec_get(scenario_dir_names, i); for (subdir = subdirs; NULL != *subdir; subdir++) { fc_snprintf(buf, sizeof(buf), "%s/%s", path, *subdir); strvec_insert(scenario_dir_names, ++i, buf); } } } strvec_remove_duplicate(scenario_dir_names, strcmp); /* Don't set a path both. */ strvec_iterate(scenario_dir_names, dirname) { log_verbose("Scenario path component: %s", dirname); } strvec_iterate_end; } return scenario_dir_names***** Returns a string vector storing thestroyed (with strvec_destroy()struct strvec *fileinfolist(const struct strvec *dirs, const char *suffix) { struct strvec *files = strvec_new(); size_t suffix_len = strlen(suffix); fc_assert_ret_val(!strchr(suffix, '/'), NULL); if (NULL == dirs) { return files; } /* First assemble a full list of names. */ strvec_iterate(dirs, dirname) { DIR *dir; struct dirent *entry; /* Open the directory for reading. */ dir = fc_opendir(dirname); if (!dir) { if (errno == ENOENT) { log_verbose("Skipping non-existing data directory %s.", dirname); } else { /* TRANS: "...: ."*/ log_error(_("Could not read data directory %s: %s."), dirname, fc_strerror(fc_get_errno() && strcmp(suffix, entry->d_name + len - suffix_len) == 0) { /* Strdup the entry so we can safely write to it. */ char *match = fc_strdup(entry->d_name); /* Clip the suffix. */ match[len - suffix_len] = '\0'; strvec_append(files, match); free(match); } } closedir(dir); } strvec_iterate_end; /* Sort the list and remove duplications. */ strvec_remove_duplicate(files, strcmp); strvec_sort(files, compare_strings_strvec); return files***** Returns a filename to access the specified file from a directory by searching all specified directoriespath. (But this should probably only be used for debug output.) Don't free that poinonst char *fileinfoname(const struct strvec *dirs, const char *filename) { static struct astring realfile = ASTRING_INIT; if (NULL == dirs) { return NULL; } if (!filename) { bool first = TRUE; astr_clear(&realfile); strvec_iterate(dirs, dirname) { if (first) { astr_add(&realfile, "%s%s", PATH_SEPARATOR, dirname); first = FALSE; } else { astr_add(&realfile, "%s", dirname); } } strvec_iterate_end; return astr_str(&realfile); } strvec_iterate(dirs, dirname) { struct stat buf; /* see if we can open the file or directory */ astr_set(&realfile, "%s/%s", dirname, filename); if (fc_stat(astr_str(&realfile), &buf) == 0) { return astr_str(&realfile); } } strvec_iterate_end; log_verbose("Could not find readable file \"%s\" in data path.", filename); return NULL**** Destroys the file info structure/ static void fileinfo_destroy(struct fileinfo *pfile) { free(pfile->name); free(pfile->fullname); free(pfile**** Compare modification times/ static int compare_file_mtime_ptrs(const struct fileinfo *const *ppa, const struct fileinfo *const *ppb) { time_t a = (*ppa)->mtime; time_t b = (*ppb)->mtime; return ((a < b) ? 1 : (a > b) ? -1 : 0struct fileinfo *const *ppa, const struct fileinfo *const *ppb) { return fc_strcollbool compare_fileinfo_name(const struct fileinfo *pa, const struct fileinfo *pb) { return 0 == fc_strcoll(pa->name, pb Returned "name"s will be truncated starting at the "infix" substring. The returned list must be freed with fileinfo_list_destroy()/ struct fileinfo_list *fileinfolist_infix(const struct strvec *dirsstruct fileinfo_list *res; if (NULL == dirs) { return NULL; } res = fileinfo_list_new_full(fileinfo_destroy); /* First assemble a full list of names. */ strvec_iterate(dirs, dirname) { DIR *dir; struct dirent *entry; /* Open the directory for reading. */ dir = fc_opendir(dirname); if (!dir) {truct fileinfofc_strdup(entry->d_name); /* Make sure the file name matches. */ if ((ptr = strstr(filename, infix))) { struct stat buf; char *fullname; size_t len = strlen(dirname) + strlen(filename) + 2; fullname = fc_malloc(len); fc_snprintf(fullname, len, "%s/%s", dirname, filename); if (fc_stat(fullname, &buf) == 0) { file = fc_malloc(sizeof(*file)); /* Clip the suffix. */ *ptr = '\0'; file->name = filename; file->fullname = fullname; file->mtime = buf.st_mtime; fileinfo_list_append(res, file); } else { free(fullname); free(filename); } } else { free(filename); } } closedir(dir); } strvec_iterate_end; /* Sort the list by name. */ fileinfo_list_sort(res, compare_file_name_ptrs); if (nodups) { fileinfo_list_unique_full(res, compare_fileinfo_name); } /* Sort the list by last modification time. */ fileinfoLanguage environmental variable (with emulation)get_langname(void) { char *langname = NULL; #ifdef ENABLE_NLS langname = getenv("LANG"); #ifdef WIN32_NATIVE /* set LANG by hand if it is not set */ if (!langname) { switch (PRIMARYLANGID(GetUserDefaultLangID())) { case LANG_ARABIC: return "ar"; case LANG_CATALAN: return "ca"; case LANG_CZECH: return "cs"; case LANG_DANISH: return "da"; case LANG_GERMAN: return "de"; case LANG_GREEK: return "el"; case LANG_ENGLISH: switch (SUBLANGID(GetUserDefaultLangID())) { case SUBLANG_ENGLISH_UK: return "en_GB"; default: return "en"; } case LANG_SPANISH: return "es"; case LANG_ESTONIAN: return "et"; case LANG_FARSI: return "fa"; case LANG_FINNISH: return "fi"; case LANG_FRENCH: return "fr"; case LANG_HEBREW: return "he"; case LANG_HUNGARIAN: return "hu"; case LANG_ITALIAN: return "it"; case LANG_JAPANESE: return "ja"; case LANG_KOREAN: return "ko"; case LANG_LITHUANIAN: return "lt"; case LANG_DUTCH: return "nl"; case LANG_NORWEGIAN: switch (SUBLANGID(GetUserDefaultLangID())) { case SUBLANG_NORWEGIAN_BOKMAL: return "nb"; default: return "no"; } case LANG_POLISH: return "pl"; case LANG_PORTUGUESE: switch (SUBLANGID(GetUserDefaultLangID())) { case SUBLANG_PORTUGUESE_BRAZILIAN: return "pt_BR"; default: return "pt"; } case LANG_ROMANIAN: return "ro"; case LANG_RUSSIAN: return "ru"; case LANG_SWEDISH: return "sv"; case LANG_TURKISH: return "tr"; case LANG_UKRAINIAN: return "uk"; case LANG_CHINESE: return "zh_CN"; } } #endif /* WIN32_NATIVE */ #endif /* ENABLE_NLS */ return langnamefc_strdup("\3"); grouping_sep = fc_strdup(","); #ifdef ENABLE_NLS #ifdef WIN32_NATIVE char *langname = get_langname(); if (langname) { static char envstr[40]; fc_snprintf(envstr, sizeof(envstr), "LANG=%s", langname); putenv(envstr); } #endif /* WIN32_NATIVE */char *m = malloc(sizeof(char)); *m = CHAR_MAX; grouping = fc_strdup(lc->thousands_sep); } { char *autocap_opt_in[] = { "fi", NULL }; int i; bool ac_enabled = FALSE; char *lang = getenv("LANG"); if (lang != NULL && lang[0] != '\0' && lang[1] != '\0') { for (i = 0; autocap_opt_in[i] != NULL && !ac_enabled; i++) { if (lang[0] == autocap_opt_in[i][0] && lang[1] == autocap_opt_in[i][1]) { ac_enabled = TRUE; capitalization_opt_in(); } } } } #endif /* ENABLE_NLS */Free memory allocated by Native Language Supportvoid free_nls(void) { free(grouping); grouping = NULL; free(grouping_sep); grouping_sep = NULLlog_* /* ALWAYS_ROOT */fc_assert_ret_val(result >= 0 && result < ARRAY_SIZE(descriptions), NULLSee match_prefix_full()enum m_pre_result match_prefix(m_pre_accessor_fn_t accessor_fn, size_t n_names, size_t max_len_name, m_pre_strncmp_fn_t cmp_fn, m_strlen_fn_t len_fn, const char *prefix, int *ind_result) { return match_prefix_full(accessor_fn, n_names, max_len_name, cmp_fn, len_fn, prefix, ind_result, NULL, 0, NULL If the int array 'matches' is non-NULL, up to 'max_matches' ambiguous matching names indices will be inserted into it. If 'pnum_matches' is non-NULL, it will be set to the number of indices inserted into 'matches'enum m_pre_result match_prefix_full(m_pre_accessor_fn_t accessor_fn, size_t n_names, size_t max_len_name, m_pre_strncmp_fn_t cmp_fn, m_strlen_fn_t len_fn, const char *prefix, int *ind_result, int *matches, int max_matches, int *pnum_matches) { int i, len, nmatches; if (len_fn == NULL) { len = strlen(prefix); } else { len = len_fn(prefix); }if (matches != NULL && nmatches < max_matches) { matches[nmatches] = i;if (pnum_matches != NULL) { *pnum_matches = MIN(max_matches, nmatches); }bool ipv6_prefered) { static char *default_multicast_group_ipv4 = "225.1.1.1"; #ifdef IPV6_SUPPORT /* TODO: Get useful group (this is node local) */ static char *default_multicast_group_ipv6 = "FF31::8000:15B4"; #endif /* IPv6 support */ if (mc_group == NULL) { char *env = getenv("FREECIV_MULTICAST_GROUP"); if (env) { mc_group = fc_strdup(env); } else { #ifdef IPV6_SUPPORT if (ipv6_prefered) { mc_group = fc_strdup(default_multicast_group_ipv6); } else #endif /* IPv6 support */ { mc_group = fc_strdup(default_multicast_group_ipv4); } } } return mc_group***** Free multicast group resourcesvoid free_multicast_group(void) { if (mc_group != NULL) { free(mc_group); mc_group = NULLfcfcfc_strdup(user_home_dir()); } else { return fc_strdup(filename) Return a pointer to the start of the file basename in filepath. If the string contains no dir separator, it is returned itself/ char *skip_to_basename(char *filepath) { int j; fc_assert_ret_val(NULL != filepath, NULL); for (j = strlen(filepath); j >= 0; j--) { if (filepath[j] == '/') { return &filepath[j+1]; } } return filepathchar *path_in_local_encoding = internal_to_local_string_malloc(path); _mkdir(path_in_local_encoding); free(path_in_local_encoding); #else mkdir(path, 0755); #endif #ifdef WIN32_NATIVE if (strchr(filename, ':')) { return TRUE; } #else /* WIN32_NATIVE */ if (filename[0] == '/') { return TRUE; } #endif /* WIN32_NATIVE */ **** Scan in a word or set of words from start to but not including any of the given delimiters. The buf pointer will point past delimiter, or be set to NULL if there is nothing there. Removes excess white space. This function should be safe, and dest will contain "\0" and *buf == NULL on failure. We always fail gently. Due to the way the scanning is performed, looking for a space will give you the first word even if it comes before multiple spaces. Returns delimiter found. Pass in NULL for dest and -1 for size to just skip ahead. Note that if nothing is found, dest will contain the whole string, minus leading and trailing whitespace. You can scan for "" to conveniently grab the remainder of a string/ char scanin(const char **buf, char *delimiters, char *dest, int size) { char *ptr, found = '?'; if (*buf == NULL || strlen(*buf) == 0 || size == 0) { if (dest) { dest[0] = '\0'; } *buf = NULL; return '\0'; } if (dest) { strncpy(dest, *buf, size-1); dest[size-1] = '\0'; remove_leading_trailing_spaces(dest); ptr = strpbrk(dest, delimiters); } else { /* Just skip ahead. */ ptr = strpbrk(*buf, delimiters); } if (ptr != NULL) { found = *ptr; if (dest) { *ptr = '\0'; } if (dest) { remove_leading_trailing_spaces(dest); } *buf = strpbrk(*buf, delimiters); if (*buf != NULL) { (*buf)++; /* skip delimiter */ } else { } } else { *buf = NULL; } return found**** Convenience function to nicely format a time_t seconds value in to a string with hours, minutes, etc/ void format_time_duration(time_t t, char *buf, int maxlen) { int seconds, minutes, hours, days; bool space = FALSE; seconds = t % 60; minutes = (t / 60) % 60; hours = (t / (60 * 60)) % 24; days = t / (60 * 60 * 24); if (maxlen <= 0) { return; } buf[0] = '\0'; if (days > 0) { cat_snprintf(buf, maxlen, "%d %s", days, PL_("day", "days", days)); space = TRUE; } if (hours > 0) { cat_snprintf(buf, maxlen, "%s%d %s", space ? " " : "", hours, PL_("hour", "hours", hours)); space = TRUE; } if (minutes > 0) { cat_snprintf(buf, maxlen, "%s%d %s", space ? " " : "", minutes, PL_("minute", "minutes", minutes)); space = TRUE; } if (seconds > 0) { cat_snprintf(buf, maxlen, "%s%d %s", space ? " " : "", seconds, PL_("second", "seconds", seconds)) Randomize the elements of an array using the Fisher-Yates shuffle. see: http://benpfaff.org/writings/clc/shuffle.html/ void array_shuffle(int *array, int n) { if (n > 1 && array != NULL) { int i, j, t; for (i = 0; i < n - 1; i++) { j = i + fc_rand(n - i); t = array[j]; array[j] = array[i]; array[i] = t* Test an asterisk in the pattern against test. Returns TRUE if test fit the pattern. May be recursive, as it calls wildcard_fit_string() itself (if many asterisks)*/ static bool wildcard_asterisk_fit(const char *pattern, const char *test) { char jump_to; /* Jump over the leading asterisks. */ pattern++; while (TRUE) { switch (*pattern) { case '\0': /* It is a leading asterisk. */ return TRUE; case '*': pattern++; continue; case '?': if ('\0' == *test) { return FALSE; } test++; pattern++; continue; } break; } if ('[' != *pattern) { if ('\\' == *pattern) { jump_to = *(pattern + 1); } else { jump_to = *pattern; } } else { jump_to = '\0'; } while ('\0' != *test) { if ('\0' != jump_to) { /* Jump to next matching charather. */ test = strchr(test, jump_to); if (NULL == test) { /* No match. */ return FALSE; } } if (wildcard_fit_string(pattern, test)) { return TRUE; } (test)++; } ****** Test a range in the pattern against test. Returns TRUE if **test fit the first range in *pattern*/ static bool wildcard_range_fit(const char **pattern, const char **test) { const char *start = (*pattern + 1); char testc; bool negation; if ('\0' == **test) { /* Need one character. */ return FALSE; } /* Find the end of the pattern. */ while (TRUE) { *pattern = strchr(*pattern, ']'); if (NULL == *pattern) { /* Wildcard format error. */ return FALSE; } else if (*(*pattern - 1) != '\\') { /* This is the end. */ break; } else { /* Try again. */ (*pattern)++; } } if ('!' == *start) { negation = TRUE; start++; } else { negation = FALSE; } testc = **test; (*test)++; (*pattern)++; for (; start < *pattern; start++) { if ('-' == *start || '!' == *start) { /* Wildcard format error. */ return FALSE; } else if (start < *pattern - 2 && '-' == *(start + 1)) { /* Case range. */ if (*start <= testc && testc <= *(start + 2)) { return !negation; } start += 2; } else if (*start == testc) { /* Single character. */ return !negation; } } return negation****** Returns TRUE if test fit the pattern. The pattern can contain special characters: * '*': to specify a substitute for any zero or more characters. * '?': to specify a substitute for any one character. * '[...]': to specify a range of characters: * '!': at the begenning of the range means that the matching result will be inverted * 'A-Z': means any character between 'A' and 'Z'. * 'agr': means 'a', 'g' or 'r'*/ bool wildcard_fit_string(const char *pattern, const char *test) { while (TRUE) { switch (*pattern) { case '\0': /* '\0' != test. */ return '\0' == *test; case '*': return wildcard_asterisk_fit(pattern, test); /* Maybe recursive. */ case '[': if (!wildcard_range_fit(&pattern, &test)) { return FALSE; } continue; case '?': if ('\0' == *test) { return FALSE; } break; case '\\': pattern++; /* break; not missing. */ default: if (*pattern != *test) { return FALSE; } break; } pattern++; test++; } ****** Print a string with a custom format. sequences is a pointer to an array of sequences, probably defined with CF_*_SEQ(). sequences_num is the number of the sequences, or -1 in the case the array is terminated with CF_END. Example: static const struct cf_sequence sequences[] = { CF_INT_SEQ('y', 2010) }; char buf[256]; fc_vsnprintcf(buf, sizeof(buf), "%y %+06y", sequences, 1); // This will print "2010 +02010" into buf*/ int fc_vsnprintcf(char *buf, size_t buf_len, const char *format, const struct cf_sequence *sequences, size_t sequences_num) { const struct cf_sequence *pseq; char cformat[32]; const char *f = format; char *const max = buf + buf_len - 1; char *b = buf, *c; const char *const cmax = cformat + sizeof(cformat) - 2; int i, j; if ((size_t) -1 == sequences_num) { /* Find the number of sequences. */ sequences_num = 0; for (pseq = sequences; CF_LAST != pseq->type; pseq++) { sequences_num++; } } while ('\0' != *f) { if ('%' == *f) { /* Sequence. */ f++; if ('%' == *f) { /* Double '%'. */ *b++ = '%'; f++; continue; } /* Make format. */ c = cformat; *c++ = '%'; for (; !fc_isalpha(*f) && '\0' != *f && '%' != *f && cmax > c; f++) { *c++ = *f; } if (!fc_isalpha(*f)) { /* Beginning of a new sequence, end of the format, or too long * sequence. */ *c = '\0'; j = fc_snprintf(b, max - b + 1, "%s", cformat); if (-1 == j) { return -1; } b += j; continue; } for (i = 0, pseq = sequences; i < sequences_num; i++, pseq++) { if (pseq->letter == *f) { j = -2; switch (pseq->type) { case CF_BOOLEAN: *c++ = 's'; *c = '\0'; j = fc_snprintf(b, max - b + 1, cformat, pseq->bool_value ? "TRUE" : "FALSE"); break; case CF_TRANS_BOOLEAN: *c++ = 's'; *c = '\0'; j = fc_snprintf(b, max - b + 1, cformat, pseq->bool_value ? _("TRUE") : _("FALSE")); break; case CF_CHARACTER: *c++ = 'c'; *c = '\0'; j = fc_snprintf(b, max - b + 1, cformat, pseq->char_value); break; case CF_INTEGER: *c++ = 'd'; *c = '\0'; j = fc_snprintf(b, max - b + 1, cformat, pseq->int_value); break; case CF_HEXA: *c++ = 'x'; *c = '\0'; j = fc_snprintf(b, max - b + 1, cformat, pseq->int_value); break; case CF_FLOAT: *c++ = 'f'; *c = '\0'; j = fc_snprintf(b, max - b + 1, cformat, pseq->float_value); break; case CF_POINTER: *c++ = 'p'; *c = '\0'; j = fc_snprintf(b, max - b + 1, cformat, pseq->ptr_value); break; case CF_STRING: *c++ = 's'; *c = '\0'; j = fc_snprintf(b, max - b + 1, cformat, pseq->str_value); break; case CF_LAST: break; }; if (-2 == j) { log_error("Error: unsupported sequence type: %d.", pseq->type); break; } if (-1 == j) { /* Full! */ return -1; } f++; b += j; break; } } if (i >= sequences_num) { /* Format not supported. */ *c = '\0'; j = fc_snprintf(b, max - b + 1, "%s%c", cformat, *f); if (-1 == j) { return -1; } f++; b += j; } } else { /* Not a sequence. */ *b++ = *f++; } if (max <= b) { /* Too long. */ *max = '\0'; return -1; } } *b = '\0'; return b - buf****** Print a string with a custom format. The additional arguments are a suite of cf_*_seq() finished by cf_end(). This return the number of printed characters (excluding the last '\0') or -1 if the buffer is full. Example: char buf[256]; fc_snprintcf(buf, sizeof(buf), "%y %+06y", cf_int_seq('y', 2010), cf_end()); // This will print "2010 +02010" into buf*/ int fc_snprintcf(char *buf, size_t buf_len, const char *format, ...) { struct cf_sequence sequences[16]; size_t sequences_num = 0; va_list args; /* Collect sequence array. */ va_start(args, format); do { sequences[sequences_num] = va_arg(args, struct cf_sequence); if (CF_LAST == sequences[sequences_num].type) { break; } else { sequences_num++; } } while (ARRAY_SIZE(sequences) > sequences_num); if (ARRAY_SIZE(sequences) <= sequences_num && CF_LAST != va_arg(args, struct cf_sequence).type) { log_error("Too many custom sequences. Maybe did you forget cf_end() " "at the end of the arguments?"); buf[0] = '\0'; va_end(args); return -1; } va_end(args); return fc_vsnprintcf(buf, buf_len, format, sequences, sequences_num****** Extract the sequences of a format. Returns the number of extracted escapes*/ static size_t extract_escapes(const char *format, char *escapes, size_t max_escapes) { static const char format_escapes[] = { '*', 'd', 'i', 'o', 'u', 'x', 'X', 'e', 'E', 'f', 'F', 'g', 'G', 'a', 'A', 'c', 's', 'p', 'n', }; bool reordered = FALSE; size_t num = 0; int index = 0; memset(escapes, 0, max_escapes); format = strchr(format, '%'); while (NULL != format) { format++; if ('%' == *format) { /* Double, not a sequence. */ continue; } else if (fc_isdigit(*format)) { const char *start = format; do { format++; } while (fc_isdigit(*format)); if ('$' == *format) { /* Strings are reordered. */ sscanf(start, "%d", &index); reordered = TRUE; } } while ('\0' != *format && NULL == strchr(format_escapes, *format)) { format++; } escapes[index] = *format; /* Increase the read count. */ if (reordered) { if (index > num) { num = index; } } else { index++; num++; } if ('*' != *format) { format = strchr(format, '%'); } /* else we didn't have found the real sequence. */ } return num****** Returns TRUE iff both formats are compatible (if 'format1' can be used instead 'format2' and reciprocally)*/ bool formats_match(const char *format1, const char *format2) { char format1_escapes[256], format2_escapes[256]; size_t format1_escapes_num = extract_escapes(format1, format1_escapes, sizeof(format1_escapes)); size_t format2_escapes_num = extract_escapes(format2, format2_escapes, sizeof(format2_escapes)); return (format1_escapes_num == format2_escapes_num && 0 == memcmp(format1_escapes, format2_escapes, format1_escapes_num)); } ENDREP id: hc.5ck.r29184/45702 type: file pred: hc.5ck.r28639/5786 count: 156 text: 29184 5305 31 16590 b118ae0c696219556b40d6a7da520c60 props: 10997 68 112 0 8869376353a720fe76c0d512d1b8c326 cpath: /trunk/client/clinet.c copyroot: 15280 /trunk id: 2fw.5ck.r29184/45941 type: file pred: 2fw.5ck.r27275/53841 count: 82 text: 29184 5422 32 20773 75de86cec66ba56e643ec42be87f607e props: 9999 36135 111 0 b4233197920770c602c29330b7f7c623 cpath: /trunk/client/connectdlg_common.c copyroot: 15280 /trunk id: 33x.5ck.r29184/46195 type: file pred: 33x.5ck.r28764/1183 count: 71 text: 29184 5534 32 24571 1cd5035cee960a4a22287a49b30b8b7e props: 11101 62 110 0 fdfdab56f53d2388a66f6a5ce0985f95 cpath: /trunk/client/servers.c copyroot: 15280 /trunk PLAIN K 11 Makefile.am V 24 file 5f.5ck.r27705/90803 K 6 agents V 23 dir zf.5ck.r28218/31616 K 11 attribute.c V 24 file xh.5ck.r28218/30713 K 11 attribute.h V 24 file xi.5ck.r18863/23649 K 7 audio.c V 25 file 139.5ck.r27127/10791 K 7 audio.h V 25 file 13a.5ck.r27127/11031 K 12 audio_none.c V 25 file 13d.5ck.r24916/15731 K 12 audio_none.h V 25 file 13e.5ck.r18863/20841 K 11 audio_sdl.c V 25 file 13f.5ck.r27123/78063 K 11 audio_sdl.h V 25 file 13g.5ck.r18863/23885 K 17 chatline_common.c V 25 file 14q.5ck.r24895/20143 K 17 chatline_common.h V 24 file 14r.5ck.r24892/5917 K 16 citydlg_common.c V 24 file z4.5ck.r29117/11976 K 16 citydlg_common.h V 24 file z5.5ck.r27397/15293 K 13 cityrepdata.c V 24 file mb.5ck.r29010/62955 K 13 cityrepdata.h V 24 file mc.5ck.r18863/19121 K 13 client_main.c V 24 file 2f.5cp.r28203/13318 K 13 client_main.h V 23 file hz.5cq.r26714/9499 K 8 climap.c V 24 file 197.5ck.r20232/3008 K 8 climap.h V 25 file 198.5ck.r18863/24126 K 9 climisc.c V 24 file d5.5ck.r28414/62002 K 9 climisc.h V 23 file i0.5ck.r26654/5011 K 8 clinet.c V 24 file hc.5ck.r29184/45702 K 8 clinet.h V 24 file i1.5ck.r18863/24866 K 15 colors_common.c V 24 file 33a.5ck.r22855/3020 K 15 colors_common.h V 24 file 33b.5ck.r24136/6711 K 19 connectdlg_common.c V 25 file 2fw.5ck.r29184/45941 K 19 connectdlg_common.h V 25 file 2fx.5ck.r19154/53802 K 9 control.c V 25 file gz.5ck.r28661/133082 K 9 control.h V 24 file i2.5ck.r28512/31210 K 7 dummy.c V 26 file 4f9.5ck.r26905/141682 K 12 dummycxx.cpp V 26 file 6kr.5ck.r26905/106211 K 8 editor.c V 24 file 3bg.5ck.r26198/2350 K 8 editor.h V 24 file 3bh.5ck.r26198/2592 K 17 global_worklist.c V 26 file 4i6.5ck.r26905/117850 K 17 global_worklist.h V 26 file 4i7.5ck.r26905/126022 K 6 goto.c V 23 file vu.5ck.r27873/6912 K 6 goto.h V 24 file vv.5ck.r27871/19506 K 11 gui-gtk-2.0 V 23 dir zs.5ck.r29133/10594 K 11 gui-gtk-3.0 V 22 dir zs.5g7.r29170/4340 K 6 gui-qt V 23 dir 6ie.5ck.r29080/3428 K 7 gui-sdl V 24 dir 16t.5ck.r29054/15294 K 8 gui-sdl2 V 24 dir 16t.5l8.r29054/32455 K 8 gui-stub V 23 dir mh.5ck.r29054/23524 K 7 gui-xaw V 23 dir 9o.5ck.r29054/41137 K 14 gui_cbsetter.c V 26 file a3c.5ck.r27417/165161 K 14 gui_cbsetter.h V 25 file a3d.5ck.r26905/69091 K 15 gui_interface.c V 26 file 6jm.5ir.r27417/187983 K 15 gui_interface.h V 26 file 6jn.5is.r27417/193557 K 10 helpdata.c V 24 file h1.5ck.r29051/30177 K 10 helpdata.h V 24 file i3.5ck.r25494/33011 K 7 include V 23 dir b8.5ck.r29054/43247 K 19 luaconsole_common.c V 26 file 75z.5ck.r26905/100821 K 19 luaconsole_common.h V 26 file 760.5ck.r26905/106500 K 9 luascript V 24 dir 761.5ck.r27705/90564 K 16 mapctrl_common.c V 23 file 15m.5ck.r27634/293 K 16 mapctrl_common.h V 24 file 15n.5ck.r27397/5459 K 16 mapview_common.c V 24 file z2.5ck.r29010/63453 K 16 mapview_common.h V 23 file z3.5ck.r27397/9503 K 19 messagewin_common.c V 26 file 14s.5ck.r24790/282945 K 19 messagewin_common.h V 25 file 14t.5ck.r18863/21579 K 7 music.c V 25 file zmc.5ck.r27127/11271 K 7 music.h V 25 file zme.5ck.r27127/11513 K 9 options.c V 23 file dc.5ck.r28117/8059 K 9 options.h V 23 file i4.5ck.r28117/2119 K 17 overview_common.c V 26 file 2yk.5ck.r24790/283201 K 17 overview_common.h V 26 file 2yl.5ck.r24790/283707 K 10 packhand.c V 23 file n.5ck.r29117/21283 K 10 packhand.h V 24 file i5.5ck.r18863/20596 K 15 plrdlg_common.c V 24 file 14u.5ck.r28833/2098 K 15 plrdlg_common.h V 25 file 14v.5ck.r18863/21328 K 17 repodlgs_common.c V 25 file 11i.5ck.r22325/76263 K 17 repodlgs_common.h V 25 file 11j.5ck.r19589/11861 K 9 reqtree.c V 25 file 2ym.5ck.r28242/13215 K 9 reqtree.h V 24 file 2yn.5ck.r24150/6004 K 9 servers.c V 25 file 33x.5ck.r29184/46195 K 9 servers.h V 25 file 33y.5ck.r20478/36372 K 6 text.c V 24 file 2g3.5ck.r28531/7494 K 6 text.h V 25 file 2g4.5ck.r24459/13284 K 15 themes_common.c V 22 file 352.5ck.r26465/95 K 15 themes_common.h V 25 file 353.5ck.r18863/22710 K 10 tilespec.c V 24 file hl.5ck.r29039/14579 K 10 tilespec.h V 24 file i6.5ck.r28242/12971 K 19 unitselect_common.c V 26 file 76v.5ck.r26905/117249 K 19 unitselect_common.h V 26 file 76w.5ck.r26905/117548 K 14 update_queue.c V 25 file 4jw.5ck.r29054/20297 K 14 update_queue.h V 26 file 4jx.5ck.r26905/141966 K 10 voteinfo.c V 26 file 4fe.5ck.r26905/141386 K 10 voteinfo.h V 26 file 4ff.5ck.r26905/142263 END ENDREP id: d.5ck.r29184/50724 type: dir pred: d.5ck.r29170/8886 count: 6687 text: 29184 46436 4275 0 5df5213db0042087081b5cd2edee0808 props: 28036 11094 400 0 bbe1d6769a94f3af2a54f7dc91fc9c71 cpath: /trunk/client copyroot: 15280 /trunk id: un.5ck.r29184/50954 type: file pred: un.5ck.r27857/9823 count: 81 text: 29184 5134 32 30063 bc794a70b78b9da9bdedb094b5d3c625 props: 10151 829 111 0 d69121ee529fb8cb3643d711ec0f2158 cpath: /trunk/common/connection.c copyroot: 15280 /trunk id: uo.5ck.r29184/51197 type: file pred: uo.5ck.r27799/1027 count: 70 text: 29184 5249 29 12492 fb70e18cecfd57b42ca9380e0972a45c props: 10151 1179 111 0 14533b38c2d22fb145a05b253c8fb2e8 cpath: /trunk/common/connection.h copyroot: 15280 /trunk id: 15r.5ck.r29184/51441 type: file pred: 15r.5ck.r28876/24691 count: 59 text: 29184 5192 32 31337 8760b6e6c13f4b49b34a380235baa91e props: 10806 11936 111 0 227f1557f5d66bc46d32e4db301b2671 cpath: /trunk/common/dataio.c copyroot: 15280 /trunk id: 1m61.5ck.r29184/51685 type: file pred: 1m61.5ck.r28876/24304 count: 11 text: 29184 4836 32 26475 a9b0f014669dc9bcfc268b153d570664 cpath: /trunk/common/dataio_json.c copyroot: 15280 /trunk PLAIN K 11 Makefile.am V 24 file 5h.5ck.r27888/80675 K 14 achievements.c V 25 file qhc.5ck.r28853/14803 K 14 achievements.h V 26 file qhe.5ck.r26905/215849 K 9 actions.c V 23 file r7a.5ck.r29175/255 K 9 actions.h V 24 file r7c.5ck.r29043/9403 K 4 ai.c V 23 file 4go.5ck.r29097/627 K 4 ai.h V 25 file 4gp.5ck.r28012/36147 K 6 aicore V 24 dir 18t.5ck.r29010/75988 K 6 base.c V 25 file 3jw.5ck.r28853/10829 K 6 base.h V 25 file 3jx.5ck.r28690/17344 K 9 borders.c V 25 file 4f0.5ck.r28853/15054 K 9 borders.h V 26 file 4f1.5ck.r26905/213493 K 10 calendar.c V 27 file 147p.5ck.r26905/214086 K 10 calendar.h V 27 file 147r.5ck.r26905/215265 K 8 capstr.c V 22 file dv.5ck.r24976/289 K 8 capstr.h V 24 file dw.5ck.r18858/97074 K 10 citizens.c V 26 file 6mx.5ck.r26905/203234 K 10 citizens.h V 26 file 6my.5ck.r26905/204108 K 6 city.c V 23 file q.5ck.r29010/74644 K 6 city.h V 24 file 3q.5ck.r29010/74887 K 13 clientutils.c V 26 file zj9.5ck.r26905/212022 K 13 clientutils.h V 26 file zjb.5ck.r26905/213199 K 8 combat.c V 22 file wp.5ck.r27137/126 K 8 combat.h V 24 file wq.5ck.r24573/25814 K 12 connection.c V 24 file un.5ck.r29184/50954 K 12 connection.h V 24 file uo.5ck.r29184/51197 K 9 culture.c V 27 file 104t.5ck.r26905/202652 K 9 culture.h V 27 file 104v.5ck.r26905/203523 K 8 dataio.c V 25 file 15r.5ck.r29184/51441 K 8 dataio.h V 25 file 15s.5ck.r28876/24933 K 13 dataio_json.c V 26 file 1m61.5ck.r29184/51685 K 13 dataio_json.h V 26 file 1m63.5ck.r28876/24498 K 11 diptreaty.c V 24 file 3r.5ck.r27517/13334 K 11 diptreaty.h V 24 file 3s.5ck.r27517/13575 K 10 disaster.c V 26 file b2m.5ck.r28661/141058 K 10 disaster.h V 25 file b2o.5ck.r28753/25083 K 9 effects.c V 25 file 2eo.5ck.r29117/26045 K 9 effects.h V 24 file 2ep.5ck.r29179/9063 K 8 events.c V 24 file 33h.5ck.r28400/6662 K 8 events.h V 23 file 3t.5ck.r28400/6903 K 8 extras.c V 25 file o9u.5ck.r28853/12046 K 8 extras.h V 25 file o9w.5ck.r28690/17585 K 12 fc_cmdhelp.c V 26 file 76j.5ck.r26905/216438 K 12 fc_cmdhelp.h V 26 file 76k.5ck.r26905/216731 K 14 fc_interface.c V 24 file 4up.5ck.r29096/5500 K 14 fc_interface.h V 25 file 4uq.5ck.r28203/18355 K 10 fc_types.h V 24 file 2ll.5ck.r29131/4151 K 15 featured_text.c V 26 file 4h3.5ck.r26905/212899 K 15 featured_text.h V 26 file 4h4.5ck.r26905/213786 K 6 game.c V 24 file 3u.5ck.r28753/23850 K 6 game.h V 24 file 3v.5ck.r29109/29013 K 19 generate_packets.py V 25 file 2f4.5ck.r28876/24048 K 12 government.c V 25 file he.5ck.r28661/144031 K 12 government.h V 24 file hf.5ck.r25151/83855 K 6 idex.c V 24 file qo.5ck.r25151/84101 K 6 idex.h V 24 file qp.5ck.r18858/92434 K 13 improvement.c V 24 file vb.5ck.r28818/37593 K 13 improvement.h V 23 file vc.5ck.r26605/3666 K 5 map.c V 24 file r.5ck.r28661/143548 K 5 map.h V 24 file 41.5ck.r28853/11071 K 8 mapimg.c V 26 file 6n9.5ck.r26905/214381 K 8 mapimg.h V 26 file 6na.5ck.r26905/215559 K 15 metaknowledge.c V 25 file siq.5ck.r29010/74390 K 15 metaknowledge.h V 26 file sis.5ck.r26905/206455 K 10 movement.c V 25 file 2xv.5ck.r27973/10772 K 10 movement.h V 25 file 2xw.5ck.r26369/89711 K 13 multipliers.c V 26 file 197b.5ck.r29046/17746 K 13 multipliers.h V 26 file 197d.5ck.r29117/26290 K 18 name_translation.h V 26 file 4k1.5ck.r26905/217596 K 8 nation.c V 24 file il.5ck.r26881/35006 K 8 nation.h V 22 file im.5ck.r27000/284 K 9 packets.c V 22 file 43.5ck.r29162/214 K 11 packets.def V 25 file 2f5.5ck.r29117/26540 K 9 packets.h V 24 file 44.5ck.r28853/11557 K 14 packets_json.c V 24 file 1m64.5ck.r29162/453 K 14 packets_json.h V 26 file 1m65.5ck.r28846/11954 K 8 player.c V 24 file 45.5ck.r29133/19835 K 8 player.h V 24 file 46.5ck.r29133/20079 K 14 requirements.c V 24 file 2wq.5ck.r29020/2394 K 14 requirements.h V 26 file 2wr.5ck.r28661/142807 K 10 research.c V 26 file 4ro.5ck.r28661/143058 K 10 research.h V 24 file 4rp.5ck.r27750/1056 K 10 rgbcolor.c V 26 file 6i6.5ck.r26905/218776 K 10 rgbcolor.h V 26 file 6i7.5ck.r26905/219068 K 6 road.c V 25 file 6pq.5ck.r28853/11312 K 6 road.h V 25 file 6pr.5ck.r27876/17736 K 10 scriptcore V 24 dir 75a.5ck.r28853/14316 K 11 spaceship.c V 23 file 98.5ck.r26349/9773 K 11 spaceship.h V 24 file 99.5ck.r26349/10015 K 12 specialist.c V 23 file 33f.5ck.r22372/258 K 12 specialist.h V 25 file 33g.5ck.r23560/15220 K 7 style.c V 26 file zzb.5ck.r28661/141554 K 7 style.h V 26 file zzd.5ck.r26905/204988 K 6 team.c V 23 file 33i.5ck.r25891/212 K 6 team.h V 23 file 33j.5ck.r26183/314 K 6 tech.c V 23 file t.5ck.r28735/49699 K 6 tech.h V 22 file u.5ck.r28787/6232 K 9 terrain.c V 23 file 2fp.5ck.r28906/744 K 9 terrain.h V 24 file qs.5ck.r27876/16764 K 6 tile.c V 25 file 2ys.5ck.r28853/14563 K 6 tile.h V 25 file 2yt.5ck.r26109/28279 K 13 traderoutes.c V 25 file bf8.5ck.r29010/76227 K 13 traderoutes.h V 25 file bfa.5ck.r29010/73887 K 8 traits.h V 26 file 7k3.5ck.r26905/202065 K 6 unit.c V 21 file v.5ck.r29121/444 K 6 unit.h V 22 file 48.5ck.r29121/676 K 10 unitlist.c V 25 file 39m.5ck.r28596/94022 K 10 unitlist.h V 26 file 39n.5ck.r27611/110113 K 10 unittype.c V 22 file v9.5ck.r29093/149 K 10 unittype.h V 24 file va.5ck.r29077/10748 K 9 version.c V 23 file oe.5ck.r26171/7093 K 9 version.h V 23 file e7.5ck.r26171/7331 K 9 victory.c V 26 file qex.5ck.r26905/217020 K 9 victory.h V 26 file qez.5ck.r26905/217896 K 8 vision.c V 22 file 4dm.5ck.r27638/98 K 8 vision.h V 24 file 4dn.5ck.r24742/9986 K 12 workertask.c V 26 file llw.5ck.r26905/206753 K 12 workertask.h V 25 file lly.5ck.r28926/17170 K 10 worklist.c V 22 file o8.5ck.r28026/169 K 10 worklist.h V 24 file o9.5ck.r18858/98299 END ENDREP id: p.5ck.r29184/57389 type: dir pred: p.5ck.r29179/14818 count: 4285 text: 29184 51878 5498 0 d3814db14eaaf2e936eae76488e6cb8e props: 23743 0 112 0 b2bc91bf125d83375389d51f25ff2c2f cpath: /trunk/common copyroot: 15280 /trunk id: 149.5ck.r29184/57616 type: file pred: 149.5ck.r29107/20072 count: 480 text: 29184 112 4698 53762 2026d4c15091e1e78b600eb75b6d7ae7 props: 10922 613 112 0 391fbfe6c7602972dbce1584a6808d2a cpath: /trunk/configure.ac copyroot: 15280 /trunk id: 1ht0.5ck.r29184/57857 type: file pred: 1ht0.5ck.r29107/20311 count: 10 text: 29184 5031 75 2253 c6c6475ea2094bc380e3c360a39d2a89 cpath: /trunk/gen_headers/freeciv_config.h.in copyroot: 15280 /trunk PLAIN K 11 Makefile.am V 25 file 1hsy.5ck.r27204/2485 K 19 freeciv_config.h.in V 26 file 1ht0.5ck.r29184/57857 END ENDREP id: 1hsw.5ck.r29184/58182 type: dir pred: 1hsw.5ck.r29107/20635 count: 10 text: 29184 58060 109 0 c018261adcaa66794db1f24efdf4f303 cpath: /trunk/gen_headers copyroot: 15280 /trunk id: 15.5ck.r29184/58363 type: file pred: 15.5ck.r28351/8056 count: 259 text: 29184 5363 32 48703 855495f12c73ac32971ef3d4f1d2eb32 props: 10956 5264 112 0 3b4f53580729e091747f5670a0f86c52 cpath: /trunk/server/sernet.c copyroot: 15280 /trunk id: vg.5ck.r29184/58604 type: file pred: vg.5ck.r29159/566 count: 701 text: 29184 4952 54 107714 4aeffed881171568e84f08a59cb5b037 props: 11057 12128 112 0 85dbe778568e34751643d476c23a0d7c cpath: /trunk/server/srv_main.c copyroot: 15280 /trunk PLAIN K 11 Makefile.am V 24 file 5q.5ck.r28427/16272 K 13 actiontools.c V 26 file 1p83.5ck.r29158/30973 K 13 actiontools.h V 26 file 1p86.5ck.r28427/15610 K 8 advisors V 23 dir 4n2.5ck.r29014/6836 K 9 aiiface.c V 25 file 4gm.5ck.r26905/55786 K 9 aiiface.h V 25 file 4gn.5ck.r26905/56374 K 9 animals.c V 25 file vnk.5ck.r26905/62972 K 9 animals.h V 25 file vnm.5ck.r26905/63257 K 6 auth.c V 25 file 39c.5ck.r20274/32101 K 6 auth.h V 25 file 39d.5ck.r18977/19170 K 11 barbarian.c V 23 file lw.5ck.r28605/1218 K 11 barbarian.h V 23 file lx.5ck.r28605/1460 K 14 citizenshand.c V 25 file 6mz.5ck.r26905/56079 K 14 citizenshand.h V 25 file 6n0.5ck.r26905/56662 K 10 cityhand.c V 23 file 10.5ck.r29121/6652 K 10 cityhand.h V 23 file 4f.0.r13297/423686 K 11 citytools.c V 23 file 4g.5ck.r29014/4774 K 11 citytools.h V 23 file 4h.5ck.r29014/5019 K 10 cityturn.c V 22 file 4i.5ck.r29084/315 K 10 cityturn.h V 24 file 4j.5ck.r24742/16670 K 11 civserver.c V 24 file 4k.5ck.r28075/17421 K 10 commands.c V 26 file 2ly.5ck.r27912/171920 K 10 commands.h V 25 file 2lz.5ck.r28012/47664 K 13 connecthand.c V 25 file 2dw.5ck.r28908/19832 K 13 connecthand.h V 24 file 2dx.5ck.r23606/2057 K 9 console.c V 24 file dd.5ck.r24895/15492 K 9 console.h V 23 file de.5ck.r19183/7918 K 10 diplhand.c V 21 file 4m.5ck.r28629/83 K 10 diplhand.h V 23 file 4n.5ck.r27517/8916 K 11 diplomats.c V 24 file vz.5ck.r29179/17653 K 11 diplomats.h V 23 file w0.5ck.r27461/1674 K 10 edithand.c V 25 file 3bk.5ck.r27611/83395 K 10 edithand.h V 25 file 4ez.5ck.r26905/64705 K 6 fcdb.c V 25 file 6l3.5ck.r26905/56956 K 6 fcdb.h V 25 file 6l4.5ck.r26905/57239 K 10 gamehand.c V 23 file 4o.5ck.r27042/1951 K 10 gamehand.h V 24 file 4p.5ck.r26564/23149 K 9 generator V 23 dir 2me.5ck.r28863/2257 K 10 handchat.c V 23 file 4q.5ck.r25915/6654 K 10 handchat.h V 24 file dj.5ck.r18270/28229 K 9 maphand.c V 24 file 13.5ck.r28905/33465 K 9 maphand.h V 23 file 14.5ck.r24759/3742 K 6 meta.c V 24 file 4s.5ck.r28853/27364 K 6 meta.h V 23 file 4t.5ck.r27204/3095 K 6 mood.c V 26 file 112c.5ck.r26905/63547 K 6 mood.h V 26 file 112e.5ck.r26905/64129 K 8 notify.c V 25 file 4i2.5ck.r26905/57814 K 8 notify.h V 25 file 4i3.5ck.r26905/58681 K 9 plrhand.c V 24 file 4u.5ck.r29133/26061 K 9 plrhand.h V 24 file 4v.5ck.r28710/11476 K 8 report.c V 24 file vi.5ck.r28694/12005 K 8 report.h V 24 file vj.5ck.r24891/20006 K 10 rscompat.c V 26 file 1kte.5ck.r29158/31165 K 10 rscompat.h V 26 file 1ktg.5ck.r28753/34226 K 10 rssanity.c V 25 file hew.5ck.r28682/15354 K 10 rssanity.h V 25 file hey.5ck.r26905/55500 K 9 ruleset.c V 22 file 8w.5ck.r29181/297 K 9 ruleset.h V 23 file 8x.5ck.r28433/8364 K 13 sanitycheck.c V 24 file wi.5ck.r29010/85798 K 13 sanitycheck.h V 24 file wj.5ck.r28075/17176 K 12 savecompat.c V 24 file qva.5ck.r28859/2841 K 12 savecompat.h V 25 file qvc.5ck.r29050/13140 K 10 savegame.c V 24 file vl.5ck.r29107/20816 K 10 savegame.h V 24 file vm.5ck.r20758/19233 K 11 savegame2.c V 25 file 4m0.5ck.r29163/40844 K 11 savegame2.h V 25 file 4m1.5ck.r27478/65017 K 11 savegame3.c V 25 file 4m0.5ql.r29163/41089 K 11 savegame3.h V 25 file 4m1.5qm.r27478/64506 K 7 score.c V 25 file 2eg.5ck.r25535/51502 K 7 score.h V 24 file 2eh.5ck.r21929/6179 K 9 scripting V 23 dir 31x.5ck.r28467/1243 K 8 sernet.c V 24 file 15.5ck.r29184/58363 K 8 sernet.h V 23 file 4y.5ck.r23685/5129 K 10 settings.c V 23 file 2m0.5ck.r29146/179 K 10 settings.h V 24 file 2m1.5ck.r28747/6278 K 11 spacerace.c V 24 file 9a.5ck.r25063/30975 K 11 spacerace.h V 21 file 9b.0.r11338/1129 K 9 srv_log.c V 25 file 15t.5el.r28853/27603 K 9 srv_log.h V 25 file 15u.5em.r28012/47157 K 10 srv_main.c V 24 file vg.5ck.r29184/58604 K 10 srv_main.h V 24 file vh.5ck.r28908/18828 K 11 stdinhand.c V 22 file 4z.5ck.r29113/173 K 11 stdinhand.h V 24 file 50.5ck.r26100/15471 K 11 techtools.c V 23 file 33n.5ck.r28731/145 K 11 techtools.h V 24 file 33o.5ck.r27058/2134 K 10 unithand.c V 21 file 18.5ck.r29153/72 K 10 unithand.h V 24 file 19.5ck.r23027/66151 K 11 unittools.c V 22 file 1a.5ck.r29100/171 K 11 unittools.h V 23 file 1b.5ck.r28377/6232 K 8 voting.c V 25 file 4ex.5ck.r26905/57525 K 8 voting.h V 25 file 4ey.5ck.r26905/58399 END ENDREP id: z.5ck.r29184/62998 type: dir pred: z.5ck.r29181/4681 count: 6025 text: 29184 58848 4137 0 657ab32a06e0d120980fd39d7481ee00 props: 23990 448 166 0 e5026e1cb18fe57b41417951bfac7b19 cpath: /trunk/server copyroot: 15280 /trunk id: 4pl.5js.r29184/63226 type: file pred: 4pl.5js.r28955/436 count: 36 text: 29184 5481 29 12980 f61cd82675e527458993bd7ccb6d6c03 props: 26905 35846 34 0 25e6c2f7558b7484000d4d090dea5b92 cpath: /trunk/tools/download.c copyroot: 21464 /trunk/tools PLAIN K 11 Makefile.am V 25 file 4pk.5js.r27705/53022 K 11 civmanual.c V 24 file 2m5.5jt.r28747/4923 K 10 download.c V 25 file 4pl.5js.r29184/63226 K 10 download.h V 25 file 4pm.5js.r26905/37103 K 9 modinst.c V 25 file bj7.5js.r28203/24352 K 9 modinst.h V 24 file 76i.5js.r27300/3953 K 7 mpcli.c V 24 file y74.5js.r27418/2176 K 11 mpcmdline.c V 25 file 73v.5js.r26905/36184 K 11 mpcmdline.h V 25 file 73w.5js.r26905/37695 K 6 mpdb.c V 25 file bjc.5js.r26905/38590 K 6 mpdb.h V 25 file bje.5js.r26905/35017 K 12 mpgui_gtk2.c V 23 file 4pn.5lm.r28995/739 K 12 mpgui_gtk3.c V 24 file 4pn.5ln.r28995/1000 K 12 mpgui_qt.cpp V 24 file a65.5js.r29028/1206 K 10 mpgui_qt.h V 24 file a67.5js.r28930/1822 K 19 mpgui_qt_worker.cpp V 23 file vuz.5js.r27625/957 K 17 mpgui_qt_worker.h V 25 file vv1.5js.r26905/38877 K 7 ruledit V 24 dir ssm.5js.r29109/36898 END ENDREP id: 4pj.5js.r29184/64330 type: dir pred: 4pj.5js.r29109/37997 count: 285 text: 29184 63474 843 0 7b58076d49cfff636d20a668e8583e54 props: 28036 1369 325 0 931541cd07e52416301ed56de9c70dfc cpath: /trunk/tools copyroot: 21464 /trunk/tools id: t7.5ck.r29184/64567 type: file pred: t7.5ck.r28351/4769 count: 38 text: 29184 59 29 3972 91904b597433b9776d576a69d36ebda7 props: 8410 11615 111 0 5396249b3009eb64cd90e5da0b7a56fa cpath: /trunk/utility/netintf.h copyroot: 15280 /trunk id: 55.5ck.r29184/64806 type: file pred: 55.5ck.r28757/7051 count: 192 text: 29184 5592 40081 71089 a02452e1efad95a2c5099ba3d41de33d props: 10717 469 112 0 62f136c4e8601b29898c811272b88b7d cpath: /trunk/utility/shared.c copyroot: 15280 /trunk id: m9.5ck.r29184/65050 type: file pred: m9.5ck.r29107/16766 count: 68 text: 29184 0 32 38452 295e06615bac3088fdf8da8e8d83f6e9 props: 10006 230 111 0 b4233197920770c602c29330b7f7c623 cpath: /trunk/utility/support.c copyroot: 15280 /trunk id: ma.5ck.r29184/65289 type: file pred: ma.5ck.r29107/15784 count: 50 text: 29184 4896 29 5712 ef2f8fb5fe7700978170674b68db5197 props: 7602 5819 111 0 df9f31216c5039327c376b7fe82756f5 cpath: /trunk/utility/support.h copyroot: 15280 /trunk PLAIN K 11 Makefile.am V 25 file 2gg.5ck.r27705/54797 K 9 astring.c V 23 file h5.5ck.r22395/1264 K 9 astring.h V 23 file h6.5ck.r20479/1668 K 11 bitvector.c V 25 file 4un.5ck.r26905/46406 K 11 bitvector.h V 25 file 4uo.5ck.r28012/43112 K 12 capability.c V 24 file 7p.5ck.r24916/10883 K 12 capability.h V 24 file 7q.5ck.r18858/85852 K 12 distribute.c V 26 file 2lp.5ck.r19259/362511 K 12 distribute.h V 25 file 2lq.5ck.r18858/87951 K 9 fc_utf8.c V 23 file 4ku.5ck.r26944/198 K 9 fc_utf8.h V 25 file 4kv.5ck.r26905/46695 K 13 fcbacktrace.c V 22 file 731.5ck.r26959/58 K 13 fcbacktrace.h V 25 file 732.5ck.r26905/45245 K 9 fciconv.c V 25 file 2g7.5ck.r26800/15337 K 9 fciconv.h V 25 file 2g8.5ck.r18858/89144 K 8 fcintl.c V 23 file k3.5ck.r23282/1304 K 8 fcintl.h V 23 file fw.5ck.r28640/3110 K 10 fcthread.c V 25 file 6hv.5ck.r27705/54306 K 10 fcthread.h V 25 file 6hw.5ck.r27705/54552 K 20 generate_specenum.py V 23 file 4ia.5ck.r27150/401 K 9 genhash.c V 23 file 57v.5ck.r27456/668 K 9 genhash.h V 25 file 57w.5ck.r26905/43784 K 9 genlist.c V 24 file 51.5ck.r25012/26982 K 9 genlist.h V 24 file 52.5ck.r20422/10948 K 11 inputfile.c V 23 file h9.5ck.r25070/3455 K 11 inputfile.h V 24 file ha.5ck.r18858/84203 K 5 ioz.c V 24 file uh.5ck.r29107/16297 K 5 ioz.h V 24 file ui.5ck.r29107/16532 K 10 iterator.c V 25 file 4h5.5ck.r26905/44951 K 10 iterator.h V 25 file 4f3.5ck.r26905/45830 K 5 log.c V 23 file 53.5ck.r28580/2416 K 5 log.h V 24 file 54.5ck.r28075/10542 K 5 md5.c V 22 file 33q.5ck.r25082/54 K 5 md5.h V 25 file 33r.5ck.r19849/16287 K 5 mem.c V 25 file d9.5ck.r19259/362758 K 5 mem.h V 24 file da.5ck.r20315/22211 K 9 netfile.c V 25 file 6m8.5ck.r26905/41142 K 9 netfile.h V 25 file 6m9.5ck.r26905/41734 K 9 netintf.c V 23 file t6.5ck.r28351/4529 K 9 netintf.h V 24 file t7.5ck.r29184/64567 K 6 rand.c V 25 file m5.5ck.r19259/363664 K 6 rand.h V 24 file m6.5ck.r20315/22687 K 10 registry.c V 25 file agw.5ck.r26905/40563 K 10 registry.h V 25 file 7po.5ck.r26905/40851 K 14 registry_ini.c V 24 file dh.5io.r29107/16025 K 14 registry_ini.h V 23 file di.5ip.r26114/7727 K 14 registry_xml.c V 26 file 16x3.5ck.r26905/44658 K 14 registry_xml.h V 26 file 16x5.5ck.r26905/45535 K 14 section_file.c V 25 file bw9.5ck.r26905/42610 K 14 section_file.h V 25 file axo.5ck.r27649/11563 K 8 shared.c V 24 file 55.5ck.r29184/64806 K 8 shared.h V 23 file 1d.5ck.r28757/7289 K 10 spechash.h V 25 file 57x.5ck.r26905/46987 K 10 speclist.h V 24 file gb.5ck.r28012/42871 K 8 specpq.h V 26 file 1brp.5ck.r26905/42320 K 9 specvec.h V 21 file z9.5ck.r24658/96 K 15 string_vector.c V 25 file 4hy.5ck.r26905/41433 K 15 string_vector.h V 25 file 4hz.5ck.r26905/42022 K 9 support.c V 24 file m9.5ck.r29184/65050 K 9 support.h V 24 file ma.5ck.r29184/65289 K 8 timing.c V 24 file el.5ck.r24200/17365 K 8 timing.h V 24 file em.5ck.r28012/43360 END ENDREP id: 1c.5ck.r29184/68363 type: dir pred: 1c.5ck.r29107/19839 count: 906 text: 29184 65530 2820 0 424c5b347ecb0079d17077da9ebd5b79 props: 17175 331 84 0 5447a85ba28edec0d4a8f6120070e2b2 cpath: /trunk/utility copyroot: 15280 /trunk PLAIN K 9 ABOUT-NLS V 24 file fu.5ck.r27270/69307 K 7 AUTHORS V 24 file 5u.5ck.r22143/14016 K 7 COPYING V 19 file 1h.0.r9643/400 K 9 ChangeLog V 26 file 6l.5ck.r27473/7455495 K 7 INSTALL V 22 file 6.5ck.r29071/2530 K 11 Makefile.am V 23 file 59.5ck.r29104/3096 K 4 NEWS V 24 file 6m.5ck.r25634/30702 K 6 README V 20 file 7.0.r4421/96382 K 2 ai V 21 dir 8.5ck.r29179/8840 K 10 autogen.sh V 24 file 12o.5ck.r29071/2757 K 9 bootstrap V 23 dir 2p5.5ck.r29173/2950 K 6 client V 22 dir d.5ck.r29184/50724 K 6 common V 22 dir p.5ck.r29184/57389 K 12 configure.ac V 25 file 149.5ck.r29184/57616 K 4 data V 21 dir w.5ck.r29166/3965 K 12 dependencies V 23 dir 2yu.5ck.r28829/5968 K 3 doc V 23 dir k7.5ck.r29179/17180 K 10 fc_version V 25 file 2lo.5en.r29179/17405 K 11 gen_headers V 25 dir 1hsw.5ck.r29184/58182 K 2 m4 V 23 dir 12p.5ck.r29104/5805 K 7 scripts V 23 dir 2yo.5ck.r28716/5421 K 6 server V 22 dir z.5ck.r29184/62998 K 5 tests V 23 dir 2g9.5ck.r27783/1363 K 5 tools V 24 dir 4pj.5js.r29184/64330 K 12 translations V 23 dir t0a.5ck.r28955/2265 K 7 utility V 23 dir 1c.5ck.r29184/68363 K 5 win32 V 23 dir 2eu.5ck.r28347/2148 END ENDREP id: 3.5ck.r29184/69728 type: dir pred: 3.5ck.r29181/6040 count: 19603 text: 29184 68593 1122 0 bfe69633da49b6602d75db0d5e3d97dc props: 28036 14655 292 0 9e1d5de0253c723466868990c52c129f cpath: /trunk copyroot: 15280 /trunk PLAIN K 8 branches V 19 dir 1.0.r29183/6324 K 4 tags V 19 dir 2.0.r28528/6475 K 5 trunk V 22 dir 3.5ck.r29184/69728 K 7 website V 21 dir 3ge.0.r22980/2263 END ENDREP id: 0.0.r29184/70118 type: dir pred: 0.0.r29183/6641 count: 29184 text: 29184 69952 153 0 a2d9ec793fad71b7fedcfadfe13ed9c1 cpath: / copyroot: 0 / hc.5ck.t29183-1 modify true false /trunk/client/clinet.c 2fw.5ck.t29183-1 modify true false /trunk/client/connectdlg_common.c 33x.5ck.t29183-1 modify true false /trunk/client/servers.c un.5ck.t29183-1 modify true false /trunk/common/connection.c uo.5ck.t29183-1 modify true false /trunk/common/connection.h 15r.5ck.t29183-1 modify true false /trunk/common/dataio.c 1m61.5ck.t29183-1 modify true false /trunk/common/dataio_json.c 149.5ck.t29183-1 modify true false /trunk/configure.ac 1ht0.5ck.t29183-1 modify true false /trunk/gen_headers/freeciv_config.h.in 15.5ck.t29183-1 modify true false /trunk/server/sernet.c vg.5ck.t29183-1 modify true false /trunk/server/srv_main.c 4pl.5js.t29183-1 modify true false /trunk/tools/download.c t7.5ck.t29183-1 modify true false /trunk/utility/netintf.h 55.5ck.t29183-1 modify true false /trunk/utility/shared.c m9.5ck.t29183-1 modify true false /trunk/utility/support.c ma.5ck.t29183-1 modify true false /trunk/utility/support.h 70118 70265