DELTA 29160 0 420
SVN  †  †   ‡p ˆ †˜‡pFREECIV_†  ŸFŸNˆ ŸF _interfaENDREP
DELTA 17080 0 3595
SVN  £<«iŽ& …e ¸ ‚w…c‘ }ˆNˆ ‰K ^Šcˆ '‹A€ƒ ƒ(Ž€‚& `‘'€| v“ €‚ ‚•ƒ ‚—€Y ™v€ ›~‚ ‚‚ ŸŸ  C€‚o£#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */freeciv_config.h>FREECIV_ndef __cplusplusFREECIV_unsigned int
#define true  1
#define false 0
#define __bool_true_false_are_defined 1
#endif /* ! FREECIV_HAVE_STDBOOL_H */
#endif /* ! __BEOS__ */
#endif /* __cplusplus */

/* intptr_t header */
/* Prefer full inttypes.h if present. */
#ifdef FREECIV_HAVE_INTTYPES_H
#include <inttypes.h>
#else
#ifdef FREECIV_HAVE_STDINT_H
#include <stdint.h>
#endif /* FREECIV_HAVE_STDINT_H */
#endif /* FREECIV_HAVE_INTTYPES_H/* __attribute__((warn_unused_result)) requires at least gcc 3.4 */
#if defined(__GNUC__)
#if (__GNUC__ > 3) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
#define fc__warn_unused_result  __attribute__((warn_unused_result))
#endif
#endif
#ifndef fc__warn_unused_result
#define fc__warn_unused_resultfc_strcasecmp(const char *str0, const char *str1);
int fc_strncasecmp(const char *str0, const char *str1, size_t n);
int fc_fc_strcasestr(const char *haystack, const char *needle);

int fc_strcoll(const char *str0, const char *str1);
int fc_stricoll(const char *str0, const char *str1);

FILE *fc_fopen(const char *filename, const char *opentype);
#ifdef FREECIV_HAVE_LIBZ
#include <zlib.h>
gzFile fc_warn_unused_result;

size_t fc_strlcpy(char *dest, const char *src, size_t n);
size_t fc_ fc_strlcpy((dest), (src), sizeof(dest)))
#define sz_strlcat(dest,src) ((void) fc_strlcat((dest), (src), sizeof(dest)))

int fcfcfcfc_init_console(void);
char *fcfc_isalnum(char c);
bool fc_isalpha(char c);
bool fc_isdigit(char c);
bool fc_isprint(char c);
bool fc_isspace(char c);
bool fc_isupper(char c);
char fc_toupper(char c);
char fc_tolower(char c);

void fc_uname(char *buf, size_t len);

const char *fc_basename(const char *path);

int fc_at_quick_exit(void (*func)(void));

#ifdef __cplusplus
}
#endif /* __cplusplus */ENDREP
DELTA 27275 4517 49
SVN  ¢¢% ‡ ˆ › ‡FREECIV_ENDREP
DELTA 29108 2941 980
SVN  C‘ 
6 Œw ¶ ƒSŒpsys/types.h available */
#undef FREECIV_HAVE_SYS_TYPESENDREP
DELTA 28320 0 26
SVN  ‚üv‚ü~ †U ˆ ‚ö!†UFREECIV_ENDREP
DELTA 28765 0 288
SVN  ÃÃ † ˆ ¼n†FREECIV_ENDREP
DELTA 27858 0 9792
SVN  êgêo †. ˆ ä9†.FREECIV_ENDREP
DELTA 28956 0 33
SVN  å,å4
 …s ˆ ß9…sFREECIV_ENDREP
