DELTA 19329 347 470
SVN  ‚é|‚ëG‚4 ©c €‚4 ‚¿0ªL) {
    if (!is_valid_alliance(p1, p2)) {
      /* Our war with a third party prevents entry to alliance. */
      return DIPL_ALLIANCE_PROBLEM_US;
    } else if (!is_valid_alliance(p2, p1)) {
      /* Their war with a third party prevents entry to alliance. */
      return DIPL_ALLIANCE_PROBLEM_THEM;
    }ENDREP
DELTA 15755 102645 8211
SVN  åVð'#­ …c €o ‚7† “ ‡cˆU eu€ƒz ‚S‘W€‚V „]–_… ƒ,›Q€ OŸr€- G  ƒA£6€D ƒw§ n¬€C s®+€p k¸m€Q `½o€‰p RÀ2€1 bÁ> nÂl€) pÄt€‚M „ÆX€ƒ# ‚ÌWŒ ‚ÏK€ ‰_Òt€‹Q 0â3 nãh/* utility */
#include "bitvector.h"

/* common */
#include "city.h"
#include "connection.h"
#include "fc_typesstruct player_slot;#define SPECENUM_NAME player_status
/* 'normal' status */
#define SPECENUM_VALUE0      PSTATUS_NORMAL
/* set once the player is in the process of dying */
#define SPECENUM_VALUE1      PSTATUS_DYING
/* this player is winner in scenario game */
#define SPECENUM_VALUE2      PSTATUS_WINNER
/* has indicated willingness to surrender */
#define SPECENUM_VALUE3      PSTATUS_SURRENDER
/* keep this last */
#define SPECENUM_COUNT       PSTATUS_COUNT
#include "specenum_gen.h"

BV_DEFINE(bv_pstatus, PSTATUS_COUNT)units_built;      /* Number of units this player produced. */
  int units_killed;     /* Number of enemy units killed. */
  int units_lost;       /* Number of own units that died,
                         * by combat or otherwise. */
  int game;             /* Total score you get in player dialog. */
};

struct player_ai {
  int maxbuycost;_SLOT
  DIPL_ALLIANCE_PROBLEM_US, DIPL_ALLIANCE_PROBLEM_THEM
};

/* the following are for "pacts" */
struct player_diplstate {
  enum diplstate_type type;  /* until pact (e.g., cease-fire) ends */
  int has_reason_to_cancel; /* 0: no, 1: this turn, 2: this or next turn */
  int contact_turns_left; /* until contact ends */
};

ai_type;
struct ai_data;

struct player {
  struct player_slot *slotv_player real_embassy;
  const struct player_diplstate **diplstates
  bool ai_controlled; /* 0: not automated; 1: automated */
  struct player_ai ai_common;
  struct ai_type *ai;
bv_player gives_shared_vision;       /* bitvector those that give you
                                        * shared vision */
  int wonders[B_LAST];              /* contains city id's or WONDER_NOT_BUILT */
  struct dbv tile_known;

  union {
    struct {
      /* Only used in the server (./ai/ and ./server/). */
      bv_pstatus status;

      bool capital; /* used to give player init_buildings in first city. */

      struct player_tile *private_map;

      bv_player really_gives_vision; /* takes into account that p3 may see
                                      * what p1 has via p2 */

      bv_debug debug;

      struct ai_data *aidata;
    } server;

    struct {
      /* Only used at the client (the server is omniscient; ./client/). */

      /* Corresponds to the result of
         (player:server:private_map[tile_index]:seen_count[vlayer] != 0). */
      struct dbv tile_vision[V_COUNT];
    } client;
  };
};

/* Initialization and iteration */
void player_slots_init(void);
bool player_slots_initialised(void);
void player_slots_free(void);

struct player_slot *player_slot_first(void);
struct player_slot *player_slot_next(struct player_slot *pslot);

/* A player slot contains a possibly uninitialized player. */
int player_slot_count(void);
int player_slot_index(const struct player_slot *pslot);
struct player *player_slot_get_player(const struct player_slot *pslot);
bool player_slot_is_used(const struct player_slot *pslot);
struct player_slotstruct player *player_new(struct player_slot *pslot);
void player_clear(struct player *pplayer, bool full);
void player_destroy(struct player *pplayer);

int player_count(void);struct player *player_by_name(const char *name);
struct player *player_by_name_prefix(const char *name,
                                     enum m_pre_result *result);
struct player *
bool player_has_embassy(const struct player *pplayer,
                        const struct player *pplayer2);
bool player_has_real_embassy(const struct player *pplayer,
                             const struct player *pplayer2);
