DELTA 18054 0 450
SVN  ™"™'
 @ ˆ ‹_CcitizensENDREP
DELTA 16929 60677 28127
SVN  †  †  ‚–  †  ƒ-†'€†5 ˆ‹?£ Wƒð@€	 Uè?ž \ƒð@€d Qè>™ m—o X˜ î•9€d Fú} ‚†€W °j‚‡ ± Qè>¦ U—z ›X‚º Ã‚Õcº vƒ™1ƒ ®	„ª)€] …!„ØD€] ›1„Ýw‚ ¹„ù*‡ …#…²5ƒ Y…·Z‚ _…¹5‚ …º‚ ¡<…»7€k Qè>ª T˜ €D g…á4• „…ã€a ƒn…è%ª _„å7 ‚…í‰ _…ï$© ƒ+…ð4€a „
…ôqª _„å7 ‚…ù}€ …<…ý*€s ‡†ƒY¿ Šp†‹!overview_common.h"
#include "tilespec.h"

#include "mapview_common.h"


struct tile_hash *mapdeco_highlight_table;
struct tile_hash *mapdeco_crosshair_table;

struct gotoline_counter {
  int line_count[DIR8_COUNT];
};

static inline struct gotoline_counter *gotoline_counter_new(void);
static void gotoline_counter_destroy(struct gotoline_counter *pglc);

#define SPECHASH_TAG gotoline
#define SPECHASH_KEY_TYPE struct tile *
#define SPECHASH_DATA_TYPE struct gotoline_counter *
#define SPECHASH_DATA_FREE gotoline_counter_destroy
#include "spechash.h"
#define gotoline_hash_iterate(hash, ptile, pglc)                            \
  TYPED_HASH_ITERATE(struct tile *, struct gotoline_counter *,              \
                     hash, ptile, pglc)
#define gotoline_hash_iterate_end HASH_ITERATE_END