DELTA 27027 0 2525
SVN  ê
ê ‰ ˆ á‰FREECIV_ENDREP
DELTA 10099 366 18013
SVN  ‚×M„«1ˆ‚°l G  …H¤ |…q :‡£ &ˆ-€5 ‚	Š6  Œ=€†l SŽ€„ ˆwW¦ „p˜x… ˆ,o€e ‚W¦ ¨v‚ …Z©~¨ ƒ\°” =³^¡ /µ-‚ ‚T¶^€a º­ Aæ€ Oï} †d»'€O ‚[Â8ª „;Å,¢ ‡RÉx€ Mæ€ƒ> „(Ñ „QÕ.¦ Kæ€‚ L‹@€q Kæ€ ƒÜG¿ M‹? ‚Vá\€G M‹? vá\½ Læ€ M‹? 2æC¼ ‚'è€K ‚~ë€! …cï/š -õ% ‚Dÿ.€D :‚5€] L‹@ }…€	 [ˆ4 H‰€_ e‹'€ Oæ}€ƒn ƒJ—\€Ž ‚  2¢­ ¤… )¥  §5€  P©<€= I¬=€ƒ L‹@€& Nç €‚ 4¼n€„z ÂT€J VÅ1™ L‹@¢ Oæ€‚P Xì  4±s… t³'½ o´€M Ræ}© 7·g€‡7 L‹@ž ²	„ u³&½ o´€M Ræ}© 7·g€‹ L‹@€„8 Ræ}­ 7·g€Œ{ L‹@« $È0ž Ê€†	 hÐh€„ L‹@€q dÝ+€C ‚ÞY˜ Sæ|€†k L‹@§ Læ€s M‹?¡ Læ€q Wìl€w oï> bí@€ ‚1ïS€ Læ€D Oóu€‚K qÐsŽ kú€ˆ  ‚ƒ@° Uæ€ L‹@ [‚Š, ~‚Œ€‚ …f‚•f€F ‚6‚›x€ƒr Sõ° Nç €f L‹@ ‚%‚Ÿ … „9‚¡L’ …2‚¦€H t‚«n— Oæ€„ M‹? ‚d‚¬Z€[ Oæ€…+ ƒ‚²€O u‚µ€S ‚¶ ‚‚¾A€„z L‹@¦ Nç €c Xì  ‚x‚Ä‚ †Y‚Ç ‚ ‚Í[€F Tì € Læ€d L‹@ ƒV‚Ïq€0 ƒ
‚Ó~€- [ˆ4€…g Læ€† L‹@€m Læ€†| Rì €{ Iç €\ [ï}€* Mæ€‡ [ˆ4€k Mæ€ˆo L‹@€ƒ= Mæ€…	 [ˆ4€ƒA Mæ€›R L‹@€ƒ Mæ€†- M‹?€U Mæ€‰M L‹@€u Mæ€„<fc_config.h>
#endif

#ifdef FREECIV_LOCALE_H
#include <locale.h>
#endifinclude <shlobj.h>
#include <direct.h>
#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: <FREECIV_DATA_PATH> 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: <FREECIV_PATH> 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: <FREECIV_SAVE_PATH> 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: <FREECIV_PATH> 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: <FREECIV_SAVE_PATH> 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: <FREECIV_PATH> 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: "...: <externally translated error string>."*/
        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
DELTA 26633 40012 279
SVN  €?€G
 †C ˆ ù|†CFREECIV_ENDREP
DELTA 27800 245 255
SVN  áDáL
 †L ˆ Úx†LFREECIV_ENDREP
DELTA 26628 0 108
SVN  ž1ž9
 ‰2 ˆ ”‰2FREECIV_ENDREP
DELTA 29108 530 236
SVN  ‚™‚™ ’Q ˆ ‚†:’QFREECIV_ENDREP
DELTA 29108 793 93
SVN  ƒ“Iƒ”$R ‚ƒH  ‚ƒT€R ‚„Dsys/types.h], [AC_DEFINE([FREECIV_HAVE_SYS_TYPES_H], [1], [sys/types.h available])ENDREP
id: hc.5qi.r29185/42976
type: file
pred: hc.5ck.r26633/57244
count: 155
text: 29185 42606 31 16455 79a1e561a8338e6b818dbdebc36b36c1
props: 10997 68 112 0 8869376353a720fe76c0d512d1b8c326
cpath: /branches/S2_6/client/clinet.c
copyroot: 27474 /branches/S2_6

id: 2fw.5qi.r29185/43233
type: file
pred: 2fw.5ck.r27275/53841
count: 82
text: 29185 2052 32 20773 75de86cec66ba56e643ec42be87f607e
props: 9999 36135 111 0 b4233197920770c602c29330b7f7c623
cpath: /branches/S2_6/client/connectdlg_common.c
copyroot: 27474 /branches/S2_6

id: 33x.5qi.r29185/43503
type: file
pred: 33x.5qi.r28765/314
count: 68
text: 29185 2270 32 24973 7c64f51f10e21f4e32b16aab37e8c510
props: 11101 62 110 0 fdfdab56f53d2388a66f6a5ce0985f95
cpath: /branches/S2_6/client/servers.c
copyroot: 27474 /branches/S2_6

PLAIN
K 11
Makefile.am
V 24
file 5f.5ck.r26633/81862
K 6
agents
V 22
dir zf.5qi.r27764/1055
K 11
attribute.c
V 24
file xh.5ck.r25151/59391
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.5qi.r29118/40597
K 16
citydlg_common.h
V 24
file z5.5ck.r27397/15293
K 13
cityrepdata.c
V 25
file mb.5ck.r24790/282697
K 13
cityrepdata.h
V 24
file mc.5ck.r18863/19121
K 13
client_main.c
V 23
file 2f.5rc.r28204/5537
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 23
file d5.5ck.r26796/4227
K 9
climisc.h
V 23
file i0.5ck.r26654/5011
K 8
clinet.c
V 24
file hc.5qi.r29185/42976
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.5qi.r29185/43233
K 19
connectdlg_common.h
V 25
file 2fx.5ck.r19154/53802
K 9
control.c
V 22
file gz.5qi.r28194/458
K 9
control.h
V 24
file i2.5ck.r27181/67376
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.5qi.r27874/6928
K 6
goto.h
V 24
file vv.5qi.r27872/19931
K 11
gui-gtk-2.0
V 23
dir zs.5qi.r29138/10603
K 11
gui-gtk-3.0
V 22
dir zs.5qq.r29171/4345
K 6
gui-qt
V 23
dir 6ie.5qi.r29081/3444
K 7
gui-sdl
V 24
dir 16t.5qi.r29066/25040
K 8
gui-sdl2
V 24
dir 16t.5r1.r29066/34028
K 8
gui-stub
V 23
dir mh.5qi.r29066/19713
K 7
gui-xaw
V 23
dir 9o.5qi.r29066/14324
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.5qi.r29063/19229
K 10
helpdata.h
V 24
file i3.5ck.r25494/33011
K 7
include
V 23
dir b8.5qi.r29066/16465
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 25
dir 761.5ck.r26905/116963
K 16
mapctrl_common.c
V 23
file 15m.5qi.r27635/293
K 16
mapctrl_common.h
V 24
file 15n.5ck.r27397/5459
K 16
mapview_common.c
V 23
file z2.5qi.r28593/1549
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.5qi.r28118/7096
K 9
options.h
V 23
file i4.5qi.r28118/1121
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.5qi.r29118/49968
K 10
packhand.h
V 24
file i5.5ck.r18863/20596
K 15
plrdlg_common.c
V 24
file 14u.5qi.r28834/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.5qi.r28243/17842
K 9
reqtree.h
V 24
file 2yn.5ck.r24150/6004
K 9
servers.c
V 25
file 33x.5qi.r29185/43503
K 9
servers.h
V 25
file 33y.5ck.r20478/36372
K 6
text.c
V 25
file 2g3.5qi.r28537/12987
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.5qi.r29040/10595
K 10
tilespec.h
V 24
file i6.5qi.r28243/12958
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.5qi.r29066/44235
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.5qi.r29185/48043
type: dir
pred: d.5qi.r29171/8895
count: 6661
text: 29185 43759 4271 0 bb9581964c08a259fa7715af8c41e777
props: 28037 12634 400 0 bbe1d6769a94f3af2a54f7dc91fc9c71
cpath: /branches/S2_6/client
copyroot: 27474 /branches/S2_6

id: un.5qi.r29185/48289
type: file
pred: un.5qi.r27858/9823
count: 81
text: 29185 2327 32 30063 bc794a70b78b9da9bdedb094b5d3c625
props: 10151 829 111 0 d69121ee529fb8cb3643d711ec0f2158
cpath: /branches/S2_6/common/connection.c
copyroot: 27474 /branches/S2_6

id: uo.5qi.r29185/48548
type: file
pred: uo.5qi.r27800/3589
count: 70
text: 29185 42666 29 12492 fb70e18cecfd57b42ca9380e0972a45c
props: 10151 1179 111 0 14533b38c2d22fb145a05b253c8fb2e8
cpath: /branches/S2_6/common/connection.h
copyroot: 27474 /branches/S2_6

id: 15r.5qi.r29185/48809
type: file
pred: 15r.5ck.r27027/2551
count: 54
text: 29185 2438 32 29970 3a43ea72ad77c4fc4b3432092b2c0f7e
props: 10806 11936 111 0 227f1557f5d66bc46d32e4db301b2671
cpath: /branches/S2_6/common/dataio.c
copyroot: 27474 /branches/S2_6

PLAIN
K 11
Makefile.am
V 24
file 5h.5ck.r25801/35234
K 14
achievements.c
V 25
file qhc.5qi.r28854/18023
K 14
achievements.h
V 26
file qhe.5ck.r26905/215849
K 9
actions.c
V 23
file r7a.5qi.r29177/254
K 9
actions.h
V 23
file r7c.5qi.r29045/631
K 4
ai.c
V 23
file 4go.5qi.r29098/627
K 4
ai.h
V 25
file 4gp.5qi.r28013/46427
K 6
aicore
V 23
dir 18t.5qi.r28924/2260
K 6
base.c
V 25
file 3jw.5qi.r28854/18549
K 6
base.h
V 25
file 3jx.5qi.r28691/75221
K 9
borders.c
V 25
file 4f0.5qi.r28854/19065
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.5qi.r28927/25399
K 6
city.h
V 24
file 3q.5qi.r28927/25656
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.5qi.r29185/48289
K 12
connection.h
V 24
file uo.5qi.r29185/48548
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.5qi.r29185/48809
K 8
dataio.h
V 24
file 15s.5ck.r26834/4081
K 11
diptreaty.c
V 23
file 3r.5qi.r27518/9475
K 11
diptreaty.h
V 23
file 3s.5qi.r27518/9734
K 10
disaster.c
V 26
file b2m.5ck.r26905/214973
K 10
disaster.h
V 26
file b2o.5ck.r26905/216145
K 9
effects.c
V 25
file 2eo.5qi.r29118/54758
K 9
effects.h
V 24
file 2ep.5qi.r29180/3668
K 8
events.c
V 24
file 33h.5qi.r28399/2883
K 8
events.h
V 23
file 3t.5qi.r28399/3138
K 8
extras.c
V 25
file o9u.5qi.r28854/18290
K 8
extras.h
V 25
file o9w.5qi.r28691/75478
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 23
file 4up.5qi.r28873/345
K 14
fc_interface.h
V 25
file 4uq.5qi.r28204/10610
K 10
fc_types.h
V 23
file 2ll.5qi.r29136/102
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 23
file 3u.5qi.r28695/8772
K 6
game.h
V 23
file 3v.5qi.r29110/6114
K 19
generate_packets.py
V 25
file 2f4.5ck.r27339/27191
K 12
government.c
V 25
file he.5ck.r25382/101248
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.5qi.r28819/92105
K 13
improvement.h
V 23
file vc.5ck.r26605/3666
K 5
map.c
V 22
file r.5qi.r27606/1159
K 5
map.h
V 24
file 41.5qi.r28854/19324
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.5qi.r28781/39576
K 15
metaknowledge.h
V 26
file sis.5ck.r26905/206455
K 10
movement.c
V 25
file 2xv.5qi.r27978/10772
K 10
movement.h
V 25
file 2xw.5ck.r26369/89711
K 13
multipliers.c
V 26
file 197b.5qi.r29058/37897
K 13
multipliers.h
V 26
file 197d.5qi.r29118/55021
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.5qi.r28613/342
K 11
packets.def
V 25
file 2f5.5qi.r29118/55288
K 9
packets.h
V 24
file 44.5qi.r28854/17506
K 8
player.c
V 24
file 45.5qi.r29138/19885
K 8
player.h
V 24
file 46.5qi.r29138/20145
K 14
requirements.c
V 24
file 2wq.5qi.r29021/4118
K 14
requirements.h
V 23
file 2wr.5qi.r27695/463
K 10
research.c
V 25
file 4ro.5qi.r27900/33355
K 10
research.h
V 23
file 4rp.5qi.r27751/838
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.5qi.r28854/18806
K 6
road.h
V 25
file 6pr.5qi.r27880/13889
K 10
scriptcore
V 24
dir 75a.5qi.r28854/16989
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.r26905/204398
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.5qi.r28736/47998
K 6
tech.h
V 23
file u.5qi.r28788/21572
K 9
terrain.c
V 23
file 2fp.5qi.r28914/744
K 9
terrain.h
V 24
file qs.5qi.r27880/14146
K 6
tile.c
V 25
file 2ys.5qi.r28854/17251
K 6
tile.h
V 25
file 2yt.5ck.r26109/28279
K 13
traderoutes.c
V 25
file bf8.5qi.r27552/33422
K 13
traderoutes.h
V 25
file bfa.5qi.r27552/33689
K 8
traits.h
V 26
file 7k3.5ck.r26905/202065
K 6
unit.c
V 21
file v.5qi.r28793/485
K 6
unit.h
V 24
file 48.5qi.r28013/44195
K 10
unitlist.c
V 25
file 39m.5qi.r27612/25885
K 10
unitlist.h
V 25
file 39n.5qi.r27612/26147
K 10
unittype.c
V 22
file v9.5qi.r29094/149
K 10
unittype.h
V 23
file va.5qi.r29076/2652
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.5qi.r27639/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.5qi.r28927/25134
K 10
worklist.c
V 22
file o8.5qi.r28027/169
K 10
worklist.h
V 24
file o9.5ck.r18858/98299
END
ENDREP
id: p.5qi.r29185/54361
type: dir
pred: p.5qi.r29180/9219
count: 4224
text: 29185 49068 5280 0 1692fe0256d312bfd4ebdb99ce64c2c2
props: 23743 0 112 0 b2bc91bf125d83375389d51f25ff2c2f
cpath: /branches/S2_6/common
copyroot: 27474 /branches/S2_6

id: 149.5qi.r29185/54603
type: file
pred: 149.5qi.r29108/14857
count: 470
text: 29185 42835 115 51748 a2c5cd9fc33eebe9bf197685fe3b0dd9
props: 10922 613 112 0 391fbfe6c7602972dbce1584a6808d2a
cpath: /branches/S2_6/configure.ac
copyroot: 27474 /branches/S2_6

id: 1ht0.5qi.r29185/54861
type: file
pred: 1ht0.5qi.r29108/15110
count: 9
text: 29185 2111 75 2176 ecff9ed4318a6d54db23249cc3e79aa6
cpath: /branches/S2_6/gen_headers/freeciv_config.h.in
copyroot: 27474 /branches/S2_6

PLAIN
K 11
Makefile.am
V 25
file 1hsy.5ck.r27204/2485
K 19
freeciv_config.h.in
V 26
file 1ht0.5qi.r29185/54861
END
ENDREP
id: 1hsw.5qi.r29185/55201
type: dir
pred: 1hsw.5qi.r29108/15450
count: 9
text: 29185 55079 109 0 f24f535af492007739a857d5bed15725
cpath: /branches/S2_6/gen_headers
copyroot: 27474 /branches/S2_6

id: 15.5qi.r29185/55397
type: file
pred: 15.5qi.r28320/51
count: 254
text: 29185 2214 32 48766 0192805b7e7d4405d0238be089702164
props: 10956 5264 112 0 3b4f53580729e091747f5670a0f86c52
cpath: /branches/S2_6/server/sernet.c
copyroot: 27474 /branches/S2_6

id: vg.5qi.r29185/55652
type: file
pred: vg.5qi.r29160/447
count: 691
text: 29185 0 54 106446 09bc976b174dcbce5e4404b1e9f5663b
props: 11057 12128 112 0 85dbe778568e34751643d476c23a0d7c
cpath: /branches/S2_6/server/srv_main.c
copyroot: 27474 /branches/S2_6

PLAIN
K 11
Makefile.am
V 24
file 5q.5qi.r28430/14363
K 13
actiontools.c
V 24
file 1p8q.5qi.r28978/156
K 13
actiontools.h
V 26
file 1p8t.5qi.r28430/14182
K 8
advisors
V 24
dir 4n2.5qi.r29015/10566
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 22
file lw.5qi.r28606/418
K 11
barbarian.h
V 22
file lx.5qi.r28606/673
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 24
file 10.5ck.r19573/66885
K 10
cityhand.h
V 23
file 4f.0.r13297/423686
K 11
citytools.c
V 23
file 4g.5qi.r29015/8449
K 11
citytools.h
V 23
file 4h.5qi.r29015/8710
K 10
cityturn.c
V 23
file 4i.5qi.r29085/6694
K 10
cityturn.h
V 24
file 4j.5ck.r24742/16670
K 11
civserver.c
V 24
file 4k.5qi.r28076/13954
K 10
commands.c
V 24
file 2ly.5qi.r27913/1890
K 10
commands.h
V 25
file 2lz.5qi.r28013/36715
K 13
connecthand.c
V 25
file 2dw.5qi.r28922/21106
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.5qi.r28630/83
K 10
diplhand.h
V 23
file 4n.5qi.r27518/5128
K 11
diplomats.c
V 24
file vz.5qi.r29180/12101
K 11
diplomats.h
V 23
file w0.5ck.r27461/1674
K 10
edithand.c
V 25
file 3bk.5qi.r27612/42316
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.5qi.r28864/2289
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.5qi.r28913/54846
K 9
maphand.h
V 23
file 14.5ck.r24759/3742
K 6
meta.c
V 24
file 4s.5qi.r28854/10237
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.5qi.r29138/25938
K 9
plrhand.h
V 25
file 4v.5qi.r28711/185683
K 8
report.c
V 23
file vi.5qi.r28695/4324
K 8
report.h
V 24
file vj.5ck.r24891/20006
K 10
rssanity.c
V 24
file hew.5qi.r28622/1393
K 10
rssanity.h
V 25
file hey.5ck.r26905/55500
K 9
ruleset.c
V 22
file 8w.5qi.r29182/281
K 9
ruleset.h
V 22
file 8x.5qi.r27725/899
K 13
sanitycheck.c
V 22
file wi.5ck.r27281/872
K 13
sanitycheck.h
V 24
file wj.5qi.r28076/13693
K 12
savecompat.c
V 24
file qva.5qi.r28860/5746
K 12
savecompat.h
V 24
file qvc.5qi.r29062/7592
K 10
savegame.c
V 24
file vl.5qi.r29108/15647
K 10
savegame.h
V 24
file vm.5ck.r20758/19233
K 11
savegame2.c
V 23
file 4m0.5qi.r29164/594
K 11
savegame2.h
V 25
file 4m1.5ck.r26905/58971
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.5qi.r28468/1251
K 8
sernet.c
V 24
file 15.5qi.r29185/55397
K 8
sernet.h
V 23
file 4y.5ck.r23685/5129
K 10
settings.c
V 23
file 2m0.5qi.r29147/179
K 10
settings.h
V 24
file 2m1.5qi.r28748/6857
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 24
file 15t.5rh.r28854/9971
K 9
srv_log.h
V 25
file 15u.5ri.r28013/36974
K 10
srv_main.c
V 24
file vg.5qi.r29185/55652
K 10
srv_main.h
V 24
file vh.5qi.r28922/22418
K 11
stdinhand.c
V 22
file 4z.5qi.r29114/431
K 11
stdinhand.h
V 24
file 50.5ck.r26100/15471
K 11
techtools.c
V 23
file 33n.5qi.r28732/145
K 11
techtools.h
V 24
file 33o.5ck.r27058/2134
K 10
unithand.c
V 21
file 18.5qi.r29154/71
K 10
unithand.h
V 24
file 19.5ck.r23027/66151
K 11
unittools.c
V 23
file 1a.5qi.r29101/2005
K 11
unittools.h
V 24
file 1b.5qi.r28379/11657
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.5qi.r29185/59858
type: dir
pred: z.5qi.r29182/4478
count: 5954
text: 29185 55909 3936 0 6ad8cb2d6d9376f177174dd614ea3f87
props: 23990 448 166 0 e5026e1cb18fe57b41417951bfac7b19
cpath: /branches/S2_6/server
copyroot: 27474 /branches/S2_6

id: 4pl.5qp.r29185/60102
type: file
pred: 4pl.5qp.r28956/1090
count: 36
text: 29185 2385 29 12980 f61cd82675e527458993bd7ccb6d6c03
props: 26905 35846 34 0 25e6c2f7558b7484000d4d090dea5b92
cpath: /branches/S2_6/tools/download.c
copyroot: 21464 /trunk/tools

PLAIN
K 11
Makefile.am
V 24
file 4pk.5js.r25961/6125
K 11
civmanual.c
V 24
file 2m5.5rg.r28748/4959
K 10
download.c
V 25
file 4pl.5qp.r29185/60102
K 10
download.h
V 25
file 4pm.5js.r26905/37103
K 9
modinst.c
V 25
file bj7.5qp.r28204/16421
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.5se.r28996/995
K 12
mpgui_gtk3.c
V 24
file 4pn.5sf.r28996/1263
K 12
mpgui_qt.cpp
V 24
file a65.5qp.r29029/1206
K 10
mpgui_qt.h
V 24
file a67.5qp.r28931/1830
K 19
mpgui_qt_worker.cpp
V 23
file vuz.5qp.r27626/465
K 17
mpgui_qt_worker.h
V 25
file vv1.5js.r26905/38877
K 7
ruledit
V 24
dir ssm.5qp.r29110/13991
END
ENDREP
id: 4pj.5qp.r29185/61214
type: dir
pred: 4pj.5qp.r29110/15101
count: 273
text: 29185 60359 842 0 433da7fe91da291de0a71d697e8f7dca
props: 28037 2821 325 0 931541cd07e52416301ed56de9c70dfc
cpath: /branches/S2_6/tools
copyroot: 21464 /trunk/tools

id: t7.5qi.r29185/61459
type: file
pred: t7.5ck.r26628/136
count: 37
text: 29185 42722 29 3897 9d4fc9a525dc7beaf09edeb4a4bcbae8
props: 8410 11615 111 0 5396249b3009eb64cd90e5da0b7a56fa
cpath: /branches/S2_6/utility/netintf.h
copyroot: 27474 /branches/S2_6

id: 55.5qi.r29185/61716
type: file
pred: 55.5qi.r28758/1050
count: 192
text: 29185 2496 40081 71089 a02452e1efad95a2c5099ba3d41de33d
props: 10717 469 112 0 62f136c4e8601b29898c811272b88b7d
cpath: /branches/S2_6/utility/shared.c
copyroot: 27474 /branches/S2_6

id: m9.5qi.r29185/61976
type: file
pred: m9.5qi.r29108/11274
count: 67
text: 29185 42776 32 35987 0fd36b4f58c43c067926fa821ada1361
props: 10006 230 111 0 b4233197920770c602c29330b7f7c623
cpath: /branches/S2_6/utility/support.c
copyroot: 27474 /branches/S2_6

id: ma.5qi.r29185/62235
type: file
pred: ma.5qi.r29108/11531
count: 48
text: 29185 79 1947 5526 5d0b7a9b422adf4dd6cafb1843cadb87
props: 7602 5819 111 0 df9f31216c5039327c376b7fe82756f5
cpath: /branches/S2_6/utility/support.h
copyroot: 27474 /branches/S2_6

PLAIN
K 11
Makefile.am
V 25
file 2gg.5ck.r26188/18425
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.5qi.r28013/32595
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.5qi.r28641/3128
K 10
fcthread.c
V 24
file 6hv.5ck.r27333/1127
K 10
fcthread.h
V 23
file 6hw.5ck.r27333/886
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.5qi.r29108/10493
K 5
ioz.h
V 24
file ui.5qi.r29108/10744
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 21
file 53.5ck.r24492/53
K 5
log.h
V 23
file 54.5qi.r28076/7197
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 22
file t6.5qi.r27904/160
K 9
netintf.h
V 24
file t7.5qi.r29185/61459
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.5si.r29108/10994
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.r26905/42907
K 8
shared.c
V 24
file 55.5qi.r29185/61716
K 8
shared.h
V 23
file 1d.5qi.r28758/1307
K 10
spechash.h
V 25
file 57x.5ck.r26905/46987
K 10
speclist.h
V 24
file gb.5qi.r28013/32335
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.5qi.r29185/61976
K 9
support.h
V 24
file ma.5qi.r29185/62235
K 8
timing.c
V 24
file el.5ck.r24200/17365
K 8
timing.h
V 24
file em.5qi.r28013/32859
END
ENDREP
id: 1c.5qi.r29185/65318
type: dir
pred: 1c.5qi.r29108/14609
count: 900
text: 29185 62492 2813 0 b9416bc847ecc7686000f36a58e1afcc
props: 17175 331 84 0 5447a85ba28edec0d4a8f6120070e2b2
cpath: /branches/S2_6/utility
copyroot: 27474 /branches/S2_6

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 23
file 6.5qi.r29069/19127
K 11
Makefile.am
V 23
file 59.5qi.r29105/3150
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.5qi.r29180/3430
K 10
autogen.sh
V 24
file 12o.5ck.r25794/4003
K 9
bootstrap
V 23
dir 2p5.5qi.r28598/3780
K 6
client
V 22
dir d.5qi.r29185/48043
K 6
common
V 22
dir p.5qi.r29185/54361
K 12
configure.ac
V 25
file 149.5qi.r29185/54603
K 4
data
V 21
dir w.5qi.r29167/4017
K 12
dependencies
V 23
dir 2yu.5qi.r28830/5992
K 3
doc
V 23
dir k7.5qi.r29180/11606
K 10
fc_version
V 25
file 2lo.5qj.r29180/11847
K 11
gen_headers
V 25
dir 1hsw.5qi.r29185/55201
K 2
m4
V 23
dir 12p.5qi.r29105/5906
K 7
scripts
V 23
dir 2yo.5qi.r28717/5437
K 6
server
V 22
dir z.5qi.r29185/59858
K 5
tests
V 22
dir 2g9.5ck.r27023/734
K 5
tools
V 24
dir 4pj.5qp.r29185/61214
K 12
translations
V 22
dir t0a.5qi.r28956/840
K 7
utility
V 23
dir 1c.5qi.r29185/65318
K 3
vms
V 25
dir u9.5ck.r21528/1396085
K 5
win32
V 23
dir 2eu.5qi.r28346/1712
END
ENDREP
id: 3.5qi.r29185/66737
type: dir
pred: 3.5qi.r29182/5890
count: 19485
text: 29185 65564 1160 0 3506d727a134d1a711764a2e4b91642d
props: 28037 14463 292 0 9e1d5de0253c723466868990c52c129f
cpath: /branches/S2_6
copyroot: 27474 /branches/S2_6

PLAIN
K 5
S1_14
V 21
dir 3.21.r18109/18803
K 4
S2_0
V 21
dir 3.10x.r21862/4178
K 4
S2_1
V 22
dir 3.59e.r20026/11014
K 4
S2_2
V 21
dir 3.5cy.r21861/5036
K 4
S2_3
V 21
dir 3.5f2.r24391/5183
K 4
S2_4
V 22
dir 3.5ii.r29143/15492
K 4
S2_5
V 21
dir 3.5kv.r29183/5733
K 4
S2_6
V 22
dir 3.5qi.r29185/66737
K 11
freeciv-web
V 22
dir 3.5bl.r13594/14918
END
ENDREP
id: 1.0.r29185/67331
type: dir
pred: 1.0.r29183/6324
count: 9431
text: 29185 66977 341 0 d2fd3b4283e4a1962fd6c37afe4086aa
cpath: /branches
copyroot: 0 /

PLAIN
K 8
branches
V 20
dir 1.0.r29185/67331
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.r29185/67652
type: dir
pred: 0.0.r29184/70118
count: 29185
text: 29185 67485 154 0 9c40b331ebbd509680d41475769ddc22
cpath: /
copyroot: 0 /

hc.5qi.t29184-1 modify true false /branches/S2_6/client/clinet.c

2fw.5qi.t29184-1 modify true false /branches/S2_6/client/connectdlg_common.c

33x.5qi.t29184-1 modify true false /branches/S2_6/client/servers.c

un.5qi.t29184-1 modify true false /branches/S2_6/common/connection.c

uo.5qi.t29184-1 modify true false /branches/S2_6/common/connection.h

15r.5qi.t29184-1 modify true false /branches/S2_6/common/dataio.c

149.5qi.t29184-1 modify true false /branches/S2_6/configure.ac

1ht0.5qi.t29184-1 modify true false /branches/S2_6/gen_headers/freeciv_config.h.in

15.5qi.t29184-1 modify true false /branches/S2_6/server/sernet.c

vg.5qi.t29184-1 modify true false /branches/S2_6/server/srv_main.c

4pl.5qp.t29184-1 modify true false /branches/S2_6/tools/download.c

t7.5qi.t29184-1 modify true false /branches/S2_6/utility/netintf.h

55.5qi.t29184-1 modify true false /branches/S2_6/utility/shared.c

m9.5qi.t29184-1 modify true false /branches/S2_6/utility/support.c

ma.5qi.t29184-1 modify true false /branches/S2_6/utility/support.h


67652 67800