bool player_has_embassy_from_effect(const struct player *pplayer,
                                    bool player_can_invade_tile(const struct player *pplayer,
                            const struct tile *ptile);

struct city *player_city_by_number(const struct player *pplayer,
                                   int city_id);
struct unit *player_unit_by_number(const struct player *pplayer,
                                    int unit_id);

bool player_in_city_map(const struct player *pplayer,
                     city *playerstruct player_diplstate *player_diplstate_get(const struct player *plr1,
                                              const struct player *pl/* iterate over all player slots */
#define player_slots_iterate(_pslot)                                        \
  if (player_slots_initialised()) {                                         \
    struct player_slot *_pslot = player_slot_first();                       \
    for (; NULL != _pslot; _pslot = player_slot_next(_pslot)) {
#define player_slots_iterate_end                                            \
    }                                                                       \
  }

/* iterate over all players, which are used at the moment */
#define players_iterate(_pplayer)                                           \
  player_slots_iterate(_pslot) {                                            \
    if (!player_slot_is_used(_pslot)) {                                     \
      continue;                                                             \
    }                                                                       \
    struct player *_pplayer = player_slot_get_player(_pslot);
#define players_iterate_end                                                 \
  } player_slots_iterate_end;

/* get 'struct player_list' and related functions: */
#define SPECLIST_TAG player
#define SPECLIST_TYPE struct player
#include "speclist.h"

#define player_list_iterate(playerlist, pplayer)                            \
  TYPED_LIST_ITERATE(struct player, playerlist, pplayer)
#define player_list_iterate_end                                             \
  LIST_ITERATE_ENDENDREP
DELTA 19576 95879 391
SVN  ðpó,; ¾a  LÖx /¿9½ LÖx€o °IÀ'_US) {
         else if (diplcheck == DIPL_ALLIANCE_PROBLEM_THEM) {
                _("You cannot form an alliance because %s is "
                            "at war with an ally of yourENDREP
DELTA 18582 742 501
SVN   e©n ˆ/ „! €‚: ›7… G €d L›@³ TÌ4€„^enum dipl_reason allied_players_can_be_allied =
          pplayer_can_make_treaty(pplayer, pplayer2, DS_ALLIANCE);
        SANITY_CHECK(allied_players_can_be_allied
                     != DIPL_ALLIANCE_PROBLEM_US);
        SANITY_CHECK(allied_players_can_be_allied
                     != DIPL_ALLIANCE_PROBLEM_TH*******
  Verify that the tile has sane values. This should be called after the
  terrain is changed***/
void real_sanity_check_tile(struct tile *ptileSANITY_CHECK(ptile != NULL);
  SANITY_CHECK(ptile->terrain != NULL);

  unit_list_iterate(ptile->units, punit) {
    /* Check if the units can survive on the tile (terrain). Here only the
     * 'easy' test if the unit is transported is done. A complete check is
     * done by check_units() in real_sanity_check(). */
    if (!can_unit_exist_at_tile(punit, ptile)
        && punit->transported_by != -1) {
      SANITY_("(%4d,%4d) %s can't survive on %s", TILE_XY(ptile),
              unit_rule_name(punit), tile_get_info_text(ptile, 0));
    }
  } unit_list_iterate_end;
}

#endif /* SANITY_CHECKING */
ENDREP
DELTA 19558 0 10909
SVN  †  †    †   †  †  †  … …÷t €… ¢p…û]) {
          enum dipl_reason can_ally = pplayer_can_make_treaty(plr, aplayer,
                                                              DS_ALLIANCE);
          if (can_ally == DIPL_ALLIANCE_PROBLEM_US
              || can_ally == DIPL_ALLIANCE_PROBLEM_THEM) {
            log_error("Illegal alliance structure detected: "
                      "%s alliance to %s reduced to peace treaty.",
                      nation_rule_name(nation_of_player(plr)),
                      nation_rule_name(nation_of_player(aplayer)));
            player_diplstate_get(plr, aplayer)->type = DS_PEACE;
            player_diplstate_get(aplayer, plr)->type = DS_PEACE;
          }ŒÀ „}†03€3 „} 

    ai_data_phase_init(pplayer, FALSE);
    building_advisor(pplayer);
    ai_data_phase_done(pplayer);

    pplayer->ai_controlled = saved_ai_control;
  } players_iterate_end;
ENDREP
DELTA 17565 719 53669
SVN  †  †  „Ía …w €ˆ X‰w€ƒG z.µ ‚X Š’^€<  j€i ¢5ˆ ƒM£B€N § › Ë%¨5 §1ô6 • ;ƒ I²@ ƒ³‡ ¶‡ x·§ „#¸+€p Â “ T„ÿ  ÈÏr‹ Áb‚˜ –‚Ùy )‚ð ŸH‚ý4 ‰>ƒ žƒ¦D€Y h„º Š Eé@… RÞ  ¡^ƒÇ>„ …:ƒéŠ £ ƒî]„ Z„’o€@ „’o„ „”„ Ÿ@„•€„z T„ÿ ‘ N‚÷@ž q„ª=« ‰@„·cº Z„· €Y …(„Â"€e ‡3„È€B Œa„Ï{ ŒM„Þ5€f „]„ê~€~ ¢S„ïW€B V„·  `…“4€†q K„à=€† 0…¡'€d T„ÿ œ N‚÷@€ [„· €ŠI U‚í@ a…í@ K…µ€m ƒG…¶d€@ ƒ>…º_ ƒ…¾/ „ …ÁG€9 ]…Üz ‰…Èt S„Û €\ †*…Ò7 ƒR…Øx PƒÉ €~ ‡&…ÜC€R …8…ãd€‚
 “…êM€J Z†Œ*„ 6†Ž€@ ‚7†G „
†’€l q†–c€ˆL ‚|†ƒn± introduced with
  2.3.0. It is defined by the mandatory option '+version2'. The main load
  function checks if this option is present. If not, the old (pre-2.3.0)
  loading routines are used. With regard to creating a savegame, the server
  option 'saveversion' defines the format (version) of the savegame.
  The version is also saved in the settings section of the savefile, as an
  integer (savefile.version). The integer is used to determine the version
  of the savefile.
  
  For each savefile format after 2.3.0, compatibility functions are defined
  which translate secfile structures between that version and the next
  older version; all necessary compat functions are called in order to
  translate between the file and current version. See sg_load_compat() and
  sg_save_compat().
 
  The integer version ID should be increased every time the format is changed.
  If the change is not backwards compatible, please state the changes in the
  following list and update the compat functions at the end of this file.

  - wfreeciv | what                                           | date       | id
  --------+------------------------------------------------+------------+----
  current | (mapped to current savegame format)            | ----/--/-- |  0
          | first version (svn17538)                       | 2010/07/05 |  -
  2.3.0   | 2.3.0 release                                  | 2010/11/?? |  3
          |                                                |           s the savegame version or the setting of 'saveversion*/

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <ctype.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/* utility */
#include "bitvector.h"
#include "support.h"            /* bool type */
#include "timing.h"

/* common */
#include "bitvector.h"researchadvisors */
#include "advdata.h"
#include "advbuilding.h"
#include "infracacheunit.h"
#include "defaultai->
verboseverbosedebug("Loading secfile in %.3f seconds./* freeciv 2.2.99 or newer */
  log_verbose("saving game in new format ...");
  savegame2_save_real(file, save_reason, scenario, game.server.saveversion);

#ifdef DEBUG
  stop_timer(savetimer);
  log_debug("Creating secfile in %.3f seconds.  game_reset();
  }1 == parsedreplace_str(saving->file, saving->secfile_options,
                      "savefile.optiontatus.
 * == */"%s"game.info."%s"k,
                                      "random.index_K"), "%s""%s""%s"
    sg_failure_ret(loading->server_state == S_S_INITIAL
                   || (loading->server_state == S_S_RUNNING
                       && game.scenario.players == TRUE),
                   "Invalid scenario definition (server state '%s' and "
                   "players are %s).",
                   server_states_name(loading->server_state),
                   game.scenario.players ? "saved" : "not saved");
  } else {
    game.scenario.is_scenario = FALSE;
  }

  if (game.scenario.is_scenario) {
    /* Remove all defined players. They are recreated with the skill level
     * defined by the scenario. */
    aifill(0);
  }Save '[scenario]'/
static void sg_save_scenarioif (!saving->scenario && !game.scenario.is_enum map_generator real_generator = map.server.generator;
saving->scenario) {
    map.server.generator = MAPGEN_SCENARIO; /* We want a scenario. */
  }
  settings_game_save(saving->file, "settings");
  /* Restore real map generator. */
  map.server.generator = real_generator
      && MAPGEN_SCENARIO == map.server.generator) {
    /* Generator MAPGEN_SCENARIO is used;
     *known(loading);
  sg_load_map_owner(loading);
  sg_load_map_workedif (game.info.is_new_game) {
    /* No bases information for a new game / scenario. */
    return;
  }if (saving->scenario && !saving->save_players) {
    /* Nothing to do for a scenario without saved players. */
    return;
  }struct nation_type *pnation;
  struct startpos *psp;
  struct tile *ptile;
  const char SEPARATOR = '#';
  const char *nation_names;
  int nat_x, nat_y;
  bool exclude;
  int i, startpos_count;
0 == startpos_count) {
    /* Nothing to do. */
    return;
  }

  for (i = 0; i < startpos_count; i++) {
    if (!secfile_lookup_int(loading->file, &nat_x, "map.startpos%d.x", i)
        || !secfile_lookup_int(loading->file, &nat_y,
                               "map.startpos%d.y", i)) {
      log_sg("Warning: Undefined coordinates for startpos %d", i);
      continue;
    }

    ptile = native_pos_to_tile(nat_x, nat_y);
    if (NULL == ptile) {
      log_error("Start position native coordinates (%d, %d) do not exist "
                "in this map. Skipping...", nat_x, nat_y);
      continue;
    }

    if (!secfile_lookup_bool(loading->file, &exclude,
                                    "map.startpos%d.exclude", i)) {
      log_sg("Warning: Missing exclude info: %s", secfile_error());
      exclude = FALSE;
    }

    psp = map_startpos_new(ptile);

    nation_names"map.startpos%d.nations", i);
    if (NULL != nation_names && '\0' != nation_names[0]) {
      const size_t size = strlen(nation_names) + 1;
      char buf[size], *start, *end;

      memcpy(buf, nation_names, size);
      for (start = buf - 1; NULL != start; start = end) {
        start++;
        if ((end = strchr(start, SEPARATOR))) {
          *end = '\0';
        }

        pnation = nation_by_rule_name(start);
        if (NO_NATION_SELECTED != pnation) {
          if (exclude) {
            startpos_disallow(psp, pnation);
          } else {
            startpos_allow(psp, pnation);
          }
        } else {
          log_verbose("Missing nation \"%s\".", start);
        }
      }
    }
  }

  if (0 < map_startpos_count()
      && map_startpos_count()_startpos_count(), game.server.max_players);
    game.server.max_players = map_startpos_count();
  }Save the map start positions/