struct gotoline_hash**
  Create a new goto line counterinline struct gotoline_counter *gotoline_counter_new(void)
{
  struct gotoline_counter *pglc = fc_calloc(1, sizeof(*pglc));
  return pglcCreate a new goto line countergotoline_counter_destroy(struct gotoline_counter *pglc)
{
  fc_assert_ret(NULL != pglc);
  free(pglc
 Refreshes a single tiletile_mapcanvas(                     const struct tile *ptile,
                     const struct tile_edge *pedge,
                     const struct tile_corner *pcorner,
                     const struct unit *punit, const struct city *pcity,
                                ptile, pedge, pcorner,
                                fc_usleep(1000000);

  update_map_canvas_visible(
  Draw some or all of a tile onto thefc_snprintf(size, sizeof(size), "%d", city_size_get(pcity)fc_/* check within maximum (squared) city radius */
  city_tile_iterate(CITY_MAP_MAX_RADIUS_SQ, /* check within maximum (squared) city radius */
  city_tile_iterate(CITY_MAP_MAX_RADIUS_SQ, fcdestroyfc_fcfcfctile_hash_new();
  mapdeco_crosshair_table = tile_hash_new();
  mapdeco_gotoline_table = gotoline_hash_new(
  Free all memory used for map decorationmapdeco_free(void)
{
  if (mapdeco_highlight_table) {
    tile_hash_destroy(mapdeco_highlight_table);
    mapdeco_highlight_table = NULL;
  }
  if (mapdeco_crosshair_table) {
    tile_hash_destroygotoline_hash_destroytile_hash_insert(mapdeco_highlight_table, ptile, NULL);
  } else {
    changed = tile_hash_removetile_hash_lookup(mapdeco_highlight_table, tile_hashtile_hash_iterate_end;

  tile_hash_cleartile_hash_insert(mapdeco_crosshair_table, ptile, NULL);
  } else {
    changed = tile_hash_removetile_hash_lookup(mapdeco_crosshair_table, tile_hash_iterate(mapdeco_crosshair_table, ptile) {
    refresh_tile_mapcanvas(ptile, FALSE, FALSE);
  } tile_hash_iterate_end;

  tile_hash_clearif (!gotoline_hash_lookup(mapdeco_gotoline_table, ptile, &pglc)) {
    pglc = gotoline_counter_new();
    gotoline_if (!gotoline_hash_lookup(mapdeco_gotoline_table, ptile, &pglc)†  æ	íMŠ9ª Qá~€a B³ €ƒ  L¹€` B³ €< 
€ L¹ ¶<ƒ R¹p° R¹ ‚¼o 7¾y ‘PÀ5˜ P¹ƒ kÐ<€l P¹‘ ]Ø  ‚CÖ7¶ P¹ eÚ4˜ „aÜ § ä~ H‚@£ B³  Oã4§ ä~r);
    ptile = mapstep(ptile, porder->dir****
  Returns TRUE if a goto line should be drawn from the given tile in the
  given direction.
********/
bool mapdeco_is_gotoline_set(const struct tile *ptile,
                             enum direction8 dir)
{
  struct gotoline_counter *pglc;

  if (!ptile || !(0 <= dir && dir < DIR8_COUNT)
      || !mapdeco_gotoline_table) {
    return FALSE;
  }

  if (!gotoline_hash_lookup(mapdeco_gotoline_table, ptile, &pglc)) {
    return FALSE;
  }

  return pglc->line_count[dir] > 0****
  Clear all goto line map decorations and queues mapview updates for the
  affected tiles.
********/
void mapdeco_clear_gotoroutes(void)
{
  if (!mapdeco_gotoline_table) {
    return;
  }

  gotoline_hash_iterate(mapdeco_gotoline_table, ptile, pglc) {
    refresh_tile_mapcanvas(ptile_dest, FALSE, FALSE);
      }
    } adjc_dir_iterate_end;
  } gotoline_hash_iterate_end;
  gotoline_hash_clear(mapdeco_gotoline_table)destroy(struct link_mark *pmark)
{
  free(pmark)_full(link_mark_destroy)Frefree(void)
{
  if (!link_marks) {
    return;
  }

  link_mark_list_destroy(link_marks);
  link_marks = NULLDraw all link mar_list_clear(link_marks);
  update_map_canvas_visible()list_remove(link_marks, link_mark_list_append(link_marks, pmark 
  Add a visible link for 1 turn.
link_mark_list_append(link_marks, pmarkENDREP
DELTA 18636 0 3390
SVN  „èZ„èo(‚> ¹S €c „º6” „Y¾`² ‚¯RÃk€ ¾‚ô@ µz„²`4d\n"
                           "Waste:        %4d\n"
                           "Pollution:    %4city_size_get(pcity) %3d/%-3d\n"
                           "Change incity_size_get(pdialog->pcity); i++) {
    if (pdialog->citizen_labels[i] == w) {
      break;
    }
  }
  fc_assert(i < city_size_get(pdialog->pcity)ENDREP
DELTA 18783 0 10536
SVN  …ÜU…â(Gˆ Š? €@ ‚tŠt‰ ‚ \º RÉ@ •M€z K‘@€- X‚ï{ â¥^ˆ G‚‡zˆ Ë<‚ˆDˆ Ÿs‚Ôˆ ˆp‚óy ŒS‚ünš tƒ‰7” †lƒ§6” •pƒ®-€U VƒÄg„ rƒÒ<œ ¾AƒÓ:— ¤$„’ †„¶=€S r„¼z †r„½|“ „g„Ä~“ þN„Éu” T…Ûr j…É" ‹_…ËO€$ ƒG…Ø ” c…Ûr
/* scripting */
#include "script_game.h"
#include "script_typesdvgoto.h"static bool city_workers_queue_remove(struct city *pcity);Remove a city from the queue for later calls to auto_arrange_workers().
  Reterns TRUE if the city was found in the queue.**/
static bool city_workers_queue_remove(struct city *pcity)
{
  if (arrange_workers_queue == NULL) {
    return FALSE;
  }

  return city_list_remove(arrange_workers_queuecitizenscitizenscitizenscitizens        if (adv_workers_queue_remove(pcitycity_size_get(pcity)city_size_get(pcity)/* reduce size should not destroy this city */
  fc_assert(city_size_get(pcity) > 1);sitevision_site_size_get(pdcity) = city_size_get(pcity)vision_site_new          && vision_site_size_get(pdcity) == city_size_get(pcity)
	  && vision_sitevision_site_updavision_site_destroyvision_site_destroycity_size_get(pcity)  }

  /* if city is under AI control update it */
  ai_city_update(pcity);

  /* Force a sync of the city after the change. */
  send_city_info(city_owner(pcity), city_size_get(pcity)ENDREP
DELTA 18151 115462 2814
SVN  ‚°d‚°q%? –  ­E–$– ZÔ FÌ • Oð1 ­2Æz” ¼-ô7city_size_get(pCity));Text1->w + adj_size(8city_size_get(pCity)ENDREP
DELTA 19106 925 37
SVN  ƒ—!ƒ—3, › ˜ zª| ¬pœ ” ÎÉcity_size_get(pcity) < 2city_size_get(pcity)ENDREP
DELTA 18353 0 4551
SVN  ƒŸ7ƒŸXƒI ¤k €‚ £*¥+¬ Yì  îÊS” ƒZ‚¸k” Š‚¼Y• ‹M‚Çª ƒ`‚Òlš ZÔ@ ‚_‚×@ ‚h‚ÚD Sò@ Ž+‚Þh” ²‚íNO_FLAGS,
            _("Place a start position which allows any nation to "
              "start at the tile. To allow only certain nations to "
              "start there, middle click on the start position on "
              "the map and use the property editor erase, 0);
    break;

  default:
    breaktile_virtual_destroytile_virtual_destroytile_virtual_new(NULLcity_size_set(vcity, city_size_get(pcity))tile_virtual_destroy(vtilecity_size_get(vcity)ENDREP
DELTA 19111 2252 462
SVN  †  †   „Ñ% ” ÎG„Ñ0city_size_get(pcity)†  ¨q¨z	‰ ¨q cargo->tiENDREP
DELTA 19106 1204 1363
SVN  „„MM ™` €9 ãSšm” ƒŽMþK == SPY_POISON
         && city_size_get(pcity) > 1
         && unit_has_type_flag(pdiplomat, F_SPY)) {
        return pplayers_at_war(unit_owner(pdiplomat), city_owner(pcity));
      }city_size_get(pcity)ENDREP
DELTA 18349 0 6896
SVN  †  †  ‡'ùj Œ; € 0:€ ˆE^— ’5˜€‚Y ‡8«y¬ e³&” Y«} „ ´k€% •7¹~€U …FÏ,€' ‚Õo€U GØ=€^ ’ÚT— 9ìk— wî'— žxï!— ƒŽ² 8‘*˜ ¦K’f— ]¹4± ‚;º€ƒs UƒË? Á’ P°@€…r UƒË? 7É\€… UƒË? ‚0Ð,€ƒ UƒË? *Ö;€…o UƒË? CÞ%€Š( iò@² ‚#ôe´ 7÷F€‚o xù<ƒ Sú6€] UƒË? ’ü,€@ v‚Ž$Ž ‚Ž `‚5€ƒR V‚’Ž ƒ‚“u€1 UƒË? …\‚˜5€N ‚žI€q XƒË< ƒ‚¢€ I‚¥€‚G ‚_‚§x€A H‚¬€` b‚®?€[ ƒ&‚¯(€ “4‚²q€C ‚Æ1¤ …0‚ÇG‚ ‚Ì{´ Z„Ë  ‚@‚Ï€V E‚Ò€„R XƒË< ƒO‚Ø€k -‚ÜE€‡	 N‚ãv€w Q‚ùv€‰8 L‚îu« X‚ò6€ Q‚ñ:€‚w P„‡<€‡u P„‡<€ŒX P„‡<€‹[ P„‡<€ˆn P„‡<€†r P„‡<€‚ hÝ= „GƒŸ
€ƒ* tƒ¤0€I L„‡>€Šj L„‡>€†f L„‡>€‚u L„‡>€‚b L„‡>€H UƒË?« S¶@ wø3 SƒÂD€f $ƒÒ[— ‡-ƒâ— bƒé2€‘ ~ƒ’€† VƒË>¼ P°@ 2ü)€< ‚ „€ƒd L„‡>€… L„‡>€†, L„‡>€†X L„‡>€† L„‡>€†( L„‡>€4 TƒË@¶ Y…Ñ  cýj ‰&„§s€m „²H² N„³u€` UƒË? „µO º6„¶p˜ ƒ"„ñ) |„ôLˆ ƒ„ö7µ „ù`† ‚u„ûd† t…¨" ‚
„ÿR† …L…a† […‡2 ‚l…‡¦ ‚|…Šr€ \ƒÃ? „O…˜ ‡/…”d¬ ƒ…œ$‹ ™#…Ÿ …‡  …¹3‘ …Šr´ g…¾? ‚|…¼c ¢…Á¸const struct tile *ptile,
                                            const struct unit *punit,
                                            constconst struct tile *ptile);
static GdkPixbuf *create_unit_pixbuf(const struct unit *punit);
static GdkPixbuf *create_city_pixbuf(const startpos_full *startposenum editor_object_type objtype);
static int objtype_get_id_from_object(enum editor_object_type objtype,
                                      gpointer object);
static gpointer objtype_get_object_from_id(enum editor_object_type objtype,
                                           int id);
static bool objtype_is_conserved(enum editor_object_typeNATION_HASH,        /* struct nation_hash */enum value_types valstruct nation_hash *v_nation_hash;
  bool *v_inventions;
  struct tile_vision_data *v_tile_vision;
};

struct propval {
  union propval_data data;
  enum value_typesSTARTPOS_IMAGE,
  OPID_STARTPOS_XY,
  OPID_STARTPOS_EXCLUDE,
  OPID_STARTPOS_NATIONS, << 0,
  OPF_IN_LISTVIEW = 1 << 1,
  OPF_HAS_WIDGET  = 1 << 2
};

struct objprop {
  int id;
  const char *name;
  enum object_property_flags flags;
  enum value_typesenum object_property_flags flags,
                                   enum value_typesenum value_types objprop_get_valtype(const struct objprop *op);
static struct property_page *
enum editor_object_typeenum editor_object_typeenum editor_object_typeenum editor_object_typeenum editor_object_type objtype,
                 enum editor_object_type
enum editor_object_type
                         enum editor_object_typeenum editor_object_type objtype)
{
  switch (objtype) {
  case OBJTYPE_TILE:
    return _("Tile");
  case OBJTYPE_STARTPOS:
    return _("Start Position");
  case OBJTYPE_UNIT:
    return _("Unit");
  case OBJTYPE_CITY:
    return _("City");
  case OBJTYPE_PLAYER:
    return _("Player");
  case OBJTYPE_GAME:
    return Q_("?play:Game");
  case NUM_OBJTYPES:
    break;
  }

  log_error("%s() Unhandled request to get name of object type %d.",
            __FUNCTION__, objtype);
  return "Unknown"or
  equal to zerostatic int objtype_get_id_from_object(enum editor_object_type objtype,
                                      gpointer object)
{
  switch (objtype) {
  case OBJTYPE_TILE:
    return tile_index((struct tile *) object);
  case OBJTYPE_STARTPOS:
    return startpos_number((struct startpos *) object);
  case OBJTYPE_UNIT:
    return ((struct unit *) object)->id;
  case OBJTYPE_CITY:
    return ((struct city *) object)->id;
  case OBJTYPE_PLAYER:
    return player_number((struct player *) object);
  case OBJTYPE_GAME:
    return 1;
  case NUM_OBJTYPES:
    break;
  }

  log_error("%s(): Unhandled request to get object ID from object %p of "
            "type %d (%s).", __FUNCTION__, object, objtype,
            objtype_get_name(objtype));
  return -1enum editor_object_type objtype,
                                           int id)
{
  switch (objtype) {
  case OBJTYPE_TILE:
    return index_to_tile(id);
  case OBJTYPE_STARTPOS:
    return map_startpos_by_number(id);
  case OBJTYPE_UNIT:
    return game_unit_by_number(id);
  case OBJTYPE_CITY:
    return game_city_by_number(id);
  case OBJTYPE_PLAYER:
    return player_by_number(id);
  case OBJTYPE_GAME:
    return &game;
  case NUM_OBJTYPES:
    break;
  }

  log_error("%s(): Unhandled request to get object of type %d (%s) "
            "with ID %d.", __FUNCTION__, objtype,
            objtype_get_name(objtype), id);
  return NULLenum editor_object_type objtype)
{
  switch (objtype) {
  case OBJTYPE_TILE:
  case OBJTYPE_GAME:
    return TRUE;
  case OBJTYPE_STARTPOS:
  case OBJTYPE_UNIT:
  case OBJTYPE_CITY:
  case OBJTYPE_PLAYER:
    return FALSE;
  case NUM_OBJTYPES:
    break;
  }

  log_error("%s(): Unhandled request for object type %d (%s)).",
            __FUNCTION__, objtype, objtype_get_name(objtype));
  return TRUEenum value_types valtype)
{
  switch (valtype) {
  case VALTYPE_NONE:
    return "none";
  case VALTYPE_STRING:
    return "string";
  case VALTYPE_INT:
    return "int";
  case VALTYPE_BOOL:
    return "bool";
  case VALTYPE_PIXBUF:
    return "pixbuf";
  case VALTYPE_BUILT_ARRAY:
    return "struct built_status[B_LAST]";
  case VALTYPE_INVENTIONS_ARRAY:
    return "bool[A_LAST]";
  case VALTYPE_BV_SPECIAL:
    return "bv_special";
  case VALTYPE_BV_BASES:
    return "bv_bases";
  case VALTYPE_NATION:
    return "nation";
  case VALTYPE_NATION_HASH:
    return "struct nation_hash";
  case VALTYPE_TILE_VISION_DATA:
    return "struct tile_vision_data";
  }

  log_error("%s(): unhandled value type %d.", __FUNCTION__, valtype);
  return "void"count = 0;

  fc_assert_ret_val(NULL != pv, 0);
  fc_assert_ret_val(0 < buflen, 0);

  switch (pv->valtype) {
  case VALTYPE_NONE:
    buf[0] = '\0';
    return 0;

  case VALTYPE_INT:
    return fc_snprintf(buf, buflen, "%d", pv->data.v_int);

  case VALTYPE_BOOL:
    return fc_snprintf(buf, buflen, "%s",
                       pv->data.v_bool ? _("TRUE") : _("FALSE"));

  case VALTYPE_NATION:
    return fc_snprintf(buf, buflen, "%s",
                       nation_adjective_translation(pv->data.v_nation));

  case VALTYPE_BUILT_ARRAY:
    {
      int great_wonder_count = 0, small_wonder_count = 0, building_count = 0;
      int id;

      improvement_iterate(pimprove) {
        id = improvement_index(pimprove);
        if (pv->data.v_built[id].turn < 0) {
          continue;
        }
        if (is_great_wonder(pimprove)) {
          great_wonder_count++;
        } else if (is_small_wonder(pimprove)) {
          small_wonder_count++;
        } else {
          building_count++;
        }
      } improvement_iterate_end;
      /* TRANS: "Number of buildings, number of small
       * wonders (e.g. palace), number of great wonders." */
      return fc_snprintf(buf, buflen, _("%db %ds %dW"),
                         building_count, small_wonder_count,
                         great_wonder_count);
    }urn fc_snprintf(buf, buflen, _("%d known"), count)urn fc_snprintf(buf, buflen, _("%d present"), count)urn fc_snprintf(buf, buflen, _("%d present"), count);

  case VALTYPE_NATION_HASH:
    count = nation_hash_size(pv->data.v_nation_hash);
    if (0 == count) {
      return fc_snprintf(buf, buflen, "%s", _("All nations"));
    } else {
      return fc_snprintf(buf, buflen, PL_("%d nation", "%d nations",
                                          count), count);
    }urn count);

  case VALTYPE_PIXBUF:
  case VALTYPE_TILE_VISION_DATA:
    break;
  }

  log_error("%s(): Unhandled value type %d for property value %p.",
            __FUNCTION__, pv->valtype, pv);
  buf[0] = '\0';
  return 0NONE:
    return pv_copy;
  case VALTYPE_INT:
    pv_copy->data.v_int = pv->data.v_int;
    return pv_copy;
  case VALTYPE_BOOL:
    pv_copy->data.v_bool = pv->data.v_bool;
    return pv_copy;return pv_copyreturn pv_copyreturn pv_copy;
  case VALTYPE_BV_SPECIAL:
    pv_copy->data.v_bv_special = pv->data.v_bv_special;
    return pv_copy;
  case VALTYPE_BV_BASES:
    pv_copy->data.v_bv_bases = pv->data.v_bv_bases;
    return pv_copy;
  case VALTYPE_NATION:
    pv_copy->data.v_nation = pv->data.v_nation;
    return pv_copy;
  case VALTYPE_NATION_HASH:
    pv_copy->data.v_nation_hash
      = nation_hash_copy(pv->data.v_nation_hash);
    pv_copy->must_free = TRUE;
    return pv_copyreturn pv_copyreturn pv_copy;
  }

  log_error("%s(): Unhandled value type %d for property value %p.",
            __FUNCTION__, pv->valtype, pv);
  pv_copy->data = pv->data;
  return pv_copyNONE:
  case VALTYPE_INT:
  case VALTYPE_BOOL:
  case VALTYPE_BV_SPECIAL:
  case VALTYPE_BV_BASES:
  case VALTYPE_NATION:
    return;
  case VALTYPE_PIXBUF:
    g_object_unref(pv->data.v_pixbuf);
    returnreturn;
  case VALTYPE_NATION_HASH:
    nation_hash_destroy(pv->data.v_nation_hash);
    return;
  }

  log_error("%s(): Unhandled request to free data %p (type %s).",
            __FUNCTION__, pv->data.v_pointer, valtype_get_name(pv->valtypNONE:
    return TRUE;
  case VALTYPE_INT:
    return pva->data.v_int == pvb->data.v_int;
  case VALTYPE_BOOL:
    return pva->data.v_bool == pvb->data.v_bool;return pva->data.v_const_string == pvb->data.v_const_string;
  case VALTYPE_PIXBUF:
    return pva->data.v_pixbuf == pvb->data.v_pixbuf;
  case VALTYPE_BUILT_ARRAY:
    if (pva->data.v_pointer == pvb->data.v_pointer) {
      return TRUE;
    } else if (!pva->data.v_pointer || !pvb->data.v_pointer) {
      return FALSE;
    }
case VALTYPE_INVENTIONS_ARRAY:
    if (pva->data.v_pointer == pvb->data.v_pointer) {
      return TRUE;
    } else if (!pva->data.v_pointer || !pvb->data.v_pointer) {
      return FALSE;
    }
case VALTYPE_BV_SPECIAL:
    return BV_ARE_EQUAL(pva->data.v_bv_special, pvb->data.v_bv_special)case VALTYPE_NATION:
    return pva->data.v_nation == pvb->data.v_nation;
  case VALTYPE_NATION_HASH:
    return nation_hashs_are_equal(pva->data.v_nation_hash,
                                  pvb->data.v_nation_hash)}

  log_error("%s(): Unhandled value type %d for property values %p and %p.",
            __FUNCTION__, pva->valtype, pva, pvb);enum editor_object_type objtype,
                                    if (id < 0) {
    return NULL;
  }-1NULL == ob) {
    return -1;
  }
  return ob->objectstruct connection *my_conn = &client.conn;
  enum editor_object_type objtype;
  int idSTARTPOS:
    dsend_packet_edit_startpos(my_conn, id, TRUE, 0);
    return;
  case OBJTYPE_UNIT:
    dsend_packet_edit_unit_remove_by_id(my_conn, id);
    return;
  case OBJTYPE_CITY:
    dsend_packet_edit_city_remove(my_conn, id);
    return;
  case OBJTYPE_PLAYER:
    dsend_packet_edit_player_remove(my_conn, id);
    return;
  case OBJTYPE_TILE:
  case OBJTYPE_GAME:
  case NUM_OBJTYPES:
    break;
  }

  log_error("%s(): Unhandled request to destroy object %p (ID %d) of type "
            "%d (%s).", __FUNCTION__, objbind_get_object(ob), id, objtype,
            objtype_get_name(objtypenum editor_object_type objtype;
  enum object_property_ids propid;
  struct propval *pv;

  if (!ob || !opswitch (objtype) {
  case OBJTYPE_TILE:
    {
      const struct tile *ptile = objbind_get_object(ob);

      if (NULL == ptile) {
        goto FAILED;
      }

      switch (propid) {
      case OPID_TILE_IMAGE:
        pv->data.v_pixbuf = create_tile_pixbuf(ptile);
        pv->must_free = TRUE;
        break;
      case OPID_TILE_ADDRESS:
        pv->data.v_string = g_strdup_printf("%p", ptile);
        pv->must_free = TRUE;
        break;
      case OPID_TILE_TERRAIN:
        {
          const struct terrain *pterrain = tile_terrain(ptile);

          if (NULL != pterrain) {
            pv->data.v_const_string = terrain_name_translation(pterrain);
          } else {
            pv->data.v_const_string = "";
          }
        }
        break;
      case OPID_TILE_RESOURCE:
        {
          const struct resource *presource = tile_resource(ptile);

          if (NULL != presource) {
        } else {
            pv->data.v_const_string = "";
          }
        }
        break;
      case OPID_TILE_XY:
    pv->must_free = TRUE;
        break;
      case OPID_TILE_INDEX:
        pv->data.v_int = tile_index(ptile);
        break;
      case OPID_TILE_X:
        pv->data.v_int = ptile->x;
        break;
      case OPID_TILE_Y:
        pv->data.v_int = ptile->y;
        break;
      case OPID_TILE_NAT_X:
        pv->data.v_int = ptile->nat_x;
        break;
      case OPID_TILE_NAT_Y:
        pv->data.v_int = ptile->nat_y;
        break;
      case OPID_TILE_CONTINENT:
        pv->data.v_int = ptile->continent;
        break;
      case OPID_TILE_SPECIALS:
        pv->data.v_bv_special = tile_specials(ptile);
        break;
      case OPID_TILE_BASES:
        pv->data.v_bv_bases = tile_bases(ptile);
        break;
      case OPID_TILE_VISION:
        pv->data.v_tile_vision = fc_malloc(sizeof(struct tile_vision_data));

        /* The server saves the known tiles and the player vision in special
         * bitvectors with the number of tiles as index. Here we want the
         * information for one tile. Thus, the data is transformed to
         * bitvectors with the number of player slots as index. */
        BV_CLR_ALL(pv->data.v_tile_vision->tile_known);
        players_iterate(pplayer) {
    BV_SET(pv->data.v_tile_vision->tile_known
        vision_layer_iterate(v) {
          BV_CLR_ALL(pv->data.v_tile_vision->tile_seen[v]);
          players_iterate(pplayer) {
    BV_SET(pv->data.v_tile_vision->tile_seen[v],
                     player_index(pplayer));
            }
          } players_iterate_end;
        } vision_layer_iterate_end;
        pv->must_free = TRUE;
        break;
      default:
        log_error("%s(): Unhandled request for value of property %d "
                  "(%s) from object of type \"%s\".", __FUNCTION__,
    goto FAILED;
      }
    }
    return pv;

  case OBJTYPE_STARTPOS:
    {
      const struct startpos *psp = objbind_get_object(ob);
      const struct tile *ptile;

      if (NULL == psp) {
        goto FAILED;
      }

      switch (propid) {
      case OPID_STARTPOS_IMAGE:
        ptile = startpos_tile(psp);
        pv->data.v_pixbuf = create_tile_pixbuf(ptile);
        pv->must_free = TRUE;
        break;
      case OPID_STARTPOS_XY:
        ptile = startpos_tile(psp);
        pv->data.v_string = g_strdup_printf("(%d, %d)", TILE_XY(ptile));
        pv->must_free = TRUE;
        break;
      case OPID_STARTPOS_EXCLUDE:
        pv->data.v_bool = startpos_is_excluding(psp);
        break;
      case OPID_STARTPOS_NATIONS:
        pv->data.v_nation_hash = nation_hash_copy(startpos_raw_nations(psp));
        pv->must_free = TRUE;
        break;
      default:
        log_error("%s(): Unhandled request for value of property %d "
                  "(%s) from object of type \"%s\".", __FUNCTION__,
    goto FAILED;
      }
    }
    return pv;

  case OBJTYPE_UNIT:
    {
      struct unit *punit = objbind_get_object(ob);

      if (NULL == punit) {
        goto FAILED;
      }

      switch (propid) {
      case OPID_UNIT_IMAGE:
        pv->data.v_pixbuf = create_unit_pixbuf(punit);
        pv->must_free = TRUE;
        break;
      case OPID_UNIT_ADDRESS:
        pv->data.v_string = g_strdup_printf("%p", punit);
        pv->must_free = TRUE;
        break;
      case OPID_UNIT_XY:
        {
          const struct tile *ptile = unit_tile(punit);

          pv->data.v_string = g_strdup_printf("(%d, %d)", TILE_XY(ptile));
          pv->must_free = TRUE;
        }
        break;
      case OPID_UNIT_ID:
        pv->data.v_int = punit->id;
        break;
      case OPID_UNIT_TYPE:
        {
          const struct unit_type *putype = unit_type(punit);

          pv->data.v_const_string = utype_name_translation(putype);
        }
        break;
      case OPID_UNIT_MOVES_LEFT:
        pv->data.v_int = punit->moves_left;
        break;
      case OPID_UNIT_FUEL:
        pv->data.v_int = punit->fuel;
        break;
      case OPID_UNIT_MOVED:
        pv->data.v_bool = punit->moved;
        break;
      case OPID_UNIT_DONE_MOVING:
        pv->data.v_bool = punit->done_moving;
        break;
      case OPID_UNIT_HP:
        pv->data.v_int = punit->hp;
        break;
      case OPID_UNIT_VETERAN:
        pv->data.v_int = punit->veteran;
        break;
      default:
        log_error("%s(): Unhandled request for value of property %d "
                  "(%s) from object of type \"%s\".", __FUNCTION__,
    goto FAILED;
      }
    }
    return pv;

  case OBJTYPE_CITY:
    {
      const struct city *pcity = objbind_get_object(ob);

      if (NULL == pcity) {
        goto FAILED;
      }

      switch (propid) {
      case OPID_CITY_IMAGE:
        pv->data.v_pixbuf = create_city_pixbuf(pcity);
        pv->must_free = TRUE;
        break;
      case OPID_CITY_ADDRESS:
        pv->data.v_string = g_strdup_printf("%p", pcity);
        pv->must_free = TRUE;
        break;
      case OPID_CITY_XY:
        {
          const struct tile *ptile = city_tile(pcity);

          pv->data.v_string = g_strdup_printf("(%d, %d)", TILE_XY(ptile));
          pv->must_free = TRUE;
        }
        break;
      case OPID_CITY_ID:
        pv->data.v_int = pcity->id;
        break;
      case OPID_CITY_NAME:
        pv->data.v_const_string = pcity->name;
        break;
      case OPID_CITY_SIZE:
        pv->data.v_int = city_size_get(pcity);
        break;
      case OPID_CITY_BUILDINGS:
        pv->data.v_built = fc_malloc(sizeof(pcity->built));
        memcpy(pv->data.v_built, pcity->built, sizeof(pcity->built));
        pv->must_free = TRUE;
        break;
      case OPID_CITY_FOOD_STOCK:
        pv->data.v_int = pcity->food_stock;
        break;
      case OPID_CITY_SHIELD_STOCK:
        pv->data.v_int = pcity->shield_stock;
        break;
      default:
        log_error("%s(): Unhandled request for value of property %d "
                  "(%s) from object of type \"%s\".", __FUNCTION__,
    goto FAILED;
      }
    }
    return pv;

  case OBJTYPE_PLAYER:
    {
      const struct player *pplayer = objbind_get_object(ob);

      if (NULL == pplayer) {
        goto FAILED;
      }

      switch (propid) {
      case OPID_PLAYER_NAME:
        pv->data.v_const_string = pplayer->name;
        break;
      case OPID_PLAYER_NATION:
        pv->data.v_nation = nation_of_player(pplayer);
        break;
      case OPID_PLAYER_ADDRESS:
        pv->data.v_string = g_strdup_printf("%p", pplayer);
        pv->must_free = TRUE;
        break;
      case OPID_PLAYER_INVENTIONS:
        pv->data.v_inventions = fc_calloc(A_LAST, sizeof(bool));
        advance_index_iterate(A_FIRST, tech) {
          pv->data.v_inventions[tech]
              = TECH_KNOWN == player_invention_state(pplayer, tech);
        } advance_index_iterate_end;
        pv->must_free = TRUE;
        break;
      case OPID_PLAYER_GOLD:
        pv->data.v_int = pplayer->economic.gold;
        break;
      default:
        log_error("%s(): Unhandled request for value of property %d "
                  "(%s) from object of type \"%s\".", __FUNCTION__,
    goto FAILED;
      }
    }
    return pv;

  case OBJTYPE_GAME:
    {
      const struct civ_game *pgame = objbind_get_object(ob);

      if (NULL == pgame) {
        goto FAILED;
      }

      switch (propid) {
      case OPID_GAME_YEAR:
        pv->data.v_int = pgame->info.year;
        break;
      case OPID_GAME_SCENARIO:
        pv->data.v_bool = pgame->scenario.is_scenario;
        break;
      case OPID_GAME_SCENARIO_NAME:
        pv->data.v_const_string = pgame->scenario.name;
        break;
      case OPID_GAME_SCENARIO_DESC:
        pv->data.v_const_string = pgame->scenario.description;
        break;
      case OPID_GAME_SCENARIO_PLAYERS:
        pv->data.v_bool = pgame->scenario.players;
        break;
      default:
        log_error("%s(): Unhandled request for value of property %d "
                  "(%s) from object of type \"%s\".", __FUNCTION__,
    goto FAILED;
      }
    }
    return pv;

  case NUM_OBJTYPES:
    break;
  }

  log_error("%s(): Unhandled request for object type \"%s\" (nb %d).",
            __FUNCTION__, objtype_get_name(objtype), objtype);

FAILED:
  if (NULL != pv) {
    free(pv)enum editor_object_type objtype;
  enum object_property_ids propid;
  double dummy;

  /* Fill the values with something. */
  if (NULL != pmin) {
    *pmin = 0;
  } else {
    pmin = &dummy;
  }
  if (NULL != pmax) {
    *pmax = 1;
  } else {
    pmax = &dummy;
  }
  if (NULL != pstep) {
    *pstep = 1;
  } else {
    pstep = &dummy;
  }
  if (NULL != pbig_step) {
    *pbig_step = 1;
  } else {
    pbig_step = &dummy;
  }switch (objtype) {
  case OBJTYPE_TILE:
  case OBJTYPE_STARTPOS:
    log_error("%s(): Unhandled request for value range of property %d (%s) "
              "from object of type \"%s\".", __FUNCTION__,
return FALSE;

  case OBJTYPE_UNIT:
    {
      const struct unit *punit = objbind_get_object(ob);
      const struct unit_type *putype;

      if (NULL == punit) {
        return FALSE;
      }

      putype = unit_type(punit);

      switch (propid) {
      case OPID_UNIT_MOVES_LEFT:
        *pmin = 0;
        *pmax = putype->move_rate;
        *pstep = 1;
        *pbig_step = 5;
        return TRUE;
      case OPID_UNIT_FUEL:
        *pmin = 0;
        *pmax = utype_fuel(putype);
        *pstep = 1;
        *pbig_step = 5;
        return TRUE;
      case OPID_UNIT_HP:
        *pmin = 1;
        *pmax = putype->hp;
        *pstep = 1;
        *pbig_step = 10;
        return TRUE;
      case OPID_UNIT_VETERAN:
        *pmin = 0;
        if (unit_has_type_flag(punit, F_NO_VETERAN)) {
          *pmax = 0;
        } else {
          int i;
          /* FIXME: The maximum veteran level is
           * really not stored anywhere?? */
          for (i = 1; i < MAX_VET_LEVELS; i++) {
            if (rule_name(&putype->veteran[i].name)[0] == '\0') {
              break;
            }
          }
          *pmax = i - 1;
        }
        *pstep = 1;
        *pbig_step = 3;
        return TRUE;
      default:
        break;
      }
    }
    log_error("%s(): Unhandled request for value range of property %d (%s) "
              "from object of type \"%s\".", __FUNCTION__,
return FALSE;

  case OBJTYPE_CITY:
    {
      const struct city *pcity = objbind_get_object(ob);

      if (NULL == pcity) {
        return FALSE;
      }

      switch (propid) {
      case OPID_CITY_SIZE:
        *pmin = 1;
        *pmax = MAX_CITY_SIZE;
        *pstep = 1;
        *pbig_step = 5;
        return TRUE;
      case OPID_CITY_FOOD_STOCK:
        *pmin = 0;
        *pmax = city_granary_size(city_size_get(pcity));
        *pstep = 1;
        *pbig_step = 5;
        return TRUE;
      case OPID_CITY_SHIELD_STOCK:
        *pmin = 0;
        *pmax = USHRT_MAX; /* Limited to uint16 by city info packet. */
        *pstep = 1;
        *pbig_step = 10;
        return TRUE;
      default:
        break;
      }
    }
    log_error("%s(): Unhandled request for value range of property %d (%s) "
              "from object of type \"%s\".", __FUNCTION__,
return FALSE;

  case OBJTYPE_PLAYER:
    switch (propid) {
    case OPID_PLAYER_GOLD:
      *pmin = 0;
      *pmax = 1000000; /* Arbitrary. */
      *pstep = 1;
      *pbig_step = 100;
      return TRUE;
    default:
      break;
    }
    log_error("%s(): Unhandled request for value range of property %d (%s) "
              "from object of type \"%s\".", __FUNCTION__,
return FALSE;

  case OBJTYPE_GAME:
    switch (propid) {
    case OPID_GAME_YEAR:
      *pmin = -30000;
      *pmax = 30000;
      *pstep = 1;
      *pbig_step = 25;
      return TRUE;
    default:
      break;
    }
    log_error("%s(): Unhandled request for value range of property %d (%s) "
              "from object of type \"%s\".", __FUNCTION__,
return FALSE;

  case NUM_OBJTYPES:
    break;
  }

  log_error("%s(): Unhandled request for object type \"%s\" (nb %d).",
            __FUNCTION__, objtype_get_name(objtype), objtype);
  return FALSERemove a stored modified value, if it existenum value_types valtype;
  bool equal;
  struct propval *pv_old, *pv_copy;
  enum object_property_idsenum editor_object_typeenum editor_object_typeswitch (objtype) {
  case OBJTYPE_TILE:
    {
      struct packet_edit_tile *packet = pd.tile;
      const struct tile *ptile = objbind_get_object(ob);

      if (NULL == ptile) {
        return;
      }

      packet->tile = tile_index(ptile);
      packet->specials = tile_specials(ptile);
      packet->bases = tile_bases(ptile);
      /* TODO: Set more packet fields. */
    }
    return;

  case OBJTYPE_STARTPOS:
    {
      struct packet_edit_startpos_full *packet = pd.startpos;
      const struct startpos *psp = objbind_get_object(ob);

      if (NULL != psp) {
        startpos_pack(psp, packet);
      }
    }
    return;

  case OBJTYPE_UNIT:
    {
      struct packet_edit_unit *packet = pd.unit;
      const struct unit *punit = objbind_get_object(ob);

      if (NULL == punit) {
        return;
      }

      packet->id = punit->id;
      packet->moves_left = punit->moves_left;
      packet->fuel = punit->fuel;
      packet->moved = punit->moved;
      packet->done_moving = punit->done_moving;
      packet->hp = punit->hp;
      packet->veteran = punit->veteran;
      /* TODO: Set more packet fields. */
    }
    return;

  case OBJTYPE_CITY:
    {
      struct packet_edit_city *packet = pd.city;
      const struct city *pcity = objbind_get_object(ob);
      int i;

      if (NULL == pcity) {
        return;
      }

      packet->id = pcity->id;
      sz_strlcpy(packet->name, pcity->name);
      packet->size = city_size_get(pcity);
      for (i = 0; i < B_LAST; i++) {
        packet->built[i] = pcity->built[i].turn;
      }
      packet->food_stock = pcity->food_stock;
      packet->shield_stock = pcity->shield_stock;
      /* TODO: Set more packet fields. */
    }
    return;

  case OBJTYPE_PLAYER:
    {
      struct packet_edit_player *packet = pd.player;
      const struct player *pplayer = objbind_get_object(ob);
      const struct nation_type *pnation;

      if (NULL == pplayer) {
        return;
      }

      packet->id = player_number(pplayer);
      sz_strlcpy(packet->name, pplayer->name);
      pnation = nation_of_player(pplayer);
      packet->nation = nation_index(pnation);
      advance_index_iterate(A_FIRST, tech) {
        packet->acket->gold = pplayer->economic.gold;
      /* TODO: Set more packet fields. */
    }
    return;

  case OBJTYPE_GAME:
    {
      struct packet_edit_game *packet = pd.game;
      const struct civ_game *pgame = objbind_get_object(ob);

      if (NULL == pgame) {
        return;
      }

      packet->year = pgame->info.year;
      packet->scenario = pgame->scenario.is_scenario;
      sz_strlcpy(packet->scenario_name, pgame->scenario.name);
      sz_strlcpy(packet->scenario_desc, pgame->scenario.description);
      packet->scenario_players = pgame->scenario.players;
      /* TODO: Set more packet fields. */
    }
    return;

  case NUM_OBJTYPES:
    break;
  }

  log_error("%s(): Unhandled object type %s (nb %d).", __FUNCTION__,
            objtype_get_name(objtype), objtypePackage the modified property value into the supplied packetd)
{
  struct propval *pv;
  enum editor_object_type objtype;
  enum object_property_ids propid;

  if (!op || !ob || !pd.v_pointer) {
    return;
  }

  if (NULL == objbind_get_object(ob)switch (objtype) {
  case OBJTYPE_TILE:
    {
      struct packet_edit_tile *packet = pd.tile;

      switch (propid) {
      case OPID_TILE_SPECIALS:
        packet->specials = pv->data.v_bv_special;
        return;
      case OPID_TILE_BASES:
        packet->bases = pv->data.v_bv_bases;
        return;
      default:
        break;
      }
    }
    log_error("%s(): Unhandled request to pack value of property "
              "%d (%s) from object of type \"%s\".", __FUNCTION__,
return;

  case OBJTYPE_STARTPOS:
    {
      struct packet_edit_startpos_full *packet = pd.startpos;

      switch (propid) {
      case OPID_STARTPOS_EXCLUDE:
        packet->exclude = pv->data.v_bool;
        return;
      case OPID_STARTPOS_NATIONS:
        BV_CLR_ALL(packet->nations);
        nation_hash_iterate(pv->data.v_nation_hash, pnation) {
          BV_SET(packet->nations, nation_number(pnation));
        } nation_hash_iterate_end;
        return;
      default:
        break;
      }
    }
    log_error("%s(): Unhandled request to pack value of property "
              "%d (%s) from object of type \"%s\".", __FUNCTION__,
return;

  case OBJTYPE_UNIT:
    {
      struct packet_edit_unit *packet = pd.unit;

      switch (propid) {
      case OPID_UNIT_MOVES_LEFT:
        packet->moves_left = pv->data.v_int;
        return;
      case OPID_UNIT_FUEL:
        packet->fuel = pv->data.v_int;
        return;
      case OPID_UNIT_MOVED:
        packet->moved = pv->data.v_bool;
        return;
      case OPID_UNIT_DONE_MOVING:
        packet->done_moving = pv->data.v_bool;
        return;
      case OPID_UNIT_HP:
        packet->hp = pv->data.v_int;
        return;
      case OPID_UNIT_VETERAN:
        packet->veteran = pv->data.v_int;
        return;
      default:
        break;
      }
    }
    log_error("%s(): Unhandled request to pack value of property "
              "%d (%s) from object of type \"%s\".", __FUNCTION__,
return;

  case OBJTYPE_CITY:
    {
      struct packet_edit_city *packet = pd.city;

      switch (propid) {
      case OPID_CITY_NAME:
        sz_strlcpy(packet->name, pv->data.v_string);
        return;
      case OPID_CITY_SIZE:
        packet->size = pv->data.v_int;
        return;
      case OPID_CITY_FOOD_STOCK:
        packet->food_stock = pv->data.v_int;
        return;
      case OPID_CITY_SHIELD_STOCK:
        packet->shield_stock = pv->data.v_int;
        return;
      case OPID_CITY_BUILDINGS:
        {
          int i;

          for (i = 0; i < B_LAST; i++) {
            packet->built[i] = pv->data.v_built[i].turn;
          }
        }
        return;
      default:
          break;
      }
    }
    log_error("%s(): Unhandled request to pack value of property "
              "%d (%s) from object of type \"%s\".", __FUNCTION__,
return;

  case OBJTYPE_PLAYER:
    {
      struct packet_edit_player *packet = pd.player;

      switch (propid) {
      case OPID_PLAYER_NAME:
        sz_strlcpy(packet->name, pv->data.v_string);
        return;
      case OPID_PLAYER_NATION:
        packet->nation = nation_index(pv->data.v_nation);
        return;
      case OPID_PLAYER_INVENTIONS:
        advance_index_iterate(A_FIRST, tech) {
          packet->inventions[tech] = pv->data.v_inventions[tech];
        } advance_index_iterate_end;
        return;
      case OPID_PLAYER_GOLD:
        packet->gold = pv->data.v_int;
        return;
      default:
        break;
      }
    }
    log_error("%s(): Unhandled request to pack value of property "
              "%d (%s) from object of type \"%s\".", __FUNCTION__,
return;

  case OBJTYPE_GAME:
    {
      struct packet_edit_game *packet = pd.game;

      switch (propid) {
      case OPID_GAME_YEAR:
        packet->year = pv->data.v_int;
        return;
      case OPID_GAME_SCENARIO:
        packet->scenario = pv->data.v_bool;
        return;
      case OPID_GAME_SCENARIO_NAME:
        sz_strlcpy(packet->scenario_name, pv->data.v_const_string);
        return;
      case OPID_GAME_SCENARIO_DESC:
        sz_strlcpy(packet->scenario_desc, pv->data.v_const_string);
        return;
      case OPID_GAME_SCENARIO_PLAYERS:
        packet->scenario_players = pv->data.v_bool;
        return;
      default:
        break;
      }
    }
    log_error("%s(): Unhandled request to pack value of property "
              "%d (%s) from object of type \"%s\".", __FUNCTION__,
return;

  case NUM_OBJTYPES:
    break;
  }

  log_error("%s(): Unhandled request for object type \"%s\" (nb %d).",
            __FUNCTION__, objtype_get_name(objtype), objtype);
Sets the row reference in a GtkTreeModel of this objbifc_assert_ret_val(NULL != op, G_TYPE_NONE);

  switch (op->valtype) {
  case VALTYPE_NONE:
  case VALTYPE_TILE_VISION_DATA:
    return G_TYPE_NONE;
  case VALTYPE_INT:
    return G_TYPE_INT;
  case VALTYPE_BOOL:
    return G_TYPE_BOOLEANcase VALTYPE_NATION_HASH:
    return G_TYPE_STRING}
  log_error("%s(): Unhandled value type %d.", __FUNCTION__, op->valtype);
  return G_TYPE_NONEenum value_typesenum object_property_idsSTARTPOSreturn;

  case OPID_TILE_IMAGE:
  case OPID_STARTPOSreturnreturnreturnreturnSTARTPOS_NATIONSreturn;

  case OPID_STARTPOS_EXCLUDE:return;
  }

  log_error("%s(): Unhandled request to create widget for property %d (%s).",
            __FUNCTION__, propid, objprop_get_nameenum object_property_ids  case OPID_TILE_IMAGE:
  case OPID_STARTPOSSTARTPOS_XYSTARTPOS_NATIONSSTARTPOS_EXCLUDE:objprop_get_child_widget(op, "checkbutton");
    disenum object_property_flags flags,
                      †  „ïp…Øk„á€‚1 U‚Û € F@€œ |„5€L _ó €‚& lÿ<› b‚€:€‡ ‚)>£ V2Ÿ G€ƒ	 ‚>€‚ P>€‚: 2\€^ ’ €f “w’Q€ƒ4 ‚S­  z×= —¦H³ ƒ½e BÀk˜ ‹0Ð0€Š4 uæ— OØ@ OÜ<˜ ‰Dí ‚2öSª d‘1˜ TŠ@ ‹nû » d‘1ˆ mŠ'€‚ Š†s† ˆ‘† „m™"† …1ž€o T‹ ž.¤K² ØUÃ˜ „K‚›^˜ )‚ª „‚¡d† „o‚¥~† †i‚ªm€ ‚²U€ h‚Á@› „m‚Â%€‚ ‚Çf† u‚È}€‚ VÌ@ „ ‚Êg ƒa‚Ï
 …A‚Ò[˜ ‚-‚Ø€A e„ ¸m‚ÛU€D ‚oƒ”$² U‚Û ˜ F@ ‚_ƒ˜n€‚ Rƒœt€‚* VÌ@­ F@ ˜iƒŸ~— ‚]ƒ¸j€ gƒÄ{€B Œƒ»F¼ oƒÊ— ±ƒÚw— †"„Œ± ƒW„’=— „–€> „¾8 „{„§-³ ‡`„¬,£ aƒÍ_ „j„´|— „„¹i— „Y„¾´ ƒ#„Âe€i §I„ÆŒ [„ìr€	             enum value_types valtype,
                                   struct property_page *parent)
{
  struct objprop *op;

  op = fc_calloc(1, sizeof(*op));
  op->id = id;
  op->name = name;
  op->flags = flags;
  op->valtype = valtype;
  op->column_id = -1;
  op->parent_page = parent;

  return opCreate "extended property viewer". This is used for viewing/editing
  complex property values (e.g. arrays, bitvectors, etc.).
******/
static struct extviewer *extviewer_new(struct objprop *op)
{
  struct extviewer *ev;
  GtkWidget *hbox, *vbox, *label, *button, *scrollwin, *image;
  GtkWidget *view = NULL, *spacer;
  GtkTreeSelection *sel;
  GtkListStore *store = NULL;
  GtkTextBuffer *textbuf = NULL;
  GType *gtypes;
  enum object_property_ids propid;
  int num_cols;

  if (!op) {
    return NULL;
  }

  ev = fc_calloc(1, sizeof(*ev));
  ev->objprop = op;

  propid = objprop_get_id(op);


  /* Create the panel widget. */

  switch (propid) {
  case OPID_TILE_SPECIALS:
  case OPID_TILE_BASES:
  case OPID_STARTPOS_NATIONS:
  case OPID_CITY_BUILDINGS:
  case OPID_PLAYER_INVENTIONS:
  case OPID_GAME_SCENARIO_DESC:
    hbox = gtk_hbox_new(FALSE, 4);
    ev->panel_widget = hbox;

    label = gtk_label_new(NULL);
    gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
    gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
    ev->panel_label = label;
    break;

  case OPID_PLAYER_NATION:
    vbox = gtk_vbox_new(FALSE, 4);
    ev->panel_widget = vbox;

    label = gtk_label_new(NULL);
    gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
    gtk_box_pack_start(GTK_BOX(vbox), label, TRUE, TRUE, 0);
    ev->panel_label = label;

    hbox = gtk_hbox_new(FALSE, 4);
    gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);

    image = gtk_image_new();
    gtk_misc_set_alignment(GTK_MISC(image), 0.0, 0.5);
    gtk_box_pack_start(GTK_BOX(hbox), image, TRUE, TRUE, 0);
    ev->panel_image = image;
    break;

  case OPID_TILE_VISION:
    hbox = gtk_hbox_new(FALSE, 4);
    ev->panel_widget = hbox;
    spacer = gtk_alignment_new(0.5, 0.5, 0.0, 0.0);
    gtk_box_pack_start(GTK_BOX(hbox), spacer, TRUE, TRUE, 0);
    break;

  default:
   log_error("Unhandled request to create panel widget "
             "for property %d (%s) in extviewer_new().",
             propid, objprop_get_name(op));
    hbox = gtk_hbox_new(FALSE, 4);
    ev->panel_widget = hbox;
    break;
  }

  if (objprop_is_readonly(op)) {
    button = gtk_button_new_with_label(Q_("?verb:View"));
  } else {
    button = gtk_button_new_with_label(_("Edit"));
  }
  g_signal_connect(button, "clicked",
                   G_CALLBACK(extviewer_panel_button_clicked), ev);
  gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0);
  ev->panel_button = button;

  
  /* Create the data store. */

  switch (propid) {
  case OPID_TILE_SPECIALS:
  case OPID_TILE_BASES:
  case OPID_PLAYER_INVENTIONS:
    store = gtk_list_store_new(3, G_TYPE_BOOLEAN, G_TYPE_INT,
                               G_TYPE_STRING);
    break;
  case OPID_TILE_VISION:
    num_cols = 3 + 1 + V_COUNT;
    gtypes = fc_malloc(num_cols * sizeof(GType));
    gtypes[0] = G_TYPE_INT;       /* player number */
    gtypes[1] = GDK_TYPE_PIXBUF;  /* player flag */
    gtypes[2] = G_TYPE_STRING;    /* player name */
    gtypes[3] = G_TYPE_BOOLEAN;   /* tile_known */
    vision_layer_iterate(v) {
      gtypes[4 + v] = G_TYPE_BOOLEAN; /* tile_seen[v] */
    } vision_layer_iterate_end;
    store = gtk_list_store_newv(num_cols, gtypes);
    free(gtypes);
    break;
  case OPID_CITY_BUILDINGS:
    store = gtk_list_store_new(4, G_TYPE_BOOLEAN, G_TYPE_INT,
                               G_TYPE_STRING, G_TYPE_STRING);
    break;
  case OPID_STARTPOS_NATIONS:
  case OPID_PLAYER_NATION:
    store = gtk_list_store_new(4, G_TYPE_BOOLEAN, G_TYPE_INT,
                               GDK_TYPE_PIXBUF, G_TYPE_STRING);
    break;
  case OPID_GAME_SCENARIO_DESC:
    textbuf = gtk_text_buffer_new(NULL);
    break;
  default:
    log_error("Unhandled request to create data storeev->store = store;
  ev->textbuf = textbuf;

  /* Create the view widget. */ev->view_widget = vbox;

  label = gtk_label_new(objprop_get_name(op));
  gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
  gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
  ev->view_label = label;

  if (store || textbuf) {
    scrollwin = gtk_scrolled_window_new(NULL, NULL);
    GTK_SHADOW_ETCHED_IN);
    GTK_POLICY_AUTOMATIC,
                                   GTK_POLICY_AUTOMATIC);
    gtk_box_pack_start(GTK_BOX(vbox), scrollwin, TRUE, TRUE, 0);

    if (store) {
      view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
      gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(view), TRUE);
      sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(view));
      gtk_tree_selection_set_mode(sel, GTK_SELECTION_MULTIPLE);
    } else {
      const bool editable = !objprop_is_readonly(op);
      view = gtk_text_view_new_with_buffer(textbuf);
      gtk_text_view_set_editable(GTK_TEXT_VIEW(view), editable);
      gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(view), editable);
    }

    gtk_container_add(GTK_CONTAINER(scrollwin), view);
  }

  switch (propid) {

  case OPID_TILE_SPECIALS:
  case OPID_TILE_BASES:
    /* TRANS: As in "this tile special is present". */
    add_column(view, 0, _("PresentTILE_VISION:
    add_column(view, 01, _("Nation"), GDK_TYPE_PIXBUFadd_column(view, 3, _("Known"), G_TYPE_BOOLEAN,
               FALSE, FALSE, NULL, NULL);
    vision_layer_iterate(v) {
      add_column(view, 4 + v, vision_layer_get_name(v),
                 G_TYPE_BOOLEAN, FALSE, FALSE, NULL, NULL);
    } vision_layer_iterate_end;
    break;

  case OPID_CITY_BUILDINGS:
    /* TRANS: As in "this building is present". */
    add_column(view, 0, _("Present/* TRANS: As in "the turn when this building was built". */
    add_column(view, 3, _("Turn Built"), G_TYPE_STRING,
               FALSE, FALSE, NULL, NULL);
    break;

  case OPID_STARTPOS_NATIONS:
    /* TRANS: As in "the player has set this nation". */
    add_column(view, 0, _("SetFlag"), GDK_TYPE_PIXBUF,
               FALSE, FALSE, NULL, NULL);
    add_column(view, 3, _("Name"), G_TYPE_STRING,
               FALSE, FALSE, NULL, NULL);
    break;

  case OPID_PLAYER_NATION:
    /* TRANS: As in "the player has set this nation". */
    add_column(view, 0, _("Set"), G_TYPE_BOOLEAN, TRUE, TRUFlag"), GDK_TYPE_PIXBUF,
               FALSE, FALSE, NULL, NULL);
    add_column(view, 3, _("Name"), G_TYPE_STRING,
               FALSE, FALSE, NULL, NULL);
    break;

  case OPID_PLAYER_INVENTIONS:
    /* TRANS: As in enum object_property_ids propid;
  enum value_types valtype;
  int id, turn_built;
  bool present, allSTARTPOS_NATIONS:
    gtk_list_store_clear(store);
    gtk_list_store_append(store, &iter);
    all = (0 == nation_hash_size(pv->data.v_nation_hash));
    gtk_list_store_set(store, &iter, 0, all, 1, -1, 3,
                       _("All nations"), -1);
    nations_iterate(pnation) {
      present = (!all && nation_hash_lookup(pv->data.v_nation_hash,
                                            pnation, NULL));
      id = nation_numberenum object_property_ids propid;
  enum value_typesSTARTPOS_NATIONSenum object_property_idsSTARTPOS_NATIONS:
    gtk_tree_model_get(model, &iter, 1, &id, -1);
    if (-1 > id && id >= nation_count()) {
      return;
    }

    if (-1 == id) {
      gtk_list_store_set(ev->store, &iter, 0, present, -1);
      gtk_tree_model_get_iter_first(model, &iter);
      if (present) {
        while (gtk_tree_model_iter_next(model, &iter)) {
          gtk_list_store_set(ev->store, &iter, 0, FALSE, -1);
        }
        nation_hash_clear(pv->data.v_nation_hash);
      } else {
        const struct nation_type *pnation;
        int id2;

        gtk_tree_model_iter_next(model, &iter);
        gtk_tree_model_get(model, &iter, 0, &id2, -1);
        gtk_list_store_set(ev->store, &iter, 0, TRUE, -1);
        pnation = nation_by_number(id2);
        nation_hash_insert(pv->data.v_nation_hash, pnation, NULL);
      }
    } else {
      const struct nation_type *pnation;
      bool all;

      gtk_list_store_set(ev->store, &iter, 0, present, -1);
      pnation = nation_by_number(id);
      if (present) {
        nation_hash_insert(pv->data.v_nation_hash, pnation, NULL);
      } else {
        nation_hash_remove(pv->data.v_nation_hash, pnation);
      }
      gtk_tree_model_get_iter_first(model, &iter);
      all = (0 == nation_hash_size(pv->data.v_nation_hash));
      gtk_list_store_set(ev->store, &iter, 0, all, -1);
    }case OPID_CITY_BUILDINGenum object_property_ids  case OBJTYPE_TILE:
    ADDPROP(OPID_TILETILE_TERRAIN, _("Terrainreturn;

  case OBJTYPE_STARTPOS:
    ADDPROP(OPID_STARTPOSSTARTPOSSTARTPOS_EXCLUDE, _("Exclude Nations"),
            OPF_IN_LISTVIEW | OPF_HAS_WIDGET | OPF_EDITABLE, VALTYPE_BOOL);
    ADDPROP(OPID_STARTPOS_NATIONS, _("Nations"),
            OPF_IN_LISTVIEW | OPF_HAS_WIDGET | OPF_EDITABLE,
            VALTYPE_NATION_HASH);
    returnreturnreturnreturnreturn;

  case NUM_OBJTYPES:
    break;
  }

  log_error("%s(): Unhandled page object type %s (nb %d).", __FUNCTION__,
            objtype_get_name(property_page_get_objtype(pp)),
            property_page_get_objtype(pp));
#undef ADDPROPenum editor_object_type objtype,
                 enum editor_object_type
const struct tile *ptileconst const const struct tile *ptile,
                                            const struct unit *punit,
                                            constenum editor_object_type objtype;
  int id;

  if (!pp) {
    return;
  }

  objtype = property_page_get_objtype(pp);
  id = objtype_get_id_from_object(objtype, object_data);
  if (id < 0) {
    return;
  }

  if (objbind_hash_lookup(pp->objbind_table, id,if (!ob) {
    return;
  }
  case OBJTYPE_TILE:
    property_page_add_objbind(pp, (gpointer) ptile);
    return;

  case OBJTYPE_STARTPOS:
    {
      struct startpos *psp = map_startpos_get(ptile);

      if (NULL != psp) {
        property_page_add_objbind(pp, map_startpos_get(ptile));
      }
    }
    returnreturnreturn;

  case OBJTYPE_PLAYER:
  case OBJTYPE_GAME:
    return;

  case NUM_OBJTYPES:
    break;
  }

  log_error("%s(): Unhandled page object type %s (nb %d).", __FUNCTION__,
            objtype_get_name(property_page_get_objtype(pp)),
            property_page_get_objtype(pp)enum value_typesNONE:
    break;case VALTYPE_NATION_HASHcase VALTYPE_TILE_VISION_DATA:
    break;
  }

  propval_free(pv)STARTPOS:
    packet.startpos = fc_calloc(1, sizeof(*packet.startposcase NUM_OBJTYPES:
    break;
  }

  return packetSends the given packet.
return;
  case OBJTYPE_STARTPOS:
    send_packet_edit_startpos_full(my_conn, packet.startpos);
    return;
  case OBJTYPE_UNIT:
    send_packet_edit_unit(my_conn, packet.unit);
    return;
  case OBJTYPE_CITY:
    send_packet_edit_city(my_conn, packet.city);
    returnreturn;
  case OBJTYPE_GAME:
    send_packet_edit_game(my_conn, packet.game);
    return;
  case NUM_OBJTYPES:
    break;
  }

  log_error("%s(): Unhandled object type %s (nb %d).",
            __FUNCTION__, objtype_get_name(property_page_get_objtype(pp)),
            property_page_get_objtype(pp)Free any resources being used by the packet.
enum editor_object_type  case OBJTYPE_STARTPOS:
    if (hint_tiles) {
      tile_list_iterate(hint_tiles, atile) {
        if (NULL == map_startpos_get(atileNULL == ptile) {
      ptile = get_center_tile_mapcanvas();
    }

    if (NULL == ptile) {
      break;
    }

    dsend_packet_edit_startpos(my_conn, tile_index(ptile), FALSE, tag);
    break;case OBJTYPE_TILE:
  case OBJTYPE_GAME:
  case NUM_OBJTYPES:enum editor_object_typeenum editor_object_type
                         enum editor_object_typeenum editor_object_typeenum editor_object_type objtype;
  int i;
  const enum editor_object_type preferred[] = {
    OBJTYPE_CITY,
    OBJTYPE_UNIT,
    OBJTYPE_STARTPOS,
    OBJTYPE_TILE
  };

  if (!pe || !tiles
                           enum editor_object_typeenum editor_object_type objtype,
  enum editor_object_typeenum editor_object_type
                            enum editor_object_typecase OBJTYPE_TILE:
  case OBJTYPE_STARTPOS:
  case OBJTYPE_UNIT:
  case OBJTYPE_CITY:
  case NUM_OBJTYPEScase V_INVISInvis)");
  case V_COUNT:
    break;
  }

  log_error("%s(): Unrecognized vision layer %d.", __FUNCTION__, vl);
  return _("Unknown");
}
ENDREP
DELTA 19087 3770 801
SVN  ¨!¨^7  ” ³{"” „RÁ(” ‡cÆ” ‚.Ís” RÐ,” ‡8Ò	¡ hÓw„ ^¼y Ì~Û#city_size_get(_city)city_size_get(pcity)city_size_get(pcity)city_size_get(pcity)city_size_get(pcity)city_size_get(pcity)city_size_get(pcity) - spe == sumcityENDREP
DELTA 18767 0 334
SVN  éké}( À ” “À” –BÓ)city_size_get(pcity)city_size_get(pcity)ENDREP
DELTA 18362 113168 5661
SVN  „Ý	„är‚£D †> Š ƒi†3 •8Š2€H ‰\¡³ …a«0¥ S„‹ ´ P“7ž Zƒú<€ µ‡ ]¶3œ Ñj¸&€ŠP Ž#€` n4€, Ž#€q o”S²  •~€Z O•~€u ‚@™B­ qœ9€T &ž€E 2Ÿz… l¡< „¢:ª ŽB¦t… ‚rµ6€ ‰¹,³ »pÂj” *þe” Tþe žf‚n€i ‚H‚½0€p \‚Å> ^’p€R \‚Å>» £‚Ä ˆ Žn‚ç€† M‚ù|€‚9 Õt‚ü{© ‰9„ÓPastring.h"unit_upgrade_test(punit, FALSE);

      if (UU_OK == result) {
        number_of_upgraded_units++;
        transform_unit(punit, to_unittype, FALSE);
      } else if (UU_NO_MONEY == result) {
        UU_OK == unit_upgrade_info(punit, buf, sizeof(buf))Convert a single unit to another typehandle_unit_convert(struct player *pplayer, int unitunit_type *to_type, *from_typeconvert() invalid unit %d", unit_id);
    return;
  }

  from_type = unit_type(punit);
  to_type = from_type->converted_to;

  if (unit_can_convertconvert_("%s cannot be converted.")unit_add_build_city_result res)
{
  /* Given that res came from unit_add_or_build_city_test(), pcity will
   * be non-null for all required status values. */
  struct tile *ptile = unit_tile(punit);
  struct city *pcity = tile_city(ptile);

  switch (res) {
  case UAB_BAD_CITY_TERRAIN:
    notify_player(pplayer, ptile, E_BAD_COMMAND, ftc_server,
                  /* TRANS: <tile-terrain>. */
                  _("Can't build a city on %s."),
                  terrain_name_translation(tile_terrain(ptile)));
    break;
  case UAB_BAD_UNIT_TERRAIN:
    notify_player(pplayer, ptile, E_BAD_COMMAND, ftc_server,
                  /* TRANS: <unit> ... <tile-terrain>. */
                  _("%s can't build a city on %s."), unit_link(punit),
                  terrain_name_translation(tile_terrain(ptile)));
    break;
  case UAB_BAD_BORDERS:
    notify_player(pplayer, ptile, E_BAD_COMMAND, ftc_server,
                  _("Can't place a city inside foreigner borders."));
    break;
  case UAB_NO_MIN_DIST:
    notify_player(pplayer, ptile, E_BAD_COMMAND, ftc_server,
                  _("Can't place a city there because another city is too "
                    "close."));
    break;
  case UAB_NOT_BUILD_UNIT:
    {
      struct astring astr = ASTRING_INIT;

      if (role_units_translations(&astr, F_CITIES, TRUE)) {
        notify_player(pplayer, ptile astr_str(&astr));
        astr_free(&astr);
      } else {
        notify_player(pplayer, ptileUAB_NOT_ADDABLE_UNIT:
    {
      struct astring astr = ASTRING_INIT;

      if (role_units_translations(&astr, F_ADD_TO_CITY, TRUE)) {
        notify_player(pplayer, ptileadd to a city."), astr_str(&astr));
        astr_free(&astr);
      } else {
        notify_player(pplayer, ptileUAB_NO_MOVES_ADD:
    notify_player(pplayer, ptile city_link(pcity));
    break;
  case UAB_NO_MOVES_BUILD:
    notify_player(pplayer, ptilebuild city."),
                  unit_link(punit));
    break;
  case UAB_NOT_OWNER:
    notify_player(pplayer, ptileUAB_TOO_BIG:
    notify_player(pplayer, ptile unit_link(punit));
    break;
  case UAB_NO_SPACE:
    notify_player(pplayer, ptile unit_link(punit));
    break;
  case UAB_BUILD_OK:
  case UAB_ADD_OKptilecity_size_add(pcity, unit_pop_value(punit)unit_unit_add_or_build_city_test(punit);

  if (UAB_BUILD_OK == res) {
    city_build(pplayer, punit, name);
  } else if (UAB_ADD_OK == restask != AUT_NONE) {
    adv_unit_new_task(punit, AUcity_size_get(pcity)city_size_get(pcity)unit_move_to_tile_test(unit_type(punit), unit_owner(punit),
                             punit->activity,  {
      struct astring astr = ASTRING_INIT;

      if (role_units_translations(&astr, F_MARINES, TRUE)) {
    ttack from sea."), astr_str(&astr));
        astr_free(&astr);
      } else {
        _("Cannot attack from sea."));
      }
    }
    break;unit_canstruct player *uplayer = unit_owner(to_capture);
          const char *victim_link;

          unit_owner(to_capture)->score.units_lost++;
          to_capture = unit_change_owner(to_capture, pplayer,
                                         (game.server.homecaughtunits
                                          ? punit->homecity
                                          : IDENTITY_NUMBER_ZERO));
          /* As unit_change_owner() currently remove the old unit and
           * replace by a new one (with a new id), we want to make link to
           * the new unit. */
          victim_link = unit_link(to_capture);

          /* Notify players */
          notify_player(pplayer, pdesttile, E_MY_DIPLOMAT_BRIBE, ftc_server,
                        /* TRANS: <unit> ... <unit> */
                capturer_link, victim_link);
          notify_player(uplayer, pdesttile,
                        E_ENEMY_DIPLOMAT_BRIBE, ftc_server,
                        /* TRANS: <unit> ... <Poles> */
                        _("Your %s was captured by the %s."),
                        victim_link, capturer_nation);adv_unit_new_task(punit, AUT_NONE, NULL);ENDREP
DELTA 18308 25649 751
SVN  ÚvÛm œ5 €m ½c
      fc_snprintf(cBuf, sizeof(cBuf), "%s (%d)", city_name(pCity),
                  city_size_get(pCity));
ENDREP
DELTA 17977 843 4734
SVN  †  †  9Z â4 ž Ñ$âW ‚»a´  ê3ƒïf” -…Ú$” “,…ê\” ‚…ê\ ;…ìh ž%†Ounit_by_number(client_player()city_size_get(pCity)city_size_get(pCity)city_size_get(pCity)†  ¨U¨\Œ ¤	  „G¤  if (count ENDREP
DELTA 18308 103155 69
SVN  ‚ýb‚þ+y Ï ¯ ˆpÏ#¯ uØ&› ‚£5Ú-city_size_get(pcity)
                          
                   city_size_get(size[i].city)city_size_get(size[i].city)ENDREP
DELTA 19065 197 463
SVN  †  †   …²O ” í…²Zcity_size_get(pcity)†  †Œz†	‰ †Œz FALSE;
  ENDREP
DELTA 18308 6967 3553
SVN  ‚’h‚’f> ¼: – ñ-¼d” ®” ã>¯*city_build_slots(pcitycity_size_get(pcity)city_size_get(pcity)ENDREP
DELTA 18326 0 6404
SVN  Ä4ÇK ƒ
 6 ” ¸'Aµ …:È€3 °cÍ€ ÆGýmcity_size_get(pcity)
              city_granary_size(city_size_get(pcity)_slots(const struct city *pcity,
                                        const void *data)
{
  static char buf[8];
  fc_snprintf(buf, sizeof(buf), "%3d", city_build_slots(pcity));/* TRANS: "BS" = "build slots" */
  { FALSE,  3, 1, NULL, N_("BS"), N_("Maximum units buildable per turn"),
    NULL, FUNC_TAG(build_slots) },ENDREP
DELTA 19012 0 9999
SVN  †  †  ‚Ž —] € ³x—\¸ ›*Ëz€m ‰Nè
 Cí  £5ò/€R Z–'ˆ ƒ—¹ …IšD€? C…Þ~ R¡|Ÿ £e€W P¥<… „r§” …¬ˆ t±2ˆ ‚$²)” U…> ‰µ-  ƒL¾^” KÂ5€{ DÄi— |Æ:€W ‹ZÇ{€ ƒ$ÔNˆ V×u€J GÙz” ƒ}ÛL” ˆWßT” è6™ kë( ‚Nê8” éí” oƒÖ ¦ ]ƒÏ: ‚+ƒØ	” ŒqƒÚ?” æ%ƒç;” ×{„ÍkŸ ª…¥q— ‰G…Ð ™ Â…ÙW
static citizens city_reduce_specialists(struct city *pcity, citizens change);
static citizens city_reduce_workers(struct city *pcity, citizens change);
city_size_get(pcity) > 1) {
    if (city_size_get(pcity)city_granary_size(city_size_get(pcity))
                    - pcity->food_stock - 1) / pcity->surplus[O_FOOD]city_size_get(pcity) + 1)) {
citizens city_reduce_specialists(struct city *pcity, citizens change)
{
  citizenscitizenscitizens city_reduce_workers(struct city *pcity, citizenscitizens pop_loss,
                      struct player *destroyer)
{
  citizens loss_remain;
  int i;

  if (pop_loss == 0) {
    return TRUE;
  }

  if (city_size_get(pcity) <= pop_loss) {

city_size_add(pcity, -pop_loss)city_size_get(pcity))) {
    pcity->food_stock = city_granary_size(city_size_get(pcity)city city_size_get(pcity)citizenscitizenscity_size_get(pcity)city_size_get(pcity) + 1)) {
   city_size_get(pcity)city_size_get(pcity));
    }
    /* Granary can only hold so much */
    new_food = (city_granary_size(city_size_get(pcity)city_size_add(pcity, 1)city_size_get(pcity));
  } else {
    new_food = city_granary_size(city_size_get(pcity)city_size_get(pcity));
  script_signal_emit("city_growth", 2, API_TYPE_CITY, pcity,
                     API_TYPE_INT, city_size_get(pcity)citizenscity_size_get(pcity)) {
    /* Increase city size until size reached, or increase fails */
    while (size > city_size_get(pcity) && city_increase_size(pcity)) ;
  } else if (size < city_size_get(pcity)city_size_get(pcity)city_size_get(pcity)city_size_get(pcity)city_size_get(pcity) > 1)city_size_get(pcity)city_size_get(pcity)city_size_get(pcity) <= pop_cost) {
  city_size_get(pcity)city_size_get(pcity)city_size_get(pcity)city_size_get(pcity)
          city_size_get(pcity_to)city_size_get(pcity_from)†  ˆŒ(‚"€  u‚|€" ˆ yer_score > 0) {
      /* first, do the migration within one nation */
      if (fc_rand(100) >= game.server.mgr_nationchance) {_("Citizens of %s are thinking about migrating to %s "
                        "for a better life."),
                      city_link_text, city_link(best_city_plENDREP
DELTA 15405 0 1133
SVN  Ašr2‹H …c  ‚f…x€ƒx KŽy€F ‹r€‚b KŽy€ RŒ?€ƒ	 ƒŒ@ Vksource_radius_sq(struct tile *ptile)
{
  struct city *pcity;
  int radius_sq = 0;

  if (BORDERS_DISABLED == game.info.borders) {
    return 0;
  }

  pcity = tile_city(ptile);

  if (pcity) {
    radius_sq = game.info.border_city_radius_sq;
    /* Limit the addition due to the city size. A city size of 60 or more is
     * possible with a city radius of 5 (radius_sq = 26). */
    radius_sq += MIN(city_size_get(pcity), CITY_MAP_MAX_RADIUS_SQ)
                 * game.info.border_size_effect;
  } elseterritory_claiming_base(pbase)) {
        radius_sq = pbase->border_sqBorder source strength
*************************************************************************/
int tile_border_source_strength(struct tile *ptile)
{
  struct city *pcity;
  int strength = 0;

  if (BORDERS_DISABLED == game.info.borders) {
    return 0;
  }

  pcity = tile_city(ptile);

  if (pcity) {
    strength = city_size_get(pcity) + 2;
  } elseterritory_claiming_base(pbase)) {
        strength = 1;
        break;
      }
    } base_type_iterate_end;
  }

  return strengthBorder source strength at tile
*************************************************************************/
int tile_border_strength(struct tile *ptile, struct tile *source)
{
  int full_strength = tile_border_source_strength(source);
  int sq_dist = sq_map_distance(ptile, source);

  if (sq_dist > 0) {
    return full_strength * full_strength / sq_dist;
  } else {
    return FC_INFINITY;
  }territory_claiming_base(pbaseENDREP
DELTA 19101 19370 633
SVN  ‚à9‚à^} ’G €U „g“	” I—{” Çj˜Ocity_size_get(pcity) * unit_list_size(pcity->tile->units)
           * (capital + 1) city_size_get(pcity)city_size_get(pcity)ENDREP
DELTA 17146 71899 260
SVN  ¿rÀn ¦	 €n ™¦f
      fc_snprintf(cBuf , sizeof(cBuf), "%s (%d)", city_name(pCity),
                  city_size_get(pCity));
ENDREP
DELTA 6885 663 318
SVN  ?‡ …s €† Š)€@  Œ"€Aupport.h"            /* bool type */

#include "fc_types.h"

struct conn_list;
struct cm_result;

void city_refresh(struct city *pcity);          /* call if city has changed */
void city_refresh_for_player(struct player *pplayer); /* tax/govt changed */

void city_refresh_queue_add(struct city *pcity);
void city_refresh_queue_processing(void);

void auto_arrange_workers(struct city *pcity); /* will arrange the workers */
void apply_cmresult_to_city(struct city *pcity, const struct cm_result *cmr);

bool city_change_size(struct city *pcity, citizens new_size);
bool city_reduce_size(struct city *pcity, citizens pop_loss,
                      struct player *destroyer);
void city_repair_size(struct city *pcity, citizens change);

void send_city_turn_notifications(struct connection *pconnchoose_build_target(struct player *pplayer, struct city *pcity);
void check_city_migrations(void);

#endif  /* FC__CITYTURN_H */
ENDREP
DELTA 18559 3533 5787
SVN  ‚ã'‚ä7‚ Ïy Ÿ šmÏx– –8êa€a á‚$type CITIZENS           = UINT8UINT32 base_bribe_costCITIZENS size;
  UINT8 city_radius_sq;

  CITIZENS ppl_happy[FEELING_LAST];
  CITIZENS ppl_content[FEELING_LAST];
  CITIZENS ppl_unhappy[FEELING_LAST];
  CITIZENS ppl_angry[FEELING_LAST];

  UINT8 specialists_size;
  CITIZENSENDREP
DELTA 18845 0 9715
SVN  †  †  ^…0   … ¥i €@ Õ^µ"€ ƒSŠz® ƒ™hŽD– Å1„¨F¦ …ô V…ï"€ ‚&…ñ`¦ ‚|…ô€ „v…÷v” l…üw” ž$…þn_gamefc_assert(0);							\
    /* TRANS: Minor error message. */					case 3:
#ifdef HAVE_LIBLZMA
    return FZ_XZ;
#else
    log_verbose("Not compiled with xz support, reverting to default.");
    break;
#endif /* HAVE_LIBLZMA#ifdef HAVE_LIBLZMA
  case FZ_XZ:
    return 3FUNC_EACH_AI(unit_load
                 city_size_get(pcity)
                 city_size_get(pcity),
                 TILE_XY(city_tile(pwork)), city_name(pwork),
                 city_size_get(pwork)
                 city_size_get(pcity)
                 city_size_get(pcity),
                 TILE_XY(city_tile(pwork)), city_name(pwork),
                 city_size_get(pwork)city_size_get(pcity)city_size_get(pcity)†  †  †  S€‚n  €„ ‚ƒ>€s Îs…D€{ ‚^Õ” ~×w” ‚/Ù ¥ xÛ;– Ç8ëM€G Œ_³R„ /À0€m Â€ aÅ?© aÅ? éÅ– ŸS‚®>€A ¡‚Î2– —B‚ïa„ ‚wƒ‡"„ lƒŠœ Ñ1ƒ‹€
 ¸6„Ü<ity_alloc(pcity);

    fc_assert_exit_msg(secfile_lookup_int(file, &pcity->id,
                                          "player%d.c%d.id", plrno, i),
                       "%s", secfile_error());
    identity_number_reserve(pcity->id);
    idex_register_city(pcity);

    id = secfile_lookup_int_default(file, plrno,
				    "player%d.c%d.original", plrno, i);
   {
      int value;
      citizens size;
      fc_assert_exit_msg(secfile_lookup_int(file, &value,
                                            "player%d.c%d.size", plrno, i),
                         "%s", secfile_error());
      size = (citizens)value; /* set the correct type */
      if (value != (int)size) {
        log_error("Invalid city size: %d; set to %d.", value, size);
      }
      city_size_set(pcity, size);
    }

    specialist_type_iterate(sp) {
      int value;
      fc_assert_exit_msg(secfile_lookup_int(file, &valuepcity->specialists[sp] = (citizens)value; /* set the correct type */
      if (value != (int)pcity->specialists[sp]) {
        log_error("Invalid number of specialists: %d; set to %d.", value,
                  pcity->specialists[sp]);
      }city_size_get(pcity),
                  city_name(pwork), TILE_XY(city_tile(pwork)),
                  city_size_get(pwork)city_size_get(pcity)city_size_get(pcity)
                city_size_get(pcity)FUNC_EACH_AI(city_loadvision_site_new() */
      struct vision_site *pdcity = vision_site_newsite{
        int size;
        citizens city_size;
        fc_assert_exit_msg(secfile_lookup_int(file, &size,
    city_size = (citizens)size; /* set the correct type */
        if (size != (int)city_size) {
          log_error("Invalid city size: %d; set to %d.", size, city_size);
        }
        vision_site_size_set(pdcity, size);
      }

      pdcity->occupiedoccupied", plrno, i);
      pdcity->wallsFUNC_EACH_AI(unit_savecity_size_get(pcity), "player%d.c%d.size",
                      FUNC_EACH_AI(city_savesitesitevision_site_size_get(pdcity)/* old savegames use the year while newer savegames use the turn. */
    game.server.onsetbarbarian = MIN(0, game.server.onsetbarbarian);
ŒÀ ðû‹€‹ ð }

  if (game.info.is_new_game) {
    if (map.server.have_rivers_overlay && !map.server.have_resources) {
      sz_strlcat(options, " riversoverlay");
    }
  }
  secfile_insert_str(file, options, "savefile.options");
  secfile_insert_str(file, save_reason, "savefile.reason");

  /* Save improvement order in savegame, so we are not dependent on
   * ruleset order.
   * If the game isn't started improvements aren't loaded
   * so we can not save the order.
   */
  if (improvement_count() > 0) {
    const char* buf[improvement_count()];

    improvement_iterate(pimprove) {
      buf[improvement_index(pimprove)] = improvement_rule_name(pimprove);
    } improvement_iterate_end;

    secfile_insert_str_vec(file, buf, improvement_count(),
                           "savefile.improvement_order");
  }
  
  /* Save technology order in savegame, so we are not dependent on ruleset
   * order. If the game isn't started advances aren't loaded 
   * so we can not save the order. */
  if (game.control.num_tech_types > 0) {
    const char* buf[game.control.num_tech_types];
    buf[A_NONE] = "A_NONE";
    advance_iterate(A_FIRST, a) {
      buf[advance_index(a)] = advance_rule_name(a);
    } advance_iterate_end;
    secfile_insert_str_vec(file, buf, game.control.num_tech_types,
                           "savefile.technology_order");
  }
  {
    const char **modname;

    /* Save specials order */
    modname = fc_cENDREP
DELTA 19112 779 2135
SVN  ¤¤l ™O ” „f™Z€A S’@— Bˆ  ƒi $city_size_get(pcity)city_size_get(pcity));
  sz_strlcpy(psite->name, city_name(pcity)*
  Get the city size.
ENDREP
DELTA 18563 2274 2628
SVN  †  †  ‚MœX ‚©A  L‚©@— Lƒá@€t PÌ €} Lƒá@€~ QË— Lƒá@€	 RÌ ® S‚¤}€ YÌ  ¿K‚¬m t‚ì6 ‚í+€& QË€ ‚í*€t ‚îz“ N‚ð“ <‚ñqŽ ‚%‚ó2½ aÌ  –‚ök¶ ž+ƒ” <ƒ«G bË …/ƒ­y” ÌNƒ³3” ¦„€ „¦” ‚@„§:€X |„ª6ž SË ÄH„­€n ƒ„ò€‚4 w„÷Ÿ ˆQ„ù€S ‹R…ƒ/€ †…€‚ ˆ~…˜€P “T…¢A” ?…¶ €O Š4…Ä” q…ÎT” §q…ÏP’ †F…÷o” J…þ@€% …ÿl€‚G Šw†‚X***
  Get the city size***/
citizens city_size_get(const struct city *pcity)
{
  fc_assert_ret_val(pcity != NULL, 0);

  return pcity->size***
  Add a (positive or negative) value to the city size. As citizens is an
  unsigned value use int for the parameter 'add'***/
void city_size_add(struct city *pcity, int add)
{
  citizens size = city_size_get(pcity);

  fc_assert_ret(pcity != NULL);
  fc_assert_ret(MAX_CITY_SIZE - size > add);
  fc_assert_ret(size >= -add);

  city_size_set(pcity, city_size_get(pcity) + add***
  Set the city size***/
void city_size_set(struct city *pcity, citizens size)
{
  fc_assert_ret(pcity != NULL);

  /* Set city size. */
  pcity->size = sizeReturns how many thousand citizen live in thisint city_population(const struct city *pcity)
{
  /*  Sum_{i=1}^{n} i  ==  n*(n+1)/2  */
  return city_size_get(pcity) * (city_size_get(pcity) + 1) * 5*/
bool city_can_be_built_here(const struct tile *ptile,
                            const struct unit *punit)
{
  return (CB_OK == city_build_here_test(ptile, punit)**
  Returns CB_OK if the given unit can build a city at the given map
  coordinates. Else, returns the reason of the failure.

  punit is the founding unit.*/
enum city_build_result city_build_here_test(const struct tile *ptile,
                                           CB_BAD_CITY_TERRAINCB_BAD_UNIT_TERRAINCB_BAD_BORDERSCB_NO_MIN_DIST;
    }
  } square_iterate_end;

  return CB_OK
            + city_size_get(pc1) + city_size_get(pc2)city_size_get(pcity)city_size_get(pcity) + 1) / 2city_size_get(pcity)city_size_get(pcity)**/
citizens player_/* Value of zero means effect is inactive */
    return CLIP(0, content, MAX_CITY_SIZE);CLIP(0, content, MAX_CITY_SIZEcitizens make_citizens_happy(citizens *from, citizens *to,
                                           citizenscitizens *happy = &pcity->feel[CITIZEN_HAPPY][FEELING_BASE];
  citizens *content = &pcity->feel[CITIZEN_CONTENT][FEELING_BASE];
  citizens *unhappy = &pcity->feel[CITIZEN_UNHAPPY][FEELING_BASE];
  citizens *angry = &pcity->feel[CITIZEN_ANGRY][FEELING_BASE];
  citizens size = city_size_get(pcity);
  citizenscitizens base_content = player_citizens *happy = &pcity->feel[CITIZEN_HAPPY][FEELING_LUXURY];
  citizens *content = &pcity->feel[CITIZEN_CONTENT][FEELING_LUXURY];
  citizens *unhappy = &pcity->feel[CITIZEN_UNHAPPY][FEELING_LUXURY];
  citizenscitizens *content = &pcity->feel[CITIZEN_CONTENT][FEELING_EFFECT];
  citizens *unhappy = &pcity->feel[CITIZEN_UNHAPPY][FEELING_EFFECT];
  citizenscitizens *happy = &pcity->feel[CITIZEN_HAPPY][FEELING_MARTIAL];
  citizens *content = &pcity->feel[CITIZEN_CONTENT][FEELING_MARTIAL];
  citizens *unhappy = &pcity->feel[CITIZEN_UNHAPPY][FEELING_MARTIAL];
  citizens *angry = &pcity->feel[CITIZEN_ANGRY][FEELING_MARTIAL];
  citizens citizens *happy = &pcity->feel[CITIZEN_HAPPY][FEELING_FINAL];
  citizens *content = &pcity->feel[CITIZEN_CONTENT][FEELING_FINAL];
  citizens *unhappy = &pcity->feel[CITIZEN_UNHAPPY][FEELING_FINAL];
  citizenscity_size_get(pcity)city_size_get(pcity)
                              * city_size_get(trade_city))city_size_get(pcity)city_size_get(pcity), martial_law_eachcity_size_get(pcity)* unhappy citizens content */
  martial_law_each = get_city_bonus(pcity, EFT_MARTIAL_LAW_EACH);
  if (martial_law_each > 0) {
    int count = 0;
    int martial_law_rtial_law_max || martial_law_max == 0)
          && is_military_unit(punit)
          && unit_owner(punit) == city_owner(pcity)) {
        count++;
      }
    } unit_list_iterate_end;

    pcity->martial_law = CLIP(0, count * martial_law_each, MAX_CITY_SIZE);
  }

  free_unhappy = get_city_bonus(pcity, EFT_MAKE_CONTENT_MIL);†  Å4Ý.™/€…R Zµz€ N•?€ŒV K €ƒ| T¶ ¨ N•?€6 ¡H„^— ž¦5che_get_output()). */
  get_worked_tile_output(pcity, pcity->citizen_base, workers_map);
  add_specialist_output(pcity, pcity->citizen_base);

  set_city_production(pcity);
  citizen_base_mood(pcity);
  pcity->pollution = city_pollution(pcity, pcity->prod[O_SHIELD]);

  happy_copy(pcity, FEELING_LUXURY);
  citizen_happy_luxury(pcity);	/* with our new found luxuries */

  happy_copy(pcity, FEELING_EFFECT);
  citizen_content_buildings(pcity);

  /* Martial law & unrest from units */
  happy_copy(pcity, FEELING_MARTIAL);
  citizen_happy_units(pcity);

  /* Building (including wonder) happiness effects */
  happy_copy(pcity, FEELING_FINAL);
  citizen_happy_wonders(pcity);

  unhappy_city_check(pcity);
  set_surplusesGive corruption/waste generated by city.  otype gives the output type
  (O_SHIELD/O_TRADE).  'total' gives the total output of this type in the
  cityint city_waste(const struct city *pcity, Output_type_id otype, int total)
{
  int penalty = 0;
  int penalty_size = 0;  /* separate notradesize/fulltradeisze from normal
                          * corruption */
  int total_eft = total; /* normal corruption calculated on total reduced by
                          * possible size penalty */
  int waste_level = get_city_output_bonus(pcity, get_output_type(otype),
                                          EFT_OUTPUT_WASTE);
  int waste_by_dist = get_city_output_bonus(pcity, get_output_type(otype),
                                            EFT_OUTPUT_WASTE_BY_DISTANCE);
  int waste_pct = get_city_output_bonus(pcity, get_output_type(otype), 
                                        EFT_OUTPUT_WASTE_PCT);

  if (otype == O_TRADE) {
    /* FIXME: special case for trade: it is affected by notradesize and
     * fulltradesize server settings.
     *
     * If notradesize and fulltradesize are equal then the city gets no
     * trade at that size. */
    int notradesize = MIN(game.info.notradesize, game.info.fulltradesize);
    int fulltradesize = MAX(game.info.notradesize, game.info.fulltradesize);

    if (city_size_get(pcity) <= notradesize) {
      return total; /* Then no trade income. */
    } else if (city_size_get(pcity) >= fulltradesize) {
      penalty_size = 0;
     } else {
      penalty_size = total_eft * (fulltradesize - city_size_get(pcity))
                     / (fulltradesize - notradesize);
    }
  }

  if (waste_by_dist > 0) {
    const struct city *capital = player_palace(city_owner(pcity));

    if (!capital) {
      return total; /
                     * real_map_distance(capital->tile, pcity->tile);
    }
  }

  /* reduce the amount subjected to corruption */
  total_eft -= penalty_size;

  /* corruption/waste calculated only for the actually produced amount */
  if (waste_level > 0) {
    penalty += total_eft * waste_level / 100;
  }

  /* bonus calculated only for the actually produced amount */
  penalty -= penalty * waste_pct / 100;

  /* add up total penalty */
  penalty += penalty_size;

  return MIN(MAX(penalty, 0), totalGive the number of specialists in a citycitizens city_specialists(const struct city *pcity)
{
  citizens count = 0;

  specialist_type_iterate(sp) {
    fc_assert_ret_val(MAX_CITY_SIZE - count > pcity->specialists[sp], 0);city_size_set(pcity, 1)ENDREP
DELTA 18872 1249 323
SVN  ÜzÝ/ o k ” †Uv” ­L–V” hÄ-± UÅ-‚ –wÆcity_size_get(acity)city_size_get(acity)city_size_get(pcity)city_size_get(pcity) * multiplier
               dvENDREP
DELTA 13912 12551 91
SVN  µoµx ¬R ˜ @…@ ˆN­!city_size_get(pcity))).
ENDREP
DELTA 19112 4276 254
SVN  ÏDÐV3„ — „ ²n—€‚  ‡Ê` ²Ó€‚ a…‚ µ6†o ˆT¼x ‰=Æ0xFFcitizens size;
  citizens feel[CITIZEN_LAST][FEELING_LAST];

  /* Specialists */
  citizens specialists[SP_MAX];

  citizens martial_law;       /* Citizens pacified by martial law. */
  citizens unit_happy_upkeep; /* Citizens angered by military action. */citizens city_size_get(const struct city *pcity);
void city_size_add(struct city *pcity, int add);
void city_size_set(struct city *pcity, citizens size);

citizens city_specialists(const struct city *pcity);

citizens player_content_citizens(const struct player *pplayerunENDREP
DELTA 19055 3537 814
SVN  „’„’,/i Ë ‘ ð$Ë.‘ (»a‘ lË” ®+Í‘ †XûI‘ iƒ‚0dv_data *ai = advdv_data *ai = advdv_data *ai = advcity_size_get(pcity)dv_data *ai = advdv_data *ai = advENDREP
DELTA 18308 5633 1206
SVN  œ
œ †B  ¤
†T” ñ!ªicity_size_get(pcity)ENDREP
DELTA 18326 8645 178
SVN  ‚æZ‚ç T ÿ] €T æO‚€(city_size_get(target_city)
                           >= req->source.value.minsize)ENDREP
DELTA 18950 5576 11360
SVN  ‚‰‚‰:& ™* ‚ £™+‘ Ég¼W€M Ÿx†y” …W¦|‘ Ü8¬bdvdv_data *ai = advcity_size_get(pcity) == 1
          && city_granary_size(city_size_get(pcity)city_size_get(pcity)dv_data *ai = advENDREP
DELTA 13297 212487 15679
SVN  ‰+ü<P£Z …j €‚J O‡}€‚ W‰y G  „ ‹€‚| G  …Ab€p GŽ €v kŸ1€„ G ¾ GŽ €ƒr G  ƒ–€†P GŽ  5™h€†5 %6€‘G J¥6€§U ‚c±6€ÁE UÀs€†f G  …LÍ_‘ ƒ
Ó:€g ‚×%ƒ ‹2Ú. å` fçf …4éL ƒDï ‘ …WòS‡ Iø*‡ }ùs¢ †@û¹ G  „1‚ ‚†Q¦/* utility */
#include "distribute.h"
#include "log.h"
#include "shared.h"
#include "timing.h"

/* common */
#include "city.h"
#include "game.h"
#include "government.h"
#include "map.h"
#include "nation.h"
#include "packets.h"
#include "player.h"
#include "research.h"
#include "unit.h"

/* aicore */
#include "cm.h"

/* server */rnet.h"
#include "spacerace.h"
#include "srv_log.h"
#include "unithand.h"

/* server/advisors */
#include "advdata.h"
#include "advtools.h"

/* ai */
#include "advdiplomacy.h"
#include "advmilitary.h"
#include "advspace.h"
#include "aicity.h"
#include "aiplayer
/bulb reserves. This is how long time gold/bulb reserves should last.
 * For city grow due to rapture turns_for_rapture is added. */
#define AI_GOLD_RESERVE_MIN_TURNS 10
#define AI_BULBS_RESERVE_MIN_TURNS 10

/* This factor is used for the delta between the estimated and real income to
 * get 'real' rates for the AI player. */
#define PCT_DELTA_TAX 50
#define PCT_DELTA_SCI 10

*
  Returns the total amount of trade generated (trade) and total amount of
  gold needed as upkeep (expenses).
****/
void ai_calc_data(const struct player *pplayer, int *trade, int *expenses,
                  int *income)
{
  if (NULL != trade) {
    *trade = 0;
  }
  if (NULL != expenses) {
    *expenses = 0;
  }
  if (NULL != income) {
    *income = 0;if (NULL != trade) {
      *trade += pcity->surplus[O_TRADE];
    }

    if (NULL != expenses) {
      *expenses += pcity->usage[O_GOLD];
    }

    if (NULL != income) {
      *income += pcity->surplus[O_GOLD];
    }
  } city_list_iterate_end;

  if (game.info.gold_upkeep_style > 0) {
    /* Account for units with gold upkeep paid for by the nation.
     * (game.info.gold_upkeep_style = 1 & 2) */
    unit_list_iterate(pplayer->units, punit) {
      *expenses += punit->upkeep[O_GOLD];
    } unit_list_iterate_end;
  }
}

*******
  Additional data needed for the AI rates calculation
******/
enum {
  AI_RATE_SCI = 0,
  AI_RATE_TAX,
  AI_RATE_LUX,
  AI_RATE_COUNT
};

enum celebration {
  AI_CELEBRATION_UNCHECKED,
  AI_CELEBRATION_NO,
  AI_CELEBRATION_YES,
};

#define RATE_NOT_SET -1
#define RATE_VALID(_rate)                                                    \
  (_rate != RATE_NOT_SET)
#define RATE_REMAINS(_rates)                                                 \
  MAX(0, 100 - _rates[AI_RATE_SCI] - _rates[AI_RATE_TAX]                     \
         - _rates[AI_RATE_LUX])


  This function first determins the minimum tax rate (rate_tax_min) and a tax
  rate for a balanced treasury (rate_tax_balance). Similarily, the science
  rates are determiend (rate_sci_min and rate_sci_balance). Considering the
  minimum rates for tax and science the chance for celebrations is checked. If
  celebration is possible for more than half of the cities, the needed luxury
  rate is saved as rate_lux_min_celebrate. For celebration some reserves are
  defined (see turns_for_rapture).

  At the end the results are compared and the rates are selected as:

  1. Go for celebration.
  2. Use a balanced science and treasury.
  3. go for a balaned treasury / science.
  4. Try to select the best (risk of tech loss or have to sell something).

  At the end the remaining is divided on science/gold/luxury depending on the
  AI settings.
struct player_research *research = player_research_get(pplayer);
  enum celebration celebrate = AI_CELEBRATION_UNCHECKED;
  struct adv_data *ai = adv_data_get(pplayer);
  int can_celebrate = 0, total_cities = 0;
  int trade = 0;         /* total amount of trade generated */
  int expenses = 0;      /* total amount of gold upkeep */
  int income = 0;        /* total amount of gold income */
  int turns_for_rapture; /* additional reserve needed for rapture */
  int rates_save[AI_RATE_COUNT], rates[AI_RATE_COUNT], result[AI_RATE_COUNT];
  int rate_tax_min = RATE_NOT_SET;
  int rate_tax_balance = RATE_NOT_SET;
  int rate_sci_min = RATE_NOT_SET;
  int rate_sci_balance = RATE_NOT_SET;
  int rate_lux_min_celebrate = maxrate;
  int delta_tax = 0, delta_sci = 0;
  struct timer *taxtimer= NULL;
  struct cm_parameter cmpduring_revolution) {
    return; /* This government does not support changing tax rates. */
  }

#ifdef DEBUG
  taxtimer= new_timer_start(TIMER_CPU, TIMER_DEBUG);
#endif

  /* City parameters needed for celebrations. */
  cm_init_parameter(&cmp);
  cmp.require_happy = TRUE;    /* note this one */
  cmp.allow_disorder = FALSE;
  cmp.allow_specialists = TRUE;
  cmp.factor[O_FOOD] = 20;
  cmp.minimal_surplus[O_GOLD] = -FC_INFINITY;

  /* Define reserve (gold/bulbs) needed for rapture (celebration). */
  turns_for_rapture = ai->celebrate ? 0 : (game.info.rapturedelay + 1) * 3;

  log_base(LOGLEVEL_TAX, "%s [max] rate=%d", player_name(pplayer), maxrate);

  /* Save AI rates. */
  rates_save[AI_RATE_SCI] = pplayer->economic.science;
  rates_save[AI_RATE_TAX] = pplayer->economic.tax;
  rates_save[AI_RATE_LUX] = pplayer->economic.luxury;

  log_base(LOGLEVEL_TAX, "%s [old] (Sci/Lux/Tax)=%d/%d/%d",
           player_name(pplayer), rates_save[AI_RATE_SCI],
           rates_save[AI_RATE_LUX], rates_save[AI_RATE_TAX]);

  /* Get some data for the AI player. */
  ai_calc_data(pplayer, &trade, &expenses, &income);

  /* Get the estimates for tax with the current rates. */
  distribute(trade, AI_RATE_COUNT, rates_save, result);

  /* The delta between the estimate and the real value. */
  delta_tax = (result[AI_RATE_TAX] - expenses) - income;

  log_base(LOGLEVEL_TAX, "%s [tax] estimated=%d real=%d (delta=%d)",
           player_name(pplayer), result[AI_RATE_TAX] - expenses, income,
           delta_tax);

  /* Find minimum tax rate which gives us a positive balance for gold and
   * science. We assume that we want science most and luxuries least here,
   * and reverse or modify this assumption later.
   * Furthermore, We assume our entire civilization is one big city, and
   * distribute total income accordingly. This is a simplification that speeds
   * up the code significantly. */

  /* === Gold === */

  /* First set tax (gold) to the minimal available number */
  rates[AI_RATE_SCI] = maxrate; /* Assume we want science here */
  rates[AI_RATE_TAX] = MAX(0, 100 - maxrate * 2); /* If maxrate < 50% */
  rates[AI_RATE_LUX] = (100 - rates[AI_RATE_SCI] - rates[AI_RATE_TAX]);

  /* Now find the minimum tax with positive gold
  log_base(LOGLEVEL_TAX, "%s [tax] trade=%d gold=%d expenses=%d",
           player_name(pplayer), trade, pplayer->economic.gold, expenses);

  while(rates[AI_RATE_TAX] <= maxrate
        && rates[AI_RATE_SCI] >= 0
        && rates[AI_RATE_LUX] >= 0) {
    bool refill_coffers = pplayer->economic.gold < ai_gold_reserve(pplayer);
    int balance_tax, balance_tax_min;

    distribute(trade, AI_RATE_COUNT, rates, result);

    /* Consider the delta between the result and the real value from the
     * last turn to get better estimates. */
    balance_tax = (result[AI_RATE_TAX] - expenses)
                  - delta_tax * PCT_DELTA_TAX / 100;
    balance_tax_min = -(pplayer->economic.gold
                        / (AI_GOLD_RESERVE_MIN_TURNS + turns_for_rapture));

    log_base(LOGLEVEL_TAX, "%s [tax] Tax=%d income=%d",
             player_name(pplayer), rates[AI_RATE_TAX], balance_tax);

    if (!RATE_VALID(rate_tax_min) && balance_tax > balance_tax_min) {
      /* Just slightly negative; we can afford that for a while */
      rate_tax_min = rates[AI_RATE_TAX];
    }

    if (expenses == 0 || balance_tax > 0) {
      /* Ok, got no expenses or positive balance */
      if (refill_coffers && rates[AI_RATE_TAX] < maxrate) {
        /* Need to refill coffers, increase tax a bit */
        rates[AI_RATE_TAX] += 10;
        if (rates[AI_RATE_LUX] > 0) {
          rates[AI_RATE_LUX] -= 10;
        } else {
          rates[AI_RATE_SCI] -= 10;
        }

        log_base(LOGLEVEL_TAX, "%s [tax] Tax=%d to refill coffers",
                 player_name(pplayer), rates[AI_RATE_TAX]);
      }

      /* This is the minimum rate for a balanced treasury (gold). */
      rate_tax_balance = rates[AI_RATE_TAX];

      /* Done! Break the while loop */
      break;
    }

    /* Negative balance. Unacceptable - increase tax. */
    rates[AI_RATE_TAX] += 10;
    if (rates[AI_RATE_LUX] > 0) {
      rates[AI_RATE_LUX] -= 10;
    } else {
      rates[AI_RATE_SCI] -= 10;
    }
  }

  /* If no minimum value was found for the tax use the maximum tax rate. */
  rate_tax_min = RATE_VALID(rate_tax_min) ? rate_tax_min : maxrate;

  log_base(LOGLEVEL_TAX, "%s [tax] min=%d balanced=%d", player_name(pplayer),
           rate_tax_min, rate_tax_balance);

  /* === Science === */

  if (game.info.tech_upkeep_style == 1) {
    /* Tech upkeep activated. */
    int tech_upkeep = research->tech_upkeep;
    int bulbs_researched = research->bulbs_researched;

    /* The delta between the estimate and the real value. */
    delta_sci = (result[AI_RATE_SCI] - research->tech_upkeep)
                - pplayer->bulbs_last_turn;
    log_base(LOGLEVEL_TAX, "%s [sci] estimated=%d real=%d (delta=%d)",
             player_name(pplayer),
             result[AI_RATE_SCI] - research->tech_upkeep,
             pplayer->bulbs_last_turn, delta_sci);

    log_base(LOGLEVEL_TAX, "%s [sci] trade=%d bulbs=%d upkeep=%d",
             player_name(pplayer), trade, research->bulbs_researched,
             tech_upkeep);

    rates[AI_RATE_TAX] = maxrate; /* Assume we want gold here */
    rates[AI_RATE_SCI] = MAX(0, 100 - maxrate * 2);
    rates[AI_RATE_LUX] = (100 - rates[AI_RATE_SCI] - rates[AI_RATE_TAX]);

    /* Now find the minimum science tax with positive bulbs balance
     * Negative balance is acceptable if we have a lots of bulbs. */
    while(rates[AI_RATE_SCI] <= maxrate
          && rates[AI_RATE_TAX] >= 0
          && rates[AI_RATE_LUX] >= 0) {
      int balance_sci, balance_sci_min;

      distribute(trade, AI_RATE_COUNT, rates, result);

      /* Consider the delta between the result and the real value from the
       * last turn. */
      balance_sci = (result[AI_RATE_SCI] - tech_upkeep)
                    - delta_sci * PCT_DELTA_SCI / 100;
      balance_sci_min = -(bulbs_researched
                          / (AI_BULBS_RESERVE_MIN_TURNS + turns_for_rapture));
      log_base(LOGLEVEL_TAX, "%s [sci] Sci=%d research=%d",
               player_name(pplayer), rates[AI_RATE_SCI], balance_sci);

      if (!RATE_VALID(rate_sci_min) && balance_sci > balance_sci_min) {
        /* Just slightly negative, if we can afford that for a while */
        rate_sci_min = rates[AI_RATE_SCI];
      }

      if (tech_upkeep == 0 || balance_sci > 0) {
        /* Ok, got no expenses or positive balance */
        rate_sci_balance = rates[AI_RATE_SCI];

        /* Done! Break the while loop */
        break;
      }

      /* Negative balance. Unacceptable - increase science.*/
      rates[AI_RATE_SCI] += 10;
      if (rates[AI_RATE_LUX] > 0) {
        rates[AI_RATE_LUX] -= 10;
      } else {
        rates[AI_RATE_TAX] -= 10;
      }
    }

    /* If no minimum value was found for the science use the maximum science
     * rate. */
    rate_sci_min = RATE_VALID(rate_sci_min) ? rate_sci_min : maxrate;

    log_base(LOGLEVEL_TAX, "%s [sci] min=%d balanced=%d",
             player_name(pplayer), rate_sci_min, rate_sci_balance);
  } else {
    /* No tech upkeep - minimum science value is 0. */
    rate_sci_min = 0;
  }

  /* === Luxury === */

  /* Should (and can)
      && 100 > rate_tax_min + rate_sci_min) {
    celebrate = AI_CELEBRATION_NO;

    /* Set the minimum tax for a positive science and gold balance and use the
     * remaining trade goods for luxuries (max. luxuries). */
    rates[AI_RATE_SCI] = rate_sci_min;
    rates[AI_RATE_TAX] = rate_tax_min;
    rates[AI_RATE_LUX] = 0;

    rates[AI_RATE_LUX] = MIN(maxrate, rates[AI_RATE_LUX]
                                      + RATE_REMAINS(rates));
    rates[AI_RATE_TAX] = MIN(maxrate, rates[AI_RATE_TAX]
                                      + RATE_REMAINS(rates));
    rates[AI_RATE_SCI] = MIN(maxrate, rates[AI_RATE_SCI]
                                      + RATE_REMAINS(rates));

    /* Temporary set the new rates. */
    pplayer->economic.luxury = rates[AI_RATE_LUX];
    pplayer->economic.tax = rates[AI_RATE_TAX];
    pplayer->economic.science = rates[AI_RATE_SCI];

    /* Check if we celebrate - the city state must be restored at the end! */
    city_list_iterate(pplayer->cities, pcity) {
      struct cm_result *cmr = cm_result_new(pcity);
      struct ai_city *city_data = def_ai_city_data(pcity);

      cm_clear_cache(pcity);
      cm_query_result(pcity, &cmp, cmr); /* burn some CPU */

      total_cities++;

      if (cmr->found_a_valid
          && pcity->surplus[O_FOOD] > 0
          && city_size_get(pcity) >= game.info.celebratesize
          && city_can_grow_to(pcity, city_size_get(pcity) + 1)) {
        city_data->celebrate = TRUE;
        can_celebrate++;
      } else {
        city_data->celebrate = FALSE;
      }
      cm_result_destroy(cmr);
    } city_list_iterate_end;

    /* If more than half our cities can celebrate, go for it! */
    if (can_celebrate * 2 > total_cities) {
      celebrate = AI_CELEBRATION_YES;
      rate_lux_min_celebrate = pplayer->economic.luxury;
      log_base(LOGLEVEL_TAX, "%s [lux] celebration possible (Sci/Lux/Tax)>="
                             "%d/%d/%d (%d of %d cities)",
               player_name(pplayer), rate_sci_min, rate_lux_min_celebrate,
               rate_tax_min, can_celebrate, total_cities);
    } else {
      log_base(LOGLEVEL_TAX, "%s [lux] no celebration: only %d of %d cities",
               player_name(pplayer), can_celebrate, total_cities);
    }
  }

  if (celebrate != AI_CELEBRATION_YES) {
    /* TODO: Calculate a minimum luxury tax rate.
     *       Add general luxury code here. */
  }

  /* === Set the rates. === */

  /* Reset rates values. */
  rates[AI_RATE_SCI] = 0;
  rates[AI_RATE_TAX] = 0;
  rates[AI_RATE_LUX] = 0;

  /* Now decide that to do ... */
  if (celebrate == AI_CELEBRATION_YES
      && rate_tax_min + rate_sci_min + rate_lux_min_celebrate <= 100) {
    /* Celebration! */
    rates[AI_RATE_SCI] = rate_sci_min;
    rates[AI_RATE_TAX] = rate_tax_min;
    rates[AI_RATE_LUX] = rate_lux_min_celebrate;

    log_base(LOGLEVEL_TAX, "%s [res] celebration! (Sci/Lux/Tax)>=%d/%d/%d",
             player_name(pplayer), rates[AI_RATE_SCI], rates[AI_RATE_LUX],
             rates[AI_RATE_TAX]);
  } else {
    /* No celebration */
    celebrate = (celebrate == AI_CELEBRATION_YES) ? AI_CELEBRATION_NO
                                                  : celebrate;

    if (RATE_VALID(rate_tax_balance)) {
      if (RATE_VALID(rate_sci_balance)) {
        if (100 >= rate_tax_balance + rate_sci_balance) {
          /* A balanced treasury and research. */
          rates[AI_RATE_SCI] = rate_sci_balance;
          rates[AI_RATE_TAX] = rate_tax_balance;

          log_base(LOGLEVEL_TAX, "%s [res] balanced! (Sci/Lux/Tax)>=%d/%d/%d",
                   player_name(pplayer), rates[AI_RATE_SCI],
                   rates[AI_RATE_LUX], rates[AI_RATE_TAX]);
        } else {
          /* Try to keep all tech and get as much gold as possible. */
          rates[AI_RATE_SCI] = rate_sci_balance;
          rates[AI_RATE_TAX] = MIN(maxrate, RATE_REMAINS(rates));

          log_base(LOGLEVEL_TAX, "%s [res] balanced sci! tax? "
                                 "(Sci/Lux/Tax)>=%d/%d/%d",
                   player_name(pplayer), rates[AI_RATE_SCI],
                   rates[AI_RATE_LUX], rates[AI_RATE_TAX]);
        }
      } else {
        /* A balanced tax and as much science as possible. */
        rates[AI_RATE_TAX] = rate_tax_balance;
        rates[AI_RATE_SCI] = MIN(maxrate, RATE_REMAINS(rates));

        log_base(LOGLEVEL_TAX, "%s [res] balanced tax! sci? "
                               "(Sci/Lux/Tax)>=%d/%d/%d",
                 player_name(pplayer), rates[AI_RATE_SCI],
                 rates[AI_RATE_LUX], rates[AI_RATE_TAX]);
      }
    } else if (RATE_VALID(rate_sci_balance)) {
      /* Try to keep all techs and get as much gold as possible. */
      rates[AI_RATE_SCI] = rate_sci_balance;
      rates[AI_RATE_TAX] = MIN(maxrate, RATE_REMAINS(rates));

      log_base(LOGLEVEL_TAX, "%s [res] balanced sci! tax? "
                             "(Sci/Lux/Tax)>=%d/%d/%d",
               player_name(pplayer), rates[AI_RATE_SCI],
               rates[AI_RATE_LUX], rates[AI_RATE_TAX]);
    } else {
      /* We need more trade to get a positive gold and science balance. */
      if (ai_wants_no_science(pplayer) || ai_on_war_footing(pplayer)) {
        /* Go for gold (improvements and units) and risk the loss of a
         * tech. */
        rates[AI_RATE_TAX] = maxrate;
        rates[AI_RATE_SCI] = MIN(maxrate, RATE_REMAINS(rates));

        log_base(LOGLEVEL_TAX, "%s [res] risk of tech loss! (Sci/Lux/Tax)>="
                               "%d/%d/%d", player_name(pplayer),
                 rates[AI_RATE_SCI], rates[AI_RATE_LUX],
                 rates[AI_RATE_TAX]);
      } else {
        /* Go for science and risk the loss of improvements or units. */
        rates[AI_RATE_SCI] = MAX(maxrate, rate_sci_min);
        rates[AI_RATE_TAX] = MIN(maxrate, RATE_REMAINS(rates));

        log_base(LOGLEVEL_TAX, "%s [res] risk of empty treasury! "
                               "(Sci/Lux/Tax)>=%d/%d/%d",
                 player_name(pplayer), rates[AI_RATE_SCI],
                 rates[AI_RATE_LUX], rates[AI_RATE_TAX]);
      };
    }
  }

  /* Put the remaining to tax or science. */
  if (ai_wants_no_science(pplayer) || ai_on_war_footing(pplayer)) {
    rates[AI_RATE_TAX] = MIN(maxrate, rates[AI_RATE_TAX]
                                      + RATE_REMAINS(rates));
    rates[AI_RATE_LUX] = MIN(maxrate, rates[AI_RATE_LUX]
                                      + RATE_REMAINS(rates));
    rates[AI_RATE_SCI] = MIN(maxrate, rates[AI_RATE_SCI]
                                      + RATE_REMAINS(rates));
  } else {
    rates[AI_RATE_SCI] = MIN(maxrate, rates[AI_RATE_SCI]
                                      + RATE_REMAINS(rates));
    rates[AI_RATE_TAX] = MIN(maxrate, rates[AI_RATE_TAX]
                                      + RATE_REMAINS(rates));
    rates[AI_RATE_LUX] = MIN(maxrate, rates[AI_RATE_LUX]
                                      + RATE_REMAINS(rates));
  }

  /* Check and set the calculated rates. */
  fc_assert_ret(0 <= rates[AI_RATE_SCI] && rates[AI_RATE_SCI] <= maxrate);
  fc_assert_ret(0 <= rates[AI_RATE_TAX] && rates[AI_RATE_TAX] <= maxrate);
  fc_assert_ret(0 <= rates[AI_RATE_LUX] && rates[AI_RATE_LUX] <= maxrate);
  fc_assert_ret(rates[AI_RATE_SCI] + rates[AI_RATE_TAX] + rates[AI_RATE_LUX]
                == 100);

  log_base(LOGLEVEL_TAX, "%s [new] (Sci/Lux/Tax)=%d/%d/%d",
           player_name(pplayer), rates[AI_RATE_SCI], rates[AI_RATE_LUX],
           rates[AI_RATE_TAX]);

  pplayer->economic.science = rates[AI_RATE_SCI];
  pplayer->economic.tax = rates[AI_RATE_TAX];
  pplayer->economic.luxury = rates[AI_RATE_LUX];

  /* === Cleanup === */

  /* Cancel all celebrations from the last turn. */
  ai->celebrate = FALSE;

  /* Now do celebrate or reset the city states if needed. */
  if (celebrate == AI_CELEBRATION_YES) {
    log_base(LOGLEVEL_TAX, "*** %s CELEBRATES! ***", player_name(pplayer));

    /* We do celebrate! */
    ai->celebrate = TRUE;

    city_list_iterate(pplayer->cities, pcity) {
      struct cm_result *cmr = cm_result_new(pcity);

      if (def_ai_city_data(pcity)->celebrate == TRUE) {
        log_base(LOGLEVEL_TAX, "setting %s to celebrate", city_name(pcity));
        cm_query_result(pcity, &cmp, cmr);
        if (cmr->found_a_valid) {
          apply_cmresult_to_city(pcity, cmr);
          city_refresh_from_main_map(pcity, NULL);
          if (!city_happy(pcity)) {
}
        } else {
          CITY_LOG(LOG_ERROR, pcity, "has NO valid state!");
        }
      }
      cm_result_destroy(cmr);
    } city_list_iterate_end;
  } else if (celebrate == AI_CELEBRATION_NO) {
    city_list_iterate(pplayer->cities, pcity) {
      /* KLUDGE: Must refresh to restore the original values which
       * were clobbered in cm_query_result(), after the tax rates
       * were changed. */
      city_refresh_from_main_map(pcity, NULL);
    } city_list_iterate_end;
  }

  send_player_info_c(pplayer, pplayer->connections);

#ifdef DEBUG
  stop_timer(taxtimer);
  log_base(LOGLEVEL_TAX, "Tax calculation for %s (player %d) in %.3f "
                         "seconds.", player_name(pplayer),
           player_index(pplayer), read_timer_seconds(taxtimer));
  free_timer(taxtimer);
#endif
}
#undef RATE_NOT_SET
#undef RATE_VALID
#undef RATE_REMAINS

dv_data *ai = advs_iterate(gov) {
      int val = 0;
      int dist;

      if (gov == game.government_during_revolutionmaxsssdv_data *ai = advserver._commonai_manage_government() + %d for %s
  flush_packets(); /* AIs can be such spammers... */
}


  TIMING_LOG(AIT_ALL, TIMER_STOP);
}
ENDREP
DELTA 6597 18403 2076
SVN  ¡¢a.‹M ‚i  ‚@ƒ9€‚) I  {‰H¾ ‰
‹k® ‚•%‘ ƒ4—V€ˆ& T >
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

/* utility */
#include "log.h"
#include "shared.h"
#include "support.h"

/* common */
#include "city.h"
#include "game.h"
#include "map.h"
#include "player.h"
#include "spaceship.h"
#include "tech.h"
#include "unitlist.h"

#include "aisupport.h"

enum spaceship_state best_state = SSHIP_NONE;

  if (game.infopplayer->cities) == 0
      || city_list_size(tile, pcity->tilestruct player *pplayer = city_owner(pcity);
  int worth = 0, i;
  struct unit_type *u
    = best_role_unit_for_player(city_owner(pcity), F_CITIES);

  if (u) {
    worth += utype_buy_gold_cost(u, 0); /* cost of settler */
  }
  for (i = 1; i < city_size_get(pcity); i++) {
    worth += city_granary_size(i); /* cost of growing city */
  }
  output_type_iterate(o) {
    worth += pcity->prod[o] * 10;
  } output_type_iterate_end;
  unit_list_iterate(pcity->units_supported, punit) {
    if (same_pos(punit->tile, pcity->tile)) {
      struct unit_type *punittype = unit_type(punit)->obsoleted_by;

      if (punittype && can_city_build_unit_direct(pcity, punittype)) {
        worth += unit_disband_shields(punit) / 2; /* obsolete */
      } else {
        worth += unit_disband_shields(punit); /* good stuff */
      }
    }
  } unit_list_iterate_end;
  city_built_iterate(pcity, pimprove) {
    if (improvement_obsolete(pplayer, pimprove)) {
      worth += impr_sell_gold(pimprove) / 4;
    } else {
      worth += impr_sell_gold(pimprove);
    }
  } city_built
ENDREP
DELTA 18975 10238 27035
SVN  †  †  9' Ï “ T‚æž \‚  ‚ëLÐW– ™m„¼€K U‚½@Š \‚ ‹ r„ª0 ÆE„Ù  game_reset();
  }Really save the game to a file && !game.scenario.is_known(loading);
  sg_load_map_owner(loading);
  sg_load_map_worked(loading)Save 'map'sg_save_map†  ††”57Œx° ­v €' l®\™ X¤? Žh½O€j ®eÌK¬ ‰$ûD„ \‚„r€‚+ ‚†a€| ¯‚‡e€d ‚K‚¸6”  ‚»” ‚‚¼” „‚¾1– Šu‚ÂS” ¡!‚ÍS– Ë‚ï– »ƒº.– ë5ƒõb ƒ„á)“ ‡„ä@œ Zû0 ˆh„ì* q„õ€[ §f„ö„ ‚…m€ ì… y          && (tslot = team_slot_by_number(team))(saving->scenario && !saving->save_players)
      || !game_was_started()) {
    /* Nothing to do for a scenario without saved players or a game in
     * INITIAL stateplayer_research *researchdvisor data.
     FIXME: Results are not used at all.
     Do we need this call for side effects? */
  adv, value;
  int nat_x, nat_y;
  citizens sizevalu  size = (citizens)value; /* set the correct type */
  sg_warn_ret_val(value == (int)size, FALSE,
                  "Invalid city size: %d, set to %d", value, size);
  city_size_set(pcity, size);

  specialist_type_iterate(sp) {
    sg_warn_ret_val(
        secfile_lookup_int(loading->file, &value,pcity->specialists[sp] = (citizens)value; /* set the correct type */
    sg_warn_ret_val(value == (int)pcity->specialists[sp], FALSE,
                    "Invalid number of specialists: %d, set to %d.", value,
                    pcity->specialists[sp]city_size_get(pcity), city_name(pwork),
             TILE_XY(city_tile(pwork)), city_size_get(pwork)city_size_get(pcity)city_size_get(pcity)city_size_get(pcity)FUNC_EACH_AI(city_loadcity_size_get(pcity)FUNC_EACH_AI(city_saveFUNC_EACH_AI(unit_loadFUNC_EACH_AI(unit_savevision_site_newvision_site_destroy, size;
  citizens city_size  city_size = (citizens)size; /* set the correct type */
  sg_warn_ret_val(size == (int)city_size, FALSE,
                  "Invalid city size: %d; set to %d.", size, city_size);
  vision_site_size_set(pdcity, city_sizesitesite_owner(pdcity)),
                         "%s.owner", buf);

      secfile_insert_int(saving->file, vision_site_size_get(pdcity),
                        ENDREP
DELTA 18911 0 2406
SVN  †“†“(< ƒ«X ” ìpƒ«c” …˜^” ù"…™kcity_size_get(pcity)city_size_get(pcity)city_size_get(pcity)ENDREP
DELTA 5143 109 2123
SVN  §pØ[Ã' …8 €„/ G ¡ HŽ@€…g e.€# G €  HŽ@€c Sn€„ e.€# G €B ˆ2€! Sn€ƒ e.€# G €h HŽ@€ j[€„1 e.€# G €e -ŸP€ f[€‡x e.€# G €f HŽ@€†2 G • HŽ@€Ž

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

#include <stdarg.h>

/* utility */
#include "astring.h"
#include "log.h"
#include "shared.h"
#include "support.h"
#include "timing.h"

/* common */
#include "city.h"
#include "game.h"
#include "unit.h"

/* server */
#include "notify.h"
#include "srv_main.h"

/* server/advisors */
#include "advdata.h"

/* ai */
#include "aicity.h"
#include "aiplayer.h"
#include "aiunit.h"

#include "srv_log.h"

static struct timer *aitimer[AIT_LAST][2];
static int recursion[AIT_LAST];

/* General AI logging functions */

****
  Log player tech messages.
**/
void real_tech_log(const char *file, const char *function, int line,
                   enum log_level level, bool notify,
                   const struct player *pplayer, struct advance *padvance,
                   const char *msg, ...)
{
  char buffer[500];
  char buffer2[500];
  va_list ap;

  if (!valid_advance(padvance) || advance_by_number(A_NONE) == padvance) {
    return;
  }

  fc_snprintf(buffer, sizeof(buffer), "%s::%s (want %d, dist %d) ",
              player_name(pplayer),
              advance_name_by_player(pplayer, advance_number(padvance)),
              pplayer->ai_common.tech_want[advance_index(padvance)],
              num_unknown_techs_for_goal(pplayer, advance_number(padvance)));

  va_start(ap, msg);
  fc"%s", buffer2);
  if (notify) {
    notify_conn(NULL, NULL, E_AI_DEBUG, ftc_log, "%s", buffer);
  }
  do_log(file, function, line, FALSE, level, "%s", buffer);
}

****
  Log player messages, they will appear like this
    
  where ti is timer, co countdown and lo love for target, who is e.
**/
void real_diplo_log(const char *file, const char *function, int line,
                    enum log_level level, bool notify,
                    const struct player *pplayer,
                    const struct player *aplayerconst struct ai_dip_intel *adip;

  /* Don't use ai_data_get since it can have side effects. */
  adip = ai_diplomacy_get(pplayer, aplayer);

  fc_snprintf(buffer, sizeof(buffer), "%s->%s(l%d,c%d,d%d%s): ",
              player_name(pplayer),
              player_name(aplayer),
              pplayer->ai_common.love[player_index(aplayer)],
              adip->countdown,
              adip->distance,
              adip->is_allied_with_enemy ? "?" :
              (adip->at_war_with_ally ? "!" : ""));

  va_start(ap, msg);
  fc"%s", buffer2);
  if (notify) {
    notify_conn(NULL, NULL, E_AI_DEBUG, ftc_log, "%s", buffer);
  }
  do_log(file, function, line, FALSE, level, "%s", buffer);
}

****
  Log city messages, they will appear like this
    2: Polishreal_city_log(const char *file, const char *function, int line,
                   enum log_level level, bool notify,
                   const struct city *pcitystruct ai_city *city_data = def_ai_city_data(pcity);

  fc_snprintf(buffer, sizeof(buffer), "%s %s(%d,%d) [s%d d%d u%d g%d] ",
              nation_rule_name(nation_of_city(pcity)),
              city_name(pcity),
              TILE_XY(pcity->tile), city_size_get(pcity),
              city_data->danger, city_data->urgency,
              city_data->grave_danger);

  va_start(ap, msg);
  fc"%s", buffer2);
  if (notify) {
    notify_conn(NULL, NULL, E_AI_DEBUG, ftc_log, "%s", buffer);
  }
  do_log(file, function, line, FALSE, level, "%s", buffer);
}

****
  Log unit messages, they will appear like this
    2: Polish Archers[139] (5,35)->(0,0){0,0} stays to defend city
  where [] is unit id, ()->() are coordinates present and goto, and
  {,} contains bodyguard and ferryboat ids.
**/
void real_unit_log(const char *file, const char *function, int line,
                   enum log_level level,  bool notify,
                   constgx, gy;
  struct unit_ai *unit_data = def_ai_unit_data(punit);

  if (punit->goto_tile) {
    gx = punit->goto_tile->x;
    gy = punit->goto_tile->y;
  } else {
    gx = gy = -1;
  }
  
  fc_snprintf(buffer, sizeof(buffer),
	      "%s %s[%d] %s (%d,%d)->(%d,%d){%d,%d} ",
              nation_rule_name(nation_of_unit(punit)),
              unit_rule_name(punit),
              punit->id,
	      get_activity_text(punit->activity),
	      TILE_XY(punit->tile),
	      gx, gy,
              unit_data->bodyguard, unit_data->ferryboat);

  va_start(ap, msg);
  fc"%s", buffer2);
  if (notify) {
    notify_conn(NULL, NULL, E_AI_DEBUG, ftc_log, "%s", buffer);
  }
  do_log(file, function, line, FALSE, level, "%s", buffer);
}

****
  Log message for bodyguards. They will appear like this
    2: Polish Mech. Inf.[485] bodyguardreal_bodyguard_log(const char *file, const char *function, int line,
                        enum log_level level,  bool notify,
                        constconst struct unit *pcharge;
  const struct city *pcity;
  int id = -1;
  int charge_x = -1;
  int charge_y = -1;
  const char *type = "guard";
  const char *s = "none";
  struct unit_ai *unit_data = def_ai_unit_data(punit);

  pcity = game_city_by_number(unit_data->charge);
  pcharge = game_unit_by_number(unit_data->charge);
  if (pcharge) {
    charge_x = pcharge->tile->x;
    charge_y = pcharge->tile->y;
    id = pcharge->id;
    type = "bodyguard";
    s = unit_rule_name(pcharge);
  } else if (pcity) {
    charge_x = pcity->tile->x;
    charge_y = pcity->tile->y;
    id = pcity->id;
    type = "cityguard";
    s = city_name(pcity);
  }
  /* else perhaps the charge died */

  fc_snprintf(buffer, sizeof(buffer),
              "%s %s[%d] %s (%d,%d){%s:%d@%d,%d} ",
              nation_rule_name(nation_of_unit(punit)),
              unit_rule_name(punit),
              punit->id,
              type,
              TILE_XY(punit->tile),
              s, id, charge_x, charge_y);

  va_start(ap, msg);
  fc"%s", buffer2);
  if (notify) {
    notify_conn(NULL, NULL, E_AI_DEBUG, ftc_log, "%s", buffer);
  }
  do_log(file, function, line, FALSE, level, "%s", buffer);
}

****
  Measure the time between the calls.  Used to see where in the AI too
  much CPU is being used.
**/
void TIMING_LOG(enum ai_timer timer, enum ai_timer_activity activity)
{
  static int turn = -1;
  int i;

  if (turn == -1) {
    for (i = 0; i < AIT_LAST; i++) {
      aitimer[i][0] = new_timer(TIMER_CPU, TIMER_ACTIVE);
      aitimer[i][1] = new_timer(TIMER_CPU, TIMER_ACTIVE);
      recursion[i] = 0;
    }
  }

  if (game.info.turn != turn) {
    turn = game.info.turn;
    for (i = 0; i < AIT_LAST; i++) {
      clear_timer(aitimer[i][0]);
    }
    fc_assert(activity == TIMER_START);
  }

  if (activity == TIMER_START && recursion[timer] == 0) {
    start_timer(aitimer[timer][0]);
    start_timer(aitimer[timer][1]);
    recursion[timer]++;
  } else if (activity == TIMER_STOP && recursion[timer] == 1) {
    stop_timer(aitimer[timer][0]);
    stop_timer(aitimer[timer][1]);
    recursion[timer]--;
  }
}

****
  Print results
**/
void TIMING_RESULTS(void)
{
  char buf[200];

#define AILOG_OUT(text, which)                                              \
  fc_snprintf(buf, sizeof(buf), "  %s: %g sec turn, %g sec game", text,     \
              read_timer_seconds(aitimer[which][0]),                        \
              read_timer_seconds(aitimer[which][1]));                       \
  log_test("%s", buf);                                                      \
  notify_conn(NULL, NULL, E_AI_DEBUG, ftc_log, "%s", buf);

  log_test("  --- AI timing results ---");
  notify_conn(NULL, NULL, E_AI_DEBUG, ftc_log,
              "  --- AI timing results ---");
  AILOG_OUT("Total AI time", AIT_ALL);
  AILOG_OUT("Movemap", AIT_MOVEMAP);
  AILOG_OUT("Units", AIT_UNITS);
  AILOG_OUT(" - Military", AIT_MILITARY);
  AILOG_OUT(" - Attack", AIT_ATTACK);
  AILOG_OUT(" - Defense", AIT_DEFENDERS);
  AILOG_OUT(" - Ferry", AIT_FERRY);
  AILOG_OUT(" - Rampage", AIT_RAMPAGE);
  AILOG_OUT(" - Bodyguard", AIT_BODYGUARD);
  AILOG_OUT(" - Recover", AIT_RECOVER);
  AILOG_OUT(" - Caravan", AIT_CARAVAN);
  AILOG_OUT(" - Hunter", AIT_HUNTER);
  AILOG_OUT(" - Airlift", AIT_AIRLIFT);
  AILOG_OUT(" - Diplomat", AIT_DIPLOMAT);
  AILOG_OUT(" - Air", AIT_AIRUNIT);
  AILOG_OUT(" - Explore", AIT_EXPLORER);
  AILOG_OUT("fstk", AIT_FSTK);
  AILOG_OUT("Settlers", AIT_SETTLERS);
  AILOG_OUT("Workers", AIT_WORKERS);
  AILOG_OUT("Government", AIT_GOVERNMENT);
  AILOG_OUT("Taxes", AIT_TAXES);
  AILOG_OUT("Cities", AIT_CITIES);
  AILOG_OUT(" - Buildings", AIT_BUILDINGS);
  AILOG_OUT(" - Danger", AIT_DANGER);
  AILOG_OUT(" - Worker want", AIT_CITY_TERRAIN);
  AILOG_OUT(" - Military want", AIT_CITY_MILITARY);
  AILOG_OUT(" - Settler want", AIT_CITY_SETTLERS);
  AILOG_OUT("Citizen arrange", AIT_CITIZEN_ARRANGE);
  AILOG_OUT("Tech", AIT_TECH);
}
ENDREP
DELTA 19101 6792 11507
SVN  ‚Ä~‚Å*l î` — ‚+îm˜ ÇSñ%½ ‹`¹city_size_add(pcity, 1)city_size_add(pcity, -1)city_size_get(pcity) + unit_pop_value(punit)
                ENDREP
DELTA 18983 28604 401
SVN  †  †    †   †  „Ë{„ÌC*ƒ ‚ü €‚? S‚þ3” d‚ÿ” ƒƒ ” ¼aƒ„” Š}ƒÀ~city_size_get(pcity) % 10],
                 FALSE, FULL_TILE_X_OFFSET, FULL_TILE_Y_OFFSET);
      if (10 <= city_size_get(pcity)) {
        ADD_SPRITE(t->sprites.city.size_tens[(city_size_get(pcity) / 10)
                   % 10], FALSE, FULL_TILE_X_OFFSET, FULL_TILE_Y_OFFSET);
        if (100 <= city_size_get(pcity)city_size_get(pcity)city_size_get(pcity)city_size_get(pcity)city_size_get(pcity)ENDREP
DELTA 19025 286 4168
SVN  ‚öV‚öh( Ò ” yÒ” “6ã city_size_get(pcity)city_size_get(pcity)ENDREP
DELTA 19025 4945 806
SVN  †  †  .„ ˜g — ‚H˜v€} €] Ômž]¢ ‚ƒ8ód€z ‚§ƒ÷city_size_set(pcity, 0)city_size_add(pcity, pcity->feel[i][FEELING_FINAL]);
  }
  specialist_type_iterate(sp) {
    pcity->specialists[sp] = packet->specialists[sp];
    city_size_add(pcity, pcity->specialists[sp]);
  } specialist_type_iterate_end;

  if (city_size_get(pcity)city_size_get(pcity), packet->size, city_name(pcity));
    city_size_set(pcity, packet->size)city_size_set(pcity, packet->size)if (new_tech) {
      /* If we got a new tech the tech tree news an update. */
      science_report_dialog_redraw();
    }†  èuêDO€O èu LT_SPECIALIST = packet->default_specialist;

  for (i = 0; i < MAX_VET_LEVELS; i++) {
    game.work_veteran_chance[i] = packet->work_veteran_chance[i];
    game.veteran_chance[i] = packet->work_veteran_chancENDREP
DELTA 17122 36122 2808
SVN  ¯¸VNƒJ šV  ‚wš[€h JŠ@€H b›(ª „œ3‰ .s† K¤… P˜= ƒ£#€C y m´ 1¨q€] ª@ ‚.¦3ˆ †/¨d**
  Return the specialist type with the given (translated, plural) name.
  Returns NULL if none match.
**/
struct specialist *specialist_by_translated_name(const char *name)
{strcmp(specialist_plural_translation(sp), , plural)pluralname)containing all the specialist abbreviations, for instance
  "E/S/T"**/
const char *specialists_abbreviation_string(voids", separator,
                 specialist_abbreviation_translation(specialist_by_number(sp))citizensENDREP
DELTA 18424 0 5442
SVN  „á„â [‚N †1  ½†C” Rð ë\Ä9” ƒ?‚° ” £‚³j› ÊX‚×´ ¸Wƒ¡~” †ƒÚ`”  ƒàs€M ˆ=ƒâNº Sò@ ã0ƒì” ‘M„ÏJcity_size_get(pcity)city_size_get(pcity)city_size_get(pcity)city_size_get(state->pcity)
                        city_size_get(state->pcity)city_size_get(pcity)city_size_get(pcity)city_size_get(pcity));
  state->choice.stack = fc_malloc(city_size_get(pcity)city_size_get(state->pcity));
  state->choice.size = 0;
}
city_size_get(pcity)ENDREP
DELTA 17977 6288 3558
SVN  ‚©b‚©k £' š †*£8city_size_get(pCma->pCity)ENDREP
DELTA 18326 9161 1380
SVN  ”•l …^ ¸ ‰…\ˆ „yŽ}¬ “s#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */citizensifdef __cplusplus
}
#endif /* __cplusplus */ENDREP
id: 4g.5ck.r19113/116013
type: file
pred: 4g.5ck.r19112/4637
count: 504
text: 19113 5106 1250 94504 8c8079ab1cdad19e991c0114426b1385
props: 10971 452 112 0 14688860b403b675ea6c3d1b6f5d2330
cpath: /trunk/server/citytools.c
copyroot: 15280 /trunk

id: 50r.5ck.r19113/116259
type: file
pred: 50r.5ck.r19101/20911
count: 9
text: 19113 63997 165 45150 ff9a569d32a114c45f2751e854c71184
cpath: /trunk/server/advisors/advbuilding.c
copyroot: 15280 /trunk

PLAIN
K 11
Makefile.am
V 24
file 4n3.5ck.r18949/3421
K 13
advbuilding.c
V 26
file 50r.5ck.r19113/116259
K 13
advbuilding.h
V 25
file 50s.5ck.r18136/21838
K 9
advdata.c
V 25
file 15o.5eq.r19101/20631
K 9
advdata.h
V 25
file 15p.5er.r19101/21112
K 9
advgoto.c
V 25
file 4p5.5ck.r19078/11498
K 9
advgoto.h
V 25
file 4p6.5ck.r19078/11693
K 10
advtools.c
V 24
file 4of.5ck.r17647/8273
K 10
advtools.h
V 24
file 4og.5ck.r17647/7632
K 14
autoexplorer.c
V 25
file 2lj.5eo.r18383/99692
K 14
autoexplorer.h
V 24
file 2lk.5ep.r17685/7079
K 14
autosettlers.c
V 24
file 7s.5ei.r19033/20052
K 14
autosettlers.h
V 24
file 7t.5ej.r19033/20339
K 12
infracache.c
V 23
file 4pw.5ck.r18851/739
K 12
infracache.h
V 25
file 4px.5ck.r18496/12382
END
ENDREP
id: 4n2.5ck.r19113/117195
type: dir
pred: 4n2.5ck.r19101/22123
count: 44
text: 19113 116461 721 721 8f4b9b3f6c5f8ed9785392bf529df1cf
props: 17871 2121 53 0 a527b216afb99426b763a1e313c531be
cpath: /trunk/server/advisors
copyroot: 15280 /trunk

id: vi.5ck.r19113/117438
type: file
pred: vi.5ck.r18308/133485
count: 123
text: 19113 59110 157 48939 c5679e5b62c0ce9d0f7e9834dde7ab55
props: 11057 12485 111 0 28afbdca13063c4ab06acfd332f60a0d
cpath: /trunk/server/report.c
copyroot: 15280 /trunk

id: 4i.5ck.r19113/117685
type: file
pred: 4i.5ck.r19012/10029
count: 465
text: 19113 59988 2415 103976 8a9c6fe8e0c91dac32ace19aaa380535
props: 10955 1971 112 0 e17e3e5087e98ab1d6f041bdc6ae85ee
cpath: /trunk/server/cityturn.c
copyroot: 15280 /trunk

id: 4j.5ck.r19113/117934
type: file
pred: 4j.5ck.r18660/18227
count: 48
text: 19113 64352 957 2062 86a300355e1b7c21df8fc17128dc9704
props: 8119 8197 111 0 0a665f39d0e6b710aae173fcfb77dd8e
cpath: /trunk/server/cityturn.h
copyroot: 15280 /trunk

id: 4m0.5ck.r19113/118178
type: file
pred: 4m0.5ck.r19112/4880
count: 72
text: 19113 102050 2090 203317 1f597178302f34b1a584f31dc32556b4
cpath: /trunk/server/savegame2.c
copyroot: 15280 /trunk

id: 15t.5el.r19113/118372
type: file
pred: 15t.5el.r18872/67926
count: 64
text: 19113 104297 8784 11355 c325b97edded9f8bbf9462398029f522
props: 11074 1421 111 0 18cdb9becb11c47631b7a093e907200c
cpath: /trunk/server/srv_log.c
copyroot: 17671 /trunk/server/srv_log.c

id: 3bk.5ck.r19113/118638
type: file
pred: 3bk.5ck.r19025/6445
count: 89
text: 19113 113783 73 47976 d4b0bb862a9c28585c30ec62b07768de
props: 12670 12724 34 0 25e6c2f7558b7484000d4d090dea5b92
cpath: /trunk/server/edithand.c
copyroot: 15280 /trunk

id: vz.5ck.r19113/118885
type: file
pred: vz.5ck.r19106/3378
count: 159
text: 19113 6527 81 52147 523cd7b229a02ce4c6aa4242000e82c9
props: 10915 10832 111 0 8ab1a522471ad7dd5014b23b42c49491
cpath: /trunk/server/diplomats.c
copyroot: 15280 /trunk

id: 1a.5ck.r19113/119131
type: file
pred: 1a.5ck.r19111/3411
count: 597
text: 19113 7219 72 124026 cb0e47f4706346521d7f40cd803d79fd
props: 11095 1637 112 0 c5bfe3670c093a84ebf28b66298044e4
cpath: /trunk/server/unittools.c
copyroot: 15280 /trunk

id: wi.5ck.r19113/119377
type: file
pred: wi.5ck.r19087/6709
count: 143
text: 19113 53517 226 21598 62be224bd99a62b3095148e9d6f4cb58
props: 10956 5973 111 0 f29fdd85bcdac27e7106c1e33b0399d1
cpath: /trunk/server/sanitycheck.c
copyroot: 15280 /trunk

id: 18.5ck.r19113/119626
type: file
pred: 18.5ck.r19033/22119
count: 472
text: 19113 53863 4833 78450 a57f8ba71397005c86371bfa5f65e0c7
props: 11060 7742 112 0 090627d3849ce880ce4f29c1c260669f
cpath: /trunk/server/unithand.c
copyroot: 15280 /trunk

id: 4z.5ck.r19113/119874
type: file
pred: 4z.5ck.r19065/1374
count: 663
text: 19113 59296 71 202371 78db68c4c1bbf25cd7fc22eab214b12d
props: 11087 3718 112 0 d0e5ada95c1c714385b6751e38a4f15d
cpath: /trunk/server/stdinhand.c
copyroot: 15280 /trunk

id: vl.5ck.r19113/120121
type: file
pred: vl.5ck.r19112/5069
count: 552
text: 19113 65682 4528 220564 02360173eba01624bbc5e0f3239f3376
props: 11092 74 112 0 de3988801a325e2d7d51fcbc7209a255
cpath: /trunk/server/savegame.c
copyroot: 15280 /trunk

PLAIN
K 11
Makefile.am
V 23
file 5q.5ck.r18991/3621
K 8
advisors
V 25
dir 4n2.5ck.r19113/117195
K 9
aiiface.c
V 23
file 4gm.5ck.r18921/516
K 9
aiiface.h
V 25
file 4gn.5ck.r18899/20936
K 6
auth.c
V 25
file 39c.5ck.r18977/18927
K 6
auth.h
V 25
file 39d.5ck.r18977/19170
K 11
barbarian.c
V 24
file lw.5ck.r19101/22363
K 11
barbarian.h
V 24
file lx.5ck.r18054/18407
K 10
cityhand.c
V 23
file 10.5ck.r18581/9188
K 10
cityhand.h
V 23
file 4f.0.r13297/423686
K 11
citytools.c
V 25
file 4g.5ck.r19113/116013
K 11
citytools.h
V 24
file 4h.5ck.r18270/28958
K 10
cityturn.c
V 25
file 4i.5ck.r19113/117685
K 10
cityturn.h
V 25
file 4j.5ck.r19113/117934
K 11
civserver.c
V 24
file 4k.5ck.r18977/14819
K 11
civserver.h
V 21
file 4l.0.r2805/33121
K 10
commands.c
V 25
file 2ly.5ck.r18976/29027
K 10
commands.h
V 25
file 2lz.5ck.r18976/29273
K 13
connecthand.c
V 25
file 2dw.5ck.r18977/18496
K 13
connecthand.h
V 25
file 2dx.5ck.r18942/25217
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.5ck.r19055/10486
K 10
diplhand.h
V 21
file 4n.0.r13421/6826
K 11
diplomats.c
V 25
file vz.5ck.r19113/118885
K 11
diplomats.h
V 23
file w0.5ck.r19106/3619
K 10
edithand.c
V 26
file 3bk.5ck.r19113/118638
K 10
edithand.h
V 26
file 4ez.5ck.r18452/115476
K 6
fcdb.c
V 25
file 6l3.5ck.r18977/18744
K 6
fcdb.h
V 25
file 6l4.5ck.r18976/33384
K 10
gamehand.c
V 24
file 4o.5ck.r18854/28291
K 10
gamehand.h
V 24
file 4p.5ck.r15698/24111
K 9
generator
V 23
dir 2me.5ck.r19019/2694
K 11
ggzserver.c
V 25
file 39a.5ck.r18471/14634
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.5ck.r19111/2983
K 9
maphand.h
V 23
file 14.5ck.r18740/8378
K 6
meta.c
V 22
file 4s.5ck.r18985/388
K 6
meta.h
V 24
file 4t.5ck.r18054/19078
K 8
notify.c
V 23
file 4i2.5ck.r18493/146
K 8
notify.h
V 24
file 4i3.5ck.r18282/3660
K 9
plrhand.c
V 23
file 4u.5ck.r19105/3065
K 9
plrhand.h
V 23
file 4v.5ck.r19104/5294
K 8
report.c
V 25
file vi.5ck.r19113/117438
K 8
report.h
V 24
file vj.5ck.r18270/29203
K 9
ruleset.c
V 23
file 8w.5ck.r19106/3137
K 9
ruleset.h
V 22
file 8x.5ck.r17946/997
K 13
sanitycheck.c
V 25
file wi.5ck.r19113/119377
K 13
sanitycheck.h
V 23
file wj.5ck.r18740/9358
K 10
savegame.c
V 25
file vl.5ck.r19113/120121
K 10
savegame.h
V 24
file vm.5ck.r17289/22938
K 11
savegame2.c
V 26
file 4m0.5ck.r19113/118178
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.5ck.r19010/1502
K 8
sernet.c
V 24
file 15.5ck.r18977/19408
K 8
sernet.h
V 24
file 4y.5ck.r18473/12711
K 10
settings.c
V 24
file 2m0.5ck.r19105/2818
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 26
file 15t.5el.r19113/118372
K 9
srv_log.h
V 25
file 15u.5em.r17928/40497
K 10
srv_main.c
V 23
file vg.5ck.r19105/2574
K 10
srv_main.h
V 24
file vh.5ck.r18977/18252
K 11
stdinhand.c
V 25
file 4z.5ck.r19113/119874
K 11
stdinhand.h
V 23
file 50.5ck.r18978/5769
K 11
techtools.c
V 24
file 33n.5ck.r19108/1727
K 11
techtools.h
V 24
file 33o.5ck.r18665/2277
K 10
unithand.c
V 25
file 18.5ck.r19113/119626
K 10
unithand.h
V 24
file 19.5ck.r18578/17031
K 11
unittools.c
V 25
file 1a.5ck.r19113/119131
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.5ck.r19113/123921
type: dir
pred: z.5ck.r19112/8841
count: 4421
text: 19113 120367 3541 3541 7fdf225c72b5b8a9fed22cdc73aace15
props: 17175 659 139 0 d1c9699dde7f9d81e54426750008041d
cpath: /trunk/server
copyroot: 15280 /trunk

id: 33f.5ck.r19113/124154
type: file
pred: 33f.5ck.r18326/38937
count: 12
text: 19113 114721 548 7254 3ce45c8fad7dfba189bde0b9ec64c8b0
props: 10490 6797 110 0 dce24d5ac3f5e86568d59a55fa196991
cpath: /trunk/common/specialist.c
copyroot: 15280 /trunk

id: 33g.5ck.r19113/124404
type: file
pred: 33g.5ck.r18858/93104
count: 10
text: 19113 115845 139 2689 a07c93ecc0ef45e81e50dc38f8ded795
props: 10490 7151 110 0 dce24d5ac3f5e86568d59a55fa196991
cpath: /trunk/common/specialist.h
copyroot: 15280 /trunk

id: v.5ck.r19113/124654
type: file
pred: v.5ck.r19106/7623
count: 355
text: 19113 7319 238 67277 f4a0e6b3ff63a8e43c4a0c6961bbee9d
props: 11030 219 112 0 04d6f3553e14be31b9e437b066651140
cpath: /trunk/common/unit.c
copyroot: 15280 /trunk

id: 2f5.5ck.r19113/124892
type: file
pred: 2f5.5ck.r19106/8098
count: 338
text: 19113 65335 318 45623 23721ee64c3dd36da1c2159cc7663804
props: 11057 30210 112 0 64942f9576ccbd6a94350596bbb7a5cc
cpath: /trunk/common/packets.def
copyroot: 15280 /trunk

id: q.5ck.r19113/125142
type: file
pred: q.5ck.r18931/1095
count: 492
text: 19113 70409 7323 114315 d4dc6e7b54aa311ac3f4dad845886fbe
props: 11069 12442 112 0 7c45f13e78520e4754bc476682276743
cpath: /trunk/common/city.c
copyroot: 15280 /trunk

id: 3q.5ck.r19113/125385
type: file
pred: 3q.5ck.r19112/9070
count: 303
text: 19113 78020 597 26710 0219732597d43beeba72801415a5b8bc
props: 10806 12641 112 0 0103cdead8b16a89c717b6ef9ed59c6a
cpath: /trunk/common/city.h
copyroot: 15280 /trunk

id: 18x.5ck.r19113/125628
type: file
pred: 18x.5ck.r18549/25682
count: 90
text: 19113 115299 439 78080 7ec52cdbde46966139a32b021beec0f9
props: 11052 815 111 0 3d8b904835b9008e2a0a4d4db6ee628d
cpath: /trunk/common/aicore/cm.c
copyroot: 15280 /trunk

id: 18y.5ck.r19113/125877
type: file
pred: 18y.5ck.r18054/24184
count: 19
text: 19113 0 29 3239 6f6e130288729efbf685702c4112eb96
props: 9180 54495 111 0 d4514082fc7e52be026d3360dec4dcb0
cpath: /trunk/common/aicore/cm.h
copyroot: 15280 /trunk

id: 2em.5ck.r19113/126120
type: file
pred: 2em.5ck.r16015/33732
count: 16
text: 19113 100478 1543 4449 c2adb35f3a7dc28fef4138641d2bb6ab
props: 10755 45727 111 0 5396249b3009eb64cd90e5da0b7a56fa
cpath: /trunk/common/aicore/aisupport.c
copyroot: 15280 /trunk

PLAIN
K 11
Makefile.am
V 24
file 18u.5ck.r15407/8822
K 11
aisupport.c
V 26
file 2em.5ck.r19113/126120
K 11
aisupport.h
V 22
file 2en.0.r8119/19806
K 9
caravan.c
V 26
file 33l.5ck.r18383/105781
K 9
caravan.h
V 26
file 33m.5ck.r16578/406062
K 9
citymap.c
V 25
file 2gj.5ck.r19033/26367
K 9
citymap.h
V 25
file 2gk.5ck.r18054/24427
K 4
cm.c
V 26
file 18x.5ck.r19113/125628
K 4
cm.h
V 26
file 18y.5ck.r19113/125877
K 14
path_finding.c
V 25
file 2ds.5ck.r18903/22332
K 14
path_finding.h
V 24
file 2dt.5ck.r18543/4248
K 10
pf_tools.c
V 25
file 2du.5ck.r18903/22081
K 10
pf_tools.h
V 24
file 2dv.5ck.r15868/6236
END
ENDREP
id: 18t.5ck.r19113/126994
type: dir
pred: 18t.5ck.r19033/27229
count: 252
text: 19113 126378 603 603 881be6b5eab274bf6a7b05871e8bfedd
props: 11108 8037 65 0 8b44e87f657ecca3b8458ca1746fb7c6
cpath: /trunk/common/aicore
copyroot: 15280 /trunk

id: 4f0.5ck.r19113/127236
type: file
pred: 4f0.5ck.r18297/35065
count: 8
text: 19113 62429 1542 3442 973953701f088d2b231ddd9561c6de06
cpath: /trunk/common/borders.c
copyroot: 15280 /trunk

id: 4dm.5ck.r19113/127425
type: file
pred: 4dm.5ck.r19112/9555
count: 17
text: 19113 70236 145 4639 ce028ffe910ce1216581fb97563fa65e
props: 13968 56261 34 0 25e6c2f7558b7484000d4d090dea5b92
cpath: /trunk/common/vision.c
copyroot: 15280 /trunk

id: 2wq.5ck.r19113/127669
type: file
pred: 2wq.5ck.r18326/39682
count: 83
text: 19113 78915 110 45952 a875f9c23171018ae8c4bd722d8a0f8b
props: 10865 25397 111 0 1c266b4433d829481714f1852322e965
cpath: /trunk/common/requirements.c
copyroot: 15280 /trunk

PLAIN
K 11
Makefile.am
V 23
file 5h.5ck.r18991/7627
K 4
ai.c
V 25
file 4go.5ck.r18899/24800
K 4
ai.h
V 25
file 4gp.5ck.r19101/26805
K 6
aicore
V 25
dir 18t.5ck.r19113/126994
K 6
base.c
V 25
file 3jw.5ck.r18855/11779
K 6
base.h
V 25
file 3jx.5ck.r18858/93788
K 9
borders.c
V 26
file 4f0.5ck.r19113/127236
K 9
borders.h
V 25
file 4f1.5ck.r18858/99721
K 8
capstr.c
V 24
file dv.5ck.r17617/51579
K 8
capstr.h
V 24
file dw.5ck.r18858/97074
K 6
city.c
V 24
file q.5ck.r19113/125142
K 6
city.h
V 25
file 3q.5ck.r19113/125385
K 8
combat.c
V 24
file wp.5ck.r18854/32215
K 8
combat.h
V 24
file wq.5ck.r18858/95678
K 12
connection.c
V 24
file un.5ck.r18976/42586
K 12
connection.h
V 24
file uo.5ck.r18976/42833
K 8
dataio.c
V 25
file 15r.5ck.r17928/47899
K 8
dataio.h
V 25
file 15s.5ck.r18858/95001
K 11
diptreaty.c
V 23
file 3r.5ck.r18298/9103
K 11
diptreaty.h
V 24
file 3s.5ck.r18858/95921
K 9
effects.c
V 25
file 2eo.5ck.r18926/16217
K 9
effects.h
V 25
file 2ep.5ck.r18983/61690
K 8
events.c
V 24
file 33h.5ck.r18857/8551
K 8
events.h
V 24
file 3t.5ck.r18858/95439
K 14
fc_interface.c
V 24
file 4up.5ck.r18890/8208
K 14
fc_interface.h
V 24
file 4uq.5ck.r18890/8397
K 10
fc_types.h
V 24
file 2ll.5ck.r19112/9311
K 15
featured_text.c
V 25
file 4h3.5ck.r18623/44037
K 15
featured_text.h
V 24
file 4h4.5ck.r18873/5922
K 6
game.c
V 23
file 3u.5ck.r19105/7312
K 6
game.h
V 24
file 3v.5ck.r19107/10850
K 19
generate_packets.py
V 25
file 2f4.5ck.r18863/12240
K 12
government.c
V 23
file he.5ck.r18403/6790
K 12
government.h
V 24
file hf.5ck.r18858/98787
K 6
idex.c
V 23
file qo.5ck.r18342/2669
K 6
idex.h
V 24
file qp.5ck.r18858/92434
K 13
improvement.c
V 25
file vb.5ck.r18308/142158
K 13
improvement.h
V 24
file vc.5ck.r18858/93351
K 5
map.c
V 22
file r.5ck.r19064/1197
K 5
map.h
V 24
file 41.5ck.r18903/23683
K 10
movement.c
V 25
file 2xv.5ck.r18854/33561
K 10
movement.h
V 25
file 2xw.5ck.r18858/96827
K 18
name_translation.h
V 25
file 4k1.5ck.r18858/99277
K 8
nation.c
V 23
file il.5ck.r18706/4984
K 8
nation.h
V 25
file im.5ck.r18858/101381
K 9
packets.c
V 24
file 43.5ck.r18623/44227
K 11
packets.def
V 26
file 2f5.5ck.r19113/124892
K 9
packets.h
V 24
file 44.5ck.r18858/92670
K 8
player.c
V 23
file 45.5ck.r19104/9300
K 8
player.h
V 23
file 46.5ck.r19104/9543
K 14
requirements.c
V 26
file 2wq.5ck.r19113/127669
K 14
requirements.h
V 26
file 2wr.5ck.r18858/101129
K 10
research.c
V 24
file 4ro.5ck.r17856/7997
K 10
research.h
V 25
file 4rp.5ck.r18858/92915
K 10
rgbcolor.c
V 22
file 6i6.5ck.r18896/50
K 10
rgbcolor.h
V 22
file 6i7.5ck.r18894/46
K 11
spaceship.c
V 20
file 98.0.r9977/2632
K 11
spaceship.h
V 25
file 99.5ck.r18858/100885
K 12
specialist.c
V 26
file 33f.5ck.r19113/124154
K 12
specialist.h
V 26
file 33g.5ck.r19113/124404
K 6
team.c
V 23
file 33i.5ck.r19040/556
K 6
team.h
V 25
file 33j.5ck.r18858/94759
K 6
tech.c
V 23
file t.5ck.r19107/10610
K 6
tech.h
V 23
file u.5ck.r19055/14981
K 9
terrain.c
V 26
file 2fp.5ck.r18308/147138
K 9
terrain.h
V 23
file qs.5ck.r19002/2860
K 6
tile.c
V 23
file 2ys.5ck.r19064/725
K 6
tile.h
V 23
file 2yt.5ck.r19064/963
K 6
unit.c
V 24
file v.5ck.r19113/124654
K 6
unit.h
V 23
file 48.5ck.r19106/7858
K 10
unitlist.c
V 25
file 39m.5ck.r18578/21945
K 10
unitlist.h
V 26
file 39n.5ck.r18858/100396
K 10
unittype.c
V 23
file v9.5ck.r18588/1099
K 10
unittype.h
V 24
file va.5ck.r19025/10695
K 9
version.c
V 25
file oe.5ck.r17122/322944
K 9
version.h
V 24
file e7.5ck.r18858/96407
K 8
vision.c
V 26
file 4dm.5ck.r19113/127425
K 8
vision.h
V 24
file 4dn.5ck.r19112/9796
K 10
worklist.c
V 25
file o8.5ck.r16929/277491
K 10
worklist.h
V 24
file o9.5ck.r18858/98299
END
ENDREP
id: p.5ck.r19113/131529
type: dir
pred: p.5ck.r19112/13629
count: 2981
text: 19113 127922 3594 3594 8f336381968fc4107f49dd5b325b22fc
props: 12883 2571 96 0 2763e13ff5d021346ae24ff6c9ced232
cpath: /trunk/common
copyroot: 15280 /trunk

id: 2ek.5ck.r19113/131763
type: file
pred: 2ek.5ck.r19101/31966
count: 158
text: 19113 78645 165 67884 0f6f44c1fdb1d9f6bbd5a34b0099db61
props: 11095 5259 111 0 09fa8b389220258550f0df17fa730769
cpath: /trunk/ai/advdiplomacy.c
copyroot: 15280 /trunk

id: 20.5ck.r19113/132012
type: file
pred: 20.5ck.r19101/32213
count: 354
text: 19113 79053 185 33978 06490bb1dc7b537b926b179e09497c04
props: 11069 16784 112 0 24b501182e64f7bbc4aaaa8b3f1d9020
cpath: /trunk/ai/aicity.c
copyroot: 15280 /trunk

id: 22.5ck.r19113/132254
type: file
pred: 22.5ck.r19101/32876
count: 160
text: 19113 79268 21178 32316 650a221c4c6123aeaee56648ed1e1434
props: 10865 30805 112 0 8869376353a720fe76c0d512d1b8c326
cpath: /trunk/ai/aihand.c
copyroot: 15280 /trunk

id: 36o.5ck.r19113/132498
type: file
pred: 36o.5ck.r19101/34387
count: 30
text: 19113 77761 154 11951 6962585f7ffb6ecee22963ee72db687a
props: 12670 94874 34 0 25e6c2f7558b7484000d4d090dea5b92
cpath: /trunk/ai/aiparatrooper.c
copyroot: 15280 /trunk

id: 2lh.5ck.r19113/132747
type: file
pred: 2lh.5ck.r19101/34633
count: 77
text: 19113 113108 145 41642 1a287efc044943a6eef4bc37da96129e
props: 10865 31505 111 0 23629f8214b2309975780a037517e920
cpath: /trunk/ai/aisettler.c
copyroot: 15280 /trunk

PLAIN
K 11
Makefile.am
V 24
file 5d.5ck.r19087/16736
K 14
advdiplomacy.c
V 26
file 2ek.5ck.r19113/131763
K 14
advdiplomacy.h
V 24
file 2el.5ck.r18850/9973
K 13
advdomestic.c
V 24
file 1m.5ck.r19101/31303
K 13
advdomestic.h
V 23
file 1n.0.r13297/443238
K 13
advmilitary.c
V 24
file 1u.5ck.r19101/33115
K 13
advmilitary.h
V 23
file 1v.0.r13297/446464
K 10
advspace.c
V 25
file f2.5ck.r16929/287580
K 10
advspace.h
V 21
file f3.0.r8119/28225
K 7
aiair.c
V 25
file 15y.5ck.r18872/74250
K 7
aiair.h
V 25
file 15z.5ck.r18054/30939
K 8
aicity.c
V 25
file 20.5ck.r19113/132012
K 8
aicity.h
V 24
file 21.5ck.r19101/33359
K 8
aidata.c
V 25
file 6mb.5ck.r19101/32452
K 8
aidata.h
V 25
file 6mc.5ck.r19101/33596
K 12
aidiplomat.c
V 25
file 16r.5ck.r19101/32634
K 12
aidiplomat.h
V 25
file 16s.5ck.r18054/30699
K 9
aiferry.c
V 25
file 2iw.5ck.r19101/31060
K 9
aiferry.h
V 25
file 2ix.5ck.r18054/30227
K 9
aiguard.c
V 25
file 335.5ck.r18872/75354
K 9
aiguard.h
V 25
file 336.5ck.r18054/31175
K 8
aihand.c
V 25
file 22.5ck.r19113/132254
K 8
aihand.h
V 23
file 23.5ck.r18938/1797
K 8
aihunt.c
V 25
file 2gc.5ck.r19033/33785
K 8
aihunt.h
V 25
file 2gd.5ck.r18054/31410
K 15
aiparatrooper.c
V 26
file 36o.5ck.r19113/132498
K 15
aiparatrooper.h
V 23
file 36p.0.r12670/95202
K 10
aiplayer.c
V 25
file 6i3.5ck.r19101/31548
K 10
aiplayer.h
V 25
file 6i4.5ck.r19087/15638
K 11
aisettler.c
V 26
file 2lh.5ck.r19113/132747
K 11
aisettler.h
V 24
file 2li.5ck.r18951/6684
K 8
aitech.c
V 24
file 24.5ck.r19055/19296
K 8
aitech.h
V 22
file 25.0.r10755/53545
K 9
aitools.c
V 23
file 9.5ck.r19101/31730
K 9
aitools.h
V 23
file a.5ck.r19033/32454
K 8
aiunit.c
V 23
file b.5ck.r19078/21717
K 8
aiunit.h
V 23
file c.5ck.r19078/20634
K 7
default
V 24
dir 6k3.5ck.r19101/34152
K 4
stub
V 23
dir 6k5.5ck.r19010/5876
END
ENDREP
id: 8.5ck.r19113/134784
type: dir
pred: 8.5ck.r19101/36664
count: 1360
text: 19113 132994 1777 1777 3096f3709c89047cc9d7fcffa46cbf4a
props: 11108 11315 64 0 abac628483ea4fdfa3bea3a3a56e0532
cpath: /trunk/ai
copyroot: 15280 /trunk

id: zj.5ck.r19113/135015
type: file
pred: zj.5ck.r18549/31024
count: 102
text: 19113 78838 48 19969 aedb6a43f800e0241fb9d9118711f20b
props: 11025 295 111 0 995497afc7013c9f20b8d3ebef449f37
cpath: /trunk/client/agents/cma_core.c
copyroot: 15280 /trunk

id: zl.5ck.r19113/135267
type: file
pred: zl.5ck.r18767/363
count: 47
text: 19113 53771 67 13565 b1a4341e8d3e44dd9a9ed2169e0b2b01
props: 10779 52547 111 0 1c266b4433d829481714f1852322e965
cpath: /trunk/client/agents/cma_fec.c
copyroot: 15280 /trunk

PLAIN
K 11
Makefile.am
V 24
file zg.5ck.r15407/27355
K 8
agents.c
V 24
file zh.5ck.r18549/30775
K 8
agents.h
V 24
file zi.5ck.r18863/16987
K 10
cma_core.c
V 25
file zj.5ck.r19113/135015
K 10
cma_core.h
V 24
file zk.5ck.r18863/17236
K 9
cma_fec.c
V 25
file zl.5ck.r19113/135267
K 9
cma_fec.h
V 24
file zm.5ck.r18863/16740
K 5
sha.c
V 26
file 2fy.5ck.r18308/159639
K 5
sha.h
V 25
file 2fz.5ck.r18863/16495
END
ENDREP
id: zf.5ck.r19113/135932
type: dir
pred: zf.5ck.r18863/17896
count: 170
text: 19113 135517 402 402 0e2e6644c7d0b452be145092ae885238
props: 11108 11608 65 0 c67827893bff2f279fa7f0439c4cba47
cpath: /trunk/client/agents
copyroot: 15280 /trunk

id: z4.5ck.r19113/136173
type: file
pred: z4.5ck.r18563/14187
count: 138
text: 19113 59394 99 35174 67e363f6d507ad7e8bf3f16e4af5e8fd
props: 11067 4204 111 0 32cf26490c5995022c752556481ff094
cpath: /trunk/client/citydlg_common.c
copyroot: 15280 /trunk

id: mb.5ck.r19113/136425
type: file
pred: mb.5ck.r18563/14435
count: 82
text: 19113 59522 440 25547 9787807d31a69065c8387efbd7191388
props: 10806 19211 111 0 93646be3752db5a3cd8e77177837d494
cpath: /trunk/client/cityrepdata.c
copyroot: 15280 /trunk

id: zy.5ck.r19113/136675
type: file
pred: zy.5ck.r18911/15520
count: 205
text: 19113 104171 100 100776 975d2a491ee9c843807f4a1101cbb6d2
props: 11072 618 112 0 0564c5503f2d15442a967c72794b21e8
cpath: /trunk/client/gui-gtk-2.0/citydlg.c
copyroot: 15280 /trunk

id: 4el.5ck.r19113/136934
type: file
pred: 4el.5ck.r19025/14775
count: 44
text: 19113 7586 45905 195691 e37e65b96bccb4b1d69b52a9a24aadb3
cpath: /trunk/client/gui-gtk-2.0/editprop.c
copyroot: 15280 /trunk

PLAIN
K 11
Makefile.am
V 24
file zu.5ck.r17430/16398
K 8
canvas.c
V 25
file 2y6.5ck.r16281/14174
K 8
canvas.h
V 23
file 2y7.0.r10096/14437
K 16
caravan_dialog.c
V 26
file 376.5ck.r18308/161816
K 10
chatline.c
V 25
file zw.5ck.r18308/163850
K 10
chatline.h
V 24
file zx.5ck.r16063/47311
K 15
choice_dialog.c
V 26
file 377.5ck.r17122/362877
K 15
choice_dialog.h
V 23
file 378.0.r12670/99360
K 9
citydlg.c
V 25
file zy.5ck.r19113/136675
K 9
citydlg.h
V 20
file zz.0.r5493/6351
K 9
cityrep.c
V 26
file 100.5ck.r18308/162339
K 9
cityrep.h
V 25
file 101.5ck.r18101/91562
K 8
cma_fe.c
V 22
file 102.5ck.r17403/53
K 8
cma_fe.h
V 25
file 103.5ck.r15813/67548
K 8
colors.c
V 26
file 104.5ck.r17122/362357
K 8
colors.h
V 24
file 105.5ck.r16180/3087
K 12
connectdlg.c
V 26
file 106.5ck.r15410/343701
K 12
connectdlg.h
V 21
file 107.0.r7580/6878
K 9
dialogs.c
V 26
file 108.5ck.r18308/162600
K 9
dialogs.h
V 22
file 109.0.r11212/7101
K 10
diplodlg.c
V 25
file 10a.5ck.r19055/21961
K 10
diplodlg.h
V 23
file 10b.0.r9577/108261
K 17
diplomat_dialog.c
V 25
file 36n.5ck.r18382/16671
K 9
editgui.c
V 26
file 4ej.5ck.r18452/125207
K 9
editgui.h
V 25
file 4ek.5ck.r15355/70937
K 10
editprop.c
V 26
file 4el.5ck.r19113/136934
K 10
editprop.h
V 26
file 3bj.5cl.r18452/125612
K 10
embedggz.c
V 26
file 4gq.5ck.r17122/363137
K 9
finddlg.c
V 25
file 10c.5ck.r16015/48885
K 9
finddlg.h
V 22
file 2d0.0.r5989/22356
K 10
gamedlgs.c
V 26
file 10d.5ck.r17122/363800
K 9
gotodlg.c
V 26
file 10e.5ck.r18308/161041
K 9
gotodlg.h
V 23
file 10f.0.r4313/263426
K 10
graphics.c
V 23
file 10g.0.r11337/79662
K 10
graphics.h
V 23
file 10h.0.r11337/80150
K 12
gtkpixcomm.c
V 25
file 10i.5ck.r16973/10277
K 12
gtkpixcomm.h
V 22
file 10j.0.r10800/1606
K 10
gui_main.c
V 23
file 10k.5ck.r18907/458
K 10
gui_main.h
V 25
file 10l.5ck.r18048/13615
K 11
gui_stuff.c
V 24
file 10m.5ck.r18439/2617
K 11
gui_stuff.h
V 25
file 10n.5ck.r18150/60736
K 11
happiness.c
V 23
file 10o.5ck.r17522/118
K 11
happiness.h
V 23
file 10p.0.r9577/106064
K 9
helpdlg.c
V 23
file 10q.5ck.r19001/552
K 9
helpdlg.h
V 23
file 10r.0.r4313/267882
K 10
inputdlg.c
V 25
file 10s.5ck.r16015/49143
K 10
inputdlg.h
V 21
file 10t.0.r7580/3991
K 10
inteldlg.c
V 25
file 10u.5ck.r18911/16027
K 10
inteldlg.h
V 23
file 2d1.0.r9577/108626
K 9
mapctrl.c
V 24
file 10v.5ck.r18995/8605
K 9
mapctrl.h
V 25
file 10w.5bk.r14157/11089
K 9
mapview.c
V 25
file 10x.5ck.r18076/31042
K 9
mapview.h
V 24
file 10y.5ck.r17351/2736
K 6
menu.c
V 23
file 10z.5ck.r18988/273
K 6
menu.h
V 25
file 110.5ck.r16067/65085
K 12
messagedlg.c
V 25
file 111.5ck.r18857/13003
K 12
messagedlg.h
V 22
file 2d2.0.r5989/22693
K 12
messagewin.c
V 22
file 112.5ck.r18211/79
K 12
messagewin.h
V 25
file 113.5ck.r18082/27153
K 11
optiondlg.c
V 25
file 4js.5ck.r18314/70594
K 11
optiondlg.h
V 25
file 114.5ck.r17037/29773
K 7
pages.c
V 23
file 2pi.5ck.r18442/567
K 7
pages.h
V 25
file 2pj.5ck.r18054/34881
K 8
plrdlg.c
V 23
file 115.5ck.r19110/200
K 8
plrdlg.h
V 22
file 116.0.r10803/7069
K 10
ratesdlg.h
V 22
file 2d3.0.r5989/22018
K 4
rc2c
V 23
file 117.0.r4313/274431
K 10
repodlgs.c
V 24
file 118.5ck.r19059/3618
K 10
repodlgs.h
V 24
file 119.5ck.r18439/2365
K 11
resources.c
V 23
file 11a.0.r5390/112550
K 11
resources.h
V 23
file 11b.0.r4313/267539
K 14
spaceshipdlg.c
V 26
file 11c.5ck.r17042/129784
K 14
spaceshipdlg.h
V 23
file 11d.0.r9577/110090
K 8
sprite.c
V 25
file 2y8.5ck.r18314/70793
K 8
sprite.h
V 23
file 2y9.0.r10141/29270
K 11
theme_dlg.c
V 26
file 47d.5ck.r17122/361837
K 8
themes.c
V 26
file 34x.5ck.r17122/358813
K 13
tileset_dlg.c
V 26
file 45i.5ck.r18362/132286
K 14
voteinfo_bar.c
V 25
file 4h8.5ck.r18314/71050
K 14
voteinfo_bar.h
V 24
file 4h9.5ck.r17959/2670
K 7
wldlg.c
V 26
file 11e.5ck.r16929/320462
K 7
wldlg.h
V 25
file 11f.5ck.r16285/86707
END
ENDREP
id: zs.5ck.r19113/140907
type: dir
pred: zs.5ck.r19110/4218
count: 1442
text: 19113 137139 3755 3755 e97539101d931448739df0ea287df8c7
props: 11108 11912 79 0 480bb3268560e84c2d6c8376c422c65e
cpath: /trunk/client/gui-gtk-2.0
copyroot: 15280 /trunk

id: 9w.5ck.r19113/141155
type: file
pred: 9w.5ck.r18673/718
count: 178
text: 19113 4708 372 78959 d2fbcb9124c8223ee95b7858a351a9b6
props: 10820 1319 112 0 e0e21d00fa120c81b59fd1c92d742949
cpath: /trunk/client/gui-xaw/citydlg.c
copyroot: 15280 /trunk

PLAIN
K 11
Makefile.am
V 24
file bq.5ck.r17430/21163
K 9
actions.c
V 24
file nt.5ck.r18578/33045
K 9
actions.h
V 21
file nu.0.r1888/21779
K 4
ad2c
V 22
file 9q.0.r1186/243967
K 8
canvas.c
V 21
file 9r.0.r3959/87925
K 8
canvas.h
V 20
file 9s.0.r4034/9073
K 9
canvasp.h
V 20
file 9t.0.r4034/8365
K 10
chatline.c
V 25
file 9u.5ck.r17122/373441
K 10
chatline.h
V 21
file 9v.0.r2187/10435
K 9
citydlg.c
V 25
file 9w.5ck.r19113/141155
K 9
citydlg.h
V 20
file 9x.0.r2187/8309
K 9
cityrep.c
V 25
file 9y.5ck.r18151/138480
K 9
cityrep.h
V 24
file g1.5ck.r18101/97080
K 8
cma_fe.c
V 23
file 2ei.5ck.r17713/119
K 8
cma_fe.h
V 21
file 2ej.0.r6908/4433
K 8
colors.c
V 25
file a2.5ck.r16578/453349
K 8
colors.h
V 21
file a3.0.r10532/9312
K 12
connectdlg.c
V 24
file a4.5ck.r18270/43467
K 12
connectdlg.h
V 21
file a5.0.r2187/12228
K 9
dialogs.c
V 25
file a6.5ck.r18308/169142
K 9
dialogs.h
V 21
file a7.0.r10882/3191
K 10
diplodlg.c
V 24
file a8.5ck.r19055/26485
K 10
diplodlg.h
V 20
file a9.0.r2187/7955
K 17
diplomat_dialog.c
V 25
file 37p.5ck.r18382/20959
K 9
finddlg.c
V 25
file aa.5ck.r18308/169918
K 9
finddlg.h
V 22
file 2dk.0.r5989/31562
K 9
gotodlg.c
V 25
file ab.5ck.r18308/168379
K 9
gotodlg.h
V 21
file ac.0.r1888/21069
K 10
graphics.c
V 21
file ad.5ck.r18631/73
K 10
graphics.h
V 21
file ae.0.r10789/6338
K 10
gui_main.c
V 25
file bm.5ck.r18308/168887
K 10
gui_main.h
V 22
file bn.0.r11408/10219
K 11
gui_stuff.c
V 24
file bo.5ck.r18027/15206
K 11
gui_stuff.h
V 21
file bp.0.r4964/56392
K 9
helpdlg.c
V 23
file af.5ck.r19001/4818
K 9
helpdlg.h
V 21
file g2.0.r1888/23188
K 10
inputdlg.c
V 20
file ag.0.r7586/1961
K 10
inputdlg.h
V 20
file ah.0.r7586/2315
K 10
inteldlg.c
V 25
file ai.5ck.r18318/365953
K 10
inteldlg.h
V 23
file 2dl.0.r10108/22972
K 9
mapctrl.c
V 24
file aj.5ck.r18995/13119
K 9
mapctrl.h
V 21
file ak.0.r10532/9667
K 9
mapview.c
V 24
file al.5ck.r17735/17831
K 9
mapview.h
V 24
file am.5bk.r13912/46304
K 6
menu.c
V 24
file an.5ck.r18911/20304
K 6
menu.h
V 24
file ao.5ck.r18572/21819
K 12
messagedlg.c
V 24
file ap.5ck.r18857/17279
K 12
messagedlg.h
V 22
file 2dm.0.r5989/31896
K 12
messagewin.c
V 24
file aq.5ck.r18082/31672
K 12
messagewin.h
V 24
file g3.5ck.r18082/32178
K 11
optiondlg.c
V 22
file ar.5ck.r18629/114
K 11
optiondlg.h
V 24
file as.5ck.r16998/79026
K 7
pages.c
V 22
file 2qm.5ck.r18887/51
K 7
pages.h
V 22
file 2qn.0.r10536/7909
K 9
pixcomm.c
V 21
file at.0.r3145/18494
K 9
pixcomm.h
V 20
file au.0.r4034/9777
K 10
pixcommp.h
V 20
file av.0.r4034/8719
K 8
plrdlg.c
V 23
file aw.5ck.r18042/9274
K 8
plrdlg.h
V 20
file g4.0.r5489/3140
K 10
ratesdlg.c
V 25
file ax.5ck.r17122/372425
K 10
ratesdlg.h
V 22
file 2dn.0.r5989/31227
K 10
repodlgs.c
V 24
file ay.5ck.r19055/26234
K 10
repodlgs.h
V 24
file az.5ck.r18076/36844
K 11
resources.c
V 20
file b0.0.r9310/2224
K 11
resources.h
V 21
file b1.0.r3145/14204
K 14
spaceshipdlg.c
V 25
file b2.5ck.r17042/135081
K 14
spaceshipdlg.h
V 21
file b3.0.r2187/11152
K 8
themes.c
V 25
file 350.5ck.r18314/75534
K 14
voteinfo_bar.c
V 25
file 4hg.5ck.r16063/52010
K 14
voteinfo_bar.h
V 25
file 4hh.5ck.r16063/52179
K 7
wldlg.c
V 25
file o5.5ck.r16929/327729
K 7
wldlg.h
V 24
file o6.5ck.r16285/91411
END
ENDREP
id: 9o.5ck.r19113/144583
type: dir
pred: 9o.5ck.r19055/29910
count: 987
text: 19113 141406 3164 3164 c36f785c9564a26b70e2ecf0e06257bd
props: 11108 12237 78 0 a27c61ac5fddbd709df8c1876129f940
cpath: /trunk/client/gui-xaw
copyroot: 15280 /trunk

id: n.5ck.r19113/144827
type: file
pred: n.5ck.r19049/319
count: 790
text: 19113 113884 809 116036 79043aa9759fc1be9db92a8e9cb2d488
props: 11088 14698 112 0 2c9d3e41a2f20488aa9cdb8d740d094e
cpath: /trunk/client/packhand.c
copyroot: 15280 /trunk

id: 17f.5ck.r19113/145073
type: file
pred: 17f.5ck.r18308/177537
count: 53
text: 19113 58727 131 11653 1ccd908ebeeb9ee2eac031a938b1e919
props: 10534 12701 111 0 3d57169d64a739976bce7d2e578e29eb
cpath: /trunk/client/gui-sdl/gotodlg.c
copyroot: 15280 /trunk

id: 170.5ck.r19113/145330
type: file
pred: 170.5ck.r18308/177793
count: 146
text: 19113 58887 195 123996 aa664d88a2b03c61b145fb68a3f654b0
props: 10779 67589 111 0 515f6afa6448327e59cdac91d637f582
cpath: /trunk/client/gui-sdl/citydlg.c
copyroot: 15280 /trunk

id: 192.5ck.r19113/145589
type: file
pred: 192.5bk.r13912/53929
count: 27
text: 19113 77943 49 6904 8ac2629976d6013a326e082245deb994
props: 9030 106095 111 0 d4514082fc7e52be026d3360dec4dcb0
cpath: /trunk/client/gui-sdl/gui_tilespec.h
copyroot: 15280 /trunk

id: 174.5ck.r19113/145848
type: file
pred: 174.5ck.r17977/67143
count: 61
text: 19113 115764 52 38123 7f4970b5df13574c3cf50657fe1d7c1d
props: 9108 25970 111 0 433ca8234d38d2ba821c9aa09a03d731
cpath: /trunk/client/gui-sdl/cma_fe.c
copyroot: 15280 /trunk

id: 172.5ck.r19113/146102
type: file
pred: 172.5ck.r18308/178560
count: 74
text: 19113 6383 113 39025 a0638426e97562bf8be4ffea30dbb783
props: 10779 68689 111 0 df9f31216c5039327c376b7fe82756f5
cpath: /trunk/client/gui-sdl/cityrep.c
copyroot: 15280 /trunk

id: 17e.5ck.r19113/146358
type: file
pred: 17e.5ck.r17146/88408
count: 43
text: 19113 64191 132 8195 9de626e0fb42e7d66078aac5b402ae66
props: 10411 164236 111 0 8e6f231ffe21dad0a34f68090b1c0b69
cpath: /trunk/client/gui-sdl/finddlg.c
copyroot: 15280 /trunk

PLAIN
K 11
Makefile.am
V 25
file 16u.5ck.r17905/31818
K 19
SDL_gfxPrimitives.c
V 25
file 4u0.5ck.r17905/31016
K 19
SDL_gfxPrimitives.h
V 25
file 4u1.5ck.r17977/66943
K 24
SDL_gfxPrimitives_font.h
V 25
file 4u2.5ck.r17905/31633
K 14
SDL_rotozoom.c
V 24
file 3jy.0.r12670/115301
K 14
SDL_rotozoom.h
V 24
file 3jz.0.r12670/115888
K 9
SDL_ttf.c
V 24
file 2dz.5bk.r13597/7386
K 9
SDL_ttf.h
V 24
file 2e0.5bk.r13597/7647
K 11
alphablit.c
V 23
file 3be.0.r13354/59832
K 8
canvas.c
V 25
file 39i.5ck.r18314/79469
K 8
canvas.h
V 23
file 39j.0.r13354/56918
K 16
caravan_dialog.c
V 26
file 3bp.5ck.r17122/386217
K 10
chatline.c
V 25
file 16y.5ck.r18082/40125
K 10
chatline.h
V 26
file 16z.5ck.r16199/137581
K 9
citydlg.c
V 26
file 170.5ck.r19113/145330
K 9
citydlg.h
V 23
file 171.0.r13354/55222
K 9
cityrep.c
V 26
file 172.5ck.r19113/146102
K 9
cityrep.h
V 26
file 173.5ck.r18101/104032
K 8
cma_fe.c
V 26
file 174.5ck.r19113/145848
K 8
cma_fe.h
V 23
file 175.0.r11361/43495
K 8
colors.c
V 23
file 176.0.r13354/62500
K 8
colors.h
V 24
file 177.5bk.r14076/4693
K 12
connectdlg.c
V 25
file 178.5ck.r18270/49648
K 12
connectdlg.h
V 23
file 179.0.r12349/45319
K 9
dialogs.c
V 23
file 17a.5ck.r18799/248
K 9
dialogs.h
V 25
file 17b.5ck.r17357/12486
K 10
diplodlg.c
V 25
file 17c.5ck.r19055/34599
K 10
diplodlg.h
V 22
file 17d.0.r11584/2869
K 17
diplomat_dialog.c
V 25
file 3bn.5ck.r19055/34337
K 9
finddlg.c
V 26
file 17e.5ck.r19113/146358
K 9
finddlg.h
V 20
file 2d8.0.r5991/702
K 9
gotodlg.c
V 26
file 17f.5ck.r19113/145073
K 9
gotodlg.h
V 22
file 17g.0.r6515/58208
K 10
graphics.c
V 25
file 17h.5ck.r17977/67906
K 10
graphics.h
V 25
file 17i.5ck.r17977/68161
K 11
gui_iconv.c
V 26
file 17l.5ck.r16578/465566
K 11
gui_iconv.h
V 23
file 17m.0.r13354/66657
K 8
gui_id.h
V 23
file 17n.5ck.r18560/706
K 10
gui_main.c
V 25
file 17o.5ck.r18857/24375
K 10
gui_main.h
V 25
file 17p.5ck.r17169/47828
K 11
gui_mouse.c
V 25
file 3ca.5ck.r17169/47579
K 11
gui_mouse.h
V 24
file 3cb.0.r12670/112397
K 12
gui_string.c
V 25
file 17r.5ck.r18314/80749
K 12
gui_string.h
V 23
file 17s.0.r13481/30445
K 14
gui_tilespec.c
V 25
file 191.5ck.r19055/33826
K 14
gui_tilespec.h
V 26
file 192.5ck.r19113/145589
K 11
happiness.c
V 23
file 17x.0.r11361/41144
K 11
happiness.h
V 23
file 17y.0.r11361/41867
K 9
helpdlg.c
V 25
file 17z.5ck.r18910/22712
K 9
helpdlg.h
V 23
file 180.0.r11361/47416
K 10
inputdlg.c
V 23
file 181.0.r11361/47897
K 10
inputdlg.h
V 23
file 182.0.r5500/260641
K 10
inteldlg.c
V 25
file 183.5ck.r19055/34855
K 10
inteldlg.h
V 22
file 2d9.0.r11409/2687
K 9
mapctrl.c
V 25
file 184.5ck.r18995/17282
K 9
mapctrl.h
V 23
file 185.0.r13354/63700
K 9
mapview.c
V 25
file 186.5ck.r18879/86769
K 9
mapview.h
V 23
file 187.0.r13354/56676
K 6
menu.c
V 25
file 188.5ck.r18879/87025
K 6
menu.h
V 25
file 189.5bk.r13856/57405
K 12
messagedlg.c
V 26
file 18a.5ck.r16578/465051
K 12
messagedlg.h
V 22
file 2da.0.r5989/48394
K 12
messagewin.c
V 25
file 18b.5ck.r18082/39106
K 12
messagewin.h
V 25
file 18c.5ck.r18082/39362
K 5
mmx.h
V 23
file 2e1.0.r6286/134429
K 11
optiondlg.c
V 25
file 18d.5ck.r18623/55815
K 11
optiondlg.h
V 25
file 18e.5ck.r17169/46811
K 7
pages.c
V 25
file 2qg.5ck.r18082/38857
K 7
pages.h
V 22
file 2qh.0.r8639/16416
K 8
plrdlg.c
V 23
file 18f.5ck.r18251/297
K 8
plrdlg.h
V 22
file 18g.0.r6387/81301
K 10
ratesdlg.h
V 22
file 2db.0.r5989/47726
K 10
repodlgs.c
V 25
file 18i.5ck.r19055/34081
K 10
repodlgs.h
V 25
file 18j.5ck.r18076/43515
K 14
spaceshipdlg.c
V 25
file 18m.5ck.r17146/89433
K 14
spaceshipdlg.h
V 23
file 18n.0.r5500/263363
K 8
sprite.c
V 25
file 39k.5ck.r18314/79217
K 8
sprite.h
V 24
file 39l.0.r12670/108062
K 18
themebackgrounds.c
V 25
file 3ff.5ck.r18314/79977
K 18
themebackgrounds.h
V 25
file 3fg.5bk.r13794/17440
K 13
themecolors.c
V 22
file 392.5ck.r18897/64
K 13
themecolors.h
V 24
file 393.0.r12670/114433
K 8
themes.c
V 25
file 38p.5ck.r18314/80238
K 11
themespec.c
V 26
file 390.5ck.r18476/179509
K 11
themespec.h
V 26
file 391.5ck.r16578/464018
K 11
unistring.c
V 23
file 18o.0.r13354/57401
K 11
unistring.h
V 23
file 18p.0.r13481/30205
K 14
voteinfo_bar.c
V 25
file 4ha.5ck.r16063/62859
K 14
voteinfo_bar.h
V 25
file 4hb.5ck.r16063/63032
K 8
widget.c
V 25
file 3fu.5ck.r17977/65923
K 8
widget.h
V 25
file 3fv.5ck.r18995/17029
K 15
widget_button.c
V 25
file 3fh.5ck.r17146/86344
K 15
widget_button.h
V 24
file 3g7.0.r12670/113556
K 17
widget_checkbox.c
V 24
file 3fi.5bk.r14076/6064
K 17
widget_checkbox.h
V 24
file 3g8.0.r12670/106620
K 14
widget_combo.c
V 25
file 4k3.5ck.r17230/40601
K 14
widget_combo.h
V 25
file 4k4.5ck.r17230/40775
K 13
widget_core.c
V 25
file 3fj.5ck.r17230/40344
K 13
widget_edit.c
V 25
file 3fk.5ck.r17977/69182
K 13
widget_edit.h
V 24
file 3g9.0.r12670/115595
K 13
widget_icon.c
V 25
file 3fl.5ck.r17977/66435
K 13
widget_icon.h
V 24
file 3ga.0.r12670/112107
K 14
widget_label.c
V 25
file 3fm.5ck.r18314/79720
K 14
widget_label.h
V 24
file 3gb.0.r12670/110079
K 10
widget_p.h
V 24
file 3fn.0.r12670/107197
K 18
widget_scrollbar.c
V 26
file 3fo.5df.r17392/130722
K 18
widget_scrollbar.h
V 24
file 3gc.0.r12670/116811
K 15
widget_window.c
V 25
file 3fp.5ck.r17977/64893
K 15
widget_window.h
V 23
file 3gd.0.r12699/32533
K 7
wldlg.c
V 25
file 18q.5ck.r18879/87277
K 7
wldlg.h
V 26
file 18r.5ck.r16285/100508
END
ENDREP
id: 16t.5ck.r19113/151872
type: dir
pred: 16t.5ck.r19055/40368
count: 661
text: 19113 146614 5245 5245 13978fae28bc164f8adafac945922276
props: 11108 12869 78 0 a27c61ac5fddbd709df8c1876129f940
cpath: /trunk/client/gui-sdl
copyroot: 15280 /trunk

id: hl.5ck.r19113/152118
type: file
pred: hl.5ck.r18983/65779
count: 455
text: 19113 113283 471 177731 003d6ea0c421adc25a220e3df45c8c04
props: 11096 3792 112 0 71c6b453a620995957914f193a952f13
cpath: /trunk/client/tilespec.c
copyroot: 15280 /trunk

id: z2.5ck.r19113/152367
type: file
pred: z2.5ck.r18452/130431
count: 296
text: 19113 54 4623 116429 8bcb783d6bef16c72e9eb913e829caf8
props: 11084 12552 112 0 73ff9df0f3aabd6f615c7264c2fe22c7
cpath: /trunk/client/mapview_common.c
copyroot: 15280 /trunk

id: 3bg.5ck.r19113/152621
type: file
pred: 3bg.5ck.r18645/10227
count: 52
text: 19113 6634 559 53139 e76e1bd368d750cf5d0db0f2cd628cc4
props: 12670 125674 34 0 25e6c2f7558b7484000d4d090dea5b92
cpath: /trunk/client/editor.c
copyroot: 15280 /trunk

PLAIN
K 11
Makefile.am
V 24
file 5f.5ck.r18991/11707
K 6
agents
V 24
dir zf.5ck.r19113/135932
K 11
attribute.c
V 23
file xh.5ck.r18350/7014
K 11
attribute.h
V 24
file xi.5ck.r18863/23649
K 7
audio.c
V 26
file 139.5ck.r17122/401512
K 7
audio.h
V 25
file 13a.5ck.r18863/23408
K 12
audio_none.c
V 23
file 13d.0.r6129/145164
K 12
audio_none.h
V 25
file 13e.5ck.r18863/20841
K 11
audio_sdl.c
V 26
file 13f.5ck.r16578/477644
K 11
audio_sdl.h
V 25
file 13g.5ck.r18863/23885
K 17
chatline_common.c
V 25
file 14q.5ck.r18289/38798
K 17
chatline_common.h
V 25
file 14r.5ck.r18863/23155
K 16
citydlg_common.c
V 25
file z4.5ck.r19113/136173
K 16
citydlg_common.h
V 24
file z5.5ck.r18863/18619
K 13
cityrepdata.c
V 25
file mb.5ck.r19113/136425
K 13
cityrepdata.h
V 24
file mc.5ck.r18863/19121
K 11
civclient.c
V 23
file 4f2.5ck.r15408/695
K 13
client_main.c
V 22
file 2f.5cp.r18979/373
K 13
client_main.h
V 24
file hz.5cq.r18863/25358
K 8
climap.c
V 25
file 197.5ck.r16888/19519
K 8
climap.h
V 25
file 198.5ck.r18863/24126
K 9
climisc.c
V 24
file d5.5ck.r18857/30137
K 9
climisc.h
V 24
file i0.5ck.r18863/25625
K 8
clinet.c
V 24
file hc.5ck.r18604/21545
K 8
clinet.h
V 24
file i1.5ck.r18863/24866
K 15
colors_common.c
V 24
file 33a.5ck.r18891/7138
K 15
colors_common.h
V 24
file 33b.5ck.r18891/7385
K 19
connectdlg_common.c
V 23
file 2fw.5ck.r18305/942
K 19
connectdlg_common.h
V 25
file 2fx.5ck.r18863/22269
K 9
control.c
V 23
file gz.5ck.r18995/8364
K 9
control.h
V 24
file i2.5ck.r18995/12876
K 7
dummy.c
V 23
file 4f9.5ck.r15641/551
K 12
dummycxx.cpp
V 23
file 6kr.5ck.r18947/939
K 8
editor.c
V 26
file 3bg.5ck.r19113/152621
K 8
editor.h
V 25
file 3bh.5ck.r18863/25868
K 11
ggzclient.c
V 25
file 394.5ck.r18061/46733
K 11
ggzclient.h
V 25
file 395.5ck.r18863/21083
K 17
global_worklist.c
V 25
file 4i6.5ck.r18643/16015
K 17
global_worklist.h
V 25
file 4i7.5ck.r18863/22960
K 6
goto.c
V 25
file vu.5ck.r18383/114475
K 6
goto.h
V 24
file vv.5ck.r18863/20355
K 8
gui-ftwl
V 24
dir 2k2.5ck.r18910/31372
K 11
gui-gtk-2.0
V 24
dir zs.5ck.r19113/140907
K 6
gui-qt
V 23
dir 6ie.5ck.r19109/4369
K 7
gui-sdl
V 25
dir 16t.5ck.r19113/151872
K 8
gui-stub
V 23
dir mh.5ck.r18910/34662
K 9
gui-win32
V 23
dir np.5ck.r19055/33582
K 7
gui-xaw
V 24
dir 9o.5ck.r19113/144583
K 10
helpdata.c
V 24
file h1.5ck.r19055/40612
K 10
helpdata.h
V 24
file i3.5ck.r18863/21834
K 7
include
V 23
dir b8.5ck.r18911/25730
K 16
mapctrl_common.c
V 26
file 15m.5ck.r18308/189026
K 16
mapctrl_common.h
V 25
file 15n.5ck.r18863/24615
K 16
mapview_common.c
V 25
file z2.5ck.r19113/152367
K 16
mapview_common.h
V 24
file z3.5ck.r18863/25106
K 19
messagewin_common.c
V 25
file 14s.5ck.r18357/12915
K 19
messagewin_common.h
V 25
file 14t.5ck.r18863/21579
K 9
options.c
V 22
file dc.5ck.r19042/374
K 9
options.h
V 24
file i4.5ck.r18873/10109
K 17
overview_common.c
V 25
file 2yk.5ck.r17735/12797
K 17
overview_common.h
V 25
file 2yl.5ck.r18863/19367
K 10
packhand.c
V 24
file n.5ck.r19113/144827
K 10
packhand.h
V 24
file i5.5ck.r18863/20596
K 15
plrdlg_common.c
V 25
file 14u.5ck.r18042/20931
K 15
plrdlg_common.h
V 25
file 14v.5ck.r18863/21328
K 17
repodlgs_common.c
V 26
file 11i.5ck.r18151/137715
K 17
repodlgs_common.h
V 25
file 11j.5ck.r18863/20101
K 9
reqtree.c
V 24
file 2ym.5ck.r19057/3592
K 9
reqtree.h
V 24
file 2yn.5ck.r19057/3837
K 9
servers.c
V 25
file 33x.5ck.r18604/21784
K 9
servers.h
V 25
file 33y.5ck.r18863/16252
K 6
text.c
V 25
file 2g3.5ck.r19106/12654
K 6
text.h
V 25
file 2g4.5ck.r18863/19861
K 15
themes_common.c
V 25
file 352.5ck.r16930/48921
K 15
themes_common.h
V 25
file 353.5ck.r18863/22710
K 10
tilespec.c
V 25
file hl.5ck.r19113/152118
K 10
tilespec.h
V 24
file i6.5ck.r18863/24369
K 14
update_queue.c
V 22
file 4jw.5ck.r18409/59
K 14
update_queue.h
V 25
file 4jx.5ck.r18863/22078
K 10
voteinfo.c
V 23
file 4fe.5ck.r17708/187
K 10
voteinfo.h
V 25
file 4ff.5ck.r18863/22523
END
ENDREP
id: d.5ck.r19113/156730
type: dir
pred: d.5ck.r19110/8312
count: 5083
text: 19113 152867 3850 3850 04dd1f8f51351b2faa64b495c0ba07c1
props: 19011 0 171 0 fba7c48237e627bad76bd950fb92deb2
cpath: /trunk/client
copyroot: 15280 /trunk

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.5ck.r18394/4622094
K 7
INSTALL
V 21
file 6.5ck.r19034/362
K 11
Makefile.am
V 24
file 59.5ck.r18946/42458
K 4
NEWS
V 22
file 6m.5ck.r18758/131
K 6
README
V 20
file 7.0.r4421/96382
K 2
ai
V 23
dir 8.5ck.r19113/134784
K 10
autogen.sh
V 24
file 12o.5ck.r16223/7590
K 9
bootstrap
V 24
dir 2p5.5ck.r17613/37512
K 6
client
V 23
dir d.5ck.r19113/156730
K 6
common
V 23
dir p.5ck.r19113/131529
K 12
config.mac.h
V 20
file hb.0.r6045/5982
K 12
configure.ac
V 23
file 149.5ck.r19095/863
K 4
data
V 22
dir w.5ck.r19107/10378
K 6
debian
V 22
dir 5w.5ck.r19074/5634
K 12
dependencies
V 23
dir 2yu.5ck.r19010/1033
K 11
diff_ignore
V 21
file qq.5ck.r17605/92
K 3
doc
V 22
dir k7.5ck.r19076/3288
K 10
fc_version
V 25
file 2lo.5en.r19106/12405
K 2
m4
V 23
dir 12p.5ck.r19092/2408
K 6
manual
V 24
dir 2m2.5ck.r18977/26951
K 7
modinst
V 24
dir 4pj.5ck.r19102/11488
K 2
po
V 24
dir fs.5ck.r19100/157841
K 7
scripts
V 23
dir 2yo.5bk.r14810/1300
K 6
server
V 23
dir z.5ck.r19113/123921
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 23
dir 1c.5ck.r19102/10869
K 3
vms
V 21
dir u9.0.r11105/70719
K 5
win32
V 24
dir 2eu.5bk.r13732/30345
END
ENDREP
id: 3.5ck.r19113/158279
type: dir
pred: 3.5ck.r19112/15173
count: 14183
text: 19113 156961 1305 1305 535371424a0be6fa1b90bd6feebb9662
props: 17175 3052 264 0 91336f1f63d2f606e65376614b5c72e4
cpath: /trunk
copyroot: 15280 /trunk

PLAIN
K 8
branches
V 20
dir 1.0.r19103/13260
K 4
tags
V 19
dir 2.0.r18763/5338
K 5
trunk
V 23
dir 3.5ck.r19113/158279
K 7
website
V 18
dir 3ge.0.r12388/0
END
ENDREP
id: 0.0.r19113/158673
type: dir
pred: 0.0.r19112/15564
count: 19113
text: 19113 158508 152 152 8f96be51b034965aefcc7cb07775f4ed
cpath: /
copyroot: 0 /

22.5ck.t19112-1 modify true false /trunk/ai/aihand.c

2em.5ck.t19112-1 modify true false /trunk/common/aicore/aisupport.c

4m0.5ck.t19112-1 modify true false /trunk/server/savegame2.c

zy.5ck.t19112-1 modify true false /trunk/client/gui-gtk-2.0/citydlg.c

15t.5el.t19112-1 modify true false /trunk/server/srv_log.c

2lh.5ck.t19112-1 modify true false /trunk/ai/aisettler.c

hl.5ck.t19112-1 modify true false /trunk/client/tilespec.c

3bk.5ck.t19112-1 modify true false /trunk/server/edithand.c

n.5ck.t19112-1 modify true false /trunk/client/packhand.c

33f.5ck.t19112-1 modify true false /trunk/common/specialist.c

18x.5ck.t19112-1 modify true false /trunk/common/aicore/cm.c

174.5ck.t19112-1 modify true false /trunk/client/gui-sdl/cma_fe.c

33g.5ck.t19112-1 modify true false /trunk/common/specialist.h

18y.5ck.t19112-1 modify true false /trunk/common/aicore/cm.h

z2.5ck.t19112-1 modify true false /trunk/client/mapview_common.c

9w.5ck.t19112-1 modify true false /trunk/client/gui-xaw/citydlg.c

4g.5ck.t19112-1 modify true false /trunk/server/citytools.c

172.5ck.t19112-1 modify true false /trunk/client/gui-sdl/cityrep.c

vz.5ck.t19112-1 modify true false /trunk/server/diplomats.c

3bg.5ck.t19112-1 modify true false /trunk/client/editor.c

1a.5ck.t19112-1 modify true false /trunk/server/unittools.c

v.5ck.t19112-1 modify true false /trunk/common/unit.c

4el.5ck.t19112-1 modify true false /trunk/client/gui-gtk-2.0/editprop.c

wi.5ck.t19112-1 modify true false /trunk/server/sanitycheck.c

zl.5ck.t19112-1 modify true false /trunk/client/agents/cma_fec.c

18.5ck.t19112-1 modify true false /trunk/server/unithand.c

17f.5ck.t19112-1 modify true false /trunk/client/gui-sdl/gotodlg.c

170.5ck.t19112-1 modify true false /trunk/client/gui-sdl/citydlg.c

vi.5ck.t19112-1 modify true false /trunk/server/report.c

4z.5ck.t19112-1 modify true false /trunk/server/stdinhand.c

z4.5ck.t19112-1 modify true false /trunk/client/citydlg_common.c

4i.5ck.t19112-1 modify true false /trunk/server/cityturn.c

mb.5ck.t19112-1 modify true false /trunk/client/cityrepdata.c

50r.5ck.t19112-1 modify true false /trunk/server/advisors/advbuilding.c

4f0.5ck.t19112-1 modify true false /trunk/common/borders.c

17e.5ck.t19112-1 modify true false /trunk/client/gui-sdl/finddlg.c

4j.5ck.t19112-1 modify true false /trunk/server/cityturn.h

vl.5ck.t19112-1 modify true false /trunk/server/savegame.c

2f5.5ck.t19112-1 modify true false /trunk/common/packets.def

4dm.5ck.t19112-1 modify true false /trunk/common/vision.c

q.5ck.t19112-1 modify true false /trunk/common/city.c

36o.5ck.t19112-1 modify true false /trunk/ai/aiparatrooper.c

192.5ck.t19112-1 modify true false /trunk/client/gui-sdl/gui_tilespec.h

2ek.5ck.t19112-1 modify true false /trunk/ai/advdiplomacy.c

3q.5ck.t19112-1 modify true false /trunk/common/city.h

zj.5ck.t19112-1 modify true false /trunk/client/agents/cma_core.c

2wq.5ck.t19112-1 modify true false /trunk/common/requirements.c

20.5ck.t19112-1 modify true false /trunk/ai/aicity.c


158673 158825
