DELTA 30333 0 52
SVN  ‚Ò‚ÒDL„P G  …8H p… ž]†n— ¤>¥]€] jËj„ ‡$ÌT„ ‡6Óx— ®Û@€‚! ‡w‚‹m„ B‚“d— ­P‚¤8*
  return rule_name_get
  if (NULL != nation_set_by_rule_name(rule_name_get(&pset->name))) {
    log_error("Duplicate nation set name %s.", rule_name_get(&pset->name));
    return NULL;
  }

  if (NULL != nation_group_by_rule_name(rule_name_get_get_get
  return rule_name_get_get(&pgroup->name))) {
    log_error("Duplicate nation group name %s.", rule_name_get(&pgroup->name));
    return NULL;
  }

  if (NULL != nation_set_by_rule_name(rule_name_get(&pgroup->name))) {
    log_error("Nation group name %s is already used for a set.",
              rule_name_get_get
  return rule_name_getENDREP
DELTA 23793 1650 4026
SVN  Ÿ,äp¿t G  …OH€‚! _‡ž y‰%€| KŒ€„H C}€‚? G‘?€w G“ €†z •™ H € OŠw€  G  H €…" G ¯ H €0 ‚•b€X q˜$€†D ƒ"œ
 G ª H €' G ª H €' G ® H €- G ¥ H €r G ¥ H €r G © H €w G ¢ H €„k G ¥ H €‚ G ¤ H €‚ G Ÿ H €„ G €C H €
Ÿ"*neEdit>
#include <QListWidget>
#include <QMenu>
#include <QPushButton>
#include <QRadioButton>
#include <QToolButton>

// utility
#include "fcintl.h"
#include "log.h"

// common
#include "game.h"
#include "tech.h"

// ruledit
#include "ruledit.h"
#include "ruledit_qt.h"
#include "validityruledit_gui *ui_in) : QWidget(  QPushButton *add_button;
  QPushButton *delete_button;

  ui = ui_in;
  selected = 0;

  tech_list = new QListWidget(this)QString::fromUtf8(R__("Rule Name")));
  label->setParent(this);
  rname = new QLineEdit(this);
  rname->setText("None");
  connect(rname, SIGNAL(returnPressed()), this, SLOT(name_given()));
  tech_layout->addWidget(label, 0, 0);
  tech_layout->addWidget(rname, 0, 2);

  label = new QLabel(QString::fromUtf8(R__("Name")));
  label->setParent(this);
  same_name = new QRadioButton();
  connect(same_name, SIGNAL(toggled(bool)), this, SLOT(same_name_toggle(bool)));
  name = new QLineEdit(this);
  name->setText("None");
  connect(name, SIGNAL(returnPressed()), this, SLOT(name_given())same_name, 1, 1);
  tech_layout->addWidget(name, 1, 2);

  label = new QLabel(QString::fromUtf8(R__("Req1")));
  label->setParent(this);
  req1_button = new QToolButton();
  req1_button->setParent(this);
  req1 = prepare_req_button(req1_button, AR_ONE);
  connect(req1_button, SIGNAL(pressed()), this, SLOT(req1_jump())_button, 2, 2);

  label = new QLabel(QString::fromUtf8(R__("Req2")));
  label->setParent(this);
  req2_button = new QToolButton();
  req2 = prepare_req_button(req2_button, AR_TWO);
  connect(req2_button, SIGNAL(pressed()), this, SLOT(req2_jump())_button, 3, 2);

  label = new QLabel(QString::fromUtf8(R__("Root Req")));
  label->setParent(this);
  root_req_button = new QToolButton();
  root_req_button->setParent(this);
  root_req = prepare_req_button(root_req_button, AR_ROOT);
  connect(root_req_button, SIGNAL(pressed()), this, SLOT(root_req_jump()));
  tech_layout->addWidget(label, 4, 0);
  tech_layout->addWidget(root_req_button, 4, 2);

  add_button = new QPushButton(QString::fromUtf8(R__("Add tech")), this);
  connect(add_button, SIGNAL(pressed()), this, SLOT(add_now()));
  tech_layout->addWidget(add_button, 5, 0);
  show_experimental(add_button);

  delete_button = new QPushButton(QString::fromUtf8(R__("Remove this tech")), this);
  connect(delete_button, SIGNAL(pressed()), this, SLOT(delete_now()));
  tech_layout->addWidget(delete_button, 5, 2);
  show_experimental(delete_button);

  refresh();
  update_tech_info(0Refresh the information.
**/
void tab_tech::refresh()
{
  tech_list->clear();

  advance_iterate(A_FIRST, padv) {
    if (padv->require[AR_ONE] != A_NEVER) {
    tech_list->insertItem(advance_index(padv), item);
    }
  } advance_iterate_end;

  techs_to_menu(req1);
  techs_to_menu(req2);
  techs_to_menu(root_req);
}

****
  Build tech req button
**/
QMenu *tab_tech::prepare_req_button(QToolButton *button, enum tech_req rn)
{
  QMenu *menu = new QMenu();

  button->setToolButtonStyle(Qt::ToolButtonTextOnly);
  button->setPopupMode(QToolButton::MenuButtonPopup);

  switch (rn) {
  case AR_ONE:
    connect(menu, SIGNAL(triggered(QAction *)), this, SLOT(req1_menu(QAction *)));
    break;
  case AR_TWO:
    connect(menu, SIGNAL(triggered(QAction *)), this, SLOT(req2_menu(QAction *)));
    break;
  case AR_ROOT:
    connect(menu, SIGNAL(triggered(QAction *)), this, SLOT(root_req_menu(QAction *)));
    break;
  case AR_SIZE:
    fc_assert(rn != AR_SIZE);
    break;
  }

  button->setMenu(menu);

  return menu;
}

****
  Fill menu with all possible tech values
**/
void tab_tech::techs_to_menu(QMenu *fill_menu)
{
  fill_menu->clear();

  advance_iterate(A_NONE, padv) {
    fill_menu->addAction(tech_name(padv));
  } advance_iterate_endQString::fromUtf8(R__("Never"));
  }

  return QString::fromUtf8(advance_rule_name(padv)selected = adv;

  if (selected != 0) {
    QString dispn = QString::fromUtf8(untranslated_name(&(adv->name)));
    QString rulen = QString::fromUtf8(rule_name_get(&(adv->name)));

    name->setText(dispn);
    rname->setText(rulen);

    if (dispn == rulen) {
      name->setEnabled(false);
      same_name->setChecked(true);
    } else {
      same_name->setChecked(false);
      name->setEnabled(true);
    }
    
    req1_button->setText(tech_name(adv->require[AR_ONE]));
    req2_button->setText(tech_name(adv->require[AR_TWO]));
    root_req_button->setText(tech_name(adv->require[AR_ROOT]));
  } else {
    name->setText("None");
    rname->setText("None");
    req1_button->setText("None");
    req2_button->setText("None");
    root_req_button->setText("None");
    same_name->setChecked(true);
    name->setEnabled(false);
  }
****
  Req1 of the current tech selected.
**/
void tab_tech::req1_jump()
{
  if (selected != 0 && advance_number(selected->require[AR_ONE]) != A_NONE) {
    update_tech_info(selected->require[AR_ONE]);
  }
}

****
  Req2 of the current tech selected.
**/
void tab_tech::req2_jump()
{
  if (selected != 0 && advance_number(selected->require[AR_TWO]) != A_NONE) {
    update_tech_info(selected->require[AR_TWO]);
  }
}

****
  Root req of the current tech selected.
**/
void tab_tech::root_req_jump()
{
  if (selected != 0 && advance_number(selected->require[AR_ROOT]) != A_NONE) {
    update_tech_info(selected->require[AR_ROOT]);
  }
}

****
  User selected tech to be req1
**/
void tab_tech::req1_menu(QAction *action)
{
  struct advance *padv = advance_by_rule_name(action->text().toUtf8().data());

  if (padv != 0 && selected != 0) {
    selected->require[AR_ONE] = padv;

    update_tech_info(selected);
  }
}

****
  User selected tech to be req2
**/
void tab_tech::req2_menu(QAction *action)
{
  struct advance *padv = advance_by_rule_name(action->text().toUtf8().data());

  if (padv != 0 && selected != 0) {
    selected->require[AR_TWO] = padv;

    update_tech_info(selected);
  }
}

****
  User selected tech to be root_req
**/
void tab_tech::root_req_menu(QAction *action)
{
  struct advance *padv = advance_by_rule_name(action->text().toUtf8().data());

  if (padv != 0 && selected != 0) {
    selected->require[AR_ROOT] = padv;

    update_tech_info(selected);
  }
}

****
  User entered name for tech
**/
void tab_tech::name_given()
{
  if (selected != nullptr) {
    advance_iterate(A_FIRST, padv) {
      if (padv != selected
          && padv->require[AR_ONE] != A_NEVER) {
        if (!strcmp(advance_rule_name(padv), rname->text().toUtf8().data())) {
          ui->display_msg(R__("Tech with that rule name already exist!"));
          return;
        }
      }
    } advance_iterate_end;

    if (same_name->isChecked()) {
      name->setText(rname->text());
    }

    names_set(&(selected->name), 0,
              name->text().toUtf8().data(),
              rname->text().toUtf8().data());
    refresh();
  }
}

****
  User requested tech deletion 
**/
void tab_tech::delete_now()
{
  if (selected != 0) {
    ui->clear_required(advance_rule_name(selected));
    if (is_tech_needed(selected, &ruledit_qt_display_requirers)) {
      return;
    }

    selected->require[AR_ONE] = A_NEVER;

    refresh();
    update_tech_info(0);
  }
}

****
  Initialize new tech for use.
**/
void tab_tech::initialize_new_tech(struct advance *padv)
{
  struct advance *none = advance_by_number(A_NONE);

  padv->require[AR_ONE] = none;
  padv->require[AR_TWO] = none;
  padv->require[AR_ROOT] = none;
  name_set(&(padv->name), "None", "None");
}

****
  User requested new tech
**/
void tab_tech::add_now()
{
  struct advance *new_adv;

  /* Try to reuse freed tech slot */
  advance_iterate(A_FIRST, padv) {
    if (padv->require[AR_ONE] == A_NEVER) {
      initialize_new_tech(padv);
      update_tech_info(padv);
      refresh();
      return;
    }
  } advance_iterate_end;

  /* Try to add completely new tech */
  if (game.control.num_tech_types >= A_LAST) {
    return;
  }

  new_adv = advance_by_number(game.control.num_tech_types++);
  initialize_new_tech(new_adv);
  update_tech_info(new_adv);
  refresh();
}

****
  Toggled whether rule_name and name should be kept identical
**/
void tab_tech::same_name_toggle(bool checked)
{
  name->setEnabled(!checked);
  if (checked) {
    name->setText(rname->text(ENDREP
DELTA 32286 0 36
SVN  ‚Ç‚Ç2$ Äz „ XÄz„ ¸eÆRˆ †Dÿ7” Á…{_get_getFREECIV_ /* FREECIV_DEBUG */ENDREP
DELTA 30000 6553 25
SVN  ¼T¼X G  š%H„ ¡gšm*_getENDREP
DELTA 30000 2772 3751
SVN  ¹f¹j G  ¤4H„ ”j¤|*_getENDREP
DELTA 32409 242 813
SVN  †  †  jI G  ‚¶lF„ |‚·2„ ‚¸.„ ‚R‚¹/„ ~‚¼„ ƒm‚½„ ùe‚Ál„ ‡ƒ»Q„ ,ƒÂj„ LƒÄ„ ƒ,ƒÅb„ ŽƒÉ„ ˆS„×• ÝD„ßy„ â…½=_get_get_get_get_get_get_get_get_get_get_get_get!strcmp(rule_name_get_get†  †  †  Z‡ XŠ= ¬x*€O ‚O­q„ „ï°@s, flag!strcmp(rule_name_get(&n2->adjective),
                           rule_name_get_getŒÀ ‚Þ_‚ß_o¹ 5 „ ‹
5„ ž>¨?„ ŒÆ}„ ŠSÓ„ fÝX„ “Tî>„ †T‚„ Qˆf„ †c¦7„ ˜}­„ ’bÆ„ ’NØy„ †aëG„ †#ò(„ ‚øKŽ ä
úUefault(file, NULL, "%s.type", sec_name);

      pach->typ_get_get_get_get_get_get_get_get_get_get_get_get_get_get_get              ENDREP
DELTA 31722 0 20
SVN  ¨¨" G  ¢lF„ „k£2_getENDREP
DELTA 7209 512 1650
SVN   pâu„J  G  …H€„  G µ K–@€‚o \’$€„x G ª J–@€ G © J–@€+ G ¦ J–@€P G ¦ J–@€ G € J–@€
 G ¡ J–@€	 G ¹ K–@€u G €X K–@€‚2 G €R K–@€‚ G €R K–@€y G €f K–@€‚> G €c K–@€} G €h J–@€n G · K–@€‚ G « J–@€	 G ª J–@€0 G ¢ J–@€S G €
 J–@€ G ¢ J–@€ G » K–@€p G €V K–@€h G €P K–@€‚ G €d K–@€ G €i J–@€r G €q K–@€„c G ¿ b™x€‚u |•+€‚I ‚ ˜v€ƒ G €S K–@€ƒd G €T K–@€ƒ G €I K–@€‚{ G €} K–@€‚Y G €r K–@€‚  F˜4» K–@€ƒn G € K–@€…r G €' K–@€‡4 G µ K–@€q G €d K–@€ƒ G €Y K–@€ƒ  G €k K–@€„? G €o K–@€5 G ³ K–@€ƒ7 G ¹ f™x€† G ¸ f™x€…w G « J–@€ @ €‚ G ° J–@€…? G ¾ J–@€B G €C J–@€( k*fc_config.h>
#endif

/* utility */
#include "fcintl.h"
#include "log.h"                /* fc_assert */
#include "mem.h"                /* free */
#include "rand.h"
#include "shared.h"
#include "string_vector.h"
#include "support.h"

/* common */
#include "extras.h"
#include "game.h"
#include "map.h"
#include "rgbcolor.h"
#include "road.h"

#include "terrain.h"

static struct terrain civ_terrains[MAX_NUM_TERRAINS];
static struct resource civ_resources[MAX_NUM_RESOURCES];
static struct user_flag user_terrain_flags[MAX_NUM_USER_TER_FLAGS];

******
  Initialize terrain and resource structures.
*/
void terrains_init(void)
{
  int i;

  for (i = 0; i < ARRAY_SIZE(civ_terrains); i++) {
    /* Can't use terrain_by_number here because it does a bounds check. */
    civ_terrains[i].item_number = i;
    civ_terrains[i].rgb = NULL;
    civ_terrains[i].animal = NULL;
  }
  for (i = 0; i < ARRAY_SIZE(civ_resources); i++) {
    civ_resources[i].item_number = i;
  }errains_free(void)
{
  terrain_type_iterate(pterrain) {
    if (NULL != pterrain->helptext) {
      strvec_destroy(pterrain->helptext);
      pterrain->helptext = NULL;
    }
    if (pterrain->resources != NULL) {
      /* Server allocates this on ruleset loading, client when
       * ruleset packet is received. */
      free(pterrain->resources);
      pterrain->resources = NULL;
    }
    if (pterrain->rgb != NULL) {
      /* Server allocates this on ruleset loading, client when
       * ruleset packet is received. */
      rgbcolor_destroy(pterrain->rgb);
      pterrain->rgb = NULL;
    }
  } terrain_type_iterate_end;
}

****
  Return the first item of terrains.
/
struct terrain *terrain_array_first(void)
{
  if (game.control.terrain_count > 0) {
    return civ_terrains;
  }
  return NULL;
}

****
  Return the last item of terrains.
/
const struct terrain *terrain_array_last(void)
{
  if (game.control.terrain_count > 0) {
    return &civ_terrains[game.control.terrain_count - 1];
  }
  return NULL;
}

****
  Return the number of terrains.
/
Terrain_type_id terrain_count(void)
{
  return game.control.terrain_count;
}

****
  Return the terrain identifier.
/
char terrain_identifier(const struct terrain *pterrain)
{
  fc_assert_ret_val(pterrain, '\0');
  return pterrain->identifier;
}

****
  Return the terrain index.

  Currently same as terrain_number(), paired with terrain_count()
  indicates use as an array index.
/
Terrain_type_id terrain_index(const struct terrain *pterrain)
{
  fc_assert_ret_val(pterrain, -1);
  return pterrain - civ_terrains;
}

****
  Return the terrain index.
/
Terrain_type_id terrain_number(const struct terrain *pterrain)
{
  fc_assert_ret_val(pterrain, -1);
  return pterrain->item_number;
}

******
  Return the terrain for the given terrain index.
*/
struct terrain *terrain_by_number(const Terrain_type_id type)
{
  if (type < 0 || type >= game.control.terrain_count) {
    /* This isn't an error; some T_UNKNOWN callers depend on it. */
    return NULL;
  }
  return &civ_terrains[type];
}

******
  Return the terrain type matching the identifier, or T_UNKNOWN if none matches.
*/
struct terrain *terrain_by_identifier(const char identifier)
{
  if (TERRAIN_UNKNOWN_IDENTIFIER == identifier) {
    return T_UNKNOWN;
  }
  terrain_type_iterate(pterrain) {
    if (pterrain->identifier == identifier) {
      return pterrain;
    }
  } terrain_type_iterate_end;

  return T_UNKNOWN;
}

******
  Return the terrain type matching the name, or T_UNKNOWN if none matches.
*/
struct terrain *terrain_by_rule_name(const char *name)
{
  const char *qname = Qn_(name);

  terrain_type_iterate(pterrain) {
    if (0 == fc_strcasecmp(terrain_rule_name(pterrain), qname)) {
      return pterrain;
    }
  } terrain_type_iterate_end;

  return T_UNKNOWN;
}

******
  Return the terrain type matching the name, or T_UNKNOWN if none matches.
*/
struct terrain *terrain_by_translated_name(const char *name)
{
  terrain_type_iterate(pterrain) {
    if (0 == strcmp(terrain_name_translation(pterrain), name)) {
      return pterrain;
    }
  } terrain_type_iterate_end;

  return T_UNKNOWN;
}

******
  Return terrain having the flag. If several terrains have the flag,
  random one is returned.
*/
struct terrain *rand_terrain_by_flag(enum terrain_flag_id flag)
{
  int num = 0;
  struct terrain *terr = NULL;

  terrain_type_iterate(pterr) {
    if (terrain_has_flag(pterr, flag)) {
      num++;
      if (fc_rand(num) == 1) {
        terr = pterr;
      }
    }
  } terrain_type_iterate_end;

  return terr;
}

******
  Return the (translated) name of the terrain.
  You don't have to free the return pointer.
*/
const char *terrain_name_translation(const struct terrain *pterrain)
{
  return name_translation_get(&pterrain->name);
}

****
  Return the (untranslated) rule name of the terrain.
  You don't have to free the return pointer.
/
const char *terrain_rule_name(const struct terrain *pterrain)
{
  return rule_name_get(&pterrain->name);
}

******
  Check for resource in terrain resources list.
*/
bool terrain_has_resource(const struct terrain *pterrain,
                          const struct resource *presource)
{
  struct resource **r = pterrain->resources;

  while (NULL != *r) {
    if (*r == presource) {
      return TRUE;
    }
    r++;
  }
  return FALSE;
}

****
  Return the first item of resources.
/
struct resource *resource_array_first(void)
{
  if (game.control.resource_count > 0) {
    return civ_resources;
  }
  return NULL;
}

****
  Return the last item of resources.
/
const struct resource *resource_array_last(void)
{
  if (game.control.resource_count > 0) {
    return &civ_resources[game.control.resource_count - 1];
  }
  return NULL;
}

****
  Return the resource count.
/
Resource_type_id resource_count(void)
{
  return game.control.resource_count;
}

****
  Return the resource index.

  Currently same as resource_number(), paired with resource_count()
  indicates use as an array index.
/
Resource_type_id resource_index(const struct resource *presource)
{
  fc_assert_ret_val(NULL != presource, -1);
  return presource - civ_resources;
}

****
  Return the resource index.
/
Resource_type_id resource_number(const struct resource *presource)
{
  fc_assert_ret_val(NULL != presource, -1);
  return presource->item_number;
}

******
  Return the resource for the given resource index.
*/
struct resource *resource_by_number(const Resource_type_id type)
{
  if (type < 0 || type >= game.control.resource_count) {
    /* This isn't an error; some callers depend on it. */
    return NULL;
  }
  return &civ_resources[type];
}

******
  Return the resource type matching the identifier, or NULL when none matches.
*/
struct resource *resource_by_identifier(const char identifier)
{
  resource_type_iterate(presource) {
    if (presource->identifier == identifier) {
      return presource;
    }
  } resource_type_iterate_end;

  return NULL;
}

******
  Return the resource type matching the name, or NULL when none matches.
*/
struct resource *resource_by_rule_name(const char *name)
{
  const char *qname = Qn_(name);

  resource_type_iterate(presource) {
    if (0 == fc_strcasecmp(resource_rule_name(presource), qname)) {
      return presource;
    }
  } resource_type_iterate_end;

  return NULL;
}

******
  Return the (translated) name of the resource.
  You don't have to free the return pointer.
*/
const char *resource_name_translation(const struct resource *presource)
{
  return name_translation_get(&presource->name);
}

****
  Return the (untranslated) rule name of the resource.
  You don't have to free the return pointer.
/
const char *resource_rule_name(const struct resource *presource)
{
  return rule_name_get(&presource->name);
}

******
  This iterator behaves like adjc_iterate or cardinal_adjc_iterate depending
  on the value of card_only.
*/
#define variable_adjc_iterate(center_tile, _tile, card_only)		\
{									\
  enum direction8 *_tile##_list;					\
  int _tile##_count;							\
									\
  if (card_only) {							\
    _tile##_list = game.map.cardinal_dirs;				\
    _tile##_count = game.map.num_cardinal_dirs;				\
  } else {								\
    _tile##_list = game.map.valid_dirs;					\
    _tile##_count = game.map.num_valid_dirs;				\
  }									\
  adjc_dirlist_iterate(center_tile, _tile, _tile##_dir,			\
                       _tile##_list, _tile##_count) {

#define variable_adjc_iterate_end					\
  } adjc_dirlist_iterate_end;						\
}

******
  Returns TRUE iff any cardinally adjacent tile containsbool is_terrain_card_near(const struct tile *ptile,
			  const struct terrain *pterrain,
                          bool check_self)
{
  if (!pterrain) {
    return FALSE;
  }

  cardinal_adjc_iterate(ptile, adjc_tile) {
    if (tile_terrain(adjc_tile) == pterrain) {
      return TRUE;
    }
  } cardinal_adjc_iterate_end;

  return check_self && ptile->terrain == pterrainconst struct tile *ptile,
			  const struct terrain *pterrain,
                          bool check_self)
{
  if (!pterrain) {
    return FALSE;
  }

  adjc_iterate(ptile, adjc_tile) {
    if (tile_terrain(adjc_tile) == pterrain) {
      return TRUE;
    }
  } adjc_iterate_end;

  return check_self && ptile->terrain == pterrainconst struct tile *ptile,
			    bool cardinal_only, bool percentage,
			    const struct terrain *pterrain)
{
  int count = 0, total = 0;

  variable_adjc_iterate(ptile, adjc_tile, cardinal_only) {
    if (pterrain && tile_terrain(adjc_tile) == pterrain) {
      count++;
    }
    total++;
  } variable_adjc_iterate_end;

  if (percentage) {
    count = count * 100 / total;
  }
  return count;
}

******
  Return the number of adjacent tiles that have the given terrain property.
*/
int count_terrain_property_near_tile(const struct tile *ptile,
				     bool cardinal_only, bool percentage,
				     enum mapgen_terrain_property prop)
{
  int count = 0, total = 0;

  variable_adjc_iterate(ptile, adjc_tile, cardinal_only) {
    struct terrain *pterrain = tile_terrain(adjc_tile);
    if (pterrain->property[prop] > 0) {
      count++;
    }
    total++;
  } variable_adjc_iterate_end;

  if (percentage) {
    count = count * 100 / total;
  }
  return count;
}

******
  Returns TRUE iff any cardinally adjacent tile contains the given resource.
*/
bool is_resource_card_near(const struct tile *ptile,
                           const struct resource *pres,
                           bool check_self)
{
  if (!pres) {
    return FALSE;
  }

  cardinal_adjc_iterate(ptile, adjc_tile) {
    if (tile_resource(adjc_tile) == pres) {
      return TRUE;
    }
  } cardinal_adjc_iterate_end;

  return check_self && tile_resource(ptile) == pres;
}

******
  Returns TRUE iff any adjacent tile contains the given resource.
*/
bool is_resource_near_tile(const struct tile *ptile,
                           const struct resource *pres,
                           bool check_self)
{
  if (!pres) {
    return FALSE;
  }

  adjc_iterate(ptile, adjc_tile) {
    if (tile_resource(adjc_tile) == pres) {
      return TRUE;
    }
  } adjc_iterate_end;

  return check_self && tile_resource(ptile) == pres;
}

******
  Returns TRUE iff any cardinally adjacent tile contains terrain with the
  given flag (does not check ptile itself).
*/
bool is_terrain_flag_card_near(const struct tile *ptile,
			       enum terrain_flag_id flag)
{
  cardinal_adjc_iterate(ptile, adjc_tile) {
    struct terrain* pterrain = tile_terrain(adjc_tile);
    if (T_UNKNOWN != pterrain
	&& terrain_has_flag(pterrain, flag)) {
      return TRUE;
    }
  } cardinal_adjc_iterate_end;

  return FALSE;
}

******
  Returns TRUE iff any adjacent tile contains terrain with the given flag
  (does not check ptile itself).
*/
bool is_terrain_flag_near_tile(const struct tile *ptile,
			       enum terrain_flag_id flag)
{
  adjc_iterate(ptile, adjc_tile) {
    struct terrain* pterrain = tile_terrain(adjc_tile);
    if (T_UNKNOWN != pterrain
	&& terrain_has_flag(pterrain, flag)errain with the given flag
  (not including ptile itself).
*/
int count_terrain_flag_near_tile(const struct tile *ptile,
				 bool cardinal_only, bool percentage,
				 enum terrain_flag_id flag)
{
  int count = 0, total = 0;

  variable_adjc_iterate(ptile, adjc_tile, cardinal_only) {
    struct terrain *pterrain = tile_terrain(adjc_tile);
    if (T_UNKNOWN != pterrain
	&& terrain_has_flag(pterrain, flag)) {
      count++;
    }
    total++;
  } variable_adjc_iterate_end;

  if (percentage) {
    count = count * 100 / total;
  }
  return count;
}

******
  Return a (static) string with extra(s) name(s):
    eg: "Mine"
    eg: "Road/Farmland"
  This only includes "infrastructure", i.e., man-made extras.
*/
const char *get_infrastructure_text(bv_extras extras)
{
  static char s[256];
  char *p;
  int len;

  s[0] = '\0';

  extra_type_iterate(pextra) {
    if (pextra->category == ECAT_INFRA
        && BV_ISSET(extras, extra_index(pextra))) {
      bool hidden = FALSE;

      extra_type_iterate(top) {
        int topi = extra_index(top);

        if (BV_ISSET(pextra->hidden_by, topi)
            && BV_ISSET(extras, topi)) {
          hidden = TRUE;
          break;
        }
      } extra_type_iterate_end;

      if (!hidden) {
        cat_snprintf(s, sizeof(s), "%s/", extra_name_translation(pextra));
      }
    }
  } extra_type_iterate_end;

  len = strlen(s);
  p = s + len - 1;
  if (len > 0 && *p == '/') {
    *p = '\0';
  }

  return s;
}

******
  Returns the highest-priority (best) infrastructure (man-made extra) to
  be pillaged from the terrain set.  May return NULL if nothing
  better is available.
*/
struct extra_type *get_preferred_pillage(bv_extras extras)
{
  extra_type_by_cause_iterate_rev(EC_IRRIGATION, pextra) {
    if (is_extra_removed_by(pextra, ERM_PILLAGE) && BV_ISSET(extras, extra_index(pextra))) {
      return pextra;
    }
  } extra_type_by_cause_iterate_rev_end;

  extra_type_by_cause_iterate_rev(EC_MINE, pextra) {
    if (is_extra_removed_by(pextra, ERM_PILLAGE) && BV_ISSET(extras, extra_index(pextra))) {
      return pextra;
    }
  } extra_type_by_cause_iterate_rev_end;

  extra_type_by_cause_iterate_rev(EC_BASE, pextra) {
    if (is_extra_removed_by(pextra, ERM_PILLAGE) && BV_ISSET(extras, extra_index(pextra))) {
      return pextra;
    }
  } extra_type_by_cause_iterate_rev_end;

  extra_type_by_cause_iterate_rev(EC_ROAD, pextra) {
    if (is_extra_removed_by(pextra, ERM_PILLAGE) && BV_ISSET(extras, extra_index(pextra))) {
      return pextra;
    }
  } extra_type_by_cause_iterate_rev_end;

  return NULL;
}

******
  What terrain class terrain type belongs to.
*/
enum terrain_class terrain_type_terrain_class(const struct terrain *pterrain)
{
  return pterrain->tclass;
}

******
  Is there terrain of the given class cardinally near tile?
  (Does not check ptile itself.)
*/
bool is_terrain_class_card_near(const struct tile *ptile,
                                enum terrain_class tclass)
{
  cardinal_adjc_iterate(ptile, adjc_tile) {
    struct terrain* pterrain = tile_terrain(adjc_tile);

    if (pterrain != T_UNKNOWN) {
      if (terrain_type_terrain_class(pterrain) == tclass) {
        return TRUE;
      }
    }
  } cardinal_adjc_iterate_end;

  return FALSE;
}

******
  Is there terrain of the given class near tile?
  (Does not check ptile itself.)
*/
bool is_terrain_class_near_tile(const struct tile *ptile,
                                enum terrain_class tclass)
{
  adjc_iterate(ptile, adjc_tile) {
    struct terrain* pterrain = tile_terrain(adjc_tile);

    if (pterrain != T_UNKNOWN) {
      if (terrain_type_terrain_class(pterrain) == tclass) {
        return TRUE;
      }
    }
  } adjc_iterate_end;

  return FALSE;
}

******
  Return the number of adjacent tiles that have given terrain class
  (not including ptile itself).
*/
int count_terrain_class_near_tile(const struct tile *ptile,
                                  bool cardinal_only, bool percentage,
                                  enum terrain_class tclass)
{
  int count = 0, total = 0;

  variable_adjc_iterate(ptile, adjc_tile, cardinal_only) {
    struct terrain *pterrain = tile_terrain(adjc_tile);
    if (T_UNKNOWN != pterrain
        && terrain_type_terrain_class(pterrain) == tclass) {
      count++;
    }
    total++;
  } variable_adjc_iterate_end;

  if (percentage) {
    count = count * 100 / total;
  }

  return count;
}

******
  Return the (translated) name of the given terrain class.
  You don't have to free the return pointer.
*/
const char *terrain_class_name_translation(enum terrain_class tclass)
{
  if (!terrain_class_is_valid(tclass)) {
    return NULL;
  }

  return _(terrain_class_name(tclass));
}

******
  Can terrain support given infrastructure?
*/
bool terrain_can_support_alteration(const struct terrain *pterrain,
                                    enum terrain_alteration alter)
{
  switch (alter) {
   case TA_CAN_IRRIGATE:
     return (pterrain == pterrain->irrigation_result);
   case TA_CAN_MINE:
     return (pterrain == pterrain->mining_result);
   case TA_CAN_ROAD:
     return (pterrain->road_time > 0);
   default:
     break;
  }

  fc_assert(FALSE);
  return FALSE;
}

******
   Time to complete the extra building activity onterrain_extra_build_time(const struct terrain *pterrain,
                             enum unit_activity activity,
                             const struct extra_type *tgt)
{
  int factor;

  if (tgt != NULL && tgt->build_time != 0) {
    /* Extra specific build time */
    return tgt->build_time;
  }

  if (tgt == NULL) {
    factor = 1;
  } else {
    factor = tgt->build_time_factor;
  }

  /* Terrain and activity specific build time */
  switch (activity) {
  case ACTIVITY_BASE:
    return pterrain->base_time * factor;
  case ACTIVITY_GEN_ROAD:
    return pterrain->road_time * factor;
  case ACTIVITY_IRRIGATE:
    return pterrain->irrigation_time * factor;
  case ACTIVITY_MINE:
    return pterrain->mining_time * factor;
  default:
    fc_assert(FALSE);
    return 0;
  }
}

******
   Time to complete the extra removal activity onterrain_extra_removal_time(const struct terrain *pterrain,
                               enum unit_activity activity,
                               const struct extra_type *tgt)
{
  int factor;

  if (tgt != NULL && tgt->removal_time != 0) {
    /* Extra specific removal time */
    return tgt->removal_time;
  }

  if (tgt == NULL) {
    factor = 1;
  } else {
    factor = tgt->removal_time_factor;
  }

  /* Terrain and activity specific removal time */
  switch (activity) {
  case ACTIVITY_POLLUTION:
    return pterrain->clean_pollution_time * factor;
  case ACTIVITY_FALLOUT:
    return pterrain->clean_fallout_time * factor;
  case ACTIVITY_PILLAGE:
    return pterrain->pillage_time * factor;
  default:
    fc_assert(FALSE);
    return 0;
  }
}

****
  Initialize user terrain type flags.
/
void user_terrain_flags_init(void)
{
  int i;

  for (i = 0; i < MAX_NUM_USER_TER_FLAGS; i++) {
    user_flag_init(&user_terrain_flags[i]);
  }
}


  Frees the memory associated with all user terrain flags
***************************************************************/
void user_terrain_flags_free(void)
{
  int i;

  for (i = 0; i < MAX_NUM_USER_TER_FLAGS; i++) {
    user_flag_free(&user_terrain_flags[i]);
  }
}

****
  Sets user defined name for terrain flag.
/
void set_user_terrain_flag_name(enum terrain_flag_id id, const char *name,
                                const char *helptxt)
{
  int tfid = id - TER_USER_1;

  fc_assert_ret(id >= TER_USER_1 && id <= TER_USER_LAST);

  if (user_terrain_flags[tfid].name != NULL) {
    FC_FREE(user_terrain_flags[tfid].name);
    user_terrain_flags[tfid].name = NULL;
  }

  if (name && name[0] != '\0') {
    user_terrain_flags[tfid].name = fc_strdup(name);
  }

  if (user_terrain_flags[tfid].helptxt != NULL) {
    FC_FREE(user_terrain_flags[tfid].helptxt);
    user_terrain_flags[tfid].helptxt = NULL;
  }

  if (helptxt && helptxt[0] != '\0') {
    user_terrain_flags[tfid].helptxt = fc_strdup(helptxt);
  }
}

****
  Terrain flag name callback, called from specenum code.
/
const char *terrain_flag_id_name_cb(enum terrain_flag_id flag)
{
  if (flag < TER_USER_1 || flag > TER_USER_LAST) {
    return NULL;
  }

  return user_terrain_flags[flag-TER_USER_1].name;
}

****
  Return the (untranslated) helptxt of the user terrain flag.
/
const char *terrain_flag_helptxt(enum terrain_flag_id id)
{
  fc_assert(id >= TER_USER_1 && id <= TER_USER_LAST);

  return user_terrain_flags[id - TER_USER_1].helptxENDREP
DELTA 31729 2588 318
SVN  ‚“O‚“c  G  À%H p½x ¯>ÁYˆ „<ñˆ |õS*FREECIV_FREECIV_ENDREP
DELTA 32091 6833 941
SVN  Î*Î.  ¬  l©8 ¡#­ENDREP
DELTA 32409 1082 121
SVN  …—G…—`6 G  Ÿ!F€Q àz 0€a ƒµ„ à/„·_get(name))) {
    secfile_insert_str(sfile,
                       rule_name_get_get(&s->name), rule_name_get(&s->abbreviation))) {
      secfile_insert_str(sfile, rule_name_get_getENDREP
DELTA 32397 51 117
SVN  †  †   G  ƒ¿5F„ ‚à ƒ¿{_get†  ãJãO… ãJ t_outENDREP
DELTA 30000 435 25
SVN  ¡¡ G  œH j™n ƒT<*ENDREP
DELTA 30222 60459 110
SVN  ×g×k G  ›zH„ »%œB*_getENDREP
DELTA 30000 541 25
SVN  £3£7
 œL „ †gœL_getENDREP
DELTA 32450 7172 215
SVN  „œJ„œS é „ “Té„  rüi þp‚Z_get_getENDREP
DELTA 30000 1868 25
SVN  ÿÿ G  ÈIH„ µsÉ*_getENDREP
DELTA 30000 1917 148
SVN  ››FN‚% G  £H„ Ÿ£g ^Ì&‡ È2„ ‚Äh€Z gÇM„ ‚É4¹ ‚%Ì „ ‚gÎ%€r ‚)Ñy„ ‚mÔ"„ r× ÃØ *_get\"%s\" _get_get(&pruler_title->male));
    }
    ret = FALSE;
  }

  if (!formats_match(rule_name_get_get_get(&pruler_title->female));
    }
    ret = FALSE;
  }
_get_get(&pruler_title->male),
                name_translation_get(&pruler_title->male));
    }
    ret = FALSE;
  }
_get_getENDREP
id: qhc.5qi.r32460/32340
type: file
pred: qhc.5qi.r30222/90944
count: 21
text: 32460 31685 30 11243 7c09ef9ce907ac6d1302a58630e41903
props: 26905 214628 34 0 25e6c2f7558b7484000d4d090dea5b92
cpath: /branches/S2_6/common/achievements.c
copyroot: 27474 /branches/S2_6

id: q.5qi.r32460/32607
type: file
pred: q.5qi.r32397/3477
count: 565
text: 32460 31552 52 115151 2067cbd6ea675164a24d36e221483a01
props: 11069 12442 112 0 7c45f13e78520e4754bc476682276743
cpath: /branches/S2_6/common/city.c
copyroot: 27474 /branches/S2_6

id: b2m.5qi.r32460/32863
type: file
pred: b2m.5qi.r30000/39648
count: 9
text: 32460 31744 25 4535 0fb694e3e44bc6fbd821ec011c0fef17
props: 26905 214926 34 0 25e6c2f7558b7484000d4d090dea5b92
cpath: /branches/S2_6/common/disaster.c
copyroot: 27474 /branches/S2_6

id: o9u.5qi.r32460/33124
type: file
pred: o9u.5qi.r32091/24903
count: 69
text: 32460 31243 27 26414 b8852a60aa5cebdab395627d46f21654
props: 26905 205525 34 0 25e6c2f7558b7484000d4d090dea5b92
cpath: /branches/S2_6/common/extras.c
copyroot: 27474 /branches/S2_6

id: he.5qi.r32460/33385
type: file
pred: he.5qi.r30000/40431
count: 85
text: 32460 31927 385 19910 d6d5cded7077948a221f34b44e502c8c
props: 11057 31287 111 0 a3a3251698e05efa35962766e5c7e5c1
cpath: /branches/S2_6/common/government.c
copyroot: 27474 /branches/S2_6

id: vb.5qi.r32460/33649
type: file
pred: vb.5qi.r31729/3851
count: 115
text: 32460 31153 62 35299 55ab9de02e9f12fe40e26e46745d41f2
props: 11067 578 111 0 3f70303ff9ea148b5e232db96a904e98
cpath: /branches/S2_6/common/improvement.c
copyroot: 27474 /branches/S2_6

id: 197b.5qi.r32460/33911
type: file
pred: 197b.5qi.r30000/40959
count: 4
text: 32460 31630 29 4244 1fe2091abeaacbed102973cef80df7ab
props: 26905 218431 34 0 25e6c2f7558b7484000d4d090dea5b92
cpath: /branches/S2_6/common/multipliers.c
copyroot: 27474 /branches/S2_6

id: 4k1.5qi.r32460/34177
type: file
pred: 4k1.5qi.r31722/47
count: 11
text: 32460 9987 28 5154 406c053a3f780c3120461bff0b39314f
props: 26905 217549 34 0 25e6c2f7558b7484000d4d090dea5b92
cpath: /branches/S2_6/common/name_translation.h
copyroot: 27474 /branches/S2_6

id: il.5qi.r32460/34443
type: file
pred: il.5qi.r30333/79
count: 106
text: 32460 0 682 43332 ee99987aa4badcbedc9cc462ff02c6bb
props: 11057 33068 111 0 b67b0fa27168318cbcd02c748356f132
cpath: /branches/S2_6/common/nation.c
copyroot: 27474 /branches/S2_6

id: 4ro.5qi.r32460/34697
type: file
pred: 4ro.5qi.r32286/600
count: 38
text: 32460 9168 79 41906 a735f41eed27b52a5e84c9585b82a741
props: 26905 200850 34 0 25e6c2f7558b7484000d4d090dea5b92
cpath: /branches/S2_6/common/research.c
copyroot: 27474 /branches/S2_6

id: 33f.5qi.r32460/34957
type: file
pred: 33f.5qi.r30000/42012
count: 17
text: 32460 9328 30 7402 f1f97a87ddd8920aa67526795bedf429
props: 10490 6797 110 0 dce24d5ac3f5e86568d59a55fa196991
cpath: /branches/S2_6/common/specialist.c
copyroot: 27474 /branches/S2_6

id: zzb.5qi.r32460/35219
type: file
pred: zzb.5qi.r30000/42275
count: 11
text: 32460 9271 30 7768 e8d95de4b02716f841c45f888fa870ce
props: 26905 204351 34 0 25e6c2f7558b7484000d4d090dea5b92
cpath: /branches/S2_6/common/style.c
copyroot: 27474 /branches/S2_6

id: t.5qi.r32460/35477
type: file
pred: t.5qi.r30000/42534
count: 175
text: 32460 31870 30 16264 e6f96f41dc73e6d5d4cf2e9a2a92ddcf
props: 11069 11747 112 0 0ba48eb7b1f123775dc0e292f9b3ab64
cpath: /branches/S2_6/common/tech.c
copyroot: 27474 /branches/S2_6

id: 2fp.5qi.r32460/35733
type: file
pred: 2fp.5qi.r31850/1590
count: 128
text: 32460 10039 21087 29045 b0cb839d6d8aa80b1e109c8b42a6eb8c
props: 10805 60404 111 0 eaeaff8c6ba56cfe19b921c33649c016
cpath: /branches/S2_6/common/terrain.c
copyroot: 27474 /branches/S2_6

id: v9.5qi.r32460/35998
type: file
pred: v9.5qi.r32450/14141
count: 212
text: 32460 31795 47 69203 3937dd7989d28d5ec29a4ff1587e70d5
props: 10932 10175 111 0 3f70303ff9ea148b5e232db96a904e98
cpath: /branches/S2_6/common/unittype.c
copyroot: 27474 /branches/S2_6

PLAIN
K 11
Makefile.am
V 24
file 5h.5qi.r30222/90685
K 14
achievements.c
V 25
file qhc.5qi.r32460/32340
K 14
achievements.h
V 26
file qhe.5ck.r26905/215849
K 9
actions.c
V 23
file r7a.5qi.r32272/312
K 9
actions.h
V 25
file r7c.5qi.r32222/11695
K 4
ai.c
V 24
file 4go.5qi.r31727/7651
K 4
ai.h
V 22
file 4gp.5qi.r32306/48
K 6
aicore
V 23
dir 18t.5qi.r32397/3226
K 6
base.c
V 24
file 3jw.5qi.r32133/1266
K 6
base.h
V 25
file 3jx.5qi.r32070/28990
K 9
borders.c
V 25
file 4f0.5qi.r31936/23401
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.r32460/32607
K 6
city.h
V 23
file 3q.5qi.r31727/7906
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 23
file wp.5qi.r31095/9496
K 8
combat.h
V 24
file wq.5ck.r24573/25814
K 12
connection.c
V 23
file un.5qi.r31660/6530
K 12
connection.h
V 24
file uo.5qi.r30394/34772
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.r32448/18213
K 8
dataio.h
V 24
file 15s.5ck.r26834/4081
K 11
diptreaty.c
V 23
file 3r.5qi.r29571/7104
K 11
diptreaty.h
V 23
file 3s.5qi.r27518/9734
K 10
disaster.c
V 25
file b2m.5qi.r32460/32863
K 10
disaster.h
V 26
file b2o.5ck.r26905/216145
K 9
effects.c
V 26
file 2eo.5qi.r30061/225985
K 9
effects.h
V 24
file 2ep.5qi.r29180/3668
K 8
events.c
V 24
file 33h.5qi.r31910/5405
K 8
events.h
V 23
file 3t.5qi.r31910/5660
K 8
extras.c
V 25
file o9u.5qi.r32460/33124
K 8
extras.h
V 23
file o9w.5qi.r32238/715
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.r29369/494
K 14
fc_interface.h
V 25
file 4uq.5qi.r28204/10610
K 10
fc_types.h
V 25
file 2ll.5qi.r32091/25424
K 15
featured_text.c
V 24
file 4h3.5qi.r32397/3731
K 15
featured_text.h
V 25
file 4h4.5qi.r30000/40165
K 6
game.c
V 23
file 3u.5qi.r32409/2010
K 6
game.h
V 23
file 3v.5qi.r32409/2267
K 19
generate_packets.py
V 23
file 2f4.5qi.r31953/183
K 12
government.c
V 24
file he.5qi.r32460/33385
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.r32460/33649
K 13
improvement.h
V 23
file vc.5ck.r26605/3666
K 5
map.c
V 22
file r.5qi.r32397/3998
K 5
map.h
V 24
file 41.5qi.r32037/12844
K 11
map_types.h
V 25
file 2175.5qi.r32035/4722
K 8
mapimg.c
V 24
file 6n9.5qi.r31729/4617
K 8
mapimg.h
V 26
file 6na.5ck.r26905/215559
K 15
metaknowledge.c
V 24
file siq.5qi.r32261/3828
K 15
metaknowledge.h
V 24
file sis.5qi.r32261/4092
K 10
movement.c
V 25
file 2xv.5qi.r32446/11692
K 10
movement.h
V 25
file 2xw.5qi.r32446/11952
K 13
multipliers.c
V 26
file 197b.5qi.r32460/33911
K 13
multipliers.h
V 26
file 197d.5qi.r29118/55021
K 18
name_translation.h
V 25
file 4k1.5qi.r32460/34177
K 8
nation.c
V 24
file il.5qi.r32460/34443
K 8
nation.h
V 22
file im.5ck.r27000/284
K 9
packets.c
V 24
file 43.5qi.r32448/18474
K 11
packets.def
V 25
file 2f5.5qi.r32438/17855
K 9
packets.h
V 23
file 44.5qi.r31079/5570
K 8
player.c
V 22
file 45.5qi.r32431/510
K 8
player.h
V 23
file 46.5qi.r31727/8160
K 14
requirements.c
V 23
file 2wq.5qi.r32238/971
K 14
requirements.h
V 23
file 2wr.5qi.r32230/477
K 10
research.c
V 25
file 4ro.5qi.r32460/34697
K 10
research.h
V 23
file 4rp.5qi.r27751/838
K 10
rgbcolor.c
V 25
file 6i6.5qi.r31094/53296
K 10
rgbcolor.h
V 25
file 6i7.5qi.r31094/53559
K 6
road.c
V 24
file 6pq.5qi.r32133/1519
K 6
road.h
V 25
file 6pr.5qi.r32070/29504
K 10
scriptcore
V 23
dir 75a.5qi.r32397/6799
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 25
file 33f.5qi.r32460/34957
K 12
specialist.h
V 24
file 33g.5qi.r29571/9422
K 7
style.c
V 25
file zzb.5qi.r32460/35219
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.r32460/35477
K 6
tech.h
V 21
file u.5qi.r29318/376
K 9
terrain.c
V 25
file 2fp.5qi.r32460/35733
K 9
terrain.h
V 24
file qs.5qi.r32000/20696
K 6
tile.c
V 23
file 2ys.5qi.r32399/166
K 6
tile.h
V 25
file 2yt.5qi.r32091/26210
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 24
file 7k3.5qi.r30331/8160
K 6
unit.c
V 23
file v.5qi.r32450/13888
K 6
unit.h
V 23
file 48.5qi.r32426/3841
K 10
unitlist.c
V 25
file 39m.5qi.r31890/34877
K 10
unitlist.h
V 25
file 39n.5qi.r27612/26147
K 10
unittype.c
V 24
file v9.5qi.r32460/35998
K 10
unittype.h
V 24
file va.5qi.r32450/14401
K 9
version.c
V 22
file oe.5qi.r31867/502
K 9
version.h
V 22
file e7.5qi.r31867/755
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.r32460/41578
type: dir
pred: p.5qi.r32450/19968
count: 4436
text: 32460 36260 5305 0 5e0203a420e2041784160cb37fead175
props: 23743 0 112 0 b2bc91bf125d83375389d51f25ff2c2f
cpath: /branches/S2_6/common
copyroot: 27474 /branches/S2_6

id: 8w.5qi.r32460/41821
type: file
pred: 8w.5qi.r32409/8060
count: 818
text: 32460 9387 573 249823 4cf8cecfb5f1985c17c4279863f0b1a6
props: 11085 367 112 0 7f6d12fc80ead5cc285da723cb8caa9d
cpath: /branches/S2_6/server/ruleset.c
copyroot: 27474 /branches/S2_6

PLAIN
K 11
Makefile.am
V 23
file 5q.5qi.r31934/8804
K 13
actiontools.c
V 27
file 1p8q.5qi.r31154/115051
K 13
actiontools.h
V 26
file 1p8t.5qi.r28430/14182
K 8
advisors
V 24
dir 4n2.5qi.r32450/21907
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 24
file vnk.5qi.r31066/7733
K 9
animals.h
V 25
file vnm.5ck.r26905/63257
K 6
auth.c
V 25
file 39c.5qi.r32424/65601
K 6
auth.h
V 25
file 39d.5ck.r18977/19170
K 11
barbarian.c
V 24
file lw.5qi.r32446/19397
K 11
barbarian.h
V 22
file lx.5qi.r28606/673
K 14
citizenshand.c
V 25
file 6mz.5qi.r29646/26851
K 14
citizenshand.h
V 25
file 6n0.5ck.r26905/56662
K 10
cityhand.c
V 22
file 10.5qi.r31108/127
K 10
cityhand.h
V 23
file 4f.0.r13297/423686
K 11
citytools.c
V 24
file 4g.5qi.r32455/15053
K 11
citytools.h
V 24
file 4h.5qi.r32455/15315
K 10
cityturn.c
V 23
file 4i.5qi.r32238/6785
K 10
cityturn.h
V 24
file 4j.5qi.r31248/20765
K 11
civserver.c
V 23
file 4k.5qi.r31884/4813
K 10
commands.c
V 25
file 2ly.5qi.r30817/40910
K 10
commands.h
V 25
file 2lz.5qi.r28013/36715
K 13
connecthand.c
V 25
file 2dw.5qi.r32147/25989
K 13
connecthand.h
V 24
file 2dx.5ck.r23606/2057
K 9
console.c
V 23
file dd.5qi.r32113/7031
K 9
console.h
V 23
file de.5qi.r31515/8464
K 10
diplhand.c
V 24
file 4m.5qi.r31333/19083
K 10
diplhand.h
V 23
file 4n.5qi.r27518/5128
K 11
diplomats.c
V 24
file vz.5qi.r32446/19919
K 11
diplomats.h
V 23
file w0.5ck.r27461/1674
K 10
edithand.c
V 25
file 3bk.5qi.r32438/23915
K 10
edithand.h
V 25
file 4ez.5qi.r32438/24178
K 6
fcdb.c
V 23
file 6l3.5qi.r30953/119
K 6
fcdb.h
V 25
file 6l4.5ck.r26905/57239
K 10
gamehand.c
V 23
file 4o.5qi.r32422/8276
K 10
gamehand.h
V 22
file 4p.5qi.r32336/957
K 9
generator
V 24
dir 2me.5qi.r32450/23372
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.r32446/20179
K 9
maphand.h
V 24
file 14.5qi.r31936/31725
K 6
meta.c
V 24
file 4s.5qi.r31660/12600
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.5qi.r32424/65857
K 8
notify.h
V 25
file 4i3.5qi.r32424/66117
K 9
plrhand.c
V 24
file 4u.5qi.r31936/31983
K 9
plrhand.h
V 24
file 4v.5qi.r31793/46952
K 8
report.c
V 23
file vi.5qi.r29900/1902
K 8
report.h
V 23
file vj.5qi.r29900/2158
K 10
rssanity.c
V 22
file hew.5qi.r32208/48
K 10
rssanity.h
V 25
file hey.5ck.r26905/55500
K 9
ruleset.c
V 24
file 8w.5qi.r32460/41821
K 9
ruleset.h
V 25
file 8x.5qi.r32231/107042
K 13
sanitycheck.c
V 23
file wi.5qi.r30958/3358
K 13
sanitycheck.h
V 24
file wj.5qi.r28076/13693
K 12
savecompat.c
V 23
file qva.5qi.r32018/924
K 12
savecompat.h
V 24
file qvc.5qi.r30204/4618
K 10
savegame.c
V 22
file vl.5qi.r32309/228
K 10
savegame.h
V 24
file vm.5ck.r20758/19233
K 11
savegame2.c
V 23
file 4m0.5qi.r32433/143
K 11
savegame2.h
V 25
file 4m1.5ck.r26905/58971
K 7
score.c
V 25
file 2eg.5qi.r29646/30135
K 7
score.h
V 24
file 2eh.5ck.r21929/6179
K 9
scripting
V 24
dir 31x.5qi.r32450/25206
K 8
sernet.c
V 23
file 15.5qi.r32162/2254
K 8
sernet.h
V 24
file 4y.5qi.r31872/13733
K 10
settings.c
V 25
file 2m0.5qi.r32035/11663
K 10
settings.h
V 23
file 2m1.5qi.r29780/954
K 11
spacerace.c
V 23
file 9a.5qi.r31487/5759
K 11
spacerace.h
V 23
file 9b.5qi.r31487/6019
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.r32455/15572
K 10
srv_main.h
V 23
file vh.5qi.r31621/2340
K 11
stdinhand.c
V 23
file 4z.5qi.r32171/1898
K 11
stdinhand.h
V 23
file 50.5qi.r32171/2160
K 11
techtools.c
V 22
file 33n.5qi.r31624/97
K 11
techtools.h
V 23
file 33o.5qi.r31624/354
K 10
unithand.c
V 24
file 18.5qi.r32455/15832
K 10
unithand.h
V 24
file 19.5qi.r32446/22285
K 11
unittools.c
V 24
file 1a.5qi.r32446/22542
K 11
unittools.h
V 24
file 1b.5qi.r32446/22805
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.r32460/46035
type: dir
pred: z.5qi.r32455/20045
count: 6245
text: 32460 42080 3942 0 ab51cad83817d558738a5755281f0345
props: 23990 448 166 0 e5026e1cb18fe57b41417951bfac7b19
cpath: /branches/S2_6/server
copyroot: 27474 /branches/S2_6

id: thd.5qp.r32460/46280
type: file
pred: thd.5qp.r32409/12504
count: 101
text: 32460 31298 226 84960 a377f771a6c93074bccede05f0a89570
props: 26905 29675 34 0 25e6c2f7558b7484000d4d090dea5b92
cpath: /branches/S2_6/tools/ruledit/rulesave.c
copyroot: 21464 /trunk/tools

id: vct.5qp.r32460/46549
type: file
pred: vct.5qp.r31831/4548
count: 16
text: 32460 706 8433 12828 85102c0172c74fdf3685a524baa944cb
props: 26905 32142 34 0 25e6c2f7558b7484000d4d090dea5b92
cpath: /branches/S2_6/tools/ruledit/tab_tech.cpp
copyroot: 21464 /trunk/tools

PLAIN
K 11
Makefile.am
V 24
file sso.5js.r27114/4408
K 17
requirers_dlg.cpp
V 25
file 1942.5qp.r27598/6725
K 15
requirers_dlg.h
V 26
file 1944.5js.r26905/32801
K 11
ruledit.cpp
V 23
file ssq.5rd.r31745/150
K 9
ruledit.h
V 24
file uyp.5qp.r30591/1344
K 14
ruledit_qt.cpp
V 24
file uyr.5qp.r30591/1605
K 12
ruledit_qt.h
V 23
file uys.5qp.r30452/358
K 10
rulesave.c
V 25
file thd.5qp.r32460/46280
K 10
rulesave.h
V 25
file thf.5js.r26905/30946
K 16
tab_building.cpp
V 25
file 1dyi.5qp.r31831/4010
K 14
tab_building.h
V 25
file 1dyk.5qp.r31831/4281
K 12
tab_misc.cpp
V 23
file vcq.5qp.r28641/466
K 10
tab_misc.h
V 25
file vcs.5js.r26905/30028
K 14
tab_nation.cpp
V 25
file 18bk.5qp.r27598/7533
K 12
tab_nation.h
V 26
file 18bm.5js.r26905/29111
K 12
tab_tech.cpp
V 25
file vct.5qp.r32460/46549
K 10
tab_tech.h
V 24
file vcu.5qp.r31831/4813
K 12
tab_unit.cpp
V 25
file 1ej0.5qp.r31831/5077
K 10
tab_unit.h
V 25
file 1ej2.5qp.r31831/5345
K 10
validity.c
V 25
file 1402.5js.r27470/1762
K 10
validity.h
V 26
file 1404.5js.r26905/30640
END
ENDREP
id: ssm.5qp.r32460/47854
type: dir
pred: ssm.5qp.r32409/13808
count: 159
text: 32460 46817 1024 0 76bd41b26025ba2ba793229f145e8272
props: 28037 1441 261 0 b91e205c4bde11780878927c1dda815f
cpath: /branches/S2_6/tools/ruledit
copyroot: 21464 /trunk/tools

PLAIN
K 11
Makefile.am
V 25
file 4pk.5qp.r31934/13262
K 11
civmanual.c
V 25
file 2m5.5rg.r31890/49068
K 10
download.c
V 25
file 4pl.5qp.r31660/17565
K 10
download.h
V 23
file 4pm.5qp.r31039/105
K 9
modinst.c
V 24
file bj7.5qp.r32251/1664
K 9
modinst.h
V 24
file 76i.5qp.r32251/1916
K 7
mpcli.c
V 22
file y74.5qp.r32435/71
K 11
mpcmdline.c
V 24
file 73v.5qp.r32251/2420
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 24
file 4pn.5se.r32251/2678
K 12
mpgui_gtk3.c
V 24
file 4pn.5sf.r32251/2948
K 12
mpgui_qt.cpp
V 24
file a65.5qp.r32251/3219
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.r32460/47854
END
ENDREP
id: 4pj.5qp.r32460/48960
type: dir
pred: 4pj.5qp.r32435/1170
count: 318
text: 32460 48108 839 0 97d06ef3eea968f11413d67f0817fbc5
props: 28037 2821 325 0 931541cd07e52416301ed56de9c70dfc
cpath: /branches/S2_6/tools
copyroot: 21464 /trunk/tools

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 22
file 1h.5qi.r29455/952
K 9
ChangeLog
V 26
file 6l.5qi.r31298/7507168
K 7
INSTALL
V 22
file 6.5qi.r31740/1317
K 11
Makefile.am
V 22
file 59.5qi.r31920/516
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.r32455/4993
K 10
autogen.sh
V 22
file 12o.5qi.r32157/51
K 9
bootstrap
V 23
dir 2p5.5qi.r32074/2154
K 6
client
V 22
dir d.5qi.r32455/14551
K 6
common
V 22
dir p.5qi.r32460/41578
K 12
configure.ac
V 24
file 149.5qi.r32422/8022
K 4
data
V 22
dir w.5qi.r32414/11904
K 12
dependencies
V 23
dir 2yu.5qi.r32418/3156
K 3
doc
V 22
dir k7.5qi.r32412/3950
K 10
fc_version
V 25
file 2lo.5qj.r32455/14797
K 11
gen_headers
V 23
dir 1hsw.5qi.r32276/968
K 3
lua
V 24
dir 2c5p.5qi.r31920/4972
K 2
m4
V 23
dir 12p.5qi.r32330/3429
K 7
scripts
V 23
dir 2yo.5qi.r31853/1104
K 6
server
V 22
dir z.5qi.r32460/46035
K 5
tests
V 22
dir 2g9.5qi.r32362/652
K 5
tools
V 24
dir 4pj.5qp.r32460/48960
K 12
translations
V 25
dir t0a.5qi.r32452/364063
K 7
utility
V 23
dir 1c.5qi.r32448/27541
K 3
vms
V 25
dir u9.5ck.r21528/1396085
K 5
win32
V 23
dir 2eu.5qi.r32411/6377
END
ENDREP
id: 3.5qi.r32460/50414
type: dir
pred: 3.5qi.r32455/21499
count: 20608
text: 32460 49204 1197 0 15722d13242706bfd4849a1708bcb51c
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.r29458/5135
K 4
S2_4
V 22
dir 3.5ii.r30401/87429
K 4
S2_5
V 23
dir 3.5kv.r32451/194973
K 6
S2_5_3
V 23
dir 3.5ut.r31805/553797
K 4
S2_6
V 22
dir 3.5qi.r32460/50414
K 11
freeciv-web
V 22
dir 3.5bl.r13594/14918
END
ENDREP
id: 1.0.r32460/51051
type: dir
pred: 1.0.r32455/22137
count: 11094
text: 32460 50655 383 0 091e6507e2ce78f4d7bf14ecde2830d6
cpath: /branches
copyroot: 0 /

PLAIN
K 8
branches
V 20
dir 1.0.r32460/51051
K 4
tags
V 19
dir 2.0.r31807/7857
K 5
trunk
V 22
dir 3.5ck.r32459/21577
K 7
website
V 20
dir 3ge.0.r31885/802
END
ENDREP
id: 0.0.r32460/51373
type: dir
pred: 0.0.r32459/21967
count: 32460
text: 32460 51207 153 0 b28b660251382fac6f05d1a0b213f60c
cpath: /
copyroot: 0 /

qhc.5qi.t32459-1 modify true false /branches/S2_6/common/achievements.c

q.5qi.t32459-1 modify true false /branches/S2_6/common/city.c

b2m.5qi.t32459-1 modify true false /branches/S2_6/common/disaster.c

o9u.5qi.t32459-1 modify true false /branches/S2_6/common/extras.c

he.5qi.t32459-1 modify true false /branches/S2_6/common/government.c

vb.5qi.t32459-1 modify true false /branches/S2_6/common/improvement.c

197b.5qi.t32459-1 modify true false /branches/S2_6/common/multipliers.c

4k1.5qi.t32459-1 modify true false /branches/S2_6/common/name_translation.h

il.5qi.t32459-1 modify true false /branches/S2_6/common/nation.c

4ro.5qi.t32459-1 modify true false /branches/S2_6/common/research.c

33f.5qi.t32459-1 modify true false /branches/S2_6/common/specialist.c

zzb.5qi.t32459-1 modify true false /branches/S2_6/common/style.c

t.5qi.t32459-1 modify true false /branches/S2_6/common/tech.c

2fp.5qi.t32459-1 modify true false /branches/S2_6/common/terrain.c

v9.5qi.t32459-1 modify true false /branches/S2_6/common/unittype.c

8w.5qi.t32459-1 modify true false /branches/S2_6/server/ruleset.c

thd.5qp.t32459-1 modify true false /branches/S2_6/tools/ruledit/rulesave.c

vct.5qp.t32459-1 modify true false /branches/S2_6/tools/ruledit/tab_tech.cpp


51373 51521