static void sg_save_map_startpos(struct savedata *saving)
{
  struct tile *ptile;
  const char SEPARATOR = '#';
  int i = 0;
game.server.save_options.save_starts) {
    return;
  }

  secfile_insert_int(saving->file, map_startpos_count(),
                     "map.startpos_count");

  map_startpos_iterate(psp) {
    ptile = startpos_tile(psp);

    secfile_insert_int(saving->file, ptile->nat_x, "map.startpos%d.x", i);
    secfile_insert_int(saving->file, ptile->nat_y, "map.startpos%d.y", i);
    secfile_insert_bool(saving->file, startpos_is_excluding(psp),
                        "map.startpos%d.exclude", i);
    if (startpos_allows_all(psp)) {
      secfile_insert_str(saving->file, "", "map.startpos%d.nations", i);
    } else {
      const struct nation_hash *nations = startpos_raw_nations(psp);
      char nation_names[MAX_LEN_NAME * nation_hash_size(nations)];

      nation_names[0] = '\0';
      nation_hash_iterate(nations, pnation) {
        if ('\0' == nation_names[0]) {
          fc_strlcpy(nation_names, nation_rule_name(pnation),
                     sizeof(nation_names));
        } else {
          cat_snprintf(nation_names, sizeof(nation_names),
                       "%c%s", SEPARATOR, nation_rule_name(pnation));
        }
      } nation_hash_iterate_end;
      secfile_insert_str(saving->file, nation_names,
                         "map.startpos%d.nations", i);
    }
    i++;
  } map_startpos_iterate_end;

  fc_assert(map_startpos_count() == i)if (game.info.is_new_game) {
    /* No owner/source information for a new game / scenario. */
    return;
  }"%s", secfile_error());
    sg_failure_ret(buffer2 != NULL, "%s"tr_to_int(token1tr_to_int(token2  if (saving->scenario && !saving->save_players) {
    /* Nothing to do for a scenario without saved players. */
    return;
  }

  /* Store owner and ownership source as plain numbers.sg_failure_ret(loading->worked_tiles == NULL,
                 "City worked map not loaded!"str_to_int(tokenif (saving->scenario && !saving->save_players) {
    /* Nothing to do for a scenario without saved players. */
    return;
  }players_iterate(pplayer) {
    /* Allocate player private map here; it is needed in different modules
     * besides this one ((i.e. sg_load_player_*()). */
    player_map_init(pplayer);
  } players_iterate_endplayers_iterate(pplayer) {
      dbv_clr_all(&pplayer->tile_known);
    } players_iterate_end;

    /* HACK: we read the known data from hex into a 32-bit integers, and
     * now we convert it to the known tile data of each player. */
    whole_map_iterate(ptile) {if (S_S_INITIAL == loading->server_state
      || game.info.is_new_game) {"%s"(unsigned long) strlen(string),
                 (unsigned long) =
          First remove all defined players. */
  players_iterate(pplayer) {
    server_remove_player(pplayer);
  } players_iterate_end;

  /* Now, load the players from the savefile. */
  player_slots_iterate(pslot) {
    struct player *pplayer;
slot_index(pslot))) {
      continue;
    }

    /* create player */
    pplayer = server_create_player(player_slot_index(pslot));
    server_player_init(pplayer, FALSE, FALSE);
  } player_slots_iterate_end;

  /* check number of players */
  nplayers = secfile_lookup_int_default(loading->file, 0, "players.nplayers");
  sg_failure_ret(player_count() == nplayers, "The value of players.nplayers "
                 "(%d) from the loaded game does not match the number of "
                 "players present (%d).", nplayers, player_count());

  /* Load team informations. */
  players_iterate(pplayer) {
    int team;
    struct team_slot *tslot = NULL;

    sg_failure_ret(secfile_lookup_int(loading->file, &team,
                                      "player%d.team_no",
                                      player_number(pplayer))
                   && (tslot = team_slot_by_number(team)),
                   "Invalid team definition for player %s (nb %d).",
                   player_name(pplayer), player_number(pplayer));
    team_add_player(pplayer, team_new(tslot));
  } players_iterate_end;layer list. */
    for (i = 0; i < player_slot_co†  …ó†ŠŠó€„/ _ä=Š \…Ó r…Ôo€- 4 €‚p ˆ3€‚
 FŠ:€‚0 „f" ‹`—€‚ Œ8£\€L ‚±´ ƒl³Q )·B ‚c¸p ƒ»X€a WÁ|… TÂR€E Ä&€\ ^Æ,– [É?£ \È<„ É+– [É? ‚^Ë;€‚F cÖ~© Uƒ<¢ Ò~ eÖ|ª fÖ{ Öm— iÖ|¯ hÖ} uÚ?€ $Ý-€_ ƒß.© „Bâc… Uéx Tçy… Uéx€] 5éx… Uéx€c wì^¾ ƒGî… uó7€o _ó7… „õ„ 3ú€@ ‚1ûT +þ¬ XÉ?¸ XÉ?· XÉ? ‚ÿ9€ \‚4… Q…;€a '…;… Q…; P‡2… Q…;€a Q…; \‰~… Q…; `‹*… Q…;€e {9„ „MŽ2… ƒ5’~ W×  †B—3– ƒHžŠ g¡b€r  ¢u€[ ]¤n„ o¥^€g s§R„ ‚p¨X€5 g¬x† c­h† m®T€q w±;† u²;† {³9† ´=† qµ^† „L¶S“ F»2€ 	¾“ 3¿.“ SÀt“ #ÁZ€_ †Ã\€‚Y ÉP• &Ù‚ gÚ;€l ‹SÜW€I jè=„ Xƒ„<§ …ê„ ‚nï/„ ‚ò„ ‚5ô/„ 9öb„ Iƒ„< oøb„ …JùO„ ƒÿ„ ƒ8‚ƒ„ Œh‚†J ‚‚“_„ <‚•x€A %„éh ‚˜h W„ì5 Ž?‚še †‚©%‰ ‚¯:‰ ‚°`‰ e‚±w‰ ‚³l‰ ‚µ€u ˆ‚·	· Ÿ`‚¿€v ƒW‚ß‰ ‚ây‰ j‚ä%‰ 6‚å‰ h‚æe‰ i‚ç]‰ „‚èV 
‚ìx… ƒ`‚î ƒQ‚ñf 	‚õ<µ ƒ‚C„ Mƒ„<² {ƒ„<„ ‚Xƒ…5„ Iƒ„<€k Iƒ„<€d Hƒ„<• Yƒ‹9… „@ƒŒ mƒV †cƒ‘H€j ‡ƒ˜'€‚N Nƒ>€ƒf W‚;œ …0ƒŸ;… *ƒ¤j… ƒhƒ¦€m [ƒªv€g ‚ƒ¬F„ Iƒ„< \ƒ¯*… £1ƒ°³ …ƒÓT‡ ‚|ƒØf€ƒ+ ‰ƒÛA‰ _ƒäc€S ^ƒç*„ ”Hƒö|„ *„‹B… ¤„Œk· Pƒ>¤ X‚ì €6 „³€‚# 6„¶	 [„Ã@ E„Ä€„' …Z„Ê  „Ðe„ Wƒ„< I„Þ:„ ‚Q„ß„ ‚M„áP„ ‚2„ä„ T„æK„ <‚•x€A ‚=„éh ¨A„ì5 ‚…•/€‚ ‰…—)€U „K… @€n …¥ ‡e…¦€‚ ‚E…°5€\ ‡…´g€7 Yä> „O…½7€I M…Ù8€†B l…Ú1€ƒL R‚é? }…à{€ U‚é< „E…ä-€†s „b…ê:€…X3…òkunt(); i++) {
      shuffled_players[i]
        = secfile_lookup_int_default(loading->file, i,
                                     "players.shuffled_player_%d", i);
      sg_failure_ret(!shuffled_player_set[shuffled_players[i]],
                     "Player shuffle %d used two times",
                     shuffled_players[i]);
      shuffled_player_set[shuffled_players[i]] = TRUE;
    }
    set_shuffled_players(shuffled_players);
  } else {
    /* No shuffled players included, so shuffle them (this may include
     * scenarios). */
    shuffle_players('[player]'sg_load_playersif (game.info.is_new_game) {
    /* Nothing to do. */
    return;
  }

  players_iterate(pplayer) {
    sg_load_player_main(loading, pplayer);
    sg_load_player_cities(load
    /* print out some informations */
    if (pplayer->ai_controlled) {
      log_normal(_("%s has been added as %s level AI-controlled player."),
                 player_name(pplayer),
                 ai_level_name(pplayer->ai_common.skill_level));
    } else {
      log_normal(_("%s has been added as human player."),
                 player_name(pplayer));
    })
      {
        enum dipl_reason can_ally = pplayer_can_make_treaty(plr, aplayer,
                                                            DS_ALLIANCE);
        if (can_ally == DIPL_ALLIANCE_PROBLEM_US
            || can_ally == DIPL_ALLIANCE_PROBLEM_THEM) {
    "%s alliance to %s reduced to peace treaty.",
                 nation_rule_name(nation_of_player(plr)),
                 nation_rule_name(nation_of_player(aplayer)));
          player_diplstate_get(plr, aplayer)->type = DS_PEACE;
          player_diplstate_get(aplayer, plr)->type = DS_PEACE;
        }if ((saving->scenario && !saving->save_players)
      || !game_was_started()) {
    /* Nothing to do for a scenario without saved players or a game in
     * INITIAL state. */
    return;
  }

  secfile_insert_int(saving->file, player_count(), "players.nplayers");, plrno = player_number(plr);
  const char *string;
  struct government *gov"%s", secfile_error());
  server_player_set_name(plr"%s", secfile_error());


  sg_failure_ret(secfile_lookup_bool(loading->file, &plr->ai_controlled"%s",    struct player_diplstate *ds = player_diplstate_get(plr, pplayer);ds->type =
      secfile_lookup_int_default(loading->file, DS_WAR, "%s.type", buf);
    ds->ds->first_contact_turnfirst_contact_turn", buf);
    ds->ds->ds->contact_turns_leftaplayer) {
    char buf[32];
    struct ai_dip_intel *adip = ai_diplomacy_get(plr, aplayer);

    fc_snprintf(buf, sizeof(buf), "player%d.ai%d", plrno,
                player_index(aplayer));

    plr->ai_common.love[player_index(aplayer)] =
        secfile_lookup_int_default(loading->file, 1, "%s.love", buf);
    adip->spamspam", buf);
    adip->countdown
          "%s.countdown", buf);
    adip->dip->ally_patienpatience", buf);
    adip->warned_about_spwarn_space", buf);
    adip->dip->asked_about_allianalliance", buf);
    adip->asked_about_ceasefircommon.handicaps);
  plr->ai_common.fuzzy = 0;
  plr->ai_common.expand = 100;
  plr->ai_common.science_cost = 100;
  plr->ai_commoncontrolled) {
    set_ai_level_directer(plr, plr->ai_common.skill_level);
  }

  plr->ai_common"%s", secfile_error());
    city_style = "%s","%s",tax,
                                    "player%d.rates.tax", plrno),
                 "%s","%s",luxury,
                                    "player%d.rates.luxury", plrno),
                 "%s",oad research related data. */
  research = player_research_get"%s",future_tech,
                                    "player%d.research.futuretech", plrno),
                 "%s","%s","%s"(unsigned long) strlen(string),
                 (unsigned long) =
          Unit statistics. */
  plr->score.units_builtplayer%d.units_built", plrno);
  plr->score.units_killedplayer%d.units_killed", plrno);
  plr->score.units_lostplayer%d.units_lost", plrno);
                                      FC_ENUM_PTR(ship->state),
                                      "%s.state", prefix),
                   "%s","%s",components,
                                 "%s.components", prefix),
                     "%s","%s","%s",propulsion,
                                 "%s.propulsion", prefix),
                     "%s","%s","%s",solar_panels,
                                 "%s.solar_panels", prefix),
                     "%s","%s""%s",plr->target_governmentcontrolled    struct player_diplstate *ds = player_diplstate_get(plr, pplayer);

    i = player_index(pplayer);

    /* saveds->type,
                       "%s.type", buf);
    secfile_insert_int(saving->file, ds->ds->ds->turns_left,
                       "%s.turns_left", buf);
    secfile_insert_int(saving->file, ds->ds->aplayer) {
    struct ai_dip_intel *adip = ai_diplomacy_get(plr, aplayer);

    i = player_index(aplayer);
    /* save ai data */
    secfile_insert_int(saving->file, plr->ai_commonadip->adip->adip->war_reason,
                       "player%d.ai%d.war_reason", plrno, i);
    secfile_insert_int(saving->file, adip->ally_patience,
                       "player%d.ai%d.patience", plrno, i);
    secfile_insert_int(saving->file, adip->adip->adip->adip->commoncommonplayer_research_getplayer_research_get(plr)->techs_researched,
                     "player%d.research.techs", plrno);
  secfile_insert_int(saving->file, player_research_getplayer_research_getplayer_research_getplayer_research_getplayer_research_get(plr)->researching);
  secfile_insert_bool(saving->file, player_research_getUnit statistics. */
  secfile_insert_int(saving->file, plr->score.units_built,
                     "player%d.units_built", plrno);
  secfile_insert_int(saving->file, plr->score.units_killed,
                     "player%d.units_killed", plrno);
  secfile_insert_int(saving->file, plr->score.units_lost,
                     "player%d.units_lost"%s", secfile_error()laadv_city_alloc(pcity);
    if (!sg_load_player_city(loading, plr, pcity, buf)) {
      adv_city_free(pcity);  int nat_x, nat_y;
  struct ai_city *city_data = def_ai_city_data(pcity)"%s"citystr),
                  FALSE, "%s""%s""%s""%s""%s""%s""%s""%s""%s""%s""%s"(unsigned long) strlen(string),
                  (unsigned long) =
          city_datacity_datacity_datacity_datacity_datacity_data->founder_boat
    = secfile_lookup_bool_default(loading->file,
                                  (city_data    struct ai_city *city_data = def_ai_city_data(pcity)sg_failure_ret(strlen(impr_buf) < sizeof(impr_buf),
                   "Invalid size of the improvement vector (%s.improvements: "
                   "%lu < %lu).", buf, (long unsigned int) strlen(impr_buf),
                   (long unsigned int)city_datacity_datacity_datacity_datacity_datacity_data"%s",  struct unit_ai *unit_data = def_ai_unit_data(punit)"%s"x, "%s.x", unitstr),
                  FALSE, "%s""%s""%s"punit->moves_left,
                                     "%s.moves", unitstr), FALSE,
                  "%s"punit->fuel,
                                     "%s.fuel", unitstr), FALSE,
                  "%s"FC_ENUM_PTR(activity)"%s",/* We need changed_from == ACTIVITY_IDLE by now so that
   * set_unit_activity() and friends don't spuriously restore activity
   * points -- unit should have been created this way */
  fc_assert(punit->changed_from == ACTIVITY_IDLE);"%s", secfile_error());

  punit->changed_from =
    secfile_lookup_int_default(loading->file, ACTIVITY_IDLE,
                               "%s.changed_from", unitstr);
  punit->changed_from_target =
    secfile_lookup_int_default(loading->file, S_LAST,
                               "%s.changed_from_target", unitstr);
  base =
   "%s.changed_from_base", unitstr);
  if (base >= 0 && base < loading->base.size) {
    punit->changed_from_base = base_number(loading->base.order[base]);
  } else {
    punit->changed_from_base = BASE_NONE;
    fc_assert_action(punit->changed_from != ACTIVITY_BASE
                     && (punit->changed_from != ACTIVITY_PILLAGE
                         || punit->changed_from_target != S_LAST),
                     punit->changed_from = ACTIVITY_IDLE);
  }
  punit->changed_from_countchanged_from_count", unitstr"%s","%s",unit_data->passenger
    = secfile_lookup_int_default(loading->file, 0, "%s.passenger", unitstr);
  unit_dataunit_data->charge
    = secfile_lookup_int_default(loading->file, 0, "%s.charge", unitstr);
  unit_data"%s""%s",struct unit_ai *unit_data = def_ai_unit_data(punit)punit->int(saving->file, punit->changed_from,
                       "%s.changed_from", buf);
    secfile_insert_int(saving->file, punit->changed_from_count,
                       "%s.changed_from_count", buf);
    secfile_insert_int(saving->file, punit->changed_from_target,
                       "%s.changed_from_target", buf);
    secfile_insert_int(saving->file, punit->changed_from_base,
                       "%s.changed_fromunit_dataunit_data->ferryboat,
                       "%s.ferryboat", buf);
    secfile_insert_int(saving->file, unit_data->charge,
                       "%s.charge", buf);
    secfile_insert_int(saving->file, unit_database"%s""%s",plrno = player_number(plr);
  int total_ncities =
     "player%d.dc_total", plrno);
  int iif (!plr->is_alive) {
    /* Reval all for dead players. */
    map_know_and_see_all(plr);
  }

  if (!plr->is_alive
      || -1 == total_ncities
      || FALSE == game.info.fogofwar:
     * - a dead player;
     * - fogged cities are not saved for any reason;
     * - a savegame with fog of war turned off;
     * - or game.save_private_map is not set to FALSE in the scenario /
     * savegame. The players private knowledge is set to be what he could
     * see without char token[TOKEN_SIZE];
        int number;
        struct tile *ptile = native_pos_to_tile(x, y);

        scanin(&ptr, ",", token, sizeof(token));
        sg_failure_ret('\0' != token[0],
                       "Savegame corrupt - map size not correct.");
        if (strcmp(token, "-") == 0) {
          map_get_player_tile(ptile, plr)->owner = NULL;
          continue;
        }

        sg_failure_ret(str_to_int(token, &number),
                       "Savegame corrupt - got tile owner=%s in (%d, %d).",
                       token, x, y);
 "%s""%s""%s""%s""%s""%s"(unsigned long) strlen(string),
                  (unsigned long) =
          g_failure_ret(strlen(impr_buf) < sizeof(impr_buf),
                     "Invalid size of the improvement vector (%s.improvements: "
                     "%lu < %lu).", buf, (long unsigned int) strlen(impr_buf),
                     (long unsigned int) sizeof(impr_buf))if (saving->scenario) {
    /* Do _not_ save events in a scenario. */
    return;
  }if (game.info.is_new_game) {
    /* Nothing to do for new games (or not started scenarios). */
    return;
  }ssign_specific_activity_target(punit,
                                           &punit->activity,
                                           &punit->activity_target,
                                           &punit->activity_base);
    } unit_list_iterate_endcontrolled;

    /* Recalculate for all players. */
    pplayer->ai_controlled = FALSE;

    ai_data_phase_init(pplayer, FALSE);
    building_advisor(pplayer);
    ai_data_phase_done(pplayer);

    pplayer->ai_controlledgame.info.is_new_game) {
    fc_rand_set_state(loading->rstate);

    /* Recalculate scores. */
    players_iterate(pplayer) {
      calc_civ_score(pplayer);
    } players_iterate_end (No compatibility functions yet; when adding them, use names like
 * compat_load/save_020400(); see trunk code for examples) */

struct compatibility {
  int version;
  const struct sset_val_name nameThe struct below contains the information about the savegame versions. It
 * is identified by the version number (first element), which should be
 * steadily increasing. It is saved as 'savefile.version'. The support
 * string (first element of 'name') is not saved in the savegame; it is
 * used as a value for the 'saveversion' option entered at the server prompt
 * and saved in settings files (so, once assigned, cannot be changed). The
 * 'pretty' string (second element of 'name') is presented in places like
 * 'help saveversion' output, and can be changed if necessary
 * For changes in the development version, edit the definitions above and
 * add the needed code to save/load the old version below. Thus, old
 * savegames can still be created and loaded while the main definition
 * represents the current state of the art.0, { "CURRENT", N_("current version") }, NULL, NULL },
  /* version 1 and 2 is not used */
  /* version 3: first savegame2 format, so no compat functions for translation
   * from previous format */
  { 3, { "2.3.0", N_("freeciv 2.3.0") }, NULL, NULL },
  /* Current savefile version is listed above this line; it corresponds to
     the definitions in this file. */
};

static const int compat_num = ARRAY_SIZE(compat);
#define compat_current (compat_num - 1)struct sset_val_name *saveversion_name(int saveversion)
{
  return (0 <= saveversion && saveversion < compat_num
          ? &compat[saveversion].name : NULL)#ifdef DEBUG
  sg_failure_ret(0 < version, "Invalid savefile format version (%d).",
                 version);
  if (version > compat[compat_current].version) {
    /* Debug build can (TRY TO!) load newer versions but ... */
    log_error("Savegame version newer than this build found (%d > %d). "
              "Trying to load the game nevertheless ...", version,
              compat[compat_current].version);
  }
#else
  sg_failure_ret(0 < version && version <= compat[compat_current].version,
                 "Unknown savefile format version (%d).", version);
#endif /* DEBUG */


  for (i = 0; i < compat_num; i++) {
    if (version < compat[i].version && compat[i].load != NULL) {
      log_normal(_("Run compatibility function for version: <%d "
                   "(save file: %d; server: %d)."), compat[i].version,
                 version, compat[compat_current].version);sg_failure_ret(saveversion_name(game.server.saveversion) != NULL,
                 "Unknown savefile format version.");

  if (0 == game.server.saveversion) {
    /* A value of zero is set to current save file format */
    version = compat[compat_current].version;
  } else {
    version = compat[game.server.saveversion].version;
  }

  for (i = compat_current; i >= 0; i--) {
    if (compat[i].version > version && compat[i].save != NULL) {
      log_normal(_("Run compatibility function for version: <%d "
                   "(want: %d, server: %d)."), compat[i].version,
                 version, compat[compat_current].version);
      compat[i].save(saving);
    }
  }

  /* update version information */
  secfile_replaceENDREP
id: 4m0.5f2.r19657/35275
type: file
pred: 4m0.5f2.r19339/2299
count: 64
text: 19657 8692 26554 202002 cda31b7541e4cf6281cdc4f8292cb181
cpath: /branches/S2_3/server/savegame2.c
copyroot: 18395 /branches/S2_3

id: 4m.5f2.r19657/35483
type: file
pred: 4m.5f2.r19576/101559
count: 157
text: 19657 6351 230 31148 6f7337736d4d4d27dcf2c4c53e75c56a
props: 10928 6706 112 0 b2683e5213f79af73eb9759948ba224b
cpath: /branches/S2_3/server/diplhand.c
copyroot: 18395 /branches/S2_3

id: wi.5f2.r19657/35745
type: file
pred: wi.5f2.r18739/9176
count: 142
text: 19657 6610 1117 21742 7c7cd4af1aa7e78a85964339d764c4f1
props: 10956 5973 111 0 f29fdd85bcdac27e7106c1e33b0399d1
cpath: /branches/S2_3/server/sanitycheck.c
copyroot: 18395 /branches/S2_3

id: vl.5f2.r19657/36009
type: file
pred: vl.5f2.r19558/10941
count: 545
text: 19657 7754 911 222000 9ff55f57f0c353ea4ab9c7a2b8cad9eb
props: 11092 74 112 0 de3988801a325e2d7d51fcbc7209a255
cpath: /branches/S2_3/server/savegame.c
copyroot: 18395 /branches/S2_3

PLAIN
K 11
Makefile.am
V 23
file 5q.5f2.r18992/3608
K 8
advisors
V 24
dir 4n2.5f2.r19459/12934
K 9
aiiface.c
V 24
file 4gm.5ck.r18039/1242
K 9
aiiface.h
V 25
file 4gn.5ck.r17797/11328
K 6
auth.c
V 25
file 39c.5f2.r18472/12225
K 6
auth.h
V 23
file 39d.0.r13513/10535
K 11
barbarian.c
V 23
file lw.5f2.r19335/1423
K 11
barbarian.h
V 24
file lx.5ck.r18054/18407
K 10
cityhand.c
V 25
file 10.5f2.r19576/101034
K 10
cityhand.h
V 23
file 4f.0.r13297/423686
K 11
citytools.c
V 25
file 4g.5f2.r19576/101298
K 11
citytools.h
V 24
file 4h.5ck.r18270/28958
K 10
cityturn.c
V 24
file 4i.5f2.r19509/22506
K 10
cityturn.h
V 24
file 4j.5f2.r18661/18259
K 11
civserver.c
V 24
file 4k.5f2.r18624/55776
K 11
civserver.h
V 21
file 4l.0.r2805/33121
K 10
commands.c
V 23
file 2ly.5f2.r19575/333
K 10
commands.h
V 25
file 2lz.5f2.r18475/23374
K 13
connecthand.c
V 24
file 2dw.5f2.r18617/3111
K 13
connecthand.h
V 25
file 2dx.5ck.r18054/16767
K 9
console.c
V 23
file dd.5ck.r18091/5268
K 9
console.h
V 24
file de.5ck.r18054/16526
K 10
diplhand.c
V 24
file 4m.5f2.r19657/35483
K 10
diplhand.h
V 21
file 4n.0.r13421/6826
K 11
diplomats.c
V 22
file vz.5f2.r18778/940
K 11
diplomats.h
V 24
file w0.5ck.r18384/65844
K 10
edithand.c
V 24
file 3bk.5f2.r19026/7111
K 10
edithand.h
V 26
file 4ez.5f2.r18451/115622
K 10
gamehand.c
V 24
file 4o.5f2.r19631/18101
K 10
gamehand.h
V 24
file 4p.5ck.r15698/24111
K 9
generator
V 24
dir 2me.5f2.r19456/10247
K 11
ggzserver.c
V 25
file 39a.5f2.r18470/14682
K 11
ggzserver.h
V 25
file 39b.5bk.r15001/48999
K 10
handchat.c
V 25
file 4q.5ck.r18362/122188
K 10
handchat.h
V 24
file dj.5ck.r18270/28229
K 9
maphand.c
V 23
file 13.5f2.r19595/1742
K 9
maphand.h
V 23
file 14.5f2.r18739/8394
K 6
meta.c
V 22
file 4s.5f2.r18986/388
K 6
meta.h
V 24
file 4t.5ck.r18054/19078
K 8
notify.c
V 23
file 4i2.5f2.r18492/146
K 8
notify.h
V 24
file 4i3.5ck.r18282/3660
K 9
plrhand.c
V 23
file 4u.5f2.r19103/2995
K 9
plrhand.h
V 23
file 4v.5f2.r19103/3251
K 8
report.c
V 25
file vi.5ck.r18308/133485
K 8
report.h
V 24
file vj.5ck.r18270/29203
K 9
ruleset.c
V 23
file 8w.5f2.r19026/6853
K 9
ruleset.h
V 22
file 8x.5ck.r17946/997
K 13
sanitycheck.c
V 24
file wi.5f2.r19657/35745
K 13
sanitycheck.h
V 23
file wj.5f2.r18739/9438
K 10
savegame.c
V 24
file vl.5f2.r19657/36009
K 10
savegame.h
V 24
file vm.5ck.r17289/22938
K 11
savegame2.c
V 25
file 4m0.5f2.r19657/35275
K 11
savegame2.h
V 25
file 4m1.5ck.r18078/67503
K 7
score.c
V 26
file 2eg.5ck.r18308/128519
K 7
score.h
V 24
file 2eh.5ck.r17332/6378
K 9
scripting
V 23
dir 31x.5f2.r18540/6691
K 8
sernet.c
V 24
file 15.5f2.r18605/17657
K 8
sernet.h
V 24
file 4y.5f2.r18472/12743
K 10
settings.c
V 25
file 2m0.5f2.r19631/17836
K 10
settings.h
V 24
file 2m1.5ck.r18294/3094
K 11
spacerace.c
V 25
file 9a.5ck.r18362/123929
K 11
spacerace.h
V 21
file 9b.0.r11338/1129
K 9
srv_log.c
V 25
file 15t.5fa.r18550/20788
K 9
srv_log.h
V 25
file 15u.5em.r17928/40497
K 10
srv_main.c
V 22
file vg.5f2.r19412/190
K 10
srv_main.h
V 24
file vh.5ck.r18279/84001
K 11
stdinhand.c
V 22
file 4z.5f2.r19436/942
K 11
stdinhand.h
V 24
file 50.5f2.r18475/24430
K 11
techtools.c
V 25
file 33n.5f2.r19053/10428
K 11
techtools.h
V 24
file 33o.5f2.r18666/2309
K 10
unithand.c
V 25
file 18.5f2.r19576/102087
K 10
unithand.h
V 24
file 19.5f2.r18579/17095
K 11
unittools.c
V 25
file 1a.5f2.r19576/101822
K 11
unittools.h
V 24
file 1b.5ck.r18384/66086
K 8
voting.c
V 26
file 4ex.5ck.r18308/137159
K 8
voting.h
V 25
file 4ey.5ck.r18054/19315
END
ENDREP
id: z.5f2.r19657/39725
type: dir
pred: z.5f2.r19631/21820
count: 4399
text: 19657 36269 3443 3443 3f2e1e31162b05c60be6747363547fc1
props: 17175 659 139 0 d1c9699dde7f9d81e54426750008041d
cpath: /branches/S2_3/server
copyroot: 18395 /branches/S2_3

id: 45.5f2.r19657/39973
type: file
pred: 45.5f2.r19329/1803
count: 261
text: 19657 0 335 46535 a5096c9b4d44345039986215784ade0d
props: 11057 32005 112 0 5a3876431ad0faf061b096a2484d7aad
cpath: /branches/S2_3/common/player.c
copyroot: 18395 /branches/S2_3

id: 46.5f2.r19657/40229
type: file
pred: 46.5f2.r19103/7459
count: 224
text: 19657 362 5958 14375 f833298120a4282a1c327cb338854d21
props: 11057 32360 112 0 008c1f4aede3063a105ee5510d8fc5d7
cpath: /branches/S2_3/common/player.h
copyroot: 18395 /branches/S2_3

PLAIN
K 11
Makefile.am
V 23
file 5h.5f2.r18992/7549
K 4
ai.c
V 24
file 4go.5ck.r18039/5198
K 4
ai.h
V 24
file 4gp.5f2.r19322/5978
K 6
aicore
V 22
dir 18t.5f2.r19403/961
K 6
base.c
V 26
file 3jw.5ck.r18308/142652
K 6
base.h
V 26
file 3jx.5ck.r18308/143381
K 9
borders.c
V 25
file 4f0.5ck.r18297/35065
K 9
borders.h
V 24
file 4f1.5ck.r15975/2116
K 8
capstr.c
V 24
file dv.5ck.r17617/51579
K 8
capstr.h
V 24
file dw.5bk.r14881/38989
K 6
city.c
V 23
file q.5f2.r19509/26462
K 6
city.h
V 24
file 3q.5f2.r19509/26720
K 8
combat.c
V 24
file wp.5ck.r18226/16047
K 8
combat.h
V 24
file wq.5ck.r18086/20783
K 12
connection.c
V 24
file un.5f2.r18472/17081
K 12
connection.h
V 24
file uo.5f2.r18472/17343
K 8
dataio.c
V 25
file 15r.5ck.r17928/47899
K 8
dataio.h
V 25
file 15s.5ck.r18054/23274
K 11
diptreaty.c
V 23
file 3r.5ck.r18298/9103
K 11
diptreaty.h
V 24
file 3s.5ck.r18054/23946
K 9
effects.c
V 25
file 2eo.5f2.r19459/17662
K 9
effects.h
V 25
file 2ep.5ck.r18270/34711
K 8
events.c
V 25
file 33h.5f2.r19542/46742
K 8
events.h
V 24
file 3t.5f2.r18540/10746
K 14
fc_interface.c
V 25
file 4up.5ck.r17933/11024
K 14
fc_interface.h
V 24
file 4uq.5ck.r17932/7373
K 10
fc_types.h
V 26
file 2ll.5f2.r18451/120446
K 15
featured_text.c
V 25
file 4h3.5f2.r18624/60476
K 15
featured_text.h
V 25
file 4h4.5ck.r18054/23516
K 6
game.c
V 24
file 3u.5f2.r18475/28508
K 6
game.h
V 21
file 3v.5f2.r19117/52
K 19
generate_packets.py
V 25
file 2f4.5ck.r18382/12661
K 12
government.c
V 23
file he.5f2.r18404/6822
K 12
government.h
V 23
file hf.5f2.r18404/7081
K 6
idex.c
V 23
file qo.5ck.r18342/2669
K 6
idex.h
V 21
file qp.0.r8119/15235
K 13
improvement.c
V 24
file vb.5f2.r19459/16882
K 13
improvement.h
V 24
file vc.5f2.r19459/17143
K 5
map.c
V 23
file r.5f2.r18904/15975
K 5
map.h
V 24
file 41.5f2.r18904/16231
K 10
movement.c
V 24
file 2xv.5f2.r18658/2250
K 10
movement.h
V 25
file 2xw.5f2.r18579/21839
K 18
name_translation.h
V 25
file 4k1.5f2.r19438/11489
K 8
nation.c
V 23
file il.5f2.r18707/5017
K 8
nation.h
V 23
file im.5f2.r18707/5271
K 9
packets.c
V 22
file 43.5f2.r19602/297
K 11
packets.def
V 25
file 2f5.5f2.r18564/27847
K 9
packets.h
V 24
file 44.5ck.r18100/70467
K 8
player.c
V 24
file 45.5f2.r19657/39973
K 8
player.h
V 24
file 46.5f2.r19657/40229
K 14
requirements.c
V 25
file 2wq.5ck.r18326/39682
K 14
requirements.h
V 25
file 2wr.5ck.r17509/18916
K 10
research.c
V 24
file 4ro.5ck.r17856/7997
K 10
research.h
V 23
file 4rp.5f2.r19401/177
K 11
spaceship.c
V 20
file 98.0.r9977/2632
K 11
spaceship.h
V 24
file 99.5ck.r18054/26016
K 12
specialist.c
V 25
file 33f.5ck.r18326/38937
K 12
specialist.h
V 25
file 33g.5ck.r18326/39185
K 6
team.c
V 23
file 33i.5f2.r19039/556
K 6
team.h
V 24
file 33j.5ck.r18062/9861
K 6
tech.c
V 21
file t.5f2.r19098/204
K 6
tech.h
V 21
file u.5f2.r19401/375
K 9
terrain.c
V 26
file 2fp.5ck.r18308/147138
K 9
terrain.h
V 23
file qs.5f2.r19006/2572
K 6
tile.c
V 25
file 2ys.5f2.r18739/13391
K 6
tile.h
V 24
file 2yt.5f2.r18644/6312
K 6
unit.c
V 24
file v.5f2.r19576/110744
K 6
unit.h
V 24
file 48.5f2.r19495/12606
K 10
unitlist.c
V 25
file 39m.5f2.r18579/22102
K 10
unitlist.h
V 24
file 39n.5f2.r18567/2793
K 10
unittype.c
V 23
file v9.5f2.r18585/1099
K 10
unittype.h
V 24
file va.5f2.r19026/11315
K 9
version.c
V 25
file oe.5ck.r17122/322944
K 9
version.h
V 21
file e7.0.r13518/7887
K 8
vision.c
V 25
file 4dm.5ck.r18000/29175
K 8
vision.h
V 25
file 4dn.5ck.r18000/29420
K 10
worklist.c
V 25
file o8.5ck.r16929/277491
K 10
worklist.h
V 23
file o9.5ck.r18038/1433
END
ENDREP
id: p.5f2.r19657/43981
type: dir
pred: p.5f2.r19602/4043
count: 2956
text: 19657 40488 3480 3480 756e8520e281a91761805bd17f4f7a07
props: 12883 2571 96 0 2763e13ff5d021346ae24ff6c9ced232
cpath: /branches/S2_3/common
copyroot: 18395 /branches/S2_3

PLAIN
K 9
ABOUT-NLS
V 22
file fu.0.r13215/85704
K 7
AUTHORS
V 19
file 5u.0.r12982/94
K 7
COPYING
V 19
file 1h.0.r9643/400
K 9
ChangeLog
V 26
file 6l.5f2.r19566/4833685
K 7
INSTALL
V 21
file 6.5f2.r19422/445
K 11
Makefile.am
V 24
file 59.5ck.r17690/10482
K 4
NEWS
V 22
file 6m.5f2.r18757/131
K 6
README
V 20
file 7.0.r4421/96382
K 2
ai
V 21
dir 8.5f2.r19502/2341
K 10
autogen.sh
V 23
file 12o.5f2.r19422/686
K 9
bootstrap
V 24
dir 2p5.5ck.r17613/37512
K 6
client
V 22
dir d.5f2.r19655/14402
K 6
common
V 22
dir p.5f2.r19657/43981
K 12
config.mac.h
V 20
file hb.0.r6045/5982
K 12
configure.ac
V 22
file 149.5f2.r19497/87
K 4
data
V 21
dir w.5f2.r19656/6247
K 6
debian
V 22
dir 5w.5f2.r18990/6094
K 12
dependencies
V 22
dir 2yu.5f2.r19483/184
K 11
diff_ignore
V 21
file qq.5ck.r17605/92
K 3
doc
V 22
dir k7.5f2.r19634/5387
K 10
fc_version
V 23
file 2lo.5f4.r19565/149
K 2
m4
V 23
dir 12p.5f2.r19515/1918
K 6
manual
V 24
dir 2m2.5f2.r19275/16137
K 7
modinst
V 23
dir 4pj.5f2.r19309/1783
K 2
po
V 24
dir fs.5f2.r19645/509510
K 7
scripts
V 22
dir 2yo.5f2.r19607/705
K 6
server
V 22
dir z.5f2.r19657/39725
K 10
stamp-h.in
V 19
file 80.0.r1125/241
K 5
tests
V 22
dir 2g9.5ck.r15661/767
K 7
utility
V 22
dir 1c.5f2.r18992/3362
K 3
vms
V 21
dir u9.0.r11105/70719
K 5
win32
V 24
dir 2eu.5bk.r13732/30345
END
ENDREP
id: 3.5f2.r19657/45532
type: dir
pred: 3.5f2.r19656/7795
count: 14207
text: 19657 44228 1291 1291 a752b1429d1910baabc5b847510fca00
props: 17175 3052 264 0 91336f1f63d2f606e65376614b5c72e4
cpath: /branches/S2_3
copyroot: 18395 /branches/S2_3

PLAIN
K 5
S1_14
V 21
dir 3.21.r18109/18803
K 4
S2_0
V 22
dir 3.10x.r18110/10487
K 4
S2_1
V 22
dir 3.59e.r18786/42474
K 4
S2_2
V 21
dir 3.5cy.r19533/7324
K 4
S2_3
V 22
dir 3.5f2.r19657/45532
K 11
freeciv-web
V 22
dir 3.5bl.r13594/14918
END
ENDREP
id: 1.0.r19657/46020
type: dir
pred: 1.0.r19656/8281
count: 5028
text: 19657 45774 233 233 8b5aa13582342a65be7c30278165869b
cpath: /branches
copyroot: 0 /

PLAIN
K 8
branches
V 20
dir 1.0.r19657/46020
K 4
tags
V 19
dir 2.0.r19568/5509
K 5
trunk
V 23
dir 3.5ck.r19654/170929
K 7
website
V 18
dir 3ge.0.r12388/0
END
ENDREP
id: 0.0.r19657/46341
type: dir
pred: 0.0.r19656/8600
count: 19657
text: 19657 46176 152 152 41c8443b9997a2c19b97ac77df58a8b3
cpath: /
copyroot: 0 /

45.5f2.t19656-1 modify true false /branches/S2_3/common/player.c

46.5f2.t19656-1 modify true false /branches/S2_3/common/player.h

4m.5f2.t19656-1 modify true false /branches/S2_3/server/diplhand.c

wi.5f2.t19656-1 modify true false /branches/S2_3/server/sanitycheck.c

vl.5f2.t19656-1 modify true false /branches/S2_3/server/savegame.c

4m0.5f2.t19656-1 modify true false /branches/S2_3/server/savegame2.c


46341 46490
