DELTA 16023 15377 5882
SVN  ­l±:+™* †) €S ƒ`‡&€…C ‡5‘f€„ Lœ6€‡ „L¡Q€†t :¬2/* utility */
#include "fcintl.h"
#include "string_vector.h"
#include "support.h"

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

/* client */
#include "options.h"

/* gui-win32 */
#include "gui_stuff.h"
#include "gui_main.h"
void *gui_data;
      char dp[512];
      int val;
      
      client_options_iterate(poption) {
        gui_data = option_get_gui_data(poption);

	switch (option_type(poption)) {
	case COT_BOOLEAN:
          (void) option_bool_set(poption,
                                 Button_GetCheck((HWND)(gui_data))
                                 == BST_CHECKED);
	  break;
	case COT_INTEGER:
	  GetWindowText((HWND)(gui_data),dp,sizeof(dp));
          if (1 == sscanf(dp, "%d", &val)) {
            (void) option_int_set(poption, val);
          }
	  break;
	case COT_STRING:
	  if (!gui_data) {
	    break;
	  }
	  GetWindowText((HWND) (gui_data), dp, sizeof(dp));
          (void) option_str_set(poption, dp);poption) {
    switch (option_type(poption)) {
    case COT_BOOLEAN:
      fcwin_box_add_static(vbox_labels, option_description(poption),
			   0,SS_LEFT,TRUE,TRUE,0);
      option_set_gui_data(poption, (void *)
                          fcwin_box_add_checkbox(vbox," ",0,0,TRUE,TRUE,0));
      break;
    case COT_INTEGER:
      fcwin_box_add_static(vbox_labels,option_description(poption),
			   0,SS_LEFT,TRUE,TRUE,0);
      option_set_gui_data(poption, (void *)
                          fcwin_box_add_edit(vbox,"",6,0,0,TRUE,TRUE,0)option_description(poption),
			   0,SS_LEFT,TRUE,TRUE,0);
      if (option_str_values(poption)) {
        const struct strvec *vals = option_str_values(poption);

	if (0 == strvec_size(vals)) {
	  fcwin_box_add_static(vbox, option_str_get(poption), 0, SS_LEFT,
			       TRUE, TRUE, 0);
          option_set_gui_data(poption, NULL);
	} else {
          option_set_gui_data(poption, (void *)
                              fcwin_box_add_combo(vbox, 5, 0,
                              WS_VSCROLL | CBS_DROPDOWNLIST | CBS_SORT,
                              TRUE, TRUE, 0));

          strvec_iterate(vals, val) {
            ComboBox_AddString(option_get_gui_data(poption), val);
          } strvec_iterate_end;
	}
      } else {
        option_set_gui_data(poption, (void *)
                            fcwin_box_add_edit(vbox, "", 40, 0, 0,
                                               TRUE, TRUE, 0)  void *gui_data;

  if (!option_dialog)
    create_option_dialog();

  client_options_iterate(poption) {
    gui_data = option_get_gui_data(poption);

    switch (option_type(poption)) {
    case COT_BOOLEAN:
      Button_SetCheck((HWND)(gui_data),
		      option_bool_get(poption)?BST_CHECKED:BST_UNCHECKED);
      break;
    case COT_INTEGER:
      fc_snprintf(valstr, sizeof(valstr), "%d", option_int_get(poption));
      SetWindowText((HWND)(gui_data), valstr);
      break;
    case COT_STRING:
      if (!gui_data) {
	break;
      }

      if (option_str_values(poption) && option_str_get(poption)[0] != 0) {
	int i =
	    ComboBox_FindStringExact(gui_data, 0, option_str_get(poption));

	if (i == CB_ERR) {
	  i = ComboBox_AddString(gui_data, option_str_get(poption));
	}
	ComboBox_SetCurSel(gui_data, i);
      } 
      SetWindowText((HWND)(gui_data), option_str_get(poption)ENDREP
DELTA 16578 1637 1715
SVN  ƒ~ƒ‚FG ¡V ± ¡t¡ƒ  ,Ãu }¼  1å:ƒ òmƒ ›ôƒ ‚"š G  ¥7‚­€S ®{‚Ófc_rand (100) >= game.info.diplchance) {
        fc_fc_rand (100) >= success_probfc_fc_fc_fc_rand(100) < chance;
}

unit_has_type_flag(pdiplomat, F_SUPERSPY)
          || fc_rand (100) < escapechanceENDREP
DELTA 16578 3381 4089
SVN  çSé1$C ¬0 ² ˆ;¬`ƒ µƒ ©,¶.‹ Vå= yÙ( ‡yßZfc_strdup(DEFAULT_THEME);
  char *resolution = fc_fc_fc_popdown_allENDREP
DELTA 1186 91751 2517
SVN  ³´_Œ9 …8 €i g†€ƒ  †‰o A  ?e€G 
“q€T ‚Y•d€W ‡>š €ƒh m¥'‡ …(§¦ G  Z¦? }®
£ G  Z¦? H‹} Zªb‰
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <stdio.h>
#include <stdlib.h>
#include <string/* utility */
#include "log.h"
#include "mem.h"

/* common */
#include "game.h"
#include "player.h"

/* gui-xaw */
#include "mapview.h"
#include "gui_main.h"
#include "gui_stuff.h"

#include "finddlg.h"

static Widget find_dialog_shell;
static Widget find_form;
static Widget find_label;
static Widget find_viewport;
static Widget find_list;
static Widget find_center_command;
static struct tile *original_tile;

original_tile = get_center_tile_mapcanvas();

  XtSetSensitive(main_form, FALSE);
  
  find_dialog_shell =
    I_T(XtCreatePopupShell("finddialog", transientShellWidgetClass,
			   toplevel, NULL, 0)I_L(XtVaCreateManagedWidget("findlabel", labelWidgetClass, 
					   find_form, NULL)
    I_L(XtVaCreateManagedWidget("findcentercommand", commandWidgetClass,
				find_form, NULL));

  find_cancel_command =
    I_L(XtVaCreateManagedWidget("findcancelcommand", commandWidgetClass,
				find_form, NULL)j = 0;

  ncities_total = 0;
  players_iterate(pplayer) {
    ncities_total += city_list_size(pplayer->cities);
  } players_iterate_end;

  city_name_ptrs=fc_malloc(ncities_total*sizeof(char*));
  
  players_iterate(pplayer) {
    city_list_iterate(pplayer->cities, pcity) {
      *(city_name_ptrs+j++)=fc_strdup(city_name(pcity));
    } city_list_iterate_end;
  } players_iterate_end;
  
  if(ncities_total) {
    qsort(city_name_ptrs, ncities_total, sizeof(char *), compare_strings_ptrsstatic tile);
  
  popdown_find_dialog();
}

tile);
  popdown_find_dialog();
}

tile);
}
ENDREP
DELTA 17058 2364 46931
SVN  …ì…ð|8„k ¦e ‚ ‚ž¦g€„[ ‚ªh‚Ähƒ N„ïRƒ ‰U„ý"‚ ¡ …†yƒ %…§{ƒ ¦m…Å"fckillunhomed", game.server.killunhomed,
          SSET_RULES, SSET_MILITARY, SSET_RARE, SSET_TO_CLIENT,
          N_("Slowly kill unhomecitied units (eg. startunits)"),
          N_("If greater than 0, then every unit without a homecity will "
             "loose hitpoints each turn. The number of hitpoints lost is "
             "given by 'killunhomed' percent of the hitpoints of the unit "
             "type. At least one hitpoint is lost every turn until the "
             "death of the unit."),
          NULL, NULL, GAME_MIN_KILLUNHOMED, GAME_MAX_KILLUNHOMED,
          GAME_DEFAULT_KILLUNHOMEDfc_fc_fcfc_fc_ENDREP
DELTA 17074 2427 26604
SVN  †  †  Œ) ¡  S‹? ‡/¡gƒ Šc©½ ‚@´0ƒ Šs¶rƒ ÝLÁgƒ ÉŸ5€‚f \êaŒ zìDƒ kî@‚ zï0€B N‚¤?€o fñ_€> ‚óL  Lýƒ ‚Ÿ0‚mƒ »v„½ƒ ¦i„ù€…dfc_rand(num)]fc_fc_rand(attackpower+defensepower) >= defensepower) {
        fc_fc_fc_tile *pcenter,
                                      struct player *powner,
                                      struct unit_type *u_type,
                                      int sq_radius,
                                      struct tile **dst_tile)
{
  int bestvalue = 0;

  /* coords of best tile in arg pointers */
  circle_iterate(pcenter, sq_radiusmay not havefc_rcPlace partisans for powner around pcenter (normally around a city)void place_partisans(struct tile *pcenter, struct player *powner,
                     int count, int sq_radiuscount-- > 0
         && find_a_good_partisan_spot(pcenter, powner, u_type,
                                      sq_radius, &ptile)) {
    struct unit *punit;

    punit = create_unit(pownerfc_fc_fc_ptransporter);
      }

      /* Set activity to sentry if boarding a ship. */
      if (ptransporter && !pplayer->ai_data.control && !unit_has_orders(punit)
          && !can_unit_exist_at_tile(punit, pdesttile)) {
        set_unit_activity(punit, ACTIVITY_SENTRY);
      }

      /*
       * Transporter info should be send first because this allow us get right
       * update_menu effect in client side.
       */
    
      /*
       * Send updated information to anyone watching that transporter has cargo.
       */
      if (ptransporter) {
        send_unit_info(NULL, ptransporter);
      }

      /*
       * Send updated information to anyone watching that unit is on transport.
       * All players without shared vison with ow†  W‰s  ‰s…dENDREP
DELTA 17042 6215 1280
SVN  ‚¤‚¤ ›s ƒ ‚p›uƒ †1‚gfc_fc_ENDREP
DELTA 15410 175059 459
SVN  ÍÍ –X ‚ ‚,–Z‚ ‚+™‚ ¬5›5‚ …"ÇlfcfcfcfcENDREP
DELTA 16752 25752 2622
SVN  öh÷}{ ©o €M ª,© ­Ça‚ ‡Qõ žüZƒ ‚=šfƒ „%ƒ "¡<‚ …u¢`‚ 5¨W‚ ‚Oª½ >­‚ ºZ‚ ˆ^Ékƒ FÒK‚ —@Ô‚ †7ëU lºy ƒSófc_snprintf(buffer, sizeof(buffer), _("Auth option \"%s\":"),
               fc_assert_ret_val(NULL != filename, FALSEfcfc_assert(FALSEfc_fc_fc_fcfcfcfc_isupper(password[i])) {
      num_caps++;
    }
    if (fcfcfcfc_fcfcfc_snprintf(buffer, bufsize,
ENDREP
DELTA 16998 23147 47766
SVN  †  †  7 …j ƒ ŒV…lƒ º…ªD€F ‹X…äBƒ Š}…ð˜ ‰…û’ X†„’ ™ ††	fc_fc_Don't keep this dialog open. */
  option_dialog_popdown(server_optset)fc_poptset = server_optset;fc_strdup(string);fc_strdup(string);†  ‚¦j‚§{;ƒN€N V‚›@ ‚k-ƒ Dƒ‚ †:„`ƒ „(‹‚ …F‚ #”\‚ ¢‚ ƒ£€A UÓ5 Rœ6 †Y¨(€f ¯g‚ a°o‚ …4±R¤ …·(µ G‚›@ „½‚ nÁ'‚ ŒÂƒ ‰Î‚ aÞw¥ (Ø%‚ `á0¥ „"ÚS‚ ‚7Þw‚ ¯á0ƒ –*‚@_option_first(void)
{
  return OPTION(server_option_next_valid(server_options)fc_fcfc_fcfcfcfcfc_strdup(entry_name(pentry)), fc_strdup(string));
  } entry_listSave the desiredfc_snprintf(val_buf, sizeof(val_buf), "%d", option_bool_get(poption));
      value = val_buf;
      fcfcfcfc_strdup(option_name(poption)), fc_fc_strdup(op_name),
              fc_strdup(op_value)fcfcfc_fchash_replace(dialog_options_hash, fc_fchash_replace(dialog_options_hash, fc_fcfcfc_ENDREP
DELTA 17117 7072 248
SVN  ‚Ù-‚ÙZ3 ^ ‚ „i`‚ ‚V¢Kƒ Ñ`¥#‚ Ëe÷€a …‚Ã5ƒ F‚È<˜ (‚Éfcfcfc_fcfc_strdup("fg_color"));
  g_object_set_data(G_OBJECT(item), "color_info",
                    fc_fc_
                    fc_ENDREP
DELTA 17042 16125 19104
SVN  ééX‚4 ì €‚ ›íh m‡% ·Šƒ §nÁ0        char buffer1[300], buffer2[300];

        fc_snprintf(buffer1, sizeof(buffer1), _("Learned %s. "),
                    advance_name_researching(plr));
        research->future_tech++;
        fc_snprintf(buffer2, sizeof(buffer2), _("Researching %s."),
                fc_rand(researchable) + 1;
  fc_ENDREP
DELTA 17107 10298 1008
SVN  È3È4
 ŽS ƒ ¹^ŽUfc_ENDREP
DELTA 16907 0 2577
SVN  ƒÆEƒÆ?. …f  Ù9…zŒ ‘ ß8Œ \ß8 ¼ò9‚ M‚÷? È%‚¯‚ Ï‚÷?fc_assert_refc_assert_refcfcENDREP
DELTA 17042 35259 478
SVN  äDæ!<Š_ £V ƒ ›£X‚ ƒ¾p€O ‚\Â=‚ }Å€b ‚hÆw€O >Â= ‚IËe‚ UÎ0€ˆV Ž4Öfc_fcfc_snprintf(buffer, sizeof(buffer), PL_("%d turn", "%d turns", turns),
        fcfc_strlcpy(buffer, improvement_name_translation
               (pcity->production.value.building),fc_snprintf(buffer, sizeof(buffer), PL_("%d turn", "%d turns", turns),
        fcfc_snprintf(buf[j], BUFFER_SIZE, "%+3d", result->surplus[j]);
    } output_type_iterate_end;

    fc_snprintf(buf[6], BUFFER_SIZE, "%d/%s%s",
                pcity->size - cm_result_specialists(result),
                specialists_string(result->specialists),
                result->happy ? _(" happy") : "");

    fc_snprintf(buf[7], BUFFER_SIZE, "%s",
                get_city_growth_string(pcity, result->surplus[O_FOOD]));
    fc_snprintf(buf[8], BUFFER_SIZE, "%s",
                get_prod_complete_string(pcity, result->surplus[O_SHIELD]));
    fc_snprintf(buf[9], BUFFER_SIZE, "%s",
                cmafec_get_short_descr(parameter));
  }

  fc_snprintf(buffer, sizeof(buffer),
              _("Name: %s\n"
                "Food:       %10s Gold:    %10s\n"
                "Production: %10s Luxury:  %10s\n"
                "Trade:      %10s Science: %10s\n"
                "\n"
                "    People (W/E/S/T): %s\n"
                "          City grows: %s\n"
                "Production completed: %s"),
              buf[9], buf[O_FOOD], buf[O_GOLD], buf[O_SHIELD], buf[O_LUXURY],
        ENDREP
DELTA 17110 0 484
SVN  …r…‚ ;N £< ‚ ÏT£>— W„„ Á'ó‚ „8µ(‚ ”g¹b´ ¨G‚Îv¼ ‰L‚÷e€A ‚€ƒ`fcfc_strdup(text));
    }fcfcfc_snprintf(buf, sizeof(buf), _("%s info"),
        fc_strlcpy(lvl_cmd_tmp[level], level_cmd,
                  fc_snprintf(text, sizeof(text), _("Put on %s"),
                 ENDREP
DELTA 15200 1987 4935
SVN  „ö*„ú)‚s  Š( €o ‘0Šx€‚[ pZ€‚  £*ˆ ‚¤/ MÁ7 „O«€G `¯f€‚} ‡[¶] ‡IÁ' @…@ ‚Én ‰Ì€‡M —&Ý‚ ô*‚ §õ2Š œFŠ ƒ	p‚  {‚ &¢‚ ÅJ²*‚ Ü+÷v† ‚þ@‘ eƒ‚|† ‚þ@‡ jƒ‚|† Ñ?¤ fƒ‚{ˆ  Ñ@ Ås‚Þ_† Kƒ¬ ‹ fƒ¥,… ‚²>• "„“{ wƒ¡<Š ~ƒ”~ ñƒ«g£ „„x£ Šb„¢´ cÅv „3„­h‚ …2„²£ V„·a¬ ƒp„¹P„ ®L„½L‡ †O„ì€ƒ HÁ:€f OÒ}€@ @…@€{ OÒ}€B @…@€i OÒ}³ @…@€i PÐ ° @…@€f PÐ ³ @…@€mlient_main.h"
#include "climisc.h"
#include "clinet.h"
#include "connectdlg_common.h"
#include "global_worklist
  struct global_worklist *pGWL = global_worklist_by_id(MAX_ID - pWidget->ID);

  if (!pGWL) {
    return -1;
  }

  switch (Main.event.button.button) {
    case SDL_BUTTON_LEFT:
      if (!(pGWL = global_worklist_by_id(MAX_ID - pWidget->ID))) {
        break;
      }

      pEdited_WorkList_Name = pWidget;
      popup_worklist_editor(NULL, pGWL/* Delete. */
      bool scroll = (pOption_Dlg->pADlg->pActiveWidgetList != NULL);

      global_worklist_destroy(pGWL);
      del_widget_from_vertical_scroll_widget_list(pOption_Dlg->pADlg, pWidget);

      /* find if there was scrollbar hide */
      if         struct global_worklist *pGWL = global_worklist_new(_("empty worklist"))
    set_wstate(pWidget, FC_WS_NORMAL);
    pSellected_Widget = NULL;

    /* create list element */
    pNew_WorkList_Widget =
      create_iconlabel_from_chars(NULL, pWidget->dst, 
                                  global_worklist_name(pGWL),
                                  adj_font(12), WF_RESTORE_BACKGROUND);
    pNew_WorkList_Widget->ID = MAX_ID - global_worklist_id(pGWL)
global_worklists_iterate(pGWL) {
      pBuf = create_iconlabel_from_chars(NULL, pWindow->dst,
                                         global_worklist_name(pGWL),
                                         adj_font(12),
                                         WF_RESTORE_BACKGROUND);
      set_wstate(pBuf, FC_WS_NORMAL);
      add_to_gui_list(MAX_ID - global_worklist_id(pGWL), pBuf);
      pBuf->action = edit_worklist_callback;
      pBuf->string16->style |= SF_CENTER;
      count++;

      if (count > 13) {
        set_wflag(pBuf, WF_HIDDEN);
      }
    } global_worklists_iterate_end;

    pBuf = create_iconlabel_from_chars(NULL, pWindow->dst, 
                _("Add new worklist"), adj_font(12), WF_RESTORE_BACKGROUND);
    set_wstate(pBuf, FC_WS_NORMAL);
    add_to_gui_list(ID_ADD_NEW_WORKLIST, pBuf);
    pBuf->action = add_new_worklist_callback;
    pBuf->string16->style |= SF_CENTER;
    count++;
    
    if (count > 13) {
      set_wflag(pBuf, WF_HIDDEN);fcfclog_debug(log_debug(fcfcfcfc_routecity_trade_routesborderbordersterraimark_dirty(pWidget);
    draw_terraimap_grid routecity_trade__routMAP_CITY_TRADE_ROUTESty Trade RoutesTRADE_ROUToption_dialog_popdown(client_optsetoption_dialog_popdown(client_optset
    option_dialog_popup(_("Options"), client_optsetfcoption_dialog_popdown(client_optsetstatic void popup_optiondlg(const char *namenamestatic struct global_worklist *pGWL;

  if (pOption_Dlg) {
    
    /* this is no NULL when inside worklist editors */
    if (pEdited_WorkList_Name
        && (pGWL = global_worklist_by_id(MAX_ID - pEdited_WorkList_Name->ID))) {
      copy_chars_to_string16(pEdited_WorkList_Name->string16,
                             global_worklist_name(pGWL));
      pEdited_WorkList_Name = NULL;
    }
  
pOption_Dlg->pEndOptionsWidgetList, 0);
    widget_mark_dirty(pOption_Dlg->pEndOptionsWidgetList);
  }**
  Popup the option dialog for the option set.
  FIXME/PORTME
************/
void option_dialog_popup(const char *name, const struct option_set *poptset)
{
  if (poptset == client_optset) {
    /* FIXME: this is a big hack! */
    popup_optiondlg(name);
  } else {
    log_error("%s(): PORTME!", __FUNCTION__);
  }**
  Popdown the option dialog for the option set.
  FIXME/PORTME
************/
void option_dialog_popdown(const struct option_set *poptset)
{
  if (poptset == client_optset) {
    /* FIXME: this is a big hack! */
    popdown_optiondlg();
  } else {
    log_error("%s(): PORTME!", __FUNCTION__);
  }**
  Update the GUI for the option.
  FIXME/PORTME
************/
void option_gui_update(struct option *poption)
{
  log_error("%s(): PORTME!", __FUNCTION__)**
  Add the GUI for the option.
  FIXME/PORTME
************/
void option_gui_add(struct option *poption)
{
  log_error("%s(): PORTME!", __FUNCTION__)**
  Remove the GUI for the option.
  FIXME/PORTME
************/
void option_gui_remove(struct option *poption)
{
  log_error("%s(): PORTME!", __FUNCTION__);
}
ENDREP
DELTA 16929 25279 505
SVN  ±~²8O ³G œ °³cƒ †ã}€k ‘lêN€E µüqFC_FD_ZERO(&writefs);
    FCfc_                         conn_list_size(game.all_connections),
                         MAX_LEN_NAME-1, fc_fc_snprintf(buffer, sizeof(buffer), _("%s from %s"),
                ENDREP
DELTA 16578 22491 40819
SVN  …á…ëH‚Y˜~ …s  •†‘ ’0›'‡ Ž$­[€I P¼ƒ šw½WŒ ØS¿ …uö%ƒ …üƒ ‡N$¢ „9‰€ |}€‚r c¿6Œ k„ãt ƒ] €$ U„Ñ} ”¥m€I …º€I ‡6¿¹ €Æ|€' À>‚Ç€i G‚Š~ ˆ>ƒ‰9ƒ ŸFƒ‘w€D Dƒ±mƒ Ž}ƒÂ1 †`ƒÑ6¨ kƒØ,ƒ ‹#ƒÙ€ ‚ƒåA† tƒç\‘ 1ƒÿi‰ Nž  ƒùf½ OÀ £ MÛ  y„Š~€ƒU ¬C„Žq€‚I ‚%„¼A€* •„¾d¸ ,„Ô/€n Œ7„ò;‡ V„þr¼ S¿} “b…€P l…™[Ž À6…•ƒ …*…ÕVƒ ‚'…Û \…Ým» ‚e…Þ2ity_illness_checkdestroycity_map_radius_sq_get(pcity), pcenter,
                                 fc_fc_assert_refc_assert(NULL != pplayer);
  fc_assert(NULL != pplayer->citiesfc_fc_
  fc_assert_ret_val(0 < change, 0fc_assert_ret_val(0 < change, 0);

  city_tile_iterate_skip_free_cxy(city_map_radius_sq_get(pcity), pcenter,
                                 fc_assert_ret_val_msg(0 == loss_remain, TRUE,
                        "city_reduce_size() has remaining"
                        "%d of %d for \"%s\"[%d]",
                        loss_remain, pop_loss,
                        city_name(pcity), pcity->size);

  /* check squared city radius */
  if (city_map_update_radius_sq(pcity, TRUE)) {
    city_refresh(pcity);
  }sanity_checkfc_assert_msg(0 == need,
                  "city_repair_size() has remaining %d of %d for \"%s\"[%d]",
                  need, change, city_name(pcity), pcity->sizecity_map_radius_sq_get(pcity), pcenter,
                                 /* check squared city radius */
  city_map_update_radius_sq(pcity, TRUE);fc_assert_ret_val(size >= 0 && size <= MAX_CITY_SIZE, TRUfc_assert_ret_val_msg(FALSE, TRUE,
                                    "worklist_change_build_target() "
                                    "called with invalid preq"        fc_assert_action(unit_has_type_flag(punit, F_UNDISBANDABLE),
                         continue);
fc_/* space ship part build */
      send_spaceship_info(pplayer, NULL);
    }
    if (!space_part || city_map_update_radius_sq(pcity, TRUE)) {
      /* new building or updated squared city radius */fc_fc_assert(FALSEfc_assert_ret_val(pplayer != NULL, FALSEfc_fc_assert_ret_val(pplayer != NULL, FALSE);

  n = punitlist ? unit_list_size(punitlist) : 0;
  while (pplayer->economic.gold < 0 && n > 0) {
    r = fc_removedestroy(punitlistbuildingsdestroy(punitlist);

  return pplayer->economic.gold >= 0;
}
Add some Pollution if we have wastecity_radius_sq = city_map_radius_sq_get(pcity);
  int k=100;

  if (pcity->pollution != 0 && fc_rand(100) <= pcity->pollution) {
    while (k > 0) {
      /* place pollution on a random city tile */
      int cx, cy;
      int tile_id = fc_rand(city_map_tiles(city_radius_sq));
      city_tile_index_to_xy(&cx, &cy, tile_id, city_radius_sq);

      /* check for a a real map position */
      if (!(ptile = city_map_to_tile(pcenter, city_radius_sq, cx, cy))) {
        ) {
      /* recalculate city illness; illness due to trade has to be saved
       * within the city struct as the client has not all data to
       * calculate it */
      pcity->illness = city_illness_calc(pcity, NULL, NULL,
                                         &(pcity->illness_trade), NULL);

      if (city_illness_check
        /* recalculate illness */
        pcity->illness = city_illness_calc(pcity, NULL, NULL,
                                           &(pcity->illness_trade), NULL)ity_illness_check(const struct city * pcity)
{
  if (fc_server.mgr_score_calc_turn == game.info.turn) {
    /* up-to-date migration score */
    return pcity->server.server.server.mgr_score_calc_turn = game.info.turn;

  return scoreto <city2>. */fc_fc_/* TRANS: <city1> to <city2> (<city2 nation adjective>). */ENDREP
DELTA 16832 0 1264
SVN  ÊvË  C … ‚@… ¤’[‚ ƒp¶e‚ f¶e 9»=urrenreal_fcfcENDREP
DELTA 17042 38484 908
SVN  „ÍY„Ï_ˆr Œ ƒ —Œ
€j D£}€‚+ ’^¦$‚  ¹° ‚:º2‚ ¼n² cÍ{ {¿‚ Á² cÍ{ ‚#Ã€ tÆ@‚ È6° Qº2 ‚Ê4‚ 	Ðg² ‚jÍ{‚ 	Ðg² #Í{€$ qÔeƒ hÕXƒ „{ÖB€a „Ûiƒ “"ßn‚ ó‚ –Lôƒ —n‚Šjƒ å0‚¢Zƒ ’@ƒˆƒ ªFƒšNƒ ˆƒÅ‚:„Ífc_        char road_time[4], irrigation_time[4],
             mining_time[4], transform_time[4];

        fc        fc_snprintf(irrigation_time, sizeof(irrigation_time),
                    "%d", pterrain->irrigation_time);
        fc_snprintf(mining_time, sizeof(mining_time),
                    "%d", pterrain->mining_time);
        fc_snprintf(transform_time, sizeof(transform_time),
                   fcfc_strdup(name);
              pitem->text = fc_fcfc_strdup(name);
                pitem->text = fc_fcfc_strdup(name);
                pitem->text = fc_fc_strdup(_(" Rivers"));
              sz_strlcpy(long_buffer, _(terrain_control.river_help_text));
              pitem->text = fc_fcfc_strdup(name);
              pitem->text = fc_fcfc_strdup(name);
                pitem->text = fc_fcfc_strdup(name);
                pitem->text = fc_RULESET:
            pitem = new_help_item(HELP_RULESET);
            /*           pitem->topic = fc_strdup(_(game.control.name)); */
            pitem->topic = fc_fc_fc_fc_strdup(_(secfile_lookup_str(sf, "%s.name",
                                                   fc_fcfcfc_fc_fc_fc_fc_fcENDREP
DELTA 17058 792 1294
SVN  ¼R½4 ãP ° ×ãG‚ ºM‚ l»fgame.server.killunhomed = GAME_DEFAULT_KILLUNHOMfcfcENDREP
DELTA 16973 68 540
SVN  „£E„¤H„5 ©A €D œLªh€H »_Çn‚ „_ƒO‚ 	ˆ0‚ þ‰;€R ‡F‚ˆ
€? à\‚ ”k‚ñm‚ œk„†Z (i = 0, spec = city_report_specs; i < NUM_CREPORT_COLS; i++, spec++) {
    fc_snprintf(text[i], n, "%*s\n%*s",
                NEG_VAL(spec->width), spec->title1 ? spec->title1 : "",
            fc_snprintf(txt, ARRAY_SIZE(txt), "<span %s>%s</span>",
                fcfcfcfc_snprintf(buf, sizeof(buf), "%*s", NEG_VAL(sp->width),
              (sp->func) fc_snprintf(buf1, sizeof(buf1), "%*s", NEG_VAL(sp->width),
              (sp->func) (pcity1, sp->data));
  fc_snprintf(buf2, sizeof(buf2), "%*s", NEG_VAL(sp->width),
              (sp->func) real_city_reportfcENDREP
DELTA 16971 11545 288
SVN  À
À:†j †- €4 ^‡0€  A  £a‰K‚ „­.€‚ G  „³|‚ 	¸€O „O¹X€S*¿`                /* free() */
#include "support.h"            /* fc_snprintf() */

/* common */
#include "game.h"
#include "government.h"
#include "unitlist.h"

/* client/include */  /* is_server_running() */
#include "control.h"
#include "options.h"
#include "packhand_gen.h"

#include "repodlgs_common.h"


fcfc_snprintf(message, message_sz, _("Sold %d %s for %d gold."),
                count, improvement_name_translation(pimprove), gold);
  } else {
    fc_snprintf(message, message_sz, _("No %s could be sold."),
                improvement_name_translation(pimprove));
  }
}

fcfc_snprintf(message, message_sz, _("%s cannot be disbanded."),
                fc_snprintf(message, message_sz, _("Disbanded %d %s."),
                count, utype_name_translation(punittype));
  } else {
    fc_snprintf(message, message_sz, _("No %s could be disbanded."),
                ENDREP
DELTA 16929 29004 1941
SVN  „Š<„ŠM1 ƒp ƒ ”Pƒr€\ –?ƒ¥€R Îƒ¼fc_        && (pplayer_get_diplstate(pplayer, aplayer)->type != DS_CEASEFIRE
            || fc_fc_rand(4) + 3; /* Bugger allies often. */
      } else {
        adip->spam = fc_ENDREP
DELTA 16998 21670 1352
SVN  ’GÖC& ›E   ƒ3›d‚ ƒ3Ÿ‚ ±X¢N‚ ‚Ô( (tax!=rates_tax_value) {
    fcfcfcfcENDREP
DELTA 16929 35977 569
SVN  Ü`Ü` µ' ƒ …[µ)‡ ¡»‚ Ø[Ü‚ §r´nfc_destroyfcfcENDREP
DELTA 17035 0 4626
SVN  àà‚…6 —_ ƒ J—a€@ zškƒ wœg— (žu´ ašk „!¡2ƒ ‡B¥U€	 ‚+® ƒ „ °Mƒ ´O‚ ‚%Ñ\‚ ‚9Ôƒ —dÖ>” ƒCî4ƒ †ñyŠ (üL ƒù1ƒ ƒtüEƒ •Y€;‚ „–‚ †&š+‚  S‚ .¡s€Z 7£yƒ ƒw¥2‚ ‚#©+‚ ‡2«P‚ „K³— t·f‚ ƒ¸\‚ »i‚ uÊ~  É|‚ „qÊ~‚ ‚Ïq‚ ‚Ò‚ ‚Ô+¥ xÒ1‚ ‚Øe¥ sÒ1‡ ‚Ý‚ Gß>fc_fc_tolower(*str0) == fc_tolower(*str1); str0++, str1++) {
    if (*str0 == '\0') {
      return 0;
    }
  }

  return ((int) (unsigned char) fc_tolower(*str0))
    - ((int) (unsigned char) fcfc_fc_tolower(*str0) == fcfc_tolower(*str0))
      - ((int) (unsigned char) fcfc_fc_tolower(*str0) != fc_tolower(*str1)) {
      return ((int) (unsigned char) fc_tolower(*str0))
             - ((int) (unsigned char) fcfc_fc_fcfcfc_fc_strlcpy() and fc_fc_fc_strlcpyfc_fc_fcfcfcfcfc_snprintf and fc_strlcat;
 it does snprintf to the end of an existing string.

 Like fc_fc_fcfcfcfc_read_console() or fcfcfcfcfcfcfcfcfc_isprint(char c)
{
  return isprintfcfc_isupper(char c)
{
  return isupperchar fcfcENDREP
DELTA 17107 11520 3608
SVN  ¤P¤S	 žT ƒ ä/žVƒ ‘tƒƒ S”}fc_fc_fc_ENDREP
DELTA 16025 557 3360
SVN  ‚š+‚™h2& ¾m ‚ „T¾o‚ ÙÃEŠ ‚|œrŠ œr ¡	‹ Ú}¢aƒ œKý`fcfcftc_clientftc_clientftc_client,fc_ENDREP
DELTA 16984 38044 213
SVN  ‘8‘8
 ç^ ‚ ©Xç`fcENDREP
DELTA 16929 39934 1009
SVN  ©©
 ýV ‚ «7ýXfcENDREP
DELTA 14171 44718 4095
SVN  ççMi@ ‡V €N ¦‰$ž EÑ  ƒW°€H ´Q€ƒ1 E» €5 ¼v‚ D½w€Y ‰	À€‚U ˆ:Ëg€‚> ƒTÕ~€ 1Ã: ‚XÛ~Š „Þ`µ 1Ã: |ä_€i/* common & utility */
#include "diptreaty.h"
#include "fcintl.h"
#include "packets.h"
#include "player.h"
#include "support.h"

/* client */
#include "chatline.h"
#include "client_main.h"
#include "climisc
  FIXME: use plrdlg_common.c
state */
      sz_strlcpy(statebuf, plrdlg_col_state(pplayer));

      /* text for idleness */
      if(pplayer->nturns_idle>3) {
	fc_snprintf(idlebuf, sizeof(idlebuf),
		    PL_("(idle %d turn)",
			name, plus AI marker */       
      if (pplayer->ai_data.control) {
        fc_snprintf(namebuf, sizeof(namebuf), "*%-15s",player_name(pplayer));
      } else {
        fc_snprintf(namebuf, sizeof(namebuf), "%-16s",player_name(pplayer));
      }
      namebuf[16] = '\0';

      /* text for diplstate type and turns -- not applicable if this is me */
      if (NULL == client.conn.playing
          || pplayer == client.conn.playingclient.conn.playing, pplayer);
	if (pds->type == DS_CEASEFIRE) {
	  fc_snprintf(dsbuf, sizeof(dsbuf), "%s (%d)",
		      diplstate_text(pds->type), pds->turns_left);
	} else {
	  fcfcclient.conn.playing, pplayer),
	      dsbuf,
	      get_vision_status(client.conn.playingNULL != client.conn.playing && pplayer->is_alive) {
      XtSetSensitive(players_war_command,
		     client.conn.playing != pplayer
		     && !pplayers_at_war(client.conn.playing, pplayer));
    }

    if (NULL != client.conn.playing) {
      XtSetSensitive(players_vision_command,
		     gives_shared_vision(client.conn.playing, pplayer));
    struct player *pplayer = player_by_number(player_index);

    if (can_meet_with_player(pplayer)) {
      dsend_packet_diplomacy_init_meeting_req(&client.conn, player_index);
    } else {
      output_window_append(ftc_client,
                           _("You need an embassy to establish"
                            struct player *pplayer = player_by_number(player_index);

    if (can_intel_with_player(pplayer)) {
      popup_intel_dialog(pplayer);
    }client.conclient.conn, player_index,
				       CLAUSE_VISION);    struct player *pplayer = player_by_number(player_index);

    popup_spaceship_dialog(pplayer);
  }
}
ENDREP
DELTA 17080 0 3595
SVN  £<£K8„A ’ €| v“ ƒ ƒ“xƒ ‚/—½ ™v€ ›~‚ ‚‚ ŸŸ  C€`fc_strcasecmp(const char *str0, const char *str1);
int fc_strncasecmp(const char *str0, const char *str1, size_t n);
int fc_fc_fc_fc_strlcpy(char *dest, const char *src, size_t n);
size_t fc_ fc_strlcpy((dest), (src), sizeof(dest)))
#define sz_strlcat(dest,src) ((void) fc_strlcat((dest), (src), sizeof(dest)))

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

#endif  /* FC__SUPPORT_H */
ENDREP
DELTA 17115 969 217
SVN  †  †  ƒ[š ³/ ² z³Sœ ]‚¼y ñ=µEƒ ‚‚§ƒ ˆ‚©ƒ b‚±€‚ †y‚´cƒ ƒ;‚»^€  ½o‚À6ƒ ‡l‚þ'ƒ ŒHƒ†ƒ ‰:ƒ’_ƒ ƒœƒ ˆaƒ¬/ƒ ƒlƒµƒ ©vƒ¹ ƒ Yƒâx‚ †UƒóS‚ ’ƒú*‚ ›r„ŒF‚ †:„¨:‚ ƒ7„®v‚ ‚o„²/‚ …„µ ‚ g„º#‚ ‡#„»‚ d„Â1€g d„Ã|‚ ‚!„Äb€M ‚Y„È,€‚ Q„Ì^‚ ˆa„Î1€E ‚1„×W‚ ‚„Ú
‚ t„Ü‚ ƒP„Þ‚ ‡`„áW‚ `„é9‚ „ê‚ l„ë$‚ „ì‚ j„í€s s„îx€Q ƒA„ò ‚ ‚„õc‚ Žv„÷l‚ k…†d€o o…ˆ>‚ s…‰/‚ …Š$€‚1 „…3€E ‚ …’ €J …”\€H ‡…–(‚ a…G‚ …8…Ÿ*‚ Ä …¤d€` ƒL…é?€a ˆ6…íg€k G…ör€P ]…ý@€ƒ ˆT…ý€l …W†‡‚ „]†Œj‚ Š^†‘Ifc_snprintf(fname, sizeof(fname),
                fc_strdup(dname);
    }
  }
fc_fc_fc_        if (!hash_insert(t->sprite_hash, fc_strdup(tags[k]), ss)) {
          log_error("warning: already have a sprite for \"%s\".", tags[k]);
        }
      }
    } else {
      for (k = 0; k < num_tags; k++) {
        (void) hash_replace(t->sprite_hash, fc_fc_fc_strcasecmp(sprite_type, "corner") == 0) {
    return CELL_CORNER;
  }
  if (fc_strcasecmp(sprite_type, "single") == 0) {
    return CELL_WHOLE;
  }
  if (fc_fc_fc_fc_fc_fc_fc_fc_fc_fcfcfcfcfcfcfcfcfcfcfc_snprintf(buffer, sizeof(buffer), "r.d_road_%s", d);
      SET_SPRITE(road.odd[i], buffer);

      fcfcfc_snprintf(buffer, sizeof(buffer), "r.road_%s",
                  valid_index_str(t, i));
      SET_SPRITE(road.total[i], buffer);

      fc_snprintf(buffer, sizeof(buffer), "r.rail_%s",
                         fc_snprintf(buffer, sizeof(buffer), "r.c_road_%s",
                    dir_get_tileset_name(dir));
        SET_SPRITE_OPT(road.corner[dir], buffer);

        fc_snprintf(buffer, sizeof(buffer), "r.c_rail_%s",
                    dir_get_tileset_name(dir));
        fcfc_snprintf(buffer, sizeof(buffer), "unit.battlegroup_%d", i);
    fcfcfcfcfcfcfcfcfcfcfc_snprintf(buffer, sizeof(buffer), "city.t_shields_%d", i);
    SET_SPRITE(city.tile_shieldnum[i], buffer);
    fcfc_snprintf(buffer, sizeof(buffer),
                "upkeep.%s", get_output_identifier(o));
    t->sprites.upkeep.output[o][0] = load_sprite(t, buffer);
    fc_snprintf(buffer, sizeof(buffer),
                fcfcfcfc_snprintf(buffer, sizeof(buffer), "grid.city.%s", name[i]);
      SET_SPRITE(grid.city[i], buffer);

      fcfcfc        struct sprite *s;

        fc_snprintf(buffer, sizeof(buffer), "grid.borders.%c", name[i][j]);
        SET_SPRITE(grid.borders[i][j], buffer);

        for (p = 0; p < MAX_NUM_PLAYERS + MAX_NUM_BARBARIANS; p++) {
          fc_snprintf(buffer, sizeof(buffer), "grid.borders.%c.%d",
                fc_snprintf(buffer, sizeof(buffer), "tx.s_river_%s",
                fc_snprintf(buffer, sizeof(buffer), "tx.s_irrigation_%s",
                fc_snprintf(buffer, sizeof(buffer), "tx.s_farmland_%s",
                fcfcfc          fc_snprintf(buffer, sizeof(buffer), "t.l%d.%s%d",
                      l, draw->name,          fc_snprintf(buffer, sizeof(buffer), "t.l%d.%s_%s",
                      l, draw->name,            fc_snprintf(buffer, sizeof(buffer), "t.l%d.%s_cell_%c",
                        l, draw->name,             fc_snprintf(buffer, sizeof(buffer), "t.l%d.%s_cell_%c%d%d%d",
                        l, draw->name, direction4letters[dir],
                        (value) & 1, (value >> 1) & 1, (value >> 2) & 1same cell terrain",
					  terrain_rule_name(pterrain));
	    break;
	  case MATCH_PAIR:
            fc_snprintf(buffer, sizeof(buffer), "t.l%d.%s_cell_%c_%c_%c_%c",
                        l, draw->name, direction4letters[dir],
                        tslp->match_types[dlp->match_index[(value) & 1]][0],
                        tslp->match_types[dlp->match_index[(value >> 1) & 1]][0],
                                      fc_snprintf(buffer, sizeof(buffer),
                          "t.l%d.cellgroup_%c_%c_%c_%c", l,
                          tslp->match_types[n][0], tslp->match_types[e][0],
                          tslp->match_types[s][0],fcfc†  „®)„²0ƒ€ Kƒô?€Q I¤ €g K ‚ M‚ ¿‚N— ‚»}Áq· °ƒþ#str,
				gov->graphic_alt, "government",
				government_rule_name(gov));
  
  /* should probably do something if NULL, eg generic default? */
  Set nation flag sprite value; should only happen after
  tilespec_load_tiles()/
void tileset_setup_nation_flag(struct tileset *t, 
			       struct nation_type *nation)
{
  char *tafcfc            count = fc_fc_strlcpy(default_theme_name, t->prefered_themes[i],
 ENDREP
DELTA 16436 33126 39056
SVN  ‚Ø-‚ê;6˜j …f  ¤`…z€a A— €„ Tä@€c A— €ƒt Tä@€g A— €… Tä@€a A— €„< Zä@ ƒLª`ˆ ‚!º@ ƒh°t° ‡
¶z² K¶z ƒÀV ‚®r ‚{Æ d³x· 8¶z ‚7Í\ ‚®r ‚mÒ1 d³x² #¶z …+ÙK€q ;à€ NâS tõ:Š Oö< ƒ
ô ƒ á!÷Base function to edit the terrain property of a tile. Returns TRUE if
  the terrain has changed.
***********/
static bool edit_tile_terrain_handling(struct tile *ptile,
                                       struct terrain *pterrain,
                                       bool send_tile_info)
{
  struct terrain *old_terrain = tile_terrain(ptile);

  if (old_terrain == pterrain) {
    return FALSE;
  }

  tile_change_terrain(ptile, pterrain);
  if (need_to_fix_terrain_change(old_terrain, pterrain)) {
    hash_insert(unfixed_tile_table, ptile, ptile);
  }

  if (send_tile_info) {
    update_tile_knowledge(ptile);
  }

  return TRUE;Base function to edit the resource property of a tile. Returns TRUE if
  the resource has changed.
***********/
static bool edit_tile_resource_handling(struct tile *ptile,
                                        struct resource *presource,
                                        bool send_tile_info)
{
  if (presource == tile_resource(ptile)) {
    return FALSE;
  }

  if (NULL != presource
      && !terrain_has_resource(tile_terrain(ptile), presource)) {
    return FALSE;
  }

  tile_set_resource(ptile, presource);

  if (send_tile_info) {
    update_tile_knowledge(ptile);
  }

  return TRUE;Base function to edit the special property of a tile. Returns TRUE if
  the special state has changed.
***********/
static bool edit_tile_special_handling(struct tile *ptile,
                                       enum tile_special_type special,
                                       bool remove_mode,
                                       bool send_tile_info)
{
  if (remove_mode) {
    if (!tile_has_special(ptile, special)) {
      return FALSE;
    }

    tile_remove_special(ptile, special);
  } else {
    if (tile_has_special(ptile, special)
        || !is_native_tile_to_special(special, ptile)) {
      return FALSE;
    }

    tile_add_special(ptile, special);
  }

  if (send_tile_info) {
    update_tile_knowledge(ptile);
  }

  return TRUE;Base function to edit the base property of a tile. Returns TRUE if
  the base state has changed.
***********/
static bool edit_tile_base_handling(struct tile *ptile,
                                    struct base_type *pbase,
                                    bool remove_mode, bool send_tile_info)
{
  if (remove_mode) {
    if (!tile_has_base(ptile, pbase)) {
      return FALSE;
    }

    tile_remove_base(ptile, pbase);
  } else {
    if (tile_has_base(ptile, pbase)
        || !is_native_tile_to_base(pbase, ptile)) {
      return FALSE;
    }

    tile_add_base(ptile, pbase);
  }

  if (send_tile_info) {
    update_tile_knowledge(ptile);
  }

  return TRUE;pterrainedit_tile_terrain_handling(ptile, pterrain, TRUEedit_tile_resource_handling(ptile, presource, TRUEedit_tile_special_handling(ptile, special, remove, TRUEedit_tile_base_handling(ptile, pbase, remove, TRUEedit_tile_special_handling(ptile, spe,
                                 !BV_ISSET(packet->specials, spe), FALSE);edit_tile_base_handling(ptile, pbase,
                              !BV_ISSET(packet->bases, base_number(pbase)),
                              FALSE);city_owner(tile_city(ptile)))enemy tilefc_ENDREP
DELTA 10472 26239 1186
SVN  [¯”] …\ €9 ‚9†4€k T‹>ƒ w‡(€  O‹>§ M‡=€X \‹=€  P‡>€ \‹=š P‡>€ \‹=« P‡>€/ ]‹<€Z P‡>€‚? P‹=€j L‡>€_ P‹=€c L‡>€m P‹=€k L‡>€} …‹= G €H P‡>€‚>/* utility */
#include "fcintl.h"
#include "log.h"

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

#include "specialist.h"

struct specialist specialists[SP_MAX]truct specialist *p = &specialists[i];

    p->item_number = i;

    requirement_vector_init(&p->reqs);
  }Frefree(void)
{
  int i;

  for (i = 0; i < ARRAY_SIZE(specialists); i++) {
    struct specialist *p = &specialists[i];

    requirement_vector_free(&p->reqs);
  }
  Return the number of specialist_type/
Specialist_type_id specialist_count(void)
{
  return game.control.num_specialist_typesthe specialist index.

  Currently same as specialist_number(), paired with specialist_count()
  indicates use as an array indexSpecialist_type_id specialist_index(const struct specialist *sp)
{
  fc_assert_ret_val(NULL != sp, -1);
  return sp - specialiststhe specialist item_numberSpecialist_type_id specialist_number(const struct specialist *sp)
{
  fc_assert_ret_val(NULL != sp, -1);
  return sp->item_numberthe specialist pointer for the given numberstruct specialist *specialist_by_number(const Specialist_type_id id)
{
  if (id < 0 || id >= game.control.num_specialist_types) {
    return NULL;
  }
  return &specialists[idthe specialist type with the given (untranslated!) rule name.
  Returns NULL if none matchstruct specialist *find_specialist_by_rule_name(const char *name)
{
  const char *qname = Qn_(name);

  specialist_type_iterate(i) {
    struct specialist *sp = specialist_by_number(i);
    if (0 == fc_strcasecmp(specialist_rule_name(sp), qname)) {
      return sp;
    }
  } specialist_type_iterate_end;

  return NULL
  Return the (untranslated) rule name of the specialist type.
  You don't have to free the return pointer/
const char *specialist_rule_name(const struct specialist *sp)
{
  return rule_name(&sp->name)
  Return the (translated) name of the specialist type.
  You don't have to free the return pointer/
const char *specialist_name_translation(const struct specialist *sp)
{
  return name_translation(&sp->name)
  Return the (translated) abbreviation of the specialist type.
  You don't have to free the return pointer/
const char *specialist_abbreviation_translation(const struct specialist *sp)
{
  return name_translation(&sp->abbreviation)
******
  Return the output for the specialist type with this output typeint get_specialist_output(const struct city *pcity,
			  Specialist_type_id sp, Output_type_id otype)
{
  struct specialist *pspecialist = &specialists[sp];
  struct output_type *poutput = get_output_type(otype);

  return get_city_specialist_output_bonus(pcity, pspecialist, poutput,
					  EFT_SPECIALIST_OUTPUT);
}
ENDREP
DELTA 16905 0 8739
SVN  ¶X¶Ad{  + ‚ …G -‚ ª ¥v‚ …BÏx‚ …QÕ<‚ ‚LÛ¿ Œ@Þ†  -ê_­ _‹;¥ …cŒA “y– 4’$¥ •‚ ¥$† ƒ3¦2— Œ%ª3fcfcfcfcfcfc_strcasecmp(req->username, aconn->username) == 0) { 
      fcremovefc_assert_ret_val(pconn != NULL, FALSE);
  fc"connections must be detached with "
!game_was_started()) {      aifill(game.info.aifill);
    }fcremove && !game_was_started()ENDREP
DELTA 13481 10764 30
SVN  ®T®T Šv ‚ –^Šx‚ Œ|¡XfcfcENDREP
DELTA 16929 59767 885
SVN  ŒZŒ[
 ù2 ƒ “&ù4fc_ENDREP
DELTA 16991 0 4556
SVN  ó}ö;8†. ”' €M G  †=–/‚ …)œn€i “£/€ 6¶+¢ ?¸€2 fº)ƒ ¸W»&har *str, size_t *len)
{
  char *buf;

  buf = fc_strrep_resize(str, len, "&", "&amp;");
  buf = fc_strrep_resize(buf, len, "<", "&lt;");
  buf = fc_strrep_resize(buf, len, ">", "&gt;");

  return buf;
}

fcfc_strdup(_(setting_extra_help(pset)));
          size_t help_len = strlen(help) + 1;

          fc_break_lines(help, LINE_BREAK);
          help = html_special_chars(help, &help_len);
          fprintf(doc, "<pre>%s</pre>\n\n", helpchar *cmdstr = fc_strdup(command_synopsis(cmd));
          size_t cmdstr_len = strlen(cmdstr) + 1;

          cmdstr = html_special_chars(cmdstr, &cmdstr_len); cmdstr);
          FC_FREE(cmdstrfc_strdup(command_extra_help(cmd));
          size_t help_len = strlen(help) + 1;

          fc_break_lines(help, LINE_BREAK);
          help = html_special_chars(help, &help_lenelpENDREP
DELTA 16929 60677 28127
SVN  †  †  ]‚( ‚¸
 ± Qè>¦ U—z Þz‚º‚ ‘%ƒ™ƒ ®	„ª)€] …!„ØD€] ›1„Ýw‚ ¹„ù*‡ …#…²5ƒ Y…·Z‚ _…¹5‚ …º‚ ã-…»7fc_usleep(1000000);

  update_map_canvas_visible(
  Draw some or all of a tile onto thefcfc_/* 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_fcfcfc†  æ	æQZ„#€ ¹D  R¹p° R¹ •¼o˜ P¹ƒ kÐ<€l P¹‘ ]Ø  ‚CÖ7¶ P¹ eÚ4˜ „aÜ § ä~ H‚@£ B³  Oã4§ ä~le, iter) {
    ptile = hash_iter_get_key(iter);
    pglc = hash_iter_get_value(iter);

    /* FIXME: Remove the casts. */
    refresh_tile_mapcanvas((strucdestroy(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 17119 0 81
SVN  …Ÿ… R„B ¹a ƒ ŒE¹cƒ ‘0Æ*€W ‚Ø#® …OÚF€ „+á€) wæ5€r ‹Lø‚ Ð.ƒVƒ ‘0Ôƒ ¡uå8ƒ ‚—nƒ‡/fc_fc_fc_snprintf(error_buf, bufsz, _("You already have a city called %s."),
                fc_snprintf(error_buf, bufsz,
                        fc_snprintf(error_buf, bufsz,
                    _("Can't use %s as a city name. It is reserved for %s."),
                    cityname,fc_snprintf(error_buf, bufsz,
                  _("%s is not a valid name. Only ASCII or "
                    "ruleset names are allowed for cities."),
                        /* Pick a random nation from the queue. */
        const int which = i + fc_rand(queue_size - i);
        fcfc_fc_fc_ENDREP
DELTA 17079 12161 50
SVN  ‚¯y‚¯y‚„p ¡B ‚ 0¡D‚ ¢v‚ 0¤‚ œ5¥8‚ †QÁo‚ Uõ/ XÛ6 ‚nÉo‚ „fÌ_€  ƒÒe‚ „Öf‚ ƒZÚx‚ „ÞT‚ „âc‚ „	æu‚ „*ë ‚ ƒRï,‚ „>ó ‚ ‹D÷@‚ n‚Žw“ ‚n„€H ë)‡=‚ ‚Eòh‚ =õ/‚ oön€ ‚ùq‚ 'ü‚ .ý9‚ )þi‚ (‚€‚ (‚>‚ \ë €a &‚„%‚ ‚‚…M‚ A÷@ †b‚ˆ‚ {‚Žw‚ ‚y‚t€D Y‡= ›o‚”
fcfcfcfcfcfcfcfc_snprintf(cBuf, sizeof(cBuf), "#");
      break;
      case FC_INFINITY:
        fc_snprintf(cBuf, sizeof(cBuf), "--");
      break;
      default:
        fcfcfcfcfcfcfcfcfcfcfc  } else {
      fcfc_snprintf(cBuf, sizeof(cBuf), "%s", _("never"));
    } else {
      fcfcfcfcfc_snprintf(cBuf, sizeof(cBuf), "#");
    break;
    case FC_INFINITY:
      fc_snprintf(cBuf, sizeof(cBuf), "--");
    break;
    default:
      fcfcfcfcfcfcfccopy_chars_to_string16(pWidget->string16, cBuf);
  
  /* waste */
  pWidget = pWidget->prev;
  fcfcfcfcfcfc_snprintf(cBuf, sizeof(cBuf), "%s", _("never"));
  } else {
    fcENDREP
DELTA 17107 7276 1041
SVN  ÔMÔP	 ¢a ƒ ?¢cƒ ™[°$ƒ ŠLÊfc_fc_fc_ENDREP
DELTA 16998 16924 4221
SVN  ‚¹*‚¹1t í$ ª A  H½ Š ÈWîZ€@ 9‚·qreal_menus_init(void)
{
  /* PORTME */
}

void real_fc_snprintf(tmp, sizeof(tmp), xlt, terr);
    xlt=tmp;
  }

  fcENDREP
DELTA 16936 0 14343
SVN  „î\„ð}\7 Ì~ ƒ Œ<Í ƒ ’6Ù>€I wìyƒ ‚!îrƒ „+ñ€M ‡aõw€7 …Eþf€ƒ5 ÷)‡ƒ ÛgþJƒ b‚Ú7€R r‚Ûiƒ ‘1‚Ü]‹ ¢G‚îƒ hƒa€‚C …Bƒ”W¶ “jƒšMŸ ƒ^ƒ®Tƒ {ƒ²4ƒ xƒ³1‘ S‚¤@š G±? †ƒÄmƒ ƒÊ{ƒ ž\ƒÌƒ ¡ƒêlœ y„*€G y„*³ ;„† Œ„S€e ¾u„ž8€m T„Þfc_fc_        ((hmap_mountain_level < hmap(ptile)
          && (fc_rand(10) > 5
              || !terrain_is_too_high(ptile, hmap_mountain_level,
                                      hmap(ptile))))
        fc_fc_        || (tmap_is(ptile, TT_COLD)
            && (fc_rand(10) > 7)
        )
         && ok_for_separate_poles(ptile))
        || (tmap_is(ptile, TT_COLD)
            && fc_rand(10) > 7
            && is_temperature_type_near(ptile, TT_FROZEN)
            &&
  cardinal_adjc_iterate(ptile, tile1) {
    int Delta = (abs(map_colatitude(tile1) - map_colatitude(ptile)) / L_UNIT
                 + abs(hmap(tile1) - (hmap(ptile))) /  H_UNIT);
    if (not_placed(tile1)
        && tmap_is(tile1, tc)
        && test_wetness(tile1, wc)
        && test_miscellaneous(tile1, mc)
        && Delta < diff
        && fc_rand(10) > 4) {
      place_terrain(tile1, diff - 1 - Delta, pterrain,
              fc_fc_fc_rand() which will
     * depend on the game seed. */
    map.server.seed = (fc_fc_fc_rand_setfc_        /* This is a standard way to get a random element from the
         * pterrain->resources list, without computing its length in
         * advance. Note that if *(pterrain->resources) == NULL, then
         * this loop is a no-op. */
        if (0 == fc_rand(++i)) {
          tile_set_resource(ptile, *r);
        fc_rand(pstate->e - pstate->w);
  yn = pstate->n + fc_fc_rand(ntersel));

    if (fc_fc_fc_fc_rand(25) + 25)Fill an island with riversfc_fc_fc_remove(island_terrain.forestdesert, ptersel) {
    terrain_select_list_remove(island_terrain.desertmountain, ptersel) {
    terrain_select_list_removeremovefc_rand(pstate->totalmass);
    mountbuck = -(long int) fc_rand(pstate->totalmass);
    desertbuck = -(long int) fc_rand(pstate->totalmass);
    forestbuck = -(long int) fc_rand(pstate->totalmass);
    swampbuck = -(long int) fc_fc_rand((islandmass + 1) / 2 + 1) + islandmass / 2;
    } else {
      size = fc_rand((islandmass + 1) / 2 + ENDREP
DELTA 16643 1998 20476
SVN  ‚¹&‚º2…I …t  ¦H†‡ ¬T· „5®€( “:³bœ »qÇ8€ —„/‚ ›M›4‚ Â&·€d D¡@ …xùq€b „‚€!Œ ‰2‚„6† „}‚nƒ ›‚’k‚ Z‚­z‚ _‚®V‚ ‚°7‚ ~‚±:‚ F‚²:€X …N‚³Xdestroyremove(game.all_connections, pconn);
  conn_list_removedestroy(connections[i].self);
  }

  /* Remove the game connection lists and make sure they are empty. */
  conn_list_destroy(game.all_connections);
  conn_list_destroyFC_FD_ZERO(&writefs);
    FCFC_FD_ZERO(&readfs);
    FC_FD_ZERO(&writefs);
    FC_FD_ZERO(&exceptfs);

    if (!no_input) {
#ifdef SOCKET_ZERO_ISNT_STDIN
      fcfcfc  Initialize connection related stuff. Attention: Logging is not
  available within this functions!
                                     int request_id)
{
  fc_assert_ret(request_id);
  fc_assert_refc_assert_reremovefc_fcfcfcfcfcfc_snprintf(players, sizeof(players), "%d",
               normal_player_count());
   fcENDREP
DELTA 14377 1598585 522
SVN  µ´`eˆY ' – Y<‚ e’y ƒI‘|€l Q–1€j ˜l‚ ¿™q€…V OÞNƒ ‡5îƒ Š?õVƒ Šl€ƒ ‡r‹‚ ‰Y’y ‚ƒ …Ÿ)‚ e¥*fc_strdup(theme);
  fcfcfc_snprintf(prefix[0], sizeof(prefix[0]), "themes/gui-ftwl/%s/%s/", current_theme,
	      current_res);
  fcfc_snprintf(prefix[2], sizeof(prefix[2]), "themes/gui-ftwl/common/%s/",
	      current_res);
  fc_snprintf(prefix[3], sizeof(prefix[3]), "themes/gui-ftwl/common/");
  fc_snprintf(prefix[4], sizeof(prefix[4]), "themes/gui-ftwl/");
  fcfcfc_strcasecmp(s, "n") == 0)
    return A_N;
  if (fc_strcasecmp(s, "s") == 0)
    return A_S;
  if (fc_strcasecmp(s, "w") == 0)
    return A_W;
  if (fc_strcasecmp(s, "e") == 0)
    return A_E;

  if (fc_strcasecmp(s, "nc") == 0)
    return A_NC;
  if (fc_strcasecmp(s, "sc") == 0)
    return A_SC;
  if (fc_strcasecmp(s, "wc") == 0)
    return A_WC;
  if (fc_strcasecmp(s, "ec") == 0)
    return A_EC;

  if (fc_strcasecmp(s, "nw") == 0)
    return A_NW;
  if (fc_strcasecmp(s, "ne") == 0)
    return A_NE;
  if (fc_strcasecmp(s, "sw") == 0)
    return A_SW;
  if (fc_strcasecmp(s, "se") == 0)
    return A_SE;

  if (fc_strcasecmp(s, "ns") == 0)
    return A_NS;
  if (fc_strcasecmp(s, "we") == 0)
    return A_WE;
  if (fc_fc_fc_fc_fc_fcfc_fcENDREP
DELTA 15410 178451 7708
SVN  ÒwÓ/:ƒ[ …j €| „Z†eƒ ‹?’ C  †b›,¹ ƒL¢9€a ƒz¦Y€W c« €W j¬P‚ ˜;º</* utility */
#include "fcintl.h"
#include "log.h"
#include "support.h"

/* common */
#include "connection.h"
#include "gamefc__data.control;
}

fc_snprintf(buf, sizeof(buf), "%s (%d)",
                   || !player->ai_data.control) {
    return "-";
  } else {
    return love_text(player->ai_data_data.control) {
    love1 = MAX_AI_LOVE + 999;
  } else {
    love1 = player1->ai_data_data.control) {
    love2 = MAX_AI_LOVE + 999;
  } else {
    love2 = player2->ai_datafcENDREP
DELTA 17107 8847 1420
SVN  îqîv7 õ ¬ ñ5 …=öO€N ÇaüT‹ =ÄBƒ hÑ- ‰#Æi‹ Ðƒ DÑ-fc_strcasecmp(advance_rule_name(padvance), q
  for (i = 0; i < TF_LAST; i++) {
    if (fc_strcasecmp(flag_names[i], s) == 
        fcfc_
        fcfc_ENDREP
DELTA 17071 0 62614
SVN  „ÿ0„ÿ;ƒƒ Èz ‚ GÈ|‚ —@ÉE‚ ¡sáƒ —a‚|‚ ‚š_‚ •rœh‚ ±B²\€L %äj‚ Š_æ‚ ±jðr‚ Šr‚¢^‚ G‚Â/„ L‚Ãy ‡X‚¯i‚ ‚'‚¢^ ˆC‚¹j‚ Š(‚Â/‚ ‚'‚¢^ ˆi‚Ï ‚ G‚Â/ ‘%‚Ù2‚ …‚êY‚ ƒ°6 Pƒ¡: „a‚ñ3‚ $ƒ°6 …f‚÷:‚ ‰>‚ý"‚ ƒ°6 Pƒ¡: „Zƒˆ9‚ $ƒ°6 …vƒŽ9‚ ƒ°6 Šƒ•B‚ ‚f‚ý" †hƒ¢2‚ ƒ°6 ]ƒ¡: …4ƒ« ‚ ‡_ƒ°6‚ ‚f‚ý" ‹ƒº}‚ •YƒÆƒ ›,ƒÛyƒ Ž;ƒ÷'‚ Kƒ°6 ^„†/ƒ Ž„–ƒ C„¤-‚ Ž „³rƒ †`„Átš Sƒ¥  žF„É@¦ a‚ˆ}¦ Nî@ ^„ê ª _„û€j b„ýNfcfcfcfc_fcfcfcfc_isalpha(*c)) {
          break;
        }
        for (; *c != '\0' && fcfcfcfcfcboolfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfc_fc_fcfc_fc_fcfc_fc_strdup(comment) : NULL)fc_strdup(NULL != value ? value : "");Returns if the string would be escapedfc_isdigit(tok[0]) || ('-' == tok[0] && fcfc_strncasecmp(tok, "FALSE", 5)
      || 0 == fc_strncasecmp(tok, "TRUE", 4)) {
    bool value = (0 == fc_ENDREP
DELTA 10395 5130 650
SVN  †m6…} …d €Z G €‚. G €; G €:<math.h>

/* utilities */
#include "log.h"
#include "rand.h"

#include "api_utilities.h"

**
  Generate random number.
************************************************************************/
int api_utilities_random(int min, int max)
{
  double roll = ((double) (fc_rand(MAX_UINT32) % MAX_UINT32)
                 / (double) MAX_UINT32);

  return (min + floor(roll * (max - min + 1)));
}

**
  Error message from script to log
************************************************************************/
void api_utilities_error_log(const char *msg)
{
  log_error("%s", msg);
}

**
  Debug message from script to log
************************************************************************/
void api_utilities_debug_log(const char *msg)
{
  log_debug("%s", msg);
}
ENDREP
DELTA 17042 45315 491
SVN  ¼J¼J ¢, ‚ H¤9 A¢v‚ ˜¤9fcfcENDREP
DELTA 17042 46806 10721
SVN  „½k„¿B#* ³f €i Þ]³R™ —1‚’.ƒ ¡‚©a¥ ó	‚Êbif (!unit_can_do_action_now(punit)) {
    /* Building a city not possible due to unixwaittime setting. */  unit_did_action(punit);fc_if (!unit_can_do_action_now(punit)) {ENDREP
DELTA 16929 113266 3689
SVN  …Ío…Ír „Ø' ƒ ÒC„Ø)… £ …ªofc_ (fc_ENDREP
DELTA 16111 30382 4469
SVN  ÙyÖmB’S Š^ €S P–  _Œ3€A mŽ[€, {v€t ‚1’w€7 v•\  p˜,€a › ‚ {v€t k’w >Ÿ€! Q•… ‚B¢c‚ {v€t k’w ‚.§t€	 pª5‡ ~®u‚ ‚o¯u‚ {v€t k’w ‚µ>€ lª5 ,¸R ƒTºf‚ ‚¾<€D {v€t g’w „qÂiƒ …ÇZ€S VÍ1€‚% ‰>Ð;real_tech_log(const char *file, const char *function, int line,
                   enum log_level level, bool notify,
                   const struct player *pplayer, struct advance *padvance,
                  fc_snprintf(buffer, sizeof(buffer), "%s::%s (want %d, dist %d) ",
              pplayer->ai_data.tech_want[advance_index(padvance)],
              num_unknown_techs_for_goal(pplayer, advance_number(padvance)));

  va_start(ap, msg);
  fcnotify) {
    notify_conn(NULL, NULL, E_AI_DEBUG, ftc_log, "%s", buffer);
  }
  do_log(file, function, line, FALSE, real_diplo_log(const char *file, const char *function, int line,
                    enum log_level level, bool notify,
                    const struct player *pplayer,
             const struct ai_dip_intel *adip;fc_snprintf(buffer, sizeof(buffer), "%s->%s(l%d,c%d,d%d%s): ",
              player_name(pplayer),
              player_name(aplayer),
              pplayer->ai_data.love[player_index(aplayer)],
              adip->countdown,fcnotify) {
    notify_conn(NULL, NULL, E_AI_DEBUG, ftc_log, "%s", buffer);
  }
  do_log(file, function, line, FALSE, real_city_log(const char *file, const char *function, int line,
                   enum log_level level, bool notify,
                   const struct city *pcity
  fcfcnotify) {
    notify_conn(NULL, NULL, E_AI_DEBUG, ftc_log, "%s", buffer);
  }
  do_log(file, function, line, FALSE, real_unit_log(const char *file, const char *function, int line,
                   enum log_level level,  bool notify,
                  gx, gy;fcfcnotify) {
    notify_conn(NULL, NULL, E_AI_DEBUG, ftc_log, "%s", buffer);
  }
  do_log(file, function, line, FALSE, real_bodyguard_log(const char *file, const char *function, int line,
                        enum log_level level,  bool notify,
                       fc              s, id, charge_x, charge_y);

  va_start(ap, msg);
  fcnotify) {
    notify_conn(NULL, NULL, E_AI_DEBUG, ftc_log, "%s", buffer);
  }
  do_log(file, function, line, FALSE, fc_\
  fc_snprintf(buf, sizeof(buf), "  %s: %g sec turn, %g sec game", text,     \
      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_logENDREP
DELTA 16929 117039 975
SVN  „ìn„í ^ ŠS ‡ ‚\ŠS„ õ ‚ „‚:‚ `‚: 6< Xò l‰T‚ „‹B‚ ŒQ[‚ …~œ.‚ «7¢.‚ ƒ~‚Íg‚ ƒs‚Ñg‚ ž‚Õ\‚ ƒz‚óx‚ ƒ‚÷t‚ „I‚û‚ ƒ‚ÿR‚ ƒ;ƒ‚c‚ ƒzƒ† ‚ º
ƒŠƒ ¡„Ä(£ ‡„åaclient/agesfcfcint up_heightfcfcfcfcfcfcfcfcfcfcfcfcfcfcfc_PAGE_GAME == get_current_client_pagENDREP
DELTA 4260 13464 578
SVN  ’;–C‡= …; €‡= ‰Kˆpfdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <string.h>

#include "shared.h"		/* TRUE, FALSE */
#include "support.h"		/* my_is* */

#include "capability.h"

#define GET_TOKEN(start, end)                                               \
  {                                                                         \
    /* skip leading whitespace */                                           \
    while (fc_isspace(*start)) {                                            \
      start++;                                                              \
    }                                                                       \
    /* skip to end of token */                                              \
    for (end = start; *end != '\0' && !fc_isspace(*end) && *end != ',';     \
         end++) {                                                           \
      /* nothing */                                                         \
    }    ENDREP
DELTA 12524 58 442
SVN  ÃvÅ„D …j €u ƒX†9€ƒO ·Œn/* common & utility */
#include "fcintl.h"
#include "game.h"
#include "support.h"

/* client */
#include "client_mainfc_snprintf(buffer, sizeof(buffer),
              _("Population: %s\n"
                "Year: %s\n"
                "Gold %d\n"
                "Tax: %d Lux: %d Sci: %d"),
              population_to_text(civ_population(client_player())),
              textyear(game.info.year),
              client.conn.playing->economic.gold,
              client.conn.playing->economic.tax,
              client.conn.playing->economic.luxury,
              client.conn.playingENDREP
DELTA 17068 55 28398
SVN  ‚…M‚†f„b Àf ƒ Àh‚ ‚IÁp€D rÄ}‚ Åq‚ RÆ~‚ ‡ÇR€c ‰'ÏD€C ƒÙ-‚ 9Ü5Š …mÝq€  ‚7äA¿ ç)€P Iè|¥ XÓw­ N° šë=fc_fcfc_snprintf(time, sizeof(time), "%3d", turns);
    } else {
      fcfcfcfcfc_strlcpy(buffer, city_improvement_name_translation
               (pcity, target.value.building),fc_strlcpy(buf[1], utype_values_string(ptype), column_size);
    fcfc        fc        }
        fc_strlcpy(buf[1], state, column_size);
      }

      fc_snprintf(buf[2], column_size, "%d",
                fc_snprintf(buf[3], column_size, _("%d/turn"),
                        fc_snprintf(buf[3], column_size, "%d", turns);
      } else {
        fcfc_snprintf(buf[3], column_size, "--- Return text describing the production outputENDREP
DELTA 16955 2115 436
SVN  è.è?j Ë` €c G  ‘WÌz‚ ‚ÞSƒ ràZ‚ †`áNfc_strcasecmp(get_event_message_text(*j1),
                       get_event_message_text(*j2));
}

fcfc_fcENDREP
DELTA 15410 189370 740
SVN  «s¬* ‡ ” „‡» G  cx ƒ*± G  cx ƒ‘‚ –Z•output_window_appendbool load_successful, char *filename)
{
  /* PORT ME */
}

output_window_append(ftc_client, errbuf);
  }
}

fcENDREP
DELTA 16578 186571 558
SVN  °k±)ƒ2 …t €h Õl†U€S ˜IÝ€B ¦ö¨ œF€ ’'žDmath.h>

/* utility */
#include "rand.h"
#include "log.h"

/* common */
#include "base.h"
#include "game
    if (pcity
        && !pplayers_allied(city_owner(pcity), owner)
        && fc_fc_assert_ret_val(NULL != def_type, 0);

  if (NULL != att_type) {fc_assert_action(0 <= unit_def, continue* then always use leader as last defender. */
        /* FIXME: multiple gameloss units with varying defense value
         * not handled. */ENDREP
DELTA 16199 52867 1280
SVN  ôôL …t  e†ƒ Â7“o‚ YØ* '×‚ š}Ø*‚ mó)‚ Ž#õ‚ ‰hƒ=‚ Xs ‚r‚ Ïqs† “5àj128fcfcfcfcfcfcfcremoveENDREP
DELTA 17069 0 4971
SVN  †  †  [‚ › ‚ ç~›‚ ’hƒ‚ +•z‚ ¦N£'ƒ  	Éw‚ „[‚ê½ Õ‚ï¶ ‚<ƒÄN€ …uƒÈ‚ âQƒÎ‚ ›N…°^‚ Ó;…Ì.fcfcfcfcfc_fcfc_snprintf(token, sizeof(token), "%d",
                     
  fc_snprintf(path_with_name, sizeof(path_with_name),fc_strcasecmp(name, "A_FUTURE") == 0) {
    return A_FUTURE;
  }
  if (fc_strcasecmp(name, "A_NONE") == 0) {
    return A_NONE;
  }
  if (fc_fcfcfc†  †  †  Y‚7— ¬ ƒ ƒ¬ƒ ¾¯2‚ æyíR‡ éGÔVƒ ‚‚¾ƒ é)‚À4€ Ëp„©P‹ ƒ	„õJƒ „øY· Î.„ú‹ ÉV…ÈF´ ‹~†’d, %d} '%c' not valid ffc_fc_fc
    fcfc_fc_server.killunhomed =
      secfile_lookup_int_default(file, game.server.killunhomed,
                                 "game.killunhomedfc_rand_setfc_fc_rand(), so random state has to be initialized
     *fc_rand_setint(file, game.server.killunhomed, "game.killunhomedŒÀ ¤r§#„=€{ Žc €Z ‚L?€h ‘7“;_worldchance,
                     "game.mgr_worldchance");
  secfile_insert_int(file, game.server.event_cache.turns,
                     "game.event_cache.turns");
  secfile_insert_int(file, game.server.event_cache.max_size,
                     "gafc_rand_is_init() && game.server.save_options.save_random) {
    RANDOM_STATE rstate = fc_fc_snprintf(vec, sizeof(vec),
                  "%8x %8x %8x %8x %8x %8x %8x", rstate.v[7 * i],
                  rstate.v[7 * i + 1], rstate.v[7 * i + 2],
                  rstate.v[7 * i + 3], rstate.v[7 * i + 4],
                ENDREP
DELTA 16601 9719 2810
SVN  ‹&‹&
 žt ‚ ì0žvfcENDREP
DELTA 17079 203 11373
SVN  ††|†…7Vƒn ì* ƒ ˆ/ì,€f ïTõ5ƒ :‚å€ S‚çM€k Qƒ ¬ Y…º; ‚ëPƒ ƒ‚øfµ M…@ u‚þe¢ ƒ…'ƒ ƒ S††)fc_fc_snprintf(buffer, sizeof(buffer), "%s(%s)",
                improvement_name_translation(pimprove), fc_  Comparison function for qsort for city _pointers_, sorting by city name.
  Args are really (struct city**), to sort an array of pointers.
  fc_strcasecmp((*(const struct city **) p1)->name,
                       (*(const struct city **) p2)->name
Evaluate which style should be used to drawfc_return name_translation(&city_styles[style].name);
}
rule_name(&city_styles[style].namefc_ENDREP
DELTA 14427 84459 1390
SVN  €Pz‚ ‡V €` œPˆk† tár‚ J× „C§‚ ‚A«F‚ ‚®	‚ f°‚ T±{‚ S³Q‚ [µ&‚ ‚-·‚ Y¹2‚ º‚ ƒ»"‚ „"¾*‚ ŸÂN† …_ár‚ ‚BçS‚ ê‚ ‰'÷)/* utility */
#include "fcintl.h"
#include "log.h"
#include "shared.h"
#include "support.h"

/* common */
#include "government.h"
#include "packets.h"
#include "player.h"

/* client */
#include "client_main.h"

/* gui-xaw */remove..fcfcfcfcfcfcfcfcfcfcfcfcremovefcfcfcENDREP
DELTA 16578 200158 54
SVN  „¡„¡ Å ‚ ‚ÛuÅfcENDREP
DELTA 17042 61476 9975
SVN  ƒ€$‚ÿBŽ  €W †,q€G „p–c‚ %›Uƒ ƒœ|¬ l "€- ’l¢€ ~µr€l ˜n·N€/ ZÑ9Œ tÓ€A ZÓ~Œ «[ÕT‚ †T‚1‚ ‚‚ˆ€ƒ/ T×@ Š:‚€‚, g‡  ƒ‚›G€A v‚Ÿ€r g‡  ÝR‚¢Rfc_snprintf(output_text[i], sizeof(output_text[i]), "%d(-1)", x);
    } else {
      fcfc_snprintf(buf, buflen, _("AI %s"), pplayer->name);
  } else {
    fc_fcfc_fc_snprintf(ourbuf, sizeof(ourbuf),
        fc_snprintf(theirbuf, sizeof(theirbuf),
                /* TRANS: This is appended to "%d bulb/turn" text */
                PL_(", %d bulb/turn from team",
                fc_snprintf(buf1, sizeof(buf1),
              PL_("%d step", "%d steps", steps), steps);
  fc_snprintf(buf2, sizeof(buf2),
        fc_snprintf(buf3, sizeof(buf3),
                PL_("%d turn", "%d turns", turns), turns);
  } else {
    fcSee also get_global_warming_tooltip and get_nuclear_winter_tooltip. */

  if (game.info.global_warming) {
    int chance, rate;
    global_warming_scaled(&chance, &rate, 100);chance, rateint chance, rate;
    nuclear_winter_scaled(&chance, &rate, 100);chance, ratefcfcfc_snprintf(buf, bufsz, PL_("Upgrade %d unit for %d gold?\n"
                                  "Treasury contains %d gold.",
                                  "Upgrade %d units for %d gold?\n"
                                  "Treasury contains %d gold.",
                                  num_upgraded),
                  num_upgraded, upgrade_cost,
                  client_player()->economic.gold);
      return TRUE;
    }
  }int chance, rate;
    global_warming_scaled(&chance, &rate, 100);
    astr_add_line(&str, _("Shows the progress of global warming:"));
    astr_add_line(&str, _("Pollution rate: %d%%"), rate);
    astr_add_line(&str, _("Chance of catastrophic warming each turn: %d%%"),
                  chance);
  }int chance, rate;
    nuclear_winter_scaled(&chance, &rate, 100); rate);
    astr_add_line(&str, _("Chance of catastrophic winter each turn: %d%%"),
                  chance);
  }ENDREP
DELTA 16578 200244 2568
SVN  â@ç‚¦ ‹[ ƒ ‹)‹] ”(—€ƒ, „7«z™ „'°C€ˆ5 LÕ …*ºz€@ PÁ&ƒ ƒÂx¡ …Æ£ ˆXËH£ ‚%Ô1£ J– € XÕ~„ "Ø{€n Ú^­ J– €X †Üm® ƒFã ž „æZ± Œë€` _÷^š 6ˆP€$ J– €ˆK R“p€& PÕƒ J– €~ ‚ešk€f RÕ „P¢ © „N§
€r e¬;€X „.­x© a²@‚ „\³#€r ŠZ¸b€H MÄuŠ mÌ]‚ ƒ~Æ;‚ ‚Ê;‚ uÌU‚ <Æ; [Ç{ ’]Ïcfc_
#define inf_log(inf, level, message, ...)                                   \
  if (log_do_output_for_level(level)) {                                     \
    do_log(__FILE__, __FUNCTION__, __LINE__, FALSE, level, "%s",            \
           inf_log_str(inf, message, ## __VA_ARGS__));                      \
  }
#define inf_warn(inf, message)                                              \
  inf_log(inf, LOG_NORMAL, "%s", fc_assert_ret(NULL != infbool inf_sanity_check(struct inputfile *inf)
{
  fc_assert_ret_val(NULL != inf, FALSE);
  fc_assert_ret_val(INF_MAGIC == inf->magic, FALSE);
  fc_assert_ret_val(NULL != inf->fp, FALSE);
  fc_assert_ret_val(0 <= inf->line_num, FALSE);
  fc_assert_ret_val(0 <= inf->cur_line_pos, FALSE);
  fc_assert_ret_val(FALSE == inf->at_eof
                    || TRUE == inf->at_eof, FALSE);
  fc_assert_ret_val(FALSE == inf->in_string
                    || TRUE == inf->in_string, FALSE);
#ifdef DEBUG
  fc_assert_ret_val(0 <= inf->string_start_line, FALSE);
  fc_assert_ret_val(0 <= inf->cur_line.n, FALSE);
  fc_assert_ret_val(0 <= inf->copy_line.n, FALSE);
  fc_assert_ret_val(0 <= inf->token.n, FALSE);
  fc_assert_ret_val(0 <= inf->partial.n, FALSE);
  fc_assert_ret_val(0 <= inf->cur_line.n_alloc, FALSE);
  fc_assert_ret_val(0 <= inf->copy_line.n_alloc, FALSE);
  fc_assert_ret_val(0 <= inf->token.n_alloc, FALSE);
  fc_assert_ret_val(0 <= inf->partial.n_alloc, FALSE);
  if (inf->included_from && !inf_sanity_check(inf->included_from)) {
    return FALSE;
  }
#endif
  return TRUE                                datafilename_fn_t datafn)
{
  struct inputfile *inf;
  fz_FILE *fp;

  fc_assert_ret_val(NULL != filename, NULL);
  fc_assert_ret_val(0 < strlen(filename), NULLfc_fc_assert_ret_val(NULL != stream,fc_assert_ret(inf_sanity_check(inf)fc_assert_ret(inf_sanity_check(inf)TRUE if have data for current line.static bool have_line(struct inputfile *inf)
{
  fc_assert_ret_val(inf_sanity_check(inf), FALSE);
  return (inf->cur_line.n > 0TRUEfc_assert_ret_val(inf_sanity_check(inf), TRUE);
  fc_assert_ret_val(inf->cur_line_pos <= inf->cur_line.n, TRUEReturn TRUE if current pos is at end of file.bool inf_at_eof(struct inputfile *inf)
{
  fc_assert_ret_val(inf_sanity_check(inf), TRUEfc_assert_ret_val(inf_sanity_check(inf), FALSEfc_isspace(*c)) {
    c++;
  }fc_isspace(*c) && !is_comment(*c)) {
    c++;
  }
  fc_assert_ret_val(inf_sanity_check(inf), FALSE);

  if (inf->at_eof) {
    return FALSE;
  }
fc_assert_ret(NULL != astr
  Return a detailed log message, including information on current line
  number etc. Message can be NULL: then just logs information on where
  we are in the file.char *inf_log_str(struct inputfile *inf, const char *message, ...)
{
  va_list args;
  char buf[128];
  static char str[512];

  fc_assert_ret_val(inf_sanity_check(inf), NULL);

  if (message) {
    va_start(args, message);
    fc_vsnprintf(str, sizeof(str), message, args);
    va_end(args);
    sz_strlcat(str, "\n");
  } else {
    str[0] = '\0';
  }

  fc_snprintf(buf, sizeof(buf), "  file \"%s\", line %d, pos %d%s",
              inf_filename(inf), inf->line_num, inf->cur_line_pos,
              (inf->at_eof ? ", EOF" : ""));
  sz_strlcat(str, buf);

  if (inf->cur_line.str && inf->cur_line.n > 0) {
    fc_snprintf(buf, sizeof(buf), "\n  looking at: '%s'",
                inf->cur_line.str+inf->cur_line_pos);
    sz_strlcat(str, buf);
  }
  if (inf->copy_line.str && inf->copy_line.n > 0) {
    fc_snprintf(buf, sizeof(buf), "\n  original line: '%s'",
                inf->copy_line.str);
    sz_strlcat(str, buf);
  }
  if (inf->in_string) {
    fc_snprintf(buf, sizeof(buf), "\n  processing string starting at line %d",
                inf->string_start_line);
    sz_strlcat(str, buffc_snprintf(buf, sizeof(buf), "\n  included from file \"%s\", line %d",
                inf_filename(inf), inf->line_num);
    sz_strlcat(str, buf);
  }

  return str...const char *inf_token(struct inputfile *inf, enum inf_token_type type)
{
  const char *c;
  const char *name;
  get_token_fn_t func;

  fc_assert_ret_val(inf_sanity_check(inf), NULL);
  fc_assert_ret_val(INF_TOK_FIRST <= type && INF_TOK_LAST > type, NULL && INF_DEBUG_FOUND) {
    log_debug("inputfile: found %s '%s'", name, inf->token.str);
  }
  return c
  fc_assert_ret_val(have_line(inf), NULL
  fc_assert_ret_val(have_line(inf), NULL);

  c = inf->cur_line.str + inf->cur_line_pos;
  while(*c != '\0' && fcfc_isspace(*c) && *c != '=' && !is_comment(*c)) {
    c++;
  }
  if (!(*c != '\0' && (fc
  fc_assert_ret_val(have_line(inf), NULLfc
  fc_assert_ret_val(have_line(inf), NULL);

  c = inf->cur_line.str + inf->cur_line_pos;
  while(*c != '\0' && fc
  fc_assert_ret_val(have_line(inf), NULL);

  c = inf->cur_line.str + inf->cur_line_pos;
  while(*c != '\0' && fc_isspace(*c)) {
    c++;
  }
  if (*c == '\0')
    return NULL;

  if (*c == '-' || fcfc_isdigitfcfcfcfcENDREP
DELTA 3745 142738 336
SVN  „‚…S‚…S€‚…S/**********************************************************************
 Freeciv - Copyright (C) 1996 - A Kjeldberg, L Gregersen, P Unold
   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 2, or (at your option)
   any later version.
 
   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.
***********************************************************************/ 

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

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

#include <windows.h>
#include <windowsx.h>
#include <commctrl.h>  

/* utility */
#include "fcintl.h"
#include "log.h"
#include "mem.h"
#include "support.h"

/* common */
#include "city.h"
#include "game.h"
#include "packets.h"
#include "worklist.h"

/* client */
#include "client_main.h"
#include "climisc.h"
#include "global_worklist.h"

/* gui-win32 */
#include "citydlg.h"
#include "gui_main.h"
#include "gui_stuff.h"
#include "helpdlg.h"
#include "inputdlg.h"

#include "wldlg.h"


typedef int wid;

/* 
 * A worklist id (wid) can hold all objects which can be part of a
 * city worklist: improvements (with wonders), units and global
 * worklists. This is achieved by seperation the value set: 
 *  - (wid < B_LAST) denotes a improvement (including wonders)
 *  - (B_LAST <= wid < B_LAST + U_LAST) denotes a unit with the
 *  unit_type_id of (wid - B_LAST)
 *  - (B_LAST + U_LAST<= wid) denotes a global worklist with the id of
 *  (wid - (B_LAST + U_LAST))
 *
 * This used to be used globally but has been moved into the GUI code
 * because it is of limited usefulness.
 */

#define WORKLIST_END (-1)

/**************************************************************************
...
**************************************************************************/
static wid wid_encode(bool is_unit, bool is_worklist, int id)
{
  assert(!is_unit || !is_worklist);

  if (is_unit) {
    return id + B_LAST;
  }
  if (is_worklist) {
    return id + B_LAST + U_LAST;
  }
  return id;
}

/**************************************************************************
...
**************************************************************************/
static bool wid_is_unit(wid wid)
{
  assert(wid != WORKLIST_END);

  return (wid >= B_LAST && wid < B_LAST + U_LAST);
}

/**************************************************************************
...
**************************************************************************/
static bool wid_is_worklist(wid wid)
{
  assert(wid != WORKLIST_END);

  return (wid >= B_LAST + U_LAST);
}

/**************************************************************************
...
**************************************************************************/
static int wid_id(wid wid)
{
  assert(wid != WORKLIST_END);

  if (wid >= B_LAST + U_LAST) {
    return wid - (B_LAST + U_LAST);
  }
  if (wid >= B_LAST) {
    return wid - B_LAST;
  }
  return wid;
}

/**************************************************************************
 Collect the wids of all possible targets of the given city.
**************************************************************************/
static int collect_wids1(wid * dest_wids, struct city *pcity, bool wl_first, 
			 bool advanced_tech)
{
  struct universal targets[MAX_NUM_PRODUCTION_TARGETS];
  struct item items[MAX_NUM_PRODUCTION_TARGETS];
  int item, targets_used, wids_used = 0;

  /* Fill in the global worklists now?                      */
  /* perhaps judicious use of goto would be good here? -mck */
  if (wl_first && pcity) {
    global_worklists_iterate(pgwl) {
      dest_wids[wids_used] = wid_encode(FALSE, TRUE,
                                        global_worklist_id(pgwl));
      wids_used++;
    } global_worklists_iterate_end;
  }

  /* Fill in improvements and units */
  targets_used = collect_eventually_buildable_targets(targets, pcity, advanced_tech);
  name_and_sort_items(targets, targets_used, items, FALSE, pcity);

  for (item = 0; item < targets_used; item++) {
    struct universal target = items[item].item;

    if (VUT_UTYPE == target.kind) {
      dest_wids[wids_used] = wid_encode(TRUE, FALSE,
                                        utype_number(target.value.utype));
    } else {
      dest_wids[wids_used] = wid_encode(FALSE, FALSE,
                                        improvement_number(target.value.building));
    }
    wids_used++;
  }

  /* we didn't fill in the global worklists above */
  if (!wl_first && pcity) {
    global_worklists_iterate(pgwl) {
      dest_wids[wids_used] = wid_encode(FALSE, TRUE,
                                        global_worklist_id(pgwl));
      wids_used++;
    } global_worklists_iterate_end;
  }

  return wids_used;
}


#define COLUMNS                         4
#define BUFFER_SIZE                     100
#define NUM_TARGET_TYPES                3

struct worklist_report {
  HWND win;
  HWND list;
  char worklist_names[MAX_NUM_WORKLISTS][MAX_LEN_NAME];
  char *worklist_names_ptrs[MAX_NUM_WORKLISTS + 1];
  int worklist_ids[MAX_NUM_WORKLISTS];
  int wl_idx;
};
static struct worklist_report *report_dialog;
static int are_worklists_first = 1;

struct worklist_editor {
  HWND win,worklist,avail;
  HWND toggle_show_advanced;
  struct city *pcity;
  int global_worklist_id;
  void *user_data;
  int changed;
  WorklistOkCallback ok_callback;
  WorklistCancelCallback cancel_callback;
  wid worklist_wids[MAX_LEN_WORKLIST];
  /* maps from slot to wid; last one contains WORKLIST_END */
  wid worklist_avail_wids[B_LAST + U_LAST + MAX_NUM_WORKLISTS + 1];

};

enum wl_report_ids {
  ID_OK=IDOK,
  ID_CANCEL=IDCANCEL,
  ID_LIST=100,
  ID_WORKLIST,
  ID_EDIT,
  ID_RENAME,
  ID_INSERT,
  ID_DELETE,
  ID_FUTURE_TARGETS,
  ID_HELP,
  ID_UP,
  ID_DOWN,
  ID_CLOSE
};

static void global_commit_worklist(struct worklist *pwl, void *data);
static void worklist_copy_to_editor(const struct worklist *pwl,
                                    struct worklist_editor *peditor,
                                    int where);
static void worklist_really_insert_item(struct worklist_editor *peditor,
                                        int before, wid wid);
static void worklist_prep(struct worklist_editor *peditor);
static void worklist_list_update(struct worklist_editor *peditor);
static void targets_list_update(struct worklist_editor *peditor);
static struct worklist_editor *create_worklist_editor(int global_worklist_id,
						      struct city *pcity,
						      void *user_data,
						      WorklistOkCallback ok_cb,
						      WorklistCancelCallback
						      cancel_cb,HWND win);
static void update_worklist_editor(struct worklist_editor *peditor);

/****************************************************************

*****************************************************************/
static void global_list_update(struct worklist_report *preport)
{
  HWND lst;
  int n = 0;

  global_worklists_iterate(pgwl) {
    strcpy(preport->worklist_names[n], global_worklist_name(pgwl));
    preport->worklist_names_ptrs[n] = preport->worklist_names[n];
    preport->worklist_ids[n] = global_worklist_id(pgwl);

    n++;
  } global_worklists_iterate_end;

  /* Terminators */
  preport->worklist_names_ptrs[n] = NULL;

  /* now fill the list */

  n = 0;
  lst=GetDlgItem(preport->win,ID_LIST);
  ListBox_ResetContent(lst);
  while (preport->worklist_names_ptrs[n]) {
    ListBox_AddString(lst,preport->worklist_names_ptrs[n]);
    n++;
  }
}

/****************************************************************
  Remove the current worklist.  This request is made by sliding
  up all lower worklists to fill in the slot that's being deleted.
*****************************************************************/
static void global_delete_callback(struct worklist_report *preport, int sel)
{
  struct global_worklist *pgwl = 
      global_worklist_by_id(preport->worklist_ids[sel]);

  if (pgwl) {
    global_worklist_destroy(pgwl);
    global_list_update(preport);
  }
}

/****************************************************************

*****************************************************************/
static void global_rename_sub_callback(HWND w, void * data)
{
  struct worklist_report *preport = (struct worklist_report *) data;
  struct global_worklist *pgwl;

  if (preport
      && (pgwl = global_worklist_by_id(preport->worklist_ids[preport->wl_idx]))) {
    global_worklist_set_name(pgwl, input_dialog_get_input(w));
    global_list_update(preport);
  }

  input_dialog_destroy(w);
}

/****************************************************************
  Create a new worklist.
*****************************************************************/
static void global_insert_callback(struct worklist_report *preport)
{
  (void) global_worklist_new(_("empty worklist"));
  global_list_update(preport);
}

/****************************************************************

*****************************************************************/
static LONG CALLBACK global_wl_proc(HWND hwnd,UINT message,
				    WPARAM wParam,LPARAM lParam)
{
  int sel;
  struct worklist_report *preport;
  struct global_worklist *pgwl;
  preport=fcwin_get_user_data(hwnd);
  assert(preport);
  switch(message) {
  case WM_CREATE:
  case WM_SIZE:
  case WM_GETMINMAXINFO:
    break;
  case WM_DESTROY:
    memset(preport, 0, sizeof(*preport));
    free(preport);
    report_dialog=NULL;
    break;
  case WM_CLOSE:
    DestroyWindow(hwnd);
  case WM_COMMAND:
    sel=ListBox_GetCurSel(GetDlgItem(hwnd,ID_LIST));
    switch((enum wl_report_ids)LOWORD(wParam)) {
    case ID_CLOSE:
      DestroyWindow(hwnd);
      break;
    case ID_RENAME:
      if (sel!=LB_ERR
          && (pgwl = global_worklist_by_id(preport->worklist_ids[sel]))) {
	preport->wl_idx=sel;
	input_dialog_create(hwnd,
			    _("Rename Worklist"),
			    _("What should the new name be?"),
			    (char *) global_worklist_name(pgwl),
			    (void *) global_rename_sub_callback,
			    (void *) preport,
			    (void *) global_rename_sub_callback,
			    NULL);
      }
      break;
    case ID_INSERT:
      global_insert_callback(preport);
      break;
    case ID_DELETE:
      if (sel!=LB_ERR)
	global_delete_callback(preport,sel);
      break;
    case ID_EDIT:
      if (sel!=LB_ERR) {
	struct worklist_window_init init;
	preport->wl_idx = sel;
	init.global_worklist_id = preport->worklist_ids[sel];
	init.pcity = NULL;
	init.parent = hwnd;
	init.user_data = preport;
	init.ok_cb = global_commit_worklist;
	init.cancel_cb = NULL;
	popup_worklist(&init);
      }
      break;
    default:
      break;
    }
    break;
  default:
    return DefWindowProc(hwnd,message,wParam,lParam);
  }
  return 0;
}

/****************************************************************
  Bring up the global worklist report.
*****************************************************************/
void popup_worklists_report(void)
{
  struct fcwin_box *vbox;
  struct fcwin_box *hbox;
  if (report_dialog && report_dialog->win)
    return;
  assert(!report_dialog);
  report_dialog = fc_malloc(sizeof(struct worklist_report));
  report_dialog->win=fcwin_create_layouted_window(global_wl_proc,
						  _("Edit worklists"),
						  WS_OVERLAPPEDWINDOW,
						  CW_USEDEFAULT,
						  CW_USEDEFAULT,
						  root_window,
						  NULL,
						  JUST_CLEANUP,
						  report_dialog);
  vbox=fcwin_vbox_new(report_dialog->win,FALSE);
  hbox=fcwin_hbox_new(report_dialog->win,TRUE);
  fcwin_box_add_static(vbox,_("Available worklists"),0,SS_LEFT,
		       FALSE,FALSE,0);
  fcwin_box_add_list(vbox,7,ID_LIST,0,TRUE,TRUE,0);
  fcwin_box_add_button(hbox,_("Close"),ID_CLOSE,0,TRUE,TRUE,5);
  fcwin_box_add_button(hbox,_("Edit"),ID_EDIT,0,TRUE,TRUE,5);
  fcwin_box_add_button(hbox,_("Rename"),ID_RENAME,0,TRUE,TRUE,5);
  fcwin_box_add_button(hbox,_("Insert"),ID_INSERT,0,TRUE,TRUE,5);
  fcwin_box_add_button(hbox,_("Delete"),ID_DELETE,0,TRUE,TRUE,5);
  fcwin_box_add_box(vbox,hbox,FALSE,FALSE,5);
  fcwin_set_box(report_dialog->win,vbox);
  
  /*  - Update the worklists and clist. */
  global_list_update(report_dialog);
  
  ShowWindow(report_dialog->win,SW_SHOWNORMAL);
}            

/****************************************************************

****************************************************************/
void
update_worklist_report_dialog(void)
{
  if (report_dialog) {
    global_list_update(report_dialog);
  }

}
/****************************************************************
 ...
*****************************************************************/
static void worklist_help(int id, bool is_unit)
{
  if (id >= 0) {
    if (is_unit) {
      popup_help_dialog_typed(utype_name_translation(utype_by_number(id)), HELP_UNIT);
    } else if (is_great_wonder(improvement_by_number(id))) {
      popup_help_dialog_typed(improvement_name_translation(improvement_by_number(id)), HELP_WONDER);
    } else {
      popup_help_dialog_typed(improvement_name_translation(improvement_by_number(id)), HELP_IMPROVEMENT);
    }
  } else
    popup_help_dialog_string(HELP_WORKLIST_EDITOR_ITEM);
}

/****************************************************************

*****************************************************************/
static void worklist_swap_entries(int i, int j,
                                  struct worklist_editor *peditor)
{
  int id = peditor->worklist_wids[i];

  peditor->worklist_wids[i] = peditor->worklist_wids[j];
  peditor->worklist_wids[j] = id;
}


/****************************************************************

****************************************************************/
static void global_commit_worklist(struct worklist *pwl, void *data)
{
  struct worklist_report *preport = (struct worklist_report *) data;
  struct global_worklist *pgwl =
      global_worklist_by_id(preport->worklist_ids[preport->wl_idx]);

  if (pgwl) {
    global_worklist_set(pgwl, pwl);
  }
}

/****************************************************************
 copies a worklist back from the editor
*****************************************************************/
static void copy_editor_to_worklist(struct worklist_editor *peditor,
                                    struct worklist *pwl)
{
  int i, n;

  /* Fill in this worklist with the parameters set in the worklist dialog. */
  worklist_init(pwl);

  n = 0;
  for (i = 0; i < MAX_LEN_WORKLIST; i++) {
    if (peditor->worklist_wids[i] == WORKLIST_END) {
      break;
    } else {
      wid wid = peditor->worklist_wids[i];
      struct universal prod =
        universal_by_number(wid_is_unit(wid) ? VUT_UTYPE : VUT_IMPROVEMENT,
                               wid_id(wid));

      assert(!wid_is_worklist(wid));
      worklist_append(pwl, prod);
    }
  }
}

/****************************************************************
  User wants to save the worklist.
*****************************************************************/
static void worklist_ok_callback(struct worklist_editor *peditor)
{
  struct worklist wl;

  copy_editor_to_worklist(peditor, &wl);

  /* Invoke the dialog's parent-specified callback */
  if (peditor->ok_callback)
    (*peditor->ok_callback) (&wl, peditor->user_data);

  peditor->changed = 0;
  /*  update_changed_sensitive(peditor); */
  if (peditor->pcity == NULL) 
    DestroyWindow(peditor->win);
}

/****************************************************************
  User cancelled from the Worklist dialog or hit Undo.
*****************************************************************/
static void worklist_no_callback(struct worklist_editor *peditor)
{
  /* Invoke the dialog's parent-specified callback */
  if (peditor->cancel_callback)
    (*peditor->cancel_callback) (peditor->user_data);

  peditor->changed = 0;
  /* update_changed_sensitive(peditor); */

  if (peditor->pcity == NULL) {
    DestroyWindow(peditor->win);
  } else {
    worklist_prep(peditor);
    worklist_list_update(peditor);
  }
}

/****************************************************************

****************************************************************/
static void get_selected(struct worklist_editor *peditor,
			 int *worklist_sel, int *avail_sel)
{
  int i,n;
  n=ListView_GetItemCount(peditor->worklist);
  for(i=0;i<n;i++) {
    if (ListView_GetItemState(peditor->worklist,i,LVIS_SELECTED)) {
      *worklist_sel=i;
      break;
    }
  }
  n=ListView_GetItemCount(peditor->avail);
  for(i=0;i<n;i++) {
    if (ListView_GetItemState(peditor->avail,i,LVIS_SELECTED)) {
      *avail_sel=i;
      break;
    }
  }
}

/****************************************************************
  User asked for help from the Worklist dialog.  If there's 
  something highlighted, bring up the help for that item.  Else,
  bring up help for improvements.
*****************************************************************/
static void targets_help_callback(struct worklist_editor *peditor,
				  int sel)
{
  int id;
  bool is_unit = FALSE;

  if (sel>=0) {
    wid wid =
      peditor->worklist_avail_wids[sel];

    if (wid_is_worklist(wid)) {
      id = -1;
    } else {
      id = wid_id(wid);
      is_unit = wid_is_unit(wid);
    }
  } else {
    id = -1;
  }

  worklist_help(id, is_unit);
}


/****************************************************************
 does the UI work of inserting a target into the worklist
 also inserts a global worklist straight in.
*****************************************************************/
static void worklist_insert_item(struct worklist_editor *peditor,
				 int wl_sel, int avail_sel)
{
  int where, len;
  wid wid;
  
  if (wl_sel<0) {
    where=MAX_LEN_WORKLIST;
  } else {
    where=wl_sel;
  }
  wid = peditor->worklist_avail_wids[avail_sel];
  
  /* target is a global worklist id */
  if (wid_is_worklist(wid)) {
    struct global_worklist *pgwl = global_worklist_by_id(wid_id(wid));

    if (pgwl) {
      const struct worklist *pwl = global_worklist_get(pgwl);

      worklist_copy_to_editor(pwl, peditor, where);
      where += worklist_length(pwl);
    }
  } else {
    worklist_really_insert_item(peditor, where, wid);
    where++;
  }

  /* Update the list with the actual data */
  worklist_list_update(peditor);
  
  /* How long is the new worklist? */
  for (len = 0; len < MAX_LEN_WORKLIST; len++)
    if (peditor->worklist_wids[len] == WORKLIST_END)
      break;
  
  /* Re-select the item that was previously selected. */
  if (where < len) {
    ListView_SetItemState(peditor->worklist,where,
			  LVIS_SELECTED,LVIS_SELECTED);
  }
}

static void worklist_remove_item(struct worklist_editor *peditor, int row)
{
  int i, j;
  /* Find the last element in the worklist */
  for (i = 0; i < MAX_LEN_WORKLIST; i++)
    if (peditor->worklist_wids[i] == WORKLIST_END)
      break;

  /* Slide all the later elements in the worklist up. */
  for (j = row; j < i; j++) {
    peditor->worklist_wids[j] = peditor->worklist_wids[j + 1];
  }
  
  i--;
  peditor->worklist_wids[i] = WORKLIST_END;
  
  /* Update the list with the actual data */
  worklist_list_update(peditor);
  /* Select the item immediately after the item we just deleted,
     if there is such an item. */
  if (row < i) {
    ListView_SetItemState(peditor->worklist,row,LVIS_SELECTED,LVIS_SELECTED);
  }

}

/****************************************************************

****************************************************************/
LONG CALLBACK worklist_editor_proc(HWND hwnd,UINT message,WPARAM wParam,
				   LPARAM lParam)
{
  int avail_sel;
  int wl_sel;

  struct worklist_editor *peditor;
  peditor=fcwin_get_user_data(hwnd);
  wl_sel=-1;
  avail_sel=-1;
 
  switch(message) {
  case WM_CREATE:
    {
      struct worklist_window_init *init;
      init = fcwin_get_user_data(hwnd);
      peditor = create_worklist_editor(init->global_worklist_id,
                                       init->pcity, init->user_data,
				       init->ok_cb, init->cancel_cb, hwnd);
      update_worklist_editor(peditor);
    }
    break;
  case WM_SIZE:
  case WM_GETMINMAXINFO:
    break;
  case WM_DESTROY:
    if (peditor) {
      memset(peditor, 0, sizeof(*peditor));
      free(peditor);
    }
    fcwin_set_user_data(hwnd, NULL);
    break;
  case WM_CLOSE:
    DestroyWindow(hwnd);
    break;
  case WM_COMMAND:
    if (peditor == NULL)
      break;
    get_selected(peditor,&wl_sel,&avail_sel);
    switch((enum wl_report_ids)LOWORD(wParam)) {
    case ID_CANCEL:
      worklist_no_callback(peditor);
      break;
    case ID_OK:
      worklist_ok_callback(peditor);   
      break; 
    case ID_FUTURE_TARGETS:
      targets_list_update(peditor);
      break;
    case ID_DELETE:
      if (wl_sel>=0)
	worklist_remove_item(peditor,wl_sel);
      break;
   case ID_UP:
      if (wl_sel>0) {
	worklist_swap_entries(wl_sel,wl_sel - 1, peditor);
	worklist_list_update(peditor);
      }
      break;
    case ID_DOWN:
      if ((wl_sel>=0)&&(wl_sel!=MAX_LEN_WORKLIST-1)&&
	  (peditor->worklist_wids[wl_sel+1] !=WORKLIST_END)) {
	worklist_swap_entries(wl_sel, wl_sel + 1, peditor);
	worklist_list_update(peditor);
      }
      break;
    case ID_HELP:
      targets_help_callback(peditor,avail_sel);
      break;
    default:
      break;
    }
    break;
  case WM_NOTIFY:
    {
      NM_LISTVIEW *nmlv=(NM_LISTVIEW *)lParam;
      if (peditor == NULL)
	break;
      get_selected(peditor,&wl_sel,&avail_sel);
      if ((nmlv->hdr.idFrom==ID_LIST)&&
	  (nmlv->hdr.code==NM_DBLCLK)&&(avail_sel>=0)) {
	worklist_insert_item(peditor,wl_sel,avail_sel);
	
      } else if ((nmlv->hdr.idFrom == ID_WORKLIST)
		 && (nmlv->hdr.code == NM_DBLCLK)
		 && (wl_sel >= 0)) {
	worklist_remove_item(peditor, wl_sel);
      }
    }
    break;
  default:
    return DefWindowProc(hwnd,message,wParam,lParam);
  }
  return 0;
}

/****************************************************************
 Worklist editor
****************************************************************/
static struct worklist_editor *create_worklist_editor(int global_worklist_id,
						      struct city *pcity,
						      void *user_data,
						      WorklistOkCallback ok_cb,
						      WorklistCancelCallback
						      cancel_cb,HWND win)
{
  struct worklist_editor *peditor;
  struct fcwin_box *hbox;
  struct fcwin_box *vbox;
  struct fcwin_box *hbox2;
  LV_COLUMN lvc;
  int i;

  char *wl_titles[] = { N_("Type"),
			N_("Info"),
			N_("Cost")
  };
  

  char *avail_titles[] = { N_("Type"),
			   N_("Info"),
			   N_("Cost"),
			   N_("Turns")
  };
  
  peditor=fc_malloc(sizeof(struct worklist_editor));
  
  peditor->pcity = pcity;
  peditor->global_worklist_id = global_worklist_id;
  peditor->user_data = user_data;
  peditor->ok_callback = ok_cb;
  peditor->cancel_callback = cancel_cb;
  peditor->changed = 0;
  
  peditor->win = win;
  fcwin_set_user_data(win, peditor);

  hbox2=fcwin_hbox_new(peditor->win,FALSE);
  vbox=fcwin_vbox_new(peditor->win,FALSE);
  fcwin_box_add_groupbox(hbox2,_("Current worklist"),vbox,SS_LEFT,
		       TRUE,TRUE,0);
  peditor->worklist=fcwin_box_add_listview(vbox, 5, ID_WORKLIST,
					   LVS_REPORT | LVS_SINGLESEL,
					   TRUE,TRUE,0);
  hbox=fcwin_hbox_new(peditor->win,TRUE);
  fcwin_box_add_button(hbox,_("Up"),ID_UP,0,TRUE,TRUE,0);
  fcwin_box_add_button(hbox,_("Down"),ID_DOWN,0,TRUE,TRUE,0);
  fcwin_box_add_button(hbox,_("Remove"),ID_DELETE,0,TRUE,TRUE,0);
  fcwin_box_add_box(vbox,hbox,FALSE,FALSE,0);
 
  vbox=fcwin_vbox_new(peditor->win,FALSE);
  fcwin_box_add_groupbox(hbox2,_("Available items"),vbox,0,TRUE,TRUE,0);
  peditor->avail=fcwin_box_add_listview(vbox,5,ID_LIST,
					LVS_SINGLESEL | LVS_REPORT,
					TRUE,TRUE,5);
  hbox=fcwin_hbox_new(peditor->win,FALSE);
  peditor->toggle_show_advanced=
    fcwin_box_add_checkbox(hbox,_("Show future targets"),ID_FUTURE_TARGETS,
			   0,TRUE,TRUE,5);
  fcwin_box_add_button(hbox,_("Help"),ID_HELP,0,FALSE,FALSE,5);
  fcwin_box_add_box(vbox,hbox,FALSE,FALSE,0);
  vbox=fcwin_vbox_new(peditor->win,FALSE);
  fcwin_box_add_box(vbox,hbox2,TRUE,TRUE,5);
  hbox=fcwin_hbox_new(peditor->win,TRUE);
  if (pcity) {
    fcwin_box_add_button(hbox,_("Undo"), ID_CANCEL,0,TRUE,TRUE,5);
  } else {
    fcwin_box_add_button(hbox,_("Ok"),ID_OK,0,TRUE,TRUE,5);
    fcwin_box_add_button(hbox,_("Cancel"),ID_CANCEL,0,TRUE,TRUE,5);
  }
  fcwin_box_add_box(vbox,hbox,FALSE,FALSE,10);

  lvc.pszText=_(wl_titles[0]);
  lvc.mask=LVCF_TEXT | LVCF_FMT;
  lvc.fmt=LVCFMT_LEFT;
  ListView_InsertColumn(peditor->worklist,0,&lvc);
  for (i=1;i<ARRAY_SIZE(wl_titles);i++) {
    lvc.pszText=_(wl_titles[i]);
    lvc.mask=LVCF_TEXT | LVCF_FMT;
    lvc.fmt=LVCFMT_RIGHT;
    ListView_InsertColumn(peditor->worklist,i,&lvc);
  }
  ListView_SetColumnWidth(peditor->worklist,0,LVSCW_AUTOSIZE);
  for(i=1;i<ARRAY_SIZE(wl_titles);i++) {
    ListView_SetColumnWidth(peditor->worklist,i,
			    LVSCW_AUTOSIZE_USEHEADER); 
  }
  
  lvc.pszText=_(avail_titles[0]);
  lvc.mask=LVCF_TEXT | LVCF_FMT;
  lvc.fmt=LVCFMT_LEFT;
  ListView_InsertColumn(peditor->avail,0,&lvc);  
  
  for (i=1;i<ARRAY_SIZE(avail_titles);i++) {
    lvc.pszText=_(avail_titles[i]);
    lvc.mask=LVCF_TEXT | LVCF_FMT;
    lvc.fmt=LVCFMT_RIGHT;
    ListView_InsertColumn(peditor->avail,i,&lvc);
  }
  
  ListView_SetColumnWidth(peditor->avail,0,LVSCW_AUTOSIZE);
  for(i=1;i<ARRAY_SIZE(wl_titles);i++) {
    ListView_SetColumnWidth(peditor->avail,i,
			    LVSCW_AUTOSIZE_USEHEADER); 
  }
  fcwin_set_box(peditor->win,vbox);
  return peditor;
}     

/****************************************************************
 does the heavy lifting for inserting an item (not a global worklist) 
 into a worklist.
*****************************************************************/
static void worklist_really_insert_item(struct worklist_editor *peditor,
                                        int before, wid wid)
{
  int i, first_free;
  struct universal target =
    universal_by_number(wid_is_unit(wid) ? VUT_UTYPE : VUT_IMPROVEMENT,
                           wid_id(wid));

  assert(!wid_is_worklist(wid));

  /* If this worklist is a city worklist, double check that the city
     really can (eventually) build the target.  We've made sure that
     the list of available targets is okay for this city, but a global
     worklist may try to insert an odd-ball unit or target. */
  if (peditor->pcity
      && !can_city_build_later(peditor->pcity, target)) {
    /* Nope, this city can't build this target, ever.  Don't put it into
       the worklist. */
    return;
  }

  /* Find the first free element in the worklist */
  for (first_free = 0; first_free < MAX_LEN_WORKLIST; first_free++)
    if (peditor->worklist_wids[first_free] == WORKLIST_END)
      break;

  if (first_free >= MAX_LEN_WORKLIST - 1) {
    /* No room left in the worklist! (remember, we need to keep space
       open for the WORKLIST_END sentinel.) */
    return;
  }

  if (first_free < before && before != MAX_LEN_WORKLIST) {
    /* True weirdness. */
    return;
  }

  if (before < MAX_LEN_WORKLIST) {
    /* Slide all the later elements in the worklist down. */
    for (i = first_free; i > before; i--) {
      peditor->worklist_wids[i] = peditor->worklist_wids[i - 1];
    }
  } else {
    /* Append the new id, not insert. */
    before = first_free;
  }
  first_free++;
  peditor->worklist_wids[first_free] = WORKLIST_END;
  peditor->worklist_wids[before] = wid;
}


/*****************************************************************
 copies a worklist to the editor for editing
******************************************************************/
static void worklist_copy_to_editor(const struct worklist *pwl,
                                    struct worklist_editor *peditor,
                                    int where)
{
  int i;

  for (i = 0; i < MAX_LEN_WORKLIST; i++) {
    struct universal target;

    /* end of list */
    if (!worklist_peek_ith(pwl, &target, i)) {
      break;
    }

    worklist_really_insert_item(peditor, where,
                                wid_encode(VUT_UTYPE == target.kind, FALSE,
					   universal_number(&target)));
    if (where < MAX_LEN_WORKLIST)
      where++;
  }
  /* Terminators */
  while (where < MAX_LEN_WORKLIST) {
    peditor->worklist_wids[where++] = WORKLIST_END;
  }
}


/****************************************************************
 sets aside the first space for "production.value" if in city
*****************************************************************/
static void worklist_prep(struct worklist_editor *peditor)
{
  if (peditor->pcity) {
    peditor->worklist_wids[0] =
        wid_encode(VUT_UTYPE == peditor->pcity->production.kind, FALSE,
                   universal_number(&peditor->pcity->production));
    peditor->worklist_wids[1] = WORKLIST_END;
    worklist_copy_to_editor(&peditor->pcity->worklist, peditor,
                            MAX_LEN_WORKLIST);
  } else {
    struct global_worklist *pgwl =
        global_worklist_by_id(peditor->global_worklist_id);

    if (pgwl) {
      peditor->worklist_wids[0] = WORKLIST_END;
      worklist_copy_to_editor(global_worklist_get(pgwl),
                              peditor, MAX_LEN_WORKLIST);
    }
  }
}

/****************************************************************

*****************************************************************/
static void worklist_list_update(struct worklist_editor *peditor)
{
  int i, n;
  char *row[COLUMNS];
  char buf[COLUMNS][BUFFER_SIZE];

  for (i = 0; i < COLUMNS; i++)
    row[i] = buf[i];

  ListView_DeleteAllItems(peditor->worklist);

  n = 0;

  /* Fill in the rest of the worklist list */
  for (i = 0; n < MAX_LEN_WORKLIST; i++, n++) {
    wid wid = peditor->worklist_wids[i];
    struct universal target;

    if (wid == WORKLIST_END) {
      break;
    }

    assert(!wid_is_worklist(wid));

    target = universal_by_number(wid_is_unit(wid)
                                    ? VUT_UTYPE : VUT_IMPROVEMENT,
                                    wid_id(wid));

    get_city_dialog_production_row(row, BUFFER_SIZE, target,
                                   peditor->pcity);
    fcwin_listview_add_row(peditor->worklist,i,COLUMNS,row);
  }
  
  ListView_SetColumnWidth(peditor->worklist,0,LVSCW_AUTOSIZE);
  for(i=1;i<COLUMNS;i++) {
    ListView_SetColumnWidth(peditor->worklist,i,
			    LVSCW_AUTOSIZE_USEHEADER); 
  }
  
}

/****************************************************************
  Fill in the target arrays in the peditor.
*****************************************************************/
static void targets_list_update(struct worklist_editor *peditor)
{
  int i = 0, wids_used = 0;
  int advanced_tech;
  char *row[COLUMNS];
  char buf[COLUMNS][BUFFER_SIZE];

  /* Is the worklist limited to just the current targets, or */
  /* to any available and future targets?                    */
  advanced_tech = (peditor->toggle_show_advanced &&
                   (Button_GetCheck(peditor->toggle_show_advanced) ==
                   BST_CHECKED));

  wids_used = collect_wids1(peditor->worklist_avail_wids, peditor->pcity,
                            are_worklists_first, advanced_tech);
  peditor->worklist_avail_wids[wids_used] = WORKLIST_END;


  /* fill the gui list */
  for (i = 0; i < COLUMNS; i++)
    row[i] = buf[i];

  ListView_DeleteAllItems(peditor->avail);
 
  for (i = 0;; i++) {
    wid wid = peditor->worklist_avail_wids[i];

    if (wid == WORKLIST_END) {
      break;
    }

    if (wid_is_worklist(wid)) {
      struct global_worklist *pgwl = global_worklist_by_id(wid_id(wid));

      if (!pgwl) {
        break;
      }

      fc_snprintf(buf[0], BUFFER_SIZE, "%s",
                  global_worklist_name(pgwl));
      fc_snprintf(buf[1], BUFFER_SIZE, _("Worklist"));
      fc_snprintf(buf[2], BUFFER_SIZE, "---");
      fc_snprintf(buf[3], BUFFER_SIZE, "---");
    } else {
      struct universal target = 
        universal_by_number(wid_is_unit(wid) ? VUT_UTYPE : VUT_IMPROVEMENT,
                               wid_id(wid));

      get_city_dialog_production_row(row, BUFFER_SIZE, target,
                                     peditor->pcity);
    }
    fcwin_listview_add_row(peditor->avail,i,COLUMNS,row);
  }
  ListView_SetColumnWidth(peditor->avail,0,LVSCW_AUTOSIZE);
  for(i=1;i<COLUMNS;i++) {
    ListView_SetColumnWidth(peditor->avail,i,
			    LVSCW_AUTOSIZE_USEHEADER); 
  }
  fcwin_redo_layout(peditor->win);
}

/****************************************************************
...
*****************************************************************/
static void update_worklist_editor(struct worklist_editor *peditor)
{
  worklist_prep(peditor);
  worklist_list_update(peditor);
  targets_list_update(peditor);
}

/****************************************************************
...
*****************************************************************/
void update_worklist_editor_win(HWND win)
{
  if (fcwin_get_user_data(win) != NULL) {
    update_worklist_editor((struct worklist_editor *)fcwin_get_user_data(win));
  }
}



/****************************************************************

****************************************************************/
void popup_worklist(struct worklist_window_init *init)
{
  HWND win;
  win=fcwin_create_layouted_window(worklist_editor_proc,_("Worklist"),
				   WS_OVERLAPPEDWINDOW,
				   CW_USEDEFAULT,
				   CW_USEDEFAULT,
				   init->parent,
				   NULL,
				   FAKE_CHILD,
				   init);
  ShowWindow(win, SW_SHOWNORMAL); 
}
ENDREP
DELTA 17101 4684 3049
SVN  ÃfÃh
 ”a ‚ —”cƒ ƒi¬‚ ‰¯lƒ Šv¸pfcfc_fcfc_ENDREP
DELTA 15410 263700 915
SVN  ‚ƒ‚‚sF5 …t  õx†Š 5üŠ ‡Zý[ƒ `…5ƒ ˆ1‡ „@Zƒ –l”‚ Ì«
ƒ ‚W÷ƒ ‰ùwlog_debug(log_debug(fc_fc_real_city_reportfc_fcfc_fc_ENDREP
DELTA 4452 0 3395
SVN  Á7àV'¶( b — „l
€ƒY B‰€„@ L®@€ƒE S®@Œ Y–'³ „X‹e€„ ‚i”€ Z¼~€†\ U®> b˜t€‹ hž€‰g T®? .¨z€ƒJ ‚F­w€% jµg€l _·= '³Z€% µgº ‚o·= ¸€I T®? ¸€G T®? ‚5º,€O ‚¼~ ‚1¿2005 - The Freeciv Teamdio.h>
#include <stdlib.h>
#include <string.h>

/* utility */
#include "capability.h"
#include "fcintl.h"
#include "log.h"
#include "mem.h"
#include "registry.h"
#include "shared.h"
#include "string_vector.h"
#include "support.h"

/* client */
#include "audio_none.h"
#ifdef AUDIO_SDL
#include "audio_sdl.h"
#endif

#include "audio.h"

#define MAX_NUM_PLUGINS		2
#define SNDSPEC_SUFFIX		".soundspec"

/* keep it open throughout */
static struct section_file *tagfile = NULL
  Returns a static string vector of all sound plugins
  available on the system.  This function is unfortunately similar to
  audio_get_all_plugin_names().
***********************************************************************/
const struct strvec *get_soundplugin_list(void)
{
  static struct strvec *plugin_list = NULL;

  if (NULL == plugin_list) {
    int i;

    plugin_list = strvec_new();
    strvec_reserve(plugin_list, num_plugins_used);
    for (i = 0; i < num_plugins_used; i++) {
      strvec_set(plugin_list, i, plugins[i].name);
    }
  }

  return plugin_list
  Returns a static string vector of soundsets available on the system by
  searching all data directories for files matching SNDSPEC_SUFFIX.
  The list is NULL-terminated.
***********************************************************************/
const struct strvec *get_soundset_list(void)
{
  static struct strvec *audio_list = NULL;

  if (NULL == audio_list) {
    audio_list = fileinfolist(get_data_dirs(), SNDSPEC_SUFFIX);
  }

  return audio_listAdd a pluginadd_plugin(struct audio_plugin *p)
{
  fc_assert_relog_debug("Shutting down %s", plugins[selected_plugin].name);
    plugins[selected_plugin].stop();
    plugins[selected_plugin].wait();
    plugins[selected_plugin].shutdown();
  }

  if (!found) {
    log_fatal(_("Plugin '%s' isn't available. Available are %s"),
              name, audio_get_all_plugin_names());
    exit(EXIT_FAILURE);
  }

  if (!plugins[i].init()) {
    log_error("Plugin %s found, but can't be initialized.", name);
    return FALSE;
  }

  selected_plugin = i;
  log_verbose("Plugin '%s' is now selected",void)
{
  audio_none_init();
  fc_assert(num_plugins_used == 1);
  selected_plugin = 0;

#ifdef AUDIO_SDL
  audio_sdl_init();
#endifthe filename for the given soundset. Returns NULL if
  soundset couldn't be found. Caller has to free the return value.
**************************************************************************/
static const char *soundspec_fullname(const char *soundset_name)
{
  const char *soundset_default = "stdsounds";	/* Do not i18n! */
  char *fname = fc_malloc(strlen(soundset_name) + strlen(SNDSPEC_SUFFIX) + 1);
  const char *dname;

  sprintf(fname, "%s%s", soundset_name, SNDSPEC_SUFFIX);

  dname = fileinfoname(get_data_dirs(), fname);
  free(fname);

  if (dname) {
    return fc_strdup(dname);
  }

  if (strcmp(soundset_name, soundset_default) == 0) {
    /* avoid endless recursion */
    return NULL;
  }

  log_error("Couldn't find soundset \"%s\", trying \"%s\".",
            soundset_name, soundset_default);
  return soundspec_fullname(soundset_defaulonst char *filename;
  const char *file_capstr;
  char us_capstr[] = "+soundspec";

  if (strcmp(prefered_plugin_name, "none") == 0) {
    /* We explicitly choose none plugin, silently skip the code below */
    log_verbose("Proceeding with sound support disabled.");
    tagfile = NULL;
    return;
  }
  if (num_plugins_used == 1) {
    /* We only have the dummy plugin, skip the code but issue an advertise */
    log_normal(_("No real audio plugin present."));
    log_normal(_("Proceeding with sound support disabled."));
    log_normal(_("For sound support, install SDL_mixer"));
    log_normal("http://www.libsdl.org/projects/SDL_mixer/index.html");
    tagfile = NULL;
    return;
  }
  if (!spec_name) {
    log_fatal("No sound spec-file given!");
    exit(EXIT_FAILURE);
  }
  log_verbose("Initializing sound using %s...", spec_name);
  filename = soundspec_fullname(spec_name);
  if (!filename) {
    log_error("Cannot find sound spec-file \"%s\".", spec_name);
    log_normal(_("To get sound you need to download a sound set!"));
    log_normal(_("Get sound sets from <%s>."),
               "ftp://ftp.freeciv.org/freeciv/contrib/audio/soundsets");
    log_normal(_("Proceeding with sound support disabled."));
    tagfile = NULL;
    return;
  }
  if (!(tagfile = secfile_load(filename, TRUE))) {
    log_fatal(_("Could not load sound spec-file '%s':\n%s"), filename,
              secfile_error()NULL == file_capstr) {
    log_fatal("Audio spec-file \"%s\" doesn't have capability string.",
              filename);
    exit(EXIT_FAILURE);
  }
  if (!has_capabilities(us_capstr, file_capstr)) {
    log_fatal("sound spec-file appears incompatible:");
    log_fatal("  file: \"%s\"", filename);
    log_fatal("  file options: %s", file_capstr);
    log_fatal("  supported options: %s", us_capstr);
    exit(EXIT_FAILURE);
  }
  if (!has_capabilities(file_capstr, us_capstr)) {
    log_fatal("sound spec-file claims required option(s) "
              "which we don't support:");
    log_fatal("  file: \"%s\"", filename);
    log_fatal("  file options: %s", file_capstr);
    log_fatal("  supported options: %s", us_capstr);
    exit(EXIT_FAILURE);
  }

  free((void *) filename);

  atexit(audio_shutdown);

  if (prefered_plugin_name[0] != '\0') {
    if (!audio_select_plugin(prefered_plugin_name))
      log_normal(_("Proceeding with sound support disabled."));
    return;
  }

#ifdef AUDIO_SDL
  if (audio_select_plugin("sdl")) return; 
#endif
  log_normal(_("No real audio subsystem managed to initialize!"));
  log_normal(_("Perhaps there is some misconfiguration or bad permissions."));
  log_normal(_("Proceeding with sound support disabled.")onst char *soundfile;
  const char *fullpath = NULL;

  if (!tag || strcmp(tag, "-") == 0) {
    return FALSE;
  }

  if (tagfile) {
    soundfile = secfile_lookup_str(tagfile, "files.%s", tag);
    if (NULL == soundfile) {
      log_verbose("No sound file for tag %s (file %s)", tag, soundfile);
    } else {
      fullpath = fileinfoname(get_data_dirs(), soundfile);
      if (!fullpath) {
        log_error("Cannot find audio file %s", soundfile);
      }har *const alt_tag)
{
  char *pretty_alt_tag = alt_tag ? alt_tag : "(null)";

  fc_assert_ret(tag != NULL);

  log_debug("audio_play_sound('%s', '%s')", tag, pretty_FALSE) && !audio_play_tag(alt_tag, FALSE)) {
    log_verbose( "Neither of tags %s or %s found", tag, pretty_har *const alt_tag)
{
  char *pretty_alt_tag = alt_tag ? alt_tag : "(null)";

  fc_assert_ret(tag != NULL);

  log_debug("audio_play_music('%s', '%s')", tag, pretty_log_verbose("Neither of tags %s or %s found", tag, pretty_double audio_get_volume()
{
  return plugins[selected_plugin].get_volume(et_volume(double volume)
{
  plugins[selected_plugin].set_volume(volume
  if (NULL != tagfile) {
    secfile_destroy(tagfile);
    tagfile = NULL;
  }ENDREP
DELTA 16445 0 1026
SVN  ™;™;
# @ £ ‹XcFC_FD_ZERO FD_ZERO
#else
#define FCENDREP
DELTA 17042 77895 882
SVN  åå8ƒ ï+ º Ž9ïl T’p ƒzÿ€ Ž/„ „O’p€ U“@ J„~ Ë(™pfc_snprintf(buf, sizeof(buf), _("Diplomacy: %s"),
        fc_snprintf(buf, sizeof(buf),fc_snprintf(buf, sizeof(buf),
              "<span size=\"large\" weight=\"bold\">%s %s</span>",
              ruler_title_translation(plr0),fc_snprintf(buf, sizeof(buf),fc_snprintf(buf, sizeof(buf),
              "<span size=\"large\" weight=\"bold\">%s %s</span>",
              ruler_title_translation(plr1), player_nameENDREP
DELTA 16929 131551 5880
SVN  íí] I €D Ì!™ JÜMfc_snprintf(buffer, len, "(%s)", pconn->username);
  } else {
    fcfc_strlcpy(name, message,ENDREP
DELTA 17079 11607 338
SVN  …ÝZ…ÞE]Œ ‚ÝW €m g‚Þ6ƒ b‚ß€e •‚àd€‡C k‚ý ‚ 5‚ým€ cƒ€€^ }ƒ`‚ /ƒ‚_‚ œ}ƒ„€s ±ƒ¢ ‚ —SƒÓ‚ òpƒêjfc_snprintf(buf, sizeof(buf), _("<b>%s</b> - %s citizens"),
              city_name(pdialog->pcity),
        fc_fc_strlcat(buf, _(" - celebrating"), sizeof(buf));
  } else if (city_happy(pdialog->pcity)) {
    fc_fc_snprintf(buf[FOOD], sizeof(buf[FOOD]), "%2d (%+2d)",
              pcity->prod[O_FOOD], pcity->surplus[O_FOOD]);
  fc_snprintf(buf[SHIELD], sizeof(buf[SHIELD]), "%2d (%+2d)",
              pcity->prod[O_SHIELD] + pcity->waste[O_SHIELD],
              pcity->surplus[O_SHIELD]);
  fc_snprintf(buf[TRADE], sizeof(buf[TRADE]), "%2d (%+2d)",
              pcity->surplus[O_TRADE] + pcity->waste[O_TRADE],
              pcity->surplus[O_TRADE]);
  fc_snprintf(buf[GOLD], sizeof(buf[GOLD]), "%2d (%+2d)",
              pcity->prod[O_GOLD], pcity->surplus[O_GOLD]);
  fc_snprintf(buf[LUXURY], sizeof(buf[LUXURY]), "%2d      ",
              pcity->prod[O_LUXURY]);

  fc_snprintf(buf[SCIENCE], sizeof(buf[SCIENCE]), "%2d",
              pcity->prod[O_SCIENCE]);

  fc_snprintf(buf[GRANARY], sizeof(buf[GRANARY]), "%d/%-d",
              pcity->food_stock, city_granary_size(pcity->size));

  granaryturns = city_turns_to_grow(pcity);
  if (granaryturns == 0) {
    fcfcfc_snprintf(buf[GROWTH], sizeof(buf[GROWTH]),
                PL_("%d turn", "%d turns", abs(granaryturns)),
                abs(granaryturns));
  }
  fcfc_snprintf(buf[WASTE], sizeof(buf[WASTE]), "%4d",
              pcity->waste[O_SHIELD]);
  fcfcfcfc_snprintf(buf2, sizeof(buf2), "%s%s: %s", descr,
              worklist_is_empty(&pcity->worklist) ? "" : " (+)",fcfcENDREP
DELTA 15839 0 1574
SVN  žV0‚6 …c  P…w€A Z‡z† ƒ4˜T† ëMœ€Y PÉ ‰8‰Oƒ ‹
“	/* utility *//* common */
#include "base.h"
#include "effects.h"
#include "fc_types.h"
#include "map.h"
#include "unit.h"
#include "unitlist.h"
#include "unittype.h"
#include "terrain.h"

#include "movementconst const !player_can_invade_tile(unit_owner, dst_tile)) {
    return MR_PEACE;
  }

  return MR_OKfc_ENDREP
DELTA 4313 68792 1691
SVN  ™N—~0ŒH …8 €W T…u F‘s€K •NŒ E–~Œ v—X€„ G €E G €„B
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <stdio.h>

#include <gtk/gtktk_widget_push_colormap (gdk_rgb_get_colormap());

  visual = gtk_widget_get_default_visual();

  if (visual->type == GDK_VISUAL_STATIC_GRAY) { 
    /* StaticGray, use black and white */
    log_verbose(log_verbose(log_verbose(***************
  Allocate a color (adjusting it for our colormap if necessary on paletted
  systems) and return a pointer to it.
****************************************************************************/
struct color *color_alloc(int r, int g, int b)
{
  struct color *color = fc_malloc(sizeof(*color));
  GdkColormap *cmap = gtk_widget_get_default_colormap();

  color->color.red = r << 8;
  color->color.green = g << 8;
  color->color.blue = b << 8;
  gdk_rgb_find_color(cmap, &color->color);

  return color;
}

******
  Free a previously allocated color.  See color_alloc.
****************************************************************************/
void color_free(struct color *color)
{
  free(color);
}

******
  Fill the string with the color in "#rrggbb" mode.  Use it instead of
  gdk_color() which have been included in gtk2.12 version only.
****************************************************************************/
size_t color_to_string(GdkColor *color, char *string, size_t length)
{
  fc_assert_ret_val(NULL != string, 0);
  fc_assert_ret_val(0 < length, 0);

  if (NULL == color) {
    string[0] = '\0';
    return 0;
  } else {
    return fc_snprintf(string, length, "#%02x%02x%02x",
                       color->red >> 8, color->green >> 8, color->blue >> 8);
  }
}
ENDREP
DELTA 13133 97755 13180
SVN  ƒ„qƒ„‚JŽL …p – !…o¢ ®y‡#Š X¶/Š ŒA·Š ‡yÃoŠ TË{ ƒ ÌZ† ‡	Ï`€O …×>¨ WÜiŠ …VìS‰ †jò=… ‚.ù1… ©_ûi¨ „a¥{€2 w¯b 5­€J ƒ¯€J “:²WŠ ‡sÆ$Š ƒWÎ*Œ ÒŒ „â:ƒ ˆGæ?€j uïxŠ ‚Oñ €n ‚yôOŠ ƒu÷[Š ‚Sûc€C O¾? ‡Jÿ>ƒ —	‚‡
œ ‚žA¿ z‚ €= ‚¢<€T '‚¥‚ ‚¦=€T  ‚©‡ Œ8‚¸=ƒ 1‚Äwƒ Œ(‚Æ*¬ L‚Ò| „‚ÓL” ƒd‚Ø ƒ p‚Ûf€J r‚Þƒ ¢‚à Š ‚Zƒ‚/* common & utility *//* client */
#include "client_mainlog_debug(log_debug(log_debug(log_error(city_name(pcity)removelog_test("show_city_desc(%s) pcx=%d->%d (%d) pcy=%d->%d (%d)", city_name(pcity)city_owner(pcity) == client.conn.playinglog_debug(log_test(clearclearunit_owner(aunit) == client.conn.playingfc_strdup(mapview_get_terrain_tooltip_text(ptile));
    item->info_text=fc_strdup(popup_info_text(ptile));
  }

  if (tile_city(ptile)) {
    struct city *pcity=tile_city(ptile);fc_strdup(mapview_get_city_tooltip_text(pcity));
    item->info_text = fc_fc_strdup(mapview_get_unit_tooltip_text(punit));
    item->info_text = fc_log_debug(log_debug(log_verbose(log_verbose(fc_log_error("move_unit command misformed");
      return;
    }

    for (i = 0; i < 8; i++) {
      if (fc_log_error(log_error("scroll command misformed");
      return;
    }
    if (!is_float(fact,&factor)) {
      log_error(log_error(log_error(log_verbose("action_callback() action '%s' requested", action);
  }fc_C_S_RUNNING > client_state()fc_snprintf(buffer, sizeof(buffer),
		"%d", client.conn.playingclient.conn.playing);
  } else if (strcmp(id, "population") == 0) {
      return population_to_text(civ_population(client.conn.playing));
  } else if (strcmp(id, "general") == 0) {
      fcclient.conn.playing)),
	      textyear(game.info.year),
	      client.conn.playing->economic.gold,
	      client.conn.playing->economic.tax,
	      client.conn.playing->economic.luxury,
	      client.conn.playingfcclient.conn.playing)),
	      textyear(game.info.year),
	      client.conn.playing->economic.gold,
	      client.conn.playing->economic.tax,
	      client.conn.playing->economic.luxury,
	      client.conn.playingdestroyfc_fc__route_here(punit)) {
      ADD("unit_trade_utype_fuel(unit_typefc_city_production_buy_gold_cost(pcity) <= client.conn.playing->economic.goldfc_log_error(ENDREP
DELTA 17042 98415 447
SVN  à'ã7` Æz €T Œ]Ç@€fc_snprintf(buf, sizeof(buf), _("Foreign Intelligence: %s Empire"),
                        struct city *pcity;

        switch (i) {
        case LABEL_RULER:
          fc_snprintf(buf, sizeof(buf), "%s %s",
                      ruler_title_translation(p), player_name(p));
          break;
        case LABEL_GOVERNMENT:
          sz_strlcpy(buf, government_name_for_player(p));
          break;
        case LABEL_CAPITAL:
          pcity = find_palace(p);
          /* TRANS: "unknown" location */
          sz_strlcpy(buf, (!pcity) ? _("(unknown)") : city_name(pcity));
          break;
        case LABEL_GOLD:
          fc_snprintf(buf, sizeof(buf), "%d", p->economic.gold);
          break;
        case LABEL_TAX:
          fc_snprintf(buf, sizeof(buf), "%d%%", p->economic.tax);
          break;
        case LABEL_SCIENCE:
          fc_snprintf(buf, sizeof(buf), "%d%%", p->economic.science);
          break;
        case LABEL_LUXURY:
          fc_snprintf(buf, sizeof(buf), "%d%%", p->economic.luxury);
          break;
        case LABEL_RESEARCHING:
          {
            struct player_research *research = get_player_research(p);

            switch (research->researching) {
            case A_UNKNOWN:
              /* TRANS: "Unknown" advance/technology */
              fc_snprintf(buf, sizeof(buf), _("(Unknown)"));
              break;
            case A_UNSET:
              /* TRANS: missing value */
              fc_snprintf(buf, sizeof(buf), _("(none)"));
              break;
            default:
              fc_snprintf(buf, sizeof(buf), "%s(%d/%d)",
                          advance_name_researching(p),
                          research->bulbs_researched,
                          total_bulbs_required(p));
              break;
            }
            break;
          }
        default:
          buf[0] = '\0';
          break;
        }

        if (buf[0] != '\0') {
          gtk_label_set_text(GTK_LABEL(pdialog->table_labels[i]), buf);
        }
      }
    }
  }
}

ENDREP
DELTA 17013 257 5779
SVN  „ç'„ë-AŠq ž' ¸ P‚ï@„ D³@ ‚?Ÿu‘ Ì¢(ƒ þ=î8€ƒM Kï‚ =üa‚ Ñ(þ €N ‡‚Ïu [‚×€K ƒ‚Ù €} ‚Ý » z‚ÞO ’"‚àIƒ …Q‚òm‚ „‚ø@Š „j‚üD€‚ „Aƒ‚}‚ Aƒ‡@  Ÿƒˆ‚ ™Iƒ§	­ –ƒÁƒ ‡ƒ×ƒ ƒgƒÞ+ƒ ‡3ƒâƒ kƒéI‚ ûqƒë6fc_rand_is_init()) {
    fc_srand(game.server.seed);
  }...
  srvarg.serveridfc_if (game.info.global_warming) {
    update_environmental_upset(S_POLLUTION, &game.info.heating,
                               &game.info.globalwarming,
                               &game.info.warminglevel, global_warming);
  }

  if (game.info.nuclear_winter) {
    update_environmental_upset(S_FALLOUT, &game.info.cooling,
                               &game.info.nuclearwinter,
                               &game.info.coolinglevel, nuclear_winter);
  }
fcfc%s(%d) from unaccepted connection %s.",
              packet_name(type), type,.(%d) from non-player connection %s.",
              packet_name(type), typeGot a packet of type %s(%d) in %s.",
                packet_name(type), type, server_states_name(S_S_OVER));
    } else {
      log_error("Got a packet of type %s(%d) outside %s.",
                packet_name(type), type, server_states_name(S_S_RUNNING)s(%d) from a dead player.",
              packet_name(type).fc_fc        fcfc_strcasecmp(player_name(other_player), name) == 0) {
        if (error_buf) {
          fc_snprintf(error_buf, bufsz,
                      _("Another player already has the name '%s'.  Please "
                        "choose another name."), name);
        }
        fc                                fcfc_snprintf(leader_name, sizeof(leader_name),fc_fc_fc_fc_fcENDREP
DELTA 17107 20550 3082
SVN  †  †  DO „Ý ‚ t„Ýƒ ¾J„íƒ †…«Pƒ ‡+…±bƒ A…¹ƒ —…ÆRƒ šx…Ýmƒ „…øg¸ ¢J…ý-fcfc_fc_fc_fc_fc_fc_fc_fc_strdup(_(p->legend));
  } else {
    pl->legend = fc_†  ÎÎ	‰ Î :
    logENDREP
DELTA 14370 4365886 5912
SVN  øø>z †N ‰ ¢f†C» ¬\©d† ŠMÖF‚ º*á‹ G™O— "‹> Œmžk† ‘ «^† »½fcintl.h"remove(windows_front_to_back, widget);
  widget_list_removeremovefcclear(copy)region_list_destroy(tmpremoveremoveENDREP
DELTA 1431 10490 4225
SVN  Ø4çQ2˜0 7 €X …R5€K MÂ ]–y€# LÃ – %ž&€Z LÃ  [ž€h ‰c ^Œ ~ªVž †o¬i¡ OÂ} ´/„ ƒFµD– ƒ¹€| ½‰ ¾€H …~À$š XÆ/Š  Ç‰ gÈ„ ƒ6Ê€. vË6€C „Íf¤ ‚Ñw€t @…@€‡ PÂ}€‚ @…@€
#ifdef HAVE_GETTIMEOFDAY
#include <sys/time.h>
#include <unistd.h>
#endif

#ifdef HAVE_FTIME
# include <sys/timeb.h>
#endif

#include "log.h"
#include "mem.h"
#include "shared.h"		/* TRUE, FALSE */
#include "supportif HAVE_FTIME
    struct timeb tp;
#else
    time_t t;
#endif
  } start;
};bool first = TRUE;

  if (first) {
    log_test("clock() returned -1, ignoring timer");
    first = FALSE;
  }
  t->use = TIMER_IGNORE;
}

#ifdef HAVE_GETTIMEOFDAYReport if gettimeofdaygettimeofday_failed(struct timer *t)
{
  static bool first = TRUE;

  if (first) {
    log_test("gettimeofday() returned -1, ignoring timer");
    first = FALSE;
  }
  t->use = TIMER_IGNORE;
}
#elif !defined HAVE_FTIMEbool first = TRUE;

  if (first) {
    log_test("time() returned -1, ignoring timer");
    first = FALSElog_verbose(!t) {
    t = (struct timer *)if (t != NULL) {
    free(t);
  }boolfc_assert_ret(NULL != fc_assert_ret(NULL != t);

  if (t->use == TIMER_IGNORE) {
    return;
  }
  if (t->state == TIMER_STARTED) {
    log_error((clock_t)NULL);
    if (ret == -1) {
      report_gettimeofday_failed(t);
      return;
    }
#elif defined HAVE_FTIME
    ftime(&t->start.tp);
#else
    t->start.t = time(NULL);
    if (t->start.t == (time_t)fc_assert_ret(NULL != t);
log_error((clock_t)NULLif defined HAVE_FTIME
    struct timeb now;

    ftime(&now);
    t->usec += 1000 * ((long)now.millitm - (long)t->start.tp.millitm);
    t->sec += now.time - t->start.tp.timep = now;
#else
    time_t now = time(NULL);
    if (now == (time_t)fc_assert_ret_val(NULL != t, -1.0);
Sleeps until the given number of microseconds have elapsed since the
  timer was started.  Leaves the timer running.
  Must be called with an active, running user timer.
  (If timer is broken or in wrong state, just sleep for entire interval.)
*******/
void usleep_since_timer_start(struct timer *t, long usec)
{
#ifdef HAVE_GETTIMEOFDAY
  int ret;
  struct timeval tv_now;
  long elapsed_usec;
  long wait_usec;

  fc_assert_ret(NULL != t);

  ret = gettimeofday(&tv_now, NULL);

  if ((ret == -1) ||
      (t->type != TIMER_USER) ||
      (t->use != TIMER_ACTIVE) ||
      (t->state != TIMER_STARTED)) {
    fc_usleep(usec);
    return;
  }

  elapsed_usec =
    (tv_now.tv_sec - t->start.tv.tv_sec) * N_USEC_PER_SEC +
    (tv_now.tv_usec - t->start.tv.tv_usec);
  wait_usec = usec - elapsed_usec;

  if (wait_usec > 0)
    fc_usleep(wait_usec);
#elif HAVE_FTIME
  struct timeb now;
  long elapsed_usec, wait_usec;

  ftime(&now);

  elapsed_usec = (now.time - t->start.tp.time) * N_USEC_PER_SEC
    + (now.millitm - t->start.tp.millitm);
  wait_usec = usec - elapsed_usec;

  if (wait_usec > 0) {
    fc_usleep(wait_usec);
  }
#else
  fc_usleep(usec);
#endifleep since timer started, then free it.
  This is intended to be useful for a simple one-off sleeping, eg:
  {
      struct timer *t = new_timer_start(TIMER_USER, TIMER_ACTIVE);
      ...do stuff...
      usleep_since_timer_start_free(t, 15000);
      ...continue...
  }
*******/
void usleep_since_timer_start_free(struct timer *t, long usec)
{
  usleep_since_timer_start(t, usec);
  free_timer(t);
}
ENDREP
DELTA 16929 150854 10005
SVN  ƒ¹<ƒ¹<OS ª^ ‚ ± ª`‚ N‚‰v IÜ0‚ OÝ{‚ zÞL‚ †nßH‚ ‚uæ8‚ Žqé/‚ ˆlø"€Z ‚H‚h‚ …B‚„2‚ ‚‚‰v‚ S‚Œ ‚  ‚ŒU‚ ƒ‚W‚ »‚d‚ ‰'‚Ìe‚ p‚Ö‚ ‚ ‚Ø ¶ `‚Ö? n‚Ý‘ ‚7‚Ü‚ l‚ÞN‚ :‚à<‚ <‚áx‚ <‚ã6‚ ‚v‚ót‚ ‚5‚öl‚ ‚f‚ù#‚ ½1‚üfcfcfcfcfcfcfcfcfc_snprintf(cBuf, sizeof(cBuf), _("Worklist of\n%s"), city_name(pCity));
  } else {
    fcfcfcfcfcfcfcfcfcfcfc_snprintf(cBuf, sizeof(cBuf), _("(%s)\n%d/%d %s\n%d  else {
	      fcfcfcfcfcfcfcfcfcENDREP
DELTA 17037 59 9369
SVN  ä>ä>
 “k ‚ ÐQ“mfcENDREP
DELTA 17042 2538 261
SVN  ÉAÉAA + ‚ ƒF-‚ „2’u‚ „)—)‚ ‚›T‚ „
[‚ n- j m£@‚ ¤¥/fcfcfcfcfcfc1fcENDREP
DELTA 17042 0 2510
SVN  ò*òf+‚ ¿ € ¿|Ž ƒ'Í† –_Ð-‚ ç€[ ‹Uèpƒ ýcôG#ifndef NDEBUG
      fc_fprintf(stderr, _("  -F, --Fatal [SIGNAL]\t"
                           "Raise a signal on failed assertion\n"));
#endif#ifndef NDEBUG#endiffcfc_snprintf(default_user_name, sizeof(default_user_name),
                  "player%d", fc_fc_ENDREP
DELTA 16285 39652 38091
SVN  ƒíFƒðˆ Â4 ‚ ‚Â6‚ Ÿ!ÄJ‚ …_ãm€q ê=‚ ëT‚ mìi€_ Xî5‚ @ï€o 5ñ>‚ yòu‚ cóp€^ }õ1€s Höx€M ë÷]‚ ‚zân‚ ‰qåj‚ ·Wï] Ó+‚§4€ í‚û
€‚ „ ƒé&fcfcfcfc_snprintf(buf[FOOD], sizeof(buf[FOOD]), "%2d (%+2d)",
	      pcity->prod[O_FOOD], pcity->surplus[O_FOOD]);
  fcfcfcfc_snprintf(buf[LUXURY], sizeof(buf[LUXURY]), "%2d      ",
	      pcity->prod[O_LUXURY]);

  fcfcfc_snprintf(buf[GROWTH], sizeof(buf[GROWTH]), _("blocked"));
  } else if (granaryturns == FC_INFINITY) {
    fcfcfcfc_snprintf(buf[WASTE], sizeof(buf[WASTE]), "%4d",
              pcity->waste[O_SHIELD]);
  fcfc_snprintf(buf[ILLNESS], sizeof(buf[ILLNESS]), " -.-");
  } else {
    /* illness is in tenth of percent */
    fcfloat)city_illness_calc(pcity, NULL, NULL, NULL, NULL)
                / 10.0fcfcfc_          if (canvas_to_city_pos(&tile_x, &tile_y,
                                 city_map_radius_sq_get(pdialog->pcity),
                                        if (canvas_to_city_pos(&tile_x, &tile_y,
                               city_map_radius_sq_get(pdialog->pcity)
                               x-pdialog->maph.x, y-pdialog->maph.y)) {
          city_toggle_worker(pdialog->pcity, tile_x, tile_y);
        ENDREP
DELTA 17101 710 2789
SVN  ‚½N‚¾dJ‰g » €w +»p‚ g½º ¾0€ƒd dÂw€‚c ×Æ0ƒ ‰a8€b Å¨Xƒ ‚]íiƒ ðH‚ ½iÿefc_snprintf(buf, bufsiz, _("The %s give %s"),
                nation_plural_for_player(pclause->from),
                fc                  city_name(pcity));
    } else {
      fcfc_snprintf(buf, bufsiz, _("The %s give %d gold"),
                nation_plural_for_player(pclause->from),
                pclause->value);
    break;
  case CLAUSE_MAP:
    fc_snprintf(buf, bufsiz, _("The %s give their worldmap"),
                nation_plural_for_player(pclause->from));
    break;
  case CLAUSE_SEAMAP:
    fc_snprintf(buf, bufsiz, _("The %s give their seamap"),
                nation_plural_for_player(pclause->from));
    break;
  case CLAUSE_CEASEFIRE:
    fcfc_snprintf(buf, bufsiz, _("The parties agree on a peace"));
    break;
  case CLAUSE_ALLIANCE:
    fc_snprintf(buf, bufsiz, _("The parties create an alliance"));
    break;
  case CLAUSE_VISION:
    fc_snprintf(buf, bufsiz, _("The %s give shared vision"),
                nation_plural_for_player(pclause->from));
    break;
  case CLAUSE_EMBASSY:
    fcfc_        fc_snprintf(pitem->descr, sizeof(pitem->descr), "%s (XX)", name);
      } else {
        fc_snprintf(pitem->descr, sizeof(pitem->descr),
                    "%s (%d)", name, cost);
      }
    } else {
      (void) fc_fc_fc_fcENDREP
DELTA 15901 3784 90
SVN  ¾I¿7)„K —# ƒ ‹—%€ƒ |¥€[ ‘O¦Uº ‚¸Oœ ƒ	ºeƒ Y½pfc_                (val[0][0] + val[1][0]) / 2 + fc_rand(step) - step / 2);
  set_midpoints((x0 + x1) / 2,  y1wrap,
                (val[0][1] + val[1][1]) / 2 + fc_rand(step) - step / 2);
  set_midpoints(x0, (y0 + y1)/2,
                (val[0][0] + val[0][1]) / 2 + fc_rand(step) - step / 2);
  set_midpoints(x1wrap,  (y0 + y1) / 2,
                (val[1][0] + val[1][1]) / 2 + fc_rand(step) - step / 2);                ((val[0][0] + val[0][1] + val[1][0] + val[1][1]) / 4
                 + fc_        /* set initial points */
        hmap(ptile) = fc_          hmap(ptile) -= fc_fc_ENDREP
DELTA 14427 113210 1192
SVN  ­J­pUP †> –  †=¢ ŠR‡P‚ u’$‚ 7”‚ v•T‚ ~—L‚ ~˜L‚ ™L‚ ‚)šT‚ Yœ‚ Z‚ ‚ž`‚ „q¡‚ ‡V¥t/* common & utility *//* client */
#include "client_mainfcfcfcfcfcfcfcfcfcfcfcfcENDREP
DELTA 15814 14340 957
SVN  ŒlŒm
 ‹V ƒ ‹Xfc_ENDREP
DELTA 17042 7523 798
SVN  ÒuÒ} ƒ	 ‹z ƒ Œ$‹|ƒ W˜"ƒ n™{ƒ rškƒ „›_ƒ +Ÿmƒ ,¡ƒ 3¢Hƒ ƒ£}¼ ‹§S ƒJ²h€ ƒu·L‚ ‰-»Cƒ …'Är‚ …bÊ‚ Ö0Ïƒ ‰B¦1ƒ ‚E¯uƒ E²<€} žz³{fc_fc_fc_fc_fc_fc_fc_fc_fc_fc_snprintf(buf, len, "%s %s [%s]", un.sysname, un.release, 
          fcfc_snprintf(buf, len, "%s %ld.%ld [%s]",
                osname, osvi.dwMajorVersion, osvi.dwMinorVersion, cpuname);
  }
#else
  fc_snprintf(buf, len,fcfc_fcfcfc_fc_fc_fc_strdup(version);
    pserver->state = fc_strdup(status);
    pserver->nplayers = atoi(players);
    pserver->message = fc_ENDREP
DELTA 14846 44694 4605
SVN  é@†  ‡L…²| …f €„U G ž WŒ@€f G €‰. A‹@€‚/ G €ƒs PŒ@€ƒ G €W PŒ@€‰ G €‰$ PŒ@€œj G  RŒ@€’7 G € RŒ@€‰ G £ RŒ@€¦v G ¥ RŒ@€ƒD G ¾ WŒ@€„  UÇ@€ WŒ@€† VÖ@¼ WŒ@€„x UÇ@€? WŒ@€ƒ$ UÇ@¶ WŒ@€† UÇ@€m `Œ@€‰1 uÇ@° WŒ@€8 UÇ@¾ WŒ@€„ UÇ@€{ WŒ@€„; UÇ@ª WŒ@€a UÇ@µ WŒ@€‹ VÇ@€ \Œ@€d VÇ@€W \Œ@€„5 UÇ@¹ WŒ@€z UÇ@€ WŒ@€‚ UÇ@® \Œ@€ VÇ@± \Œ@€k UÇ@€  \Œ@€3 UÇ@¸ WŒ@€x V¶@€` WŒ@€ƒ5 UÇ@€C YŒ>€6 UÇ@¶ WŒ@€d VÖ@€/ \Œ@€†# G €r WŒ@€½y UÇ@€ WŒ@€Ÿ UÇ@¬ \Œ@€‚ UÇ@€f WŒ@€‚J UÇ@€c WŒ@€ UÇ@« \Œ@€ UÇ@€
 \Œ@€†d G €y WŒ@€ƒ  UÇ@€G \Œ@€‚ UÇ@« WŒ@€p W¶?€B \Œ@€& W¥ € \Œ@€”s G €E \Œ@€¦ G €A \Œ@€ UÇ@€D WŒ@€r VÇ?¿ WŒ@€] XÖ@€e WŒ@€„ UÇ@€G WŒ@€p W¶?€C WŒ@€ UÇ@€I WŒ@€z UÇ@€e WŒ@€‚Y UÇ@€x \Œ@€l XÖ@€+ WŒ@€k VÖ@´ \Œ@€& UÇ@€R WŒ@€ UÇ@¯ WŒ@€k V¶@€7 WŒ@€ƒ UÇ@€P WŒ@€> UÇ@€c WŒ@€{ UÇ@ª \Œ@€‚R G ¿ \Œ@€ƒ G €@ \Œ@€ƒ UÇ@€B \Œ@€Ÿ; UÇ@€‚ \Œ@€±F G €b WŒ@€  UÇ@€ \Œ@€… UÇ@€j WŒ@€†c VÖ@® \Œ@€ UÇ@³ WŒ@€v UÇ@¹ WŒ@€ V¶@œ WŒ@€ƒA UÇ@€} WŒ@€Ÿq l’» D’<€œ UÇ@¾ XŒ?€t UÇ@€n WŒ@€y UÇ@€Blimits.h> /* USHRT_MAX */

#include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h>

/* utility */
#include "fcintl.h"
#include "hash.h"
#include "log.h"
#include "mem.h"

/* common */
#include "game.h"
#include "map.h"
#include "movement.h"
#include "tile.h"

/* client */
#include "client_main.h"
#include "editor.h"
#include "mapview_common.h"
#include "tilespec.h"

#include "canvas.h"
#include "gui_main.h"
#include "gui_stuff.h"
#include "plrdlg.h"

#include "editprop.h"


/* Forward declarations. */
struct objprop;
struct objbind;
struct property_page;
struct property_editor;
struct extviewer;

******
  Miscellaneous helpersGdkPixbuf *create_pixbuf_from_layers(struct tile *ptile,
                                            struct unit *punit,
                                            struct city *pcity,
                                            int *layers,
                                            int num_layers);
static GdkPixbuf *create_tile_pixbuf(struct tile *ptile);
static GdkPixbuf *create_unit_pixbuf(struct unit *punit);
static GdkPixbuf *create_city_pixbuf(struct city *pcity);

static void add_column(GtkWidget *view,
                       int col_id,
                       const char *name,
                       GType gtype,
                       bool editable,
                       bool is_radio,
                       GCallback edit_callback,
                       gpointer callback_userdata);

static int built_status_to_string(char *buf, int buflen,
                                  struct built_status *bs);

static bool can_create_unit_at_tile(struct tile *ptile);

static int get_next_unique_tag(void);
struct stored_tag {
  int tag;
  int count;
};

/* NB: If packet definitions change, be sure to
 * update objbind_pack_current_values!!! */
union packetdata {
  gpointer v_pointer;
  struct packet_edit_tile *tile;
  struct packet_edit_city *city;
  struct packet_edit_unit *unit;
  struct packet_edit_player *player;
  struct packet_edit_game *game;
};

/* Helpers for the OPID_TILE_VISION property. */
struct tile_vision_data {
  bv_player tile_known, tile_seen[V_COUNT];
};
const char *vision_layer_get_name(enum vision_layer);

#define PF_MAX_CLAUSES 16
#define PF_DISJUNCTION_SEPARATOR "|"
#define PF_CONJUNCTION_SEPARATOR "&"

struct pf_pattern {
  bool negate;
  char *text;
};

struct pf_conjunction {
  struct pf_pattern conjunction[PF_MAX_CLAUSES];
  int count;
};

struct property_filter {
  struct pf_conjunction disjunction[PF_MAX_CLAUSES];
  int count;
};

static struct property_filter *property_filter_new(const char *filter);
static bool property_filter_match(struct property_filter *pf,
                                  const struct objprop *op);
static void property_filter_free(struct property_filter *pf);


******
  Object type declarations.

  To add a new object type:
  1. Add a value in enum editor_object_type in client/editor.h.
  2. Add a string name to objtype_get_name.
  3. Add code in objtype_get_id_from_object.
  4. Add code in objtype_get_object_from_id.
  5. Add a case handler in objtype_is_conserved, and if
     the object type is not conserved, then also in
     objbind_request_destroy_object and property_page_create_objects.
  6. Add an if-block in objbind_get_value_from_object.
  7. Add an if-block in objbind_get_allowed_value_span.
  9. Add a case handler in property_page_setup_objprops.
  10. Add a case handler in property_page_add_objbinds_from_tile
      if applicable.

  Furthermore, if the object type is to be editable:
  11. Define its edit packet in common/packets.def.
  12. Add the packet handler in server/edithand.c.
  13. Add its edit packet type to union packetdata.
  14. Add an if-block in objbind_pack_current_values.
  15. Add an if-block in objbind_pack_modified_value.
  16. Add code in property_page_new_packet.
  17. Add code in property_page_send_packet.
  18. Add calls to editgui_notify_object_changed in
      client/packhand.c or where applicable.

***********/

/* OBJTYPE_* enum values defined in client/editor.h */

static const char *objtype_get_name(int objtype);
static int objtype_get_id_from_object(int objtype, gpointer object);
static gpointer objtype_get_object_from_id(int objtype, int id);
static bool objtype_is_conserved(int objtype);


******
  Value type declarations.

  To add a new value type:
  1. Add a value in enum value_types.
  2. Add its field in union propval_data.
  3. Add a case handler in valtype_get_name.
  4. Add a case handler in propval_copy if needed.
  5. Add a case handler in propval_free if needed.
  6. Add a case handler in propval_equal if needed.
  7. Add a case handler in objprop_get_gtype.
  8. Add a case handler in property_page_set_store_value.
  9. Add a case handler in propval_as_string if neededenum value_types {
  VALTYPE_NONE = 0,
  VALTYPE_INT,
  VALTYPE_BOOL,
  VALTYPE_STRING,
  VALTYPE_PIXBUF,
  VALTYPE_BUILT_ARRAY,        /* struct built_status[B_LAST] */
  VALTYPE_INVENTIONS_ARRAY,   /* bool[A_LAST] */
  VALTYPE_BV_SPECIAL,
  VALTYPE_BV_BASES,
  VALTYPE_NATION,
  VALTYPE_TILE_VISION_DATA    /* struct tile_vision_data */
};

static const char *valtype_get_name(int valtype);


******
  Propstate and propval declarations.

  To add a new member to union propval_data, see the steps for adding a
  new value type above.

  New property values are "constructed" by objbind_get_value_from_objectunion propval_data {
  gpointer v_pointer;
  int v_int;
  bool v_bool;
  char *v_string;
  const char *v_const_string;
  GdkPixbuf *v_pixbuf;
  struct built_status *v_built;
  bv_special v_bv_special;
  bv_bases v_bv_bases;
  struct nation_type *v_nation;
  bool *v_inventions;
  struct tile_vision_data *v_tile_vision;
};

struct propval {
  union propval_data data;
  int valtype;
  bool must_free;
};

static void propval_free(struct propval *pv);
static void propval_free_data(struct propval *pv);
static struct propval *propval_copy(struct propval *pv);
static bool propval_equal(struct propval *pva, struct propval *pvb);
static int propval_as_string(struct propval *pv, char *buf, int buflen);

struct propstate {
  int property_id;
  struct propval *property_value;
};

static struct propstate *propstate_new(struct objprop *op,
                                       struct propval *pv);
static void propstate_free(struct propstate *ps);
static void propstate_clear_value(struct propstate *ps);
static void propstate_set_value(struct propstate *ps,
                                struct propval *pv);
static struct propval *propstate_get_value(struct propstate *ps);


******
  Objprop declarations.

  To add a new object property:
  1. Add a value in enum object_property_ids (grouped by
     object type).
  2. Define the property in property_page_setup_objprops.
  3. Add a case handler in objbind_get_value_from_object
     in the appropriate object type block.
  4. Add a case handler in objprop_setup_widget.
  5. Add a case handler in objprop_refresh_widget.

  Furthermore, if the property is editable:
  5. Add a field for this property in the edit
     packet for this object type in common/packets.def.
  6. Add a case handler in objbind_pack_modified_value.
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  !!! 7. Add code to set the packet field in  !!!
  !!!    objbind_pack_current_values.         !!!
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  8. Add code to handle changes in the packet field in
     server/edithand.c handle_edit_<objtype>.

  If the property makes use of an extviewer:
  9. Handle widget creation in extviewer_new.
  10. Handle refresh in extviewer_refresh_widgets.
  11. Handle clear in extviewer_clear_widgets.
  12. Handle any signal callbacks (e.g. toggled) if needed.

  TODO: Add more object propertiesenum object_property_ids {
  OPID_TILE_IMAGE,
  OPID_TILE_X,
  OPID_TILE_Y,
  OPID_TILE_NAT_X,
  OPID_TILE_NAT_Y,
  OPID_TILE_CONTINENT,
  OPID_TILE_ADDRESS,
  OPID_TILE_TERRAIN,
  OPID_TILE_INDEX,
  OPID_TILE_XY,
  OPID_TILE_RESOURCE,
  OPID_TILE_SPECIALS,
  OPID_TILE_BASES,
  OPID_TILE_VISION, /* tile_known and tile_seen */

  OPID_UNIT_IMAGE,
  OPID_UNIT_ADDRESS,
  OPID_UNIT_TYPE,
  OPID_UNIT_ID,
  OPID_UNIT_XY,
  OPID_UNIT_MOVES_LEFT,
  OPID_UNIT_FUEL,
  OPID_UNIT_MOVED,
  OPID_UNIT_DONE_MOVING,
  OPID_UNIT_HP,
  OPID_UNIT_VETERAN,

  OPID_CITY_IMAGE,
  OPID_CITY_NAME,
  OPID_CITY_ADDRESS,
  OPID_CITY_ID,
  OPID_CITY_XY,
  OPID_CITY_SIZE,
  OPID_CITY_BUILDINGS,
  OPID_CITY_FOOD_STOCK,
  OPID_CITY_SHIELD_STOCK,

  OPID_PLAYER_NAME,
  OPID_PLAYER_NATION,
  OPID_PLAYER_ADDRESS,
  OPID_PLAYER_INVENTIONS,
  OPID_PLAYER_GOLD,

  OPID_GAME_YEAR,
  OPID_GAME_SCENARIO,
  OPID_GAME_SCENARIO_NAME,
  OPID_GAME_SCENARIO_DESC,
  OPID_GAME_SCENARIO_PLAYERS
};

enum object_property_flags {
  OPF_NO_FLAGS    = 0,
  OPF_EDITABLE    = 1<<0,
  OPF_IN_LISTVIEW = 1<<1,
  OPF_HAS_WIDGET  = 1<<2
};

struct objprop {
  int id;
  const char *name;
  int flags;
  int valtype;
  int column_id;
  GtkTreeViewColumn *view_column;
  GtkWidget *widget;
  struct extviewer *extviewer;
  struct property_page *parent_page;
};

static struct objprop *objprop_new(int id,
                                   const char *name,
                                   int flags,
                                   int valtype,
                                   struct property_page *parent);
static int objprop_get_id(const struct objprop *op);
static const char *objprop_get_name(const struct objprop *op);
static int objprop_get_valtype(const struct objprop *op);
static struct property_page *objprop_get_property_page(const struct objprop *op);

static bool objprop_show_in_listview(const struct objprop *op);
static bool objprop_is_sortable(const struct objprop *op);
static bool objprop_is_readonly(const struct objprop *op);
static bool objprop_has_widget(const struct objprop *op);

static GType objprop_get_gtype(const struct objprop *op);
static const char *objprop_get_attribute_type_string(const struct objprop *op);
static void objprop_set_column_id(struct objprop *op, int col_id);
static int objprop_get_column_id(const struct objprop *op);
static void objprop_set_treeview_column(struct objprop *op,
                                        GtkTreeViewColumn *col);
static GtkTreeViewColumn *objprop_get_treeview_column(const struct objprop *op);
static GtkCellRenderer *objprop_create_cell_renderer(const struct objprop *op);

static void objprop_setup_widget(struct objprop *op);
static GtkWidget *objprop_get_widget(struct objprop *op);
static void objprop_set_child_widget(struct objprop *op,
                                     const char *widget_name,
                                     GtkWidget *widget);
static GtkWidget *objprop_get_child_widget(struct objprop *op,
                                           const char *widget_name);
static void objprop_set_extviewer(struct objprop *op,
                                  struct extviewer *ev);
static struct extviewer *objprop_get_extviewer(struct objprop *op);
static void objprop_refresh_widget(struct objprop *op,
                                   struct objbind *ob);
static void objprop_widget_entry_changed(GtkEntry *entry, gpointer userdata);
static void objprop_widget_spin_button_changed(GtkSpinButton *spin,
                                               gpointer userdata);
static void objprop_widget_toggle_button_changed(GtkToggleButton *button,
                                                 gpointer userdata);


******
  Objbind declarationsruct objbind {
  int objtype;
  int object_id;
  struct property_page *parent_property_page;
  struct hash_table *propstate_table;
  GtkTreeRowReference *rowref;
};

static struct objbind *objbind_new(int objtype,
                                   gpointer object);
static void objbind_free(struct objbind *ob);
static int objbind_get_objtype(const struct objbind *ob);
static void objbind_bind_properties(struct objbind *ob,
                                    struct property_page *pp);
static gpointer objbind_get_object(struct objbind *ob);
static int objbind_get_object_id(struct objbind *ob);
static void objbind_request_destroy_object(struct objbind *ob);
static struct propval *objbind_get_value_from_object(struct objbind *ob,
                                                     struct objprop *op);
static bool objbind_get_allowed_value_span(struct objbind *ob,
                                           struct objprop *op,
                                           double *pmin,
                                           double *pmax,
                                           double *pstep,
                                           double *pbig_step);
static void objbind_set_modified_value(struct objbind *ob,
                                       struct objprop *op,
                                       struct propval *pv);
static struct propval *objbind_get_modified_value(struct objbind *ob,
                                                  struct objprop *op);
static void objbind_clear_modified_value(struct objbind *ob,
                                         struct objprop *op);
static bool objbind_property_is_modified(struct objbind *ob,
                                         struct objprop *op);
static bool objbind_has_modified_properties(struct objbind *ob);
static void objbind_clear_all_modified_values(struct objbind *ob);
static void objbind_pack_current_values(struct objbind *ob,
                                        union packetdata packet);
static void objbind_pack_modified_value(struct objbind *ob,
                                        struct objprop *op,
                                        union packetdata packet);
static void objbind_set_rowref(struct objbind *ob,
                               GtkTreeRowReference *rr);
static GtkTreeRowReference *objbind_get_rowref(struct objbind *ob);


******
  Extended property viewer declarations. This is a set of widgets used
  for viewing and/or editing properties with complex values (e.g. arrays)ruct extviewer {
  struct objprop *objprop;
  struct propval *pv_cached;

  GtkWidget *panel_widget;
  GtkWidget *panel_label;
  GtkWidget *panel_button;
  GtkWidget *panel_image;

  GtkWidget *view_widget;
  GtkWidget *view_label;

  GtkListStore *store;
  GtkTextBuffer *textbuf;
};

static struct extviewer *extviewer_new(struct objprop *op);
static struct objprop *extviewer_get_objprop(struct extviewer *ev);
static GtkWidget *extviewer_get_panel_widget(struct extviewer *ev);
static GtkWidget *extviewer_get_view_widget(struct extviewer *ev);
static void extviewer_refresh_widgets(struct extviewer *ev,
                                      struct propval *pv);
static void extviewer_clear_widgets(struct extviewer *ev);
static void extviewer_panel_button_clicked(GtkButton *button,
                                           gpointer userdata);
static void extviewer_view_cell_toggled(GtkCellRendererToggle *cell,
                                        gchar *path,
                                        gpointer userdata);
static void extviewer_textbuf_changed(GtkTextBuffer *textbuf,
                                      gpointer userdata);


******
  Property page declarationsruct property_page {
  int objtype;

  GtkWidget *widget;
  GtkListStore *object_store;
  GtkWidget *object_view;
  GtkWidget *extviewer_notebook;
  GtkTooltips *tooltips;

  struct property_editor *pe_parent;

  struct hash_table *objprop_table;
  struct hash_table *objbind_table;
  struct hash_table *tag_table;

  struct objbind *focused_objbind;
};

static struct property_page *
property_page_new(int objtype, struct property_editor *parent);
static void property_page_setup_objprops(struct property_page *pp);
static const char *property_page_get_name(const struct property_page *pp);
static int property_page_get_objtype(const struct property_page *pp);
static void property_page_load_tiles(struct property_page *pp,
                                     const struct tile_list *tiles);
static void property_page_add_objbinds_from_tile(struct property_page *pp,
                                                 const struct tile *ptile);
static int property_page_get_num_objbinds(const struct property_page *pp);
static void property_page_clear_objbinds(struct property_page *pp);
static void property_page_add_objbind(struct property_page *pp,
                                      gpointer object_data);
static void property_page_fill_widgets(struct property_page *pp);
static struct objbind *
property_page_get_focused_objbind(struct property_page *pp);
static void property_page_set_focused_objbind(struct property_page *pp,
                                              struct objbind *ob);
static struct objbind *property_page_get_objbind(struct property_page *pp,
                                                 int object_id);
static void property_page_selection_changed(GtkTreeSelection *sel,
                                            gpointer userdata);
static gboolean property_page_selection_func(GtkTreeSelection *sel,
                                             GtkTreeModel *model,
                                             GtkTreePath *path,
                                             gboolean currently_selected,
                                             gpointer data);
static void property_page_quick_find_entry_changed(GtkWidget *entry,
                                                   gpointer userdata);
static void property_page_change_value(struct property_page *pp,
                                       struct objprop *op,
                                       struct propval *pv);
static void property_page_send_values(struct property_page *pp);
static void property_page_reset_objbinds(struct property_page *pp);
static void property_page_destroy_objects(struct property_page *pp);
static void property_page_create_objects(struct property_page *pp,
                                         struct tile_list *hint_tiles);
static union packetdata property_page_new_packet(struct property_page *pp);
static void property_page_send_packet(struct property_page *pp,
                                      union packetdata packet);
static void property_page_free_packet(struct property_page *pp,
                                      union packetdata packet);
static void property_page_object_changed(struct property_page *pp,
                                         int object_id,
                                         bool remove);
static void property_page_object_created(struct property_page *pp,
                                         int tag, int object_id);
static void property_page_add_extviewer(struct property_page *pp,
                                        struct extviewer *ev);
static void property_page_show_extviewer(struct property_page *pp,
                                         struct extviewer *ev);
static void property_page_store_creation_tag(struct property_page *pp,
                                             int tag, int count);
static void property_page_remove_creation_tag(struct property_page *pp,
                                              int tag);
static bool property_page_tag_is_known(struct property_page *pp, int tag);
static void property_page_clear_tags(struct property_page *pp);
static void property_page_apply_button_clicked(GtkButton *button,
                                               gpointer userdata);
static void property_page_refresh_button_clicked(GtkButton *button,
                                                 gpointer userdata);
static void property_page_create_button_clicked(GtkButton *button,
                                                gpointer userdata);
static void property_page_destroy_button_clicked(GtkButton *button,
                                                 gpointer userdata);


#define property_page_objprop_iterate(ARG_pp, NAME_op)\
  hash_values_iterate((ARG_pp)->objprop_table, NAME_op)
#define property_page_objprop_iterate_end hash_values_iterate_end

#define property_page_objbind_iterate(ARG_pp, NAME_ob)\
  hash_values_iterate((ARG_pp)->objbind_table, NAME_ob)
#define property_page_objbind_iterate_end hash_values_iterate_end


******
  Property editor declarationsruct property_editor {
  GtkWidget *widget;
  GtkWidget *notebook;

  struct property_page *property_pages[NUM_OBJTYPES];
};

static struct property_editor *property_editor_new(void);
static bool property_editor_add_page(struct property_editor *pe,
                                     int objtype);
static struct property_page *
property_editor_get_page(struct property_editor *pe, int objtype);

static struct property_editor *the_property_editor;


******
  Returns the translated name for the given object typeconst char *objtype_get_name(int objtype)
{
  switch (objtype) {

  case OBJTYPE_TILE:
    return _("Tile");
    break;

  case OBJTYPE_UNIT:
    return _("Unit");
    break;

  case OBJTYPE_CITY:
    return _("City");
    break;

  case OBJTYPE_PLAYER:
    return _("Player");
    break;

  case OBJTYPE_GAME:
    return Q_("?play:Game");
    break;

  default:
    log_error("Unhandled request to get name of object type %d "
              "in objtype_get_name().", objtype);
    break;
  }

  return "Unknown"Returns the unique identifier value from the given object, assuming it
  is of the 'objtype' object type. Valid IDs are always greater than zeroint objtype_get_id_from_object(int objtype, gpointer object)
{
  struct tile *ptile;
  struct unit *punit;
  struct city *pcity;
  struct player *pplayer;
  int id = 0;

  switch (objtype) {

  case OBJTYPE_TILE:
    ptile = object;
    id = tile_index(ptile);
    break;
    
  case OBJTYPE_UNIT:
    punit = object;
    id = punit->id;
    break;
    
  case OBJTYPE_CITY:
    pcity = object;
    id = pcity->id;
    break;

  case OBJTYPE_PLAYER:
    pplayer = object;
    id = player_number(pplayer);
    break;

  case OBJTYPE_GAME:
    id = 1;
    break;

  default:
    log_error("Unhandled request to get object ID from "
              "object %p of type %d (%s) in objtype_get_id_from_object().",
              object, objtype, objtype_get_name(objtype));
    break;
  }

  return iGet the object of type 'objtype' uniquely identified by 'id'gpointer objtype_get_object_from_id(int objtype, int id)
{
  switch (objtype) {
  case OBJTYPE_TILE:
    return index_to_tile(id);
    break;
  case OBJTYPE_UNIT:
    return game_find_unit_by_number(id);
    break;
  case OBJTYPE_CITY:
    return game_find_city_by_number(id);
    break;
  case OBJTYPE_PLAYER:
    return valid_player_by_number(id);
    break;
  case OBJTYPE_GAME:
    return &game;
    break;
  default:
    log_error("Unhandled request to get object of type %d (%s) "
              "with ID %d in objtype_get_object_from_id().",
              objtype, objtype_get_name(objtype), id);
    break;
  }

  return NULLReturns TRUE if it does not make sense for the object of the given type to
  be created and destroyed (e.g. tiles, game), as opposed to those that can
  be (e.g. units, cities, players, etc.)bool objtype_is_conserved(int objtype)
{
  switch (objtype) {
  case OBJTYPE_TILE:
  case OBJTYPE_GAME:
    return TRUE;
    break;
  case OBJTYPE_UNIT:
  case OBJTYPE_CITY:
  case OBJTYPE_PLAYER:
    return FALSE;
    break;
  default:
    log_error("Unhandled request for object type "
              "%d (%s) in objtype_is_conserved().",
              objtype, objtype_get_name(objtype));
    break;
  }

  return TRUEReturns the untranslated name for the given value typeconst char *valtype_get_name(int valtype)
{
  switch (valtype) {
  case VALTYPE_NONE:
    return "none";
    break;
  case VALTYPE_STRING:
    return "string";
    break;
  case VALTYPE_INT:
    return "int";
    break;
  case VALTYPE_BOOL:
    return "bool";
    break;
  case VALTYPE_PIXBUF:
    return "pixbuf";
    break;
  case VALTYPE_BUILT_ARRAY:
    return "struct built_status[B_LAST]";
    break;
  case VALTYPE_INVENTIONS_ARRAY:
    return "bool[A_LAST]";
    break;
  case VALTYPE_BV_SPECIAL:
    return "bv_special";
    break;
  case VALTYPE_BV_BASES:
    return "bv_bases";
    break;
  case VALTYPE_NATION:
    return "nation";
    break;
  case VALTYPE_TILE_VISION_DATA:
    return "struct tile_vision_data";
    break;
  default:
    break;
  }
  return NULLConvenience function to add a column to a GtkTreeView. Used for the
  view widget creation in extviewer_new()column(GtkWidget *view,
                       int col_id,
                       const char *name,
                       GType gtype,
                       bool editable,
                       bool is_radio,
                       GCallback edit_callback,
                       gpointer userdata)
{
  GtkCellRenderer *cell;
  GtkTreeViewColumn *col;
  const char *attr = NULL;

  if (gtype == G_TYPE_BOOLEAN) {
    cell = gtk_cell_renderer_toggle_new();
    gtk_cell_renderer_toggle_set_radio(GTK_CELL_RENDERER_TOGGLE(cell),
                                       is_radio);
    if (editable) {
      g_signal_connect(cell, "toggled", edit_callback, userdata);
    }
    attr = "active";
  } else if (gtype == GDK_TYPE_PIXBUF) {
    cell = gtk_cell_renderer_pixbuf_new();
    attr = "pixbuf";
  } else {
    cell = gtk_cell_renderer_text_new();
    if (editable) {
      g_object_set(cell, "editable", TRUE, NULL);
      g_signal_connect(cell, "edited", edit_callback, userdata);
    }
    attr = "text";
  }

  col = gtk_tree_view_column_new_with_attributes(name, cell,
                                                 attr, col_id, NULL);
  gtk_tree_view_append_column(GTK_TREE_VIEW(view), col)short string representation of the given
  valueint propval_as_string(struct propval *pv, char *buf, int buflen)
{
  int id, ret = 0, count = 0;
  int great_wonder_count = 0;
  int small_wonder_count = 0;
  int building_count = 0;

  if (!pv || buflen < 1) {
    return 0;
  }

  switch (pv->valtype) {

  case VALTYPE_BUILT_ARRAY:
    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." */
    ret = fc_snprintf(buf, buflen, _("%db %ds %dW"),
                      building_count, small_wonder_count,
                      great_wonder_count);
    break;

  case VALTYPE_INVENTIONS_ARRAY:
    advance_index_iterate(A_FIRST, tech) {
      if (pv->data.v_inventions[tech]) {
        count++;
      }
    } advance_index_iterate_end;
    /* TRANS: "Number of technologies known". */
    ret = fc_snprintf(buf, buflen, _("%d known"), count);
    break;

  case VALTYPE_BV_SPECIAL:
    tile_special_type_iterate(spe) {
      if (BV_ISSET(pv->data.v_bv_special, spe)) {
        count++;
      }
    } tile_special_type_iterate_end;
    /* TRANS: "The number of terrain specials (e.g. road,
     * rail, hut, etc.) present on a tile." */
    ret = fc_snprintf(buf, buflen, _("%d present"), count);
    break;

  case VALTYPE_BV_BASES:
    base_type_iterate(pbase) {
      if (BV_ISSET(pv->data.v_bv_bases, base_number(pbase))) {
        count++;
      }
    } base_type_iterate_end;
    ret = fc_snprintf(buf, buflen, _("%d present"), count);
    break;

  case VALTYPE_STRING:
    /* Assume it is a very long string. */
    count = strlen(pv->data.v_const_string);
    ret = fc_snprintf(buf, buflen, PL_("%d byte", "%d bytes", count),
                      count);
    break;

  default:
    buf[0] = '\0';
    break;
  }

  return retConvert the built_status information to a user viewable stringint built_status_to_string(char *buf, int buflen,
                                  struct built_status *bs)
{
  int ret, turn_built;

  turn_built = bs->turn;

  if (turn_built == I_NEVER) {
    /* TRANS: Improvement never built. */
    ret = fc_snprintf(buf, buflen, "%s", _("(never)"));
  } else if (turn_built == I_DESTROYED) {
    /* TRANS: Improvement was destroyed. */
    ret = fc_snprintf(buf, buflen, "%s", _("(destroyed)"));
  } else {
    ret = fc_snprintf(buf, buflen, "%d", turn_built);
  }

  return retReturns TRUE if a unit can be created at the given tile based on the
  state of the editor (see editor_create_unit_virtual)bool can_create_unit_at_tile(struct tile *ptile)
{
  struct unit *vunit;
  struct city *pcity;
  struct player *pplayer;
  bool ret;

  if (!ptile) {
    return FALSE;
  }

  vunit = editor_create_unit_virtual();
  if (!vunit) {
    return FALSE;
  }

  pcity = tile_city(ptile);
  pplayer = unit_owner(vunit);

  ret = (can_unit_exist_at_tile(vunit, ptile)
         && !is_non_allied_unit_tile(ptile, pplayer)
         && (pcity == NULL
             || pplayers_allied(city_owner(pcity),
                                unit_owner(vunit))));
  free(vunit);

  return retReturn the next tag number in the sequenceint get_next_unique_tag(void)
{
  static int tag_series = 0;

  tag_series++;
  return tag_seriesReturn a newly allocated deep copy of the given valuestruct propval *propval_copy(struct propval *pv)
{
  struct propval *pv_copy;
  size_t size;

  if (!pv) {
    return NULL;
  }

  pv_copy = fc_calloc(1, sizeof(*pv));
  pv_copy->valtype = pv->valtype;

  switch (pv->valtype) {
  case VALTYPE_STRING:
    pv_copy->data.v_string = fc_strdup(pv->data.v_string);
    pv_copy->must_free = TRUE;
    break;
  case VALTYPE_PIXBUF:
    g_object_ref(pv->data.v_pixbuf);
    pv_copy->data.v_pixbuf = pv->data.v_pixbuf;
    pv_copy->must_free = TRUE;
    break;
  case VALTYPE_BUILT_ARRAY:
    size = B_LAST * sizeof(struct built_status);
    pv_copy->data.v_pointer = fc_malloc(size);
    memcpy(pv_copy->data.v_pointer, pv->data.v_pointer, size);
    pv_copy->must_free = TRUE;
    break;
  case VALTYPE_INVENTIONS_ARRAY:
    size = A_LAST * sizeof(bool);
    pv_copy->data.v_pointer = fc_malloc(size);
    memcpy(pv_copy->data.v_pointer, pv->data.v_pointer, size);
    pv_copy->must_free = TRUE;
    break;
  case VALTYPE_TILE_VISION_DATA:
    size = sizeof(struct tile_vision_data);
    pv_copy->data.v_tile_vision = fc_malloc(size);
    pv_copy->data.v_tile_vision->tile_known
      = pv->data.v_tile_vision->tile_known;
    vision_layer_iterate(v) {
      pv_copy->data.v_tile_vision->tile_seen[v]
        = pv->data.v_tile_vision->tile_seen[v];
    } vision_layer_iterate_end;
    pv_copy->must_free = TRUE;
    break;
  default:
    pv_copy->data = pv->data;
    break;
  }

  return pv_copyree all allocated memory used by this property value, including calling
  the appropriate free function on the internal data according to its typepropval_free(struct propval *pv)
{
  if (!pv) {
    return;
  }

  propval_free_data(pv);
  free(pv)rees the internal data held by the propval, without freeing the propval
  struct itselfpropval_free_data(struct propval *pv)
{
  if (!pv || !pv->must_free) {
    return;
  }

  switch (pv->valtype) {
  case VALTYPE_PIXBUF:
    g_object_unref(pv->data.v_pixbuf);
    break;
  case VALTYPE_STRING:
  case VALTYPE_BUILT_ARRAY:
  case VALTYPE_INVENTIONS_ARRAY:
  case VALTYPE_TILE_VISION_DATA:
    free(pv->data.v_pointer);
    break;
  default:
    log_error("Unhandled request to free data %p "
              "(type %s) in propval_free_data().",
              pv->data.v_pointer, valtype_get_name(pv->valtype));
    break;
  }
  pv->data.v_pointer = NULLReturns TRUE if the two values are equal, in a deep sensebool propval_equal(struct propval *pva,
                          struct propval *pvb)
{
  if (!pva || !pvb) {
    return pva == pvb;
  }

  if (pva->valtype != pvb->valtype) {
    return FALSE;
  }

  switch (pva->valtype) {
  case VALTYPE_STRING:
    if (pva->data.v_const_string && pvb->data.v_const_string) {
      return 0 == strcmp(pva->data.v_const_string,
                         pvb->data.v_const_string);
    }
    break;
  case VALTYPE_BUILT_ARRAY:
    if (pva->data.v_pointer == pvb->data.v_pointer
        || !pva->data.v_pointer || !pvb->data.v_pointer) {
      break;
    }
    improvement_iterate(pimprove) {
      int id, vatb, vbtb;
      id = improvement_index(pimprove);
      vatb = pva->data.v_built[id].turn;
      vbtb = pvb->data.v_built[id].turn;
      if (vatb < 0 && vbtb < 0) {
        continue;
      }
      if (vatb != vbtb) {
        return FALSE;
      }
    } improvement_iterate_end;
    return TRUE;
    break;
  case VALTYPE_INVENTIONS_ARRAY:
    if (pva->data.v_pointer == pvb->data.v_pointer
        || !pva->data.v_pointer || !pvb->data.v_pointer) {
      break;
    }
    advance_index_iterate(A_FIRST, tech) {
      if (pva->data.v_inventions[tech] != pvb->data.v_inventions[tech]) {
        return FALSE;
      }
    } advance_index_iterate_end;
    return TRUE;
    break;
  case VALTYPE_BV_SPECIAL:
    return BV_ARE_EQUAL(pva->data.v_bv_special, pvb->data.v_bv_special);
    break;
  case VALTYPE_BV_BASES:
    return BV_ARE_EQUAL(pva->data.v_bv_bases, pvb->data.v_bv_bases);
    break;
  case VALTYPE_TILE_VISION_DATA:
    if (!BV_ARE_EQUAL(pva->data.v_tile_vision->tile_known,
                      pvb->data.v_tile_vision->tile_known)) {
      return FALSE;
    }
    vision_layer_iterate(v) {
      if (!BV_ARE_EQUAL(pva->data.v_tile_vision->tile_seen[v],
                        pvb->data.v_tile_vision->tile_seen[v])) {
        return FALSE;
      }
    } vision_layer_iterate_end;
    return TRUE;
    break;
  default:
    break;
  }

  return pva->data.v_pointer == pvb->data.v_pointerCreate a new "property state" record. It keeps track of the modified value
  of a property bound to an object.

  NB: Does NOT make a copy of 'pv'struct propstate *propstate_new(struct objprop *op,
                                       struct propval *pv)
{
  struct propstate *ps;

  if (!op) {
    return NULL;
  }

  ps = fc_calloc(1, sizeof(*ps));
  ps->property_id = objprop_get_id(op);
  ps->property_value = pv;

  return psRemoves the stored value, freeing it if neededpropstate_clear_value(struct propstate *ps)
{
  if (!ps) {
    return;
  }

  propval_free(ps->property_value);
  ps->property_value = NULLree a property state and any associated resourcespropstate_free(struct propstate *ps)
{
  if (!ps) {
    return;
  }
  propstate_clear_value(ps);
  free(ps)Replace the stored property value with a new one. The old value will
  be freed if needed.
  
  NB: Does NOT make a copy of 'pv'propstate_set_value(struct propstate *ps,
                                struct propval *pv)
{
  if (!ps) {
    return;
  }
  propstate_clear_value(ps);
  ps->property_value = pvReturns the stored value.

  NB: NOT a copy of the valuestruct propval *propstate_get_value(struct propstate *ps)
{
  if (!ps) {
    return NULL;
  }
  return ps->property_valuCreate a new object "bind". It serves to bind a set of object properties
  to an object instancestruct objbind *objbind_new(int objtype, gpointer object)
{
  struct objbind *ob;
  int id;

  if (object == NULL) {
    return NULL;
  }

  id = objtype_get_id_from_object(objtype, object);

  ob = fc_calloc(1, sizeof(*ob));
  ob->object_id = id;
  ob->objtype = objtype;
  ob->propstate_table = hash_new_full(hash_fval_keyval, hash_fcmp_keyval,
                                      NULL, (hash_free_fn_t) propstate_free);

  return obReturns the bound object, if it still "exists". Returns NULL on errgpointer objbind_get_object(struct objbind *ob)
{
  int id;
  if (!ob) {
    return NULL;
  }

  id = objbind_get_object_id(ob);

  return objtype_get_object_from_id(ob->objtype, id)Returns the ID of the bound object, or zero if invalidint objbind_get_object_id(struct objbind *ob)
{
  if (!ob) {
    return 0;
  }
  return ob->object_iSends a request to the server to have the bound object erased from
  existence. Only makes sense for object types for which the function
  objtype_is_conserved() returns FALSEobjbind_request_destroy_object(struct objbind *ob)
{
  int objtype, id;
  struct connection *my_conn = &client.conn;

  if (!ob) {
    return;
  }

  objtype = objbind_get_objtype(ob);
  if (objtype_is_conserved(objtype)) {
    return;
  }

  id = objbind_get_object_id(ob);

  switch (objtype) {
  case OBJTYPE_UNIT:
    dsend_packet_edit_unit_remove_by_id(my_conn, id);
    break;
  case OBJTYPE_CITY:
    dsend_packet_edit_city_remove(my_conn, id);
    break;
  case OBJTYPE_PLAYER:
    dsend_packet_edit_player_remove(my_conn, id);
    break;
  default:
    log_error("Unhandled request to destroy object %p (ID %d) "
              "of type %d (%s) in objbind_request_destroy_object().",
              objbind_get_object(ob), id, objtype,
              objtype_get_name(objtype));
    break;
  }
}

******
  Returns a newly allocated property value for the given object property
  on the object referenced by the given object bind, or NULL on failure.

  NB: You must call propval_free on the non-NULL return value when it
  no longer neededstruct propval *objbind_get_value_from_object(struct objbind *ob,
                                                     struct objprop *op)
{
  int objtype, propid;
  struct tile *ptile;
  struct propval *pv;
  size_t size;

  if (!op || !ob) {
    return NULL;
  }

  objtype = objbind_get_objtype(ob);
  propid = objprop_get_id(op);

  pv = fc_calloc(1, sizeof(*pv));
  pv->valtype = objprop_get_valtype(op);

  if (objtype == OBJTYPE_TILE) {
    struct resource *presource;
    struct terrain *pterrain;

    ptile = objbind_get_object(ob);
    if (ptile == NULL) {
      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:
      pterrain = tile_terrain(ptile);
      if (pterrain) {
        pv->data.v_const_string = terrain_name_translation(pterrain);
      } else {
        pv->data.v_const_string = "";
      }
      break;
    case OPID_TILE_RESOURCE:
      presource = tile_resource(ptile);
      if (presource) {
        pv->data.v_const_string = resource_name_translation(presource);
      } else {
        pv->data.v_const_string = "";
      }
      break;
    case OPID_TILE_XY:
      pv->data.v_string = g_strdup_printf("(%d, %d)", ptile->x, ptile->y);
      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:
      size = sizeof(struct tile_vision_data);
      pv->data.v_tile_vision = fc_malloc(size);
      pv->data.v_tile_vision->tile_known = ptile->tile_known;
      vision_layer_iterate(v) {
        pv->data.v_tile_vision->tile_seen[v] = ptile->tile_seen[v];
      } vision_layer_iterate_end;
      pv->must_free = TRUE;
      break;
    default:
      log_error("Unhandled request for value of property %d "
                "(%s) from object of type \"%s\" in "
                "objbind_get_value_from_object().",
                propid, objprop_get_name(op), objtype_get_name(objtype));
      goto FAILED;
      break;
    }

  } else if (objtype == OBJTYPE_UNIT) {
    struct unit *punit = objbind_get_object(ob);
    struct unit_type *putype;
    
    if (punit == NULL) {
      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:
      ptile = unit_tile(punit);
      pv->data.v_string = g_strdup_printf("(%d, %d)", ptile->x, ptile->y);
      pv->must_free = TRUE;
      break;
    case OPID_UNIT_ID:
      pv->data.v_int = punit->id;
      break;
    case OPID_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("Unhandled request for value of property %d "
                "(%s) from object of type \"%s\" in "
                "objbind_get_value_from_object().",
                propid, objprop_get_name(op), objtype_get_name(objtype));
      goto FAILED;
      break;
    }

  } else if (objtype == OBJTYPE_CITY) {
    struct city *pcity = objbind_get_object(ob);

    if (pcity == NULL) {
      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:
      ptile = city_tile(pcity);
      pv->data.v_string = g_strdup_printf("(%d, %d)", ptile->x, ptile->y);
      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 = pcity->size;
      break;
    case OPID_CITY_BUILDINGS:
      pv->data.v_built = pcity->built;
      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("Unhandled request for value of property %d "
                "(%s) from object of type \"%s\" in "
                "objbind_get_value_from_object().",
                propid, objprop_get_name(op), objtype_get_name(objtype));
      goto FAILED;
      break;
    }
  } else if (objtype == OBJTYPE_PLAYER) {
    struct player *pplayer = objbind_get_object(ob);

    if (pplayer == NULL) {
      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("Unhandled request for value of property %d "
                "(%s) from object of type \"%s\" in "
                "objbind_get_value_from_object().",
                propid, objprop_get_name(op), objtype_get_name(objtype));
      goto FAILED;
      break;
    }

  } else if (objtype == OBJTYPE_GAME) {
    struct civ_game *pgame = objbind_get_object(ob);

    if (pgame == NULL) {
      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("Unhandled request for value of property %d "
                "(%s) from object of type \"%s\" in "
                "objbind_get_value_from_object().",
                propid, objprop_get_name(op), objtype_get_name(objtype));
      goto FAILED;
      break;
    }
  } else {
    goto FAILED;
  }

  return pv;

FAILED:
  if (pv) {
    free(pv);
  }
  return NULLIf applicable, sets the allowed range values of the given object property
  as applied to the bound object. Returns TRUE if values were setbool objbind_get_allowed_value_span(struct objbind *ob,
                                           struct objprop *op,
                                           double *pmin,
                                           double *pmax,
                                           double *pstep,
                                           double *pbig_step)
{
  int propid;
  int objtype;
  bool ok = TRUE;
  double min = 0, max = 1, step = 1, big_step = 1;

  if (!ob || !op) {
    return FALSE;
  }

  propid = objprop_get_id(op);
  objtype = objbind_get_objtype(ob);

  if (objtype == OBJTYPE_UNIT) {
    struct unit *punit = objbind_get_object(ob);
    struct unit_type *putype;

    if (!punit) {
      return FALSE;
    }

    putype = unit_type(punit);

    switch (propid) {
    case OPID_UNIT_MOVES_LEFT:
      min = 0;
      max = putype->move_rate;
      step = 1;
      big_step = 5;
      break;
    case OPID_UNIT_FUEL:
      min = 0;
      max = utype_fuel(putype);
      step = 1;
      big_step = 5;
      break;
    case OPID_UNIT_HP:
      min = 1;
      max = putype->hp;
      step = 1;
      big_step = 10;
      break;
    case OPID_UNIT_VETERAN:
      min = 0;
      if (unit_has_type_flag(punit, F_NO_VETERAN)) {
        max = 0;
      } else {
        int i;
        /* FIXME: The maximum veteran level is
         * really not stored anywhere?? */
        for (i = 1; i < MAX_VET_LEVELS; i++) {
          if (putype->veteran[i].name[0] == '\0') {
            break;
          }
        }
        max = i - 1;
      }
      step = 1;
      big_step = 3;
      break;
    default:
      log_error("Unhandled request for value range of "
                "property %d (%s) from object of type \"%s\" in "
                "objbind_get_allowed_value_span().",
                propid, objprop_get_name(op), objtype_get_name(objtype));
      ok = FALSE;
      break;
    }

  } else if (objtype == OBJTYPE_CITY) {
    struct city *pcity = objbind_get_object(ob);

    if (!pcity) {
      return FALSE;
    }

    switch (propid) {
    case OPID_CITY_SIZE:
      min = 1;
      max = MAX_CITY_SIZE;
      step = 1;
      big_step = 5;
      break;
    case OPID_CITY_FOOD_STOCK:
      min = 0;
      max = city_granary_size(pcity->size);
      step = 1;
      big_step = 5;
      break;
    case OPID_CITY_SHIELD_STOCK:
      min = 0;
      max = USHRT_MAX; /* Limited to uint16 by city info packet. */
      step = 1;
      big_step = 10;
      break;
    default:
      log_error("Unhandled request for value range of "
                "property %d (%s) from object of type \"%s\" in "
                "objbind_get_allowed_value_span().",
                propid, objprop_get_name(op), objtype_get_name(objtype));
      ok = FALSE;
      break;
    }

  } else if (objtype == OBJTYPE_PLAYER) {

    switch (propid) {
    case OPID_PLAYER_GOLD:
      min = 0;
      max = 1000000; /* Arbitrary. */
      step = 1;
      big_step = 100;
      break;
    default:
      log_error("Unhandled request for value range of "
                "property %d (%s) from object of type \"%s\" in "
                "objbind_get_allowed_value_span().",
                propid, objprop_get_name(op), objtype_get_name(objtype));
      ok = FALSE;
      break;
    }

  } else if (objtype == OBJTYPE_GAME) {

    switch (propid) {
    case OPID_GAME_YEAR:
      min = -30000;
      max = 30000;
      step = 1;
      big_step = 25;
      break;
    default:
      log_error("Unhandled request for value range of "
                "property %d (%s) from object of type \"%s\" in "
                "objbind_get_allowed_value_span().",
                propid, objprop_get_name(op), objtype_get_name(objtype));
      ok = FALSE;
      break;
    }

  } else {
    ok = FALSE;
  }

  if (!ok) {
    return FALSE;
  }

  if (pmin) {   
    *pmin = min;
  }
  if (pmax) {
    *pmax = max;
  }
  if (pstep) {
    *pstep = step;
  }
  if (pbig_step) {
    *pbig_step = big_step;
  }

  return TRUERemove a stored modified value, if it existsobjbind_clear_modified_value(struct objbind *ob,
                                         struct objprop *op)
{
  int propid;

  if (!ob || !op || !ob->propstate_table) {
    return;
  }
  
  propid = objprop_get_id(op);
  hash_delete_entry(ob->propstate_table, FC_INT_TO_PTR(propid))Returns TRUE if a stored modified property value exists for this bound
  object for the given propertybool objbind_property_is_modified(struct objbind *ob,
                                         struct objprop *op)
{
  int propid;

  if (!ob || !op) {
    return FALSE;
  }

  if (objprop_is_readonly(op)) {
    return FALSE;
  }

  propid = objprop_get_id(op);
  return hash_key_exists(ob->propstate_table, FC_INT_TO_PTR(propid))Returns TRUE if there are any stored modified values of any of the
  properties of the bound objectbool objbind_has_modified_properties(struct objbind *ob)
{
  if (!ob) {
    return FALSE;
  }

  return hash_num_entries(ob->propstate_table) > 0Deletes all stored modified property valuesobjbind_clear_all_modified_values(struct objbind *ob)
{
  if (!ob) {
    return;
  }
  hash_delete_all_entries(ob->propstate_table)Store a modified property value, but only if it is different from the
  current value. Always makes a copy of the given value when storingobjbind_set_modified_value(struct objbind *ob,
                                       struct objprop *op,
                                       struct propval *pv)
{
  struct propstate *ps;
  int valtype;
  bool equal;
  struct propval *pv_old, *pv_copy;
  int propid;

  if (!ob || !op) {
    return;
  }

  valtype = objprop_get_valtype(op);
  propid = objprop_get_id(op);

  pv_old = objbind_get_value_from_object(ob, op);
  if (!pv_old) {
    return;
  }

  equal = propval_equal(pv, pv_old);
  propval_free(pv_old);

  if (equal) {
    objbind_clear_modified_value(ob, op);
    return;
  }

  pv_copy = propval_copy(pv);

  ps = hash_lookup_data(ob->propstate_table, FC_INT_TO_PTR(propid));
  if (!ps) {
    ps = propstate_new(op, pv_copy);
    hash_insert(ob->propstate_table, FC_INT_TO_PTR(propid), ps);
  } else {
    propstate_set_value(ps, pv_copy);
  }
}

******
  Retrieve the stored property value for the bound object, or NULL if none
  exists.

  NB: Does NOT return a copystruct propval *objbind_get_modified_value(struct objbind *ob,
                                                  struct objprop *op)
{
  struct propstate *ps;
  int propid;

  if (!ob || !op) {
    return FALSE;
  }

  propid = objprop_get_id(op);
  ps = hash_lookup_data(ob->propstate_table, FC_INT_TO_PTR(propid));
  if (!ps) {
    return NULL;
  }

  return propstate_get_value(ps)Destroy the object bind and free any resources it might have been usingobjbind_free(struct objbind *ob)
{
  if (!ob) {
    return;
  }
  if (ob->propstate_table) {
    hash_free(ob->propstate_table);
    ob->propstate_table = NULL;
  }
  if (ob->rowref) {
    gtk_tree_row_reference_free(ob->rowref);
    ob->rowref = NULL;
  }
  free(ob)Returns the object type of the bound objectint objbind_get_objtype(const struct objbind *ob)
{
  if (!ob) {
    return NUM_OBJTYPES;
  }
  return ob->objtyBind the object in the given objbind to the properties in the pageobjbind_bind_properties(struct objbind *ob,
                                    struct property_page *pp)
{
  if (!ob) {
    return;
  }
  ob->parent_property_page = Fill the packet with the bound object's current state.

  NB: This must be updated if the packet_edit_<object> definitions changeobjbind_pack_current_values(struct objbind *ob,
                                        union packetdata pd)
{
  int objtype;

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

  objtype = objbind_get_objtype(ob);

  if (objtype == OBJTYPE_TILE) {
    struct packet_edit_tile *packet = pd.tile;
    struct tile *ptile = objbind_get_object(ob);

    if (!ptile) {
      return;
    }

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

  } else if (objtype == OBJTYPE_UNIT) {
    struct packet_edit_unit *packet = pd.unit;
    struct unit *punit = objbind_get_object(ob);

    if (!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. */

  } else if (objtype == OBJTYPE_CITY) {
    struct packet_edit_city *packet = pd.city;
    struct city *pcity = objbind_get_object(ob);
    int i;

    if (!pcity) {
      return;
    }
    
    packet->id = pcity->id;
    sz_strlcpy(packet->name, pcity->name);
    packet->size = pcity->size;
    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. */

  } else if (objtype == OBJTYPE_PLAYER) {
    struct packet_edit_player *packet = pd.player;
    struct player *pplayer = objbind_get_object(ob);
    struct nation_type *pnation;

    if (!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->inventions[tech]
          = TECH_KNOWN == player_invention_state(pplayer, tech);
    } advance_index_iterate_end;
    packet->gold = pplayer->economic.gold;
    /* TODO: Set more packet fields. */

  } else if (objtype == OBJTYPE_GAME) {
    struct packet_edit_game *packet = pd.game;
    struct civ_game *pgame = objbind_get_object(ob);

    if (!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. */
  }
}

******
  Package the modified property value into the supplied packetobjbind_pack_modified_value(struct objbind *ob,
                                        struct objprop *op,
                                        union packetdata pd)
{
  struct propval *pv;
  int objtype, propid;
  int i;

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

  if (objprop_is_readonly(op) || !objbind_property_is_modified(ob, op)) {
    return;
  }

  pv = objbind_get_modified_value(ob, op);
  if (!pv) {
    return;
  }

  objtype = objbind_get_objtype(ob);
  propid = objprop_get_id(op);

  if (objtype == OBJTYPE_TILE) {
    struct packet_edit_tile *packet = pd.tile;
    struct tile *ptile = objbind_get_object(ob);

    if (!ptile) {
      return;
    }

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

  } else if (objtype == OBJTYPE_UNIT) {
    struct packet_edit_unit *packet = pd.unit;
    struct unit *punit = objbind_get_object(ob);

    if (!punit) {
      return;
    }

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

  } else if (objtype == OBJTYPE_CITY) {
    struct packet_edit_city *packet = pd.city;
    struct city *pcity = objbind_get_object(ob);

    if (!pcity) {
      return;
    }

    switch (propid) {
    case OPID_CITY_NAME:
      sz_strlcpy(packet->name, pv->data.v_string);
      break;
    case OPID_CITY_SIZE:
      packet->size = pv->data.v_int;
      break;
    case OPID_CITY_FOOD_STOCK:
      packet->food_stock = pv->data.v_int;
      break;
    case OPID_CITY_SHIELD_STOCK:
      packet->shield_stock = pv->data.v_int;
      break;
    case OPID_CITY_BUILDINGS:
      for (i = 0; i < B_LAST; i++) {
        packet->built[i] = pv->data.v_built[i].turn;
      }
      break;
    default:
      log_error("Unhandled request to pack value of "
                "property %d (%s) from object of type \"%s\" in "
                "objbind_pack_modified_value().",
                propid, objprop_get_name(op), objtype_get_name(objtype));
      break;
    }
  } else if (objtype == OBJTYPE_PLAYER) {
    struct packet_edit_player *packet = pd.player;
    struct player *pplayer = objbind_get_object(ob);

    if (!pplayer) {
      return;
    }

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

  } else if (objtype == OBJTYPE_GAME) {
    struct packet_edit_game *packet = pd.game;

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

******
  Sets the row reference in a GtkTreeModel of this objbindobjbind_set_rowref(struct objbind *ob,
                               GtkTreeRowReference *rr)
{
  if (!ob) {
    return;
  }
  ob->rowref = rrReturns the row reference of this objbind, or NULL if not applicableGtkTreeRowReference *objbind_get_rowref(struct objbind *ob)
{
  if (!ob) {
    return NULL;
  }
  return ob->rowreReturns the unique property identifier for this object propertyint objprop_get_id(const struct objprop *op)
{
  if (!op) {
    return -1;
  }
  return op->iturns the GType that this object property renders as in a GtkTreeView.
  Returning G_TYPE_NONE indicates that this property cannot be viewed
  in a list.

  NB: This must correspond to the actions in property_page_set_store_valueGType objprop_get_gtype(const struct objprop *op)
{
  if (!op) {
    return G_TYPE_NONE;
  }
  switch (op->valtype) {
  case VALTYPE_INT:
    return G_TYPE_INT;
    break;
  case VALTYPE_BOOL:
    return G_TYPE_BOOLEAN;
    break;
  case VALTYPE_STRING:
  case VALTYPE_BUILT_ARRAY:
  case VALTYPE_INVENTIONS_ARRAY:
  case VALTYPE_BV_SPECIAL:
  case VALTYPE_BV_BASES:
    return G_TYPE_STRING;
    break;
  case VALTYPE_PIXBUF:
  case VALTYPE_NATION:
    return GDK_TYPE_PIXBUF;
    break;
  default:
    break;
  }
  return G_TYPE_NONEReturns the value type of this property value (one of enum value_types)int objprop_get_valtype(const struct objprop *op)
{
  if (!op) {
    return VALTYPE_NONE;
  }
  return op->valtyReturns TRUE if this object property can be viewed in a GtkTreeViewbool objprop_show_in_listview(const struct objprop *op)
{
  if (!op) {
    return FALSE;
  }
  return op->flags & OPF_IN_LISTVIEWReturns TRUE if this object property can create and use a property widgetbool objprop_has_widget(const struct objprop *op)
{
  if (!op) {
    return FALSE;
  }
  return op->flags & OPF_HAS_WIDGETReturns a the string corresponding to the attribute type name required
  for gtk_tree_view_column_new_with_attributes according to this objprop's
  GType value. May return NULL if it does not make sense for this
  object propertyconst char *objprop_get_attribute_type_string(const struct objprop *op)
{
  GType gtype;

  if (!op) {
    return NULL;
  }

  gtype = objprop_get_gtype(op);
  if (gtype == G_TYPE_INT || gtype == G_TYPE_STRING
      || gtype == G_TYPE_BOOLEAN) {
    return "text";
  } else if (gtype == GDK_TYPE_PIXBUF) {
    return "pixbuf";
  }

  return NULLStore the column id of the list store that this object property can be
  viewed in. This should generally only be changed set once, when the
  object property's associated list view is created.
  NB: This is the column id in the model, not the viewobjprop_set_column_id(struct objprop *op, int col_id)
{
  if (!op) {
    return;
  }
  op->column_id = col_iturns the column id in the list store for this object property.
  May return -1 if not applicable or if not yet set.
  NB: This is the column id in the model, not the viewint objprop_get_column_id(const struct objprop *op)
{
  if (!op) {
    return -1;
  }
  return op->column_iSets the view column reference for later convenienceobjprop_set_treeview_column(struct objprop *op,
                                        GtkTreeViewColumn *col)
{
  if (!op) {
    return;
  }
  op->view_column = colReturns the previously stored tree view column reference, or NULL if none
  existsGtkTreeViewColumn *objprop_get_treeview_column(const struct objprop *op)
{
  if (!op) {
    return NULL;
  }
  return op->view_columnReturns the string name of this object propertyconst char *objprop_get_name(const struct objprop *op)
{
  if (!op) {
    return NULL;
  }
  return op->namCreate and return a cell renderer corresponding to this object property,
  suitable to be used with a tree view. May return NULL if this object
  property cannot exist in a list storeGtkCellRenderer *objprop_create_cell_renderer(const struct objprop *op)
{
  GtkCellRenderer *cell = NULL;
  GType gtype;

  gtype = objprop_get_gtype(op);

  if (gtype == G_TYPE_INT || gtype == G_TYPE_STRING
      || gtype == G_TYPE_BOOLEAN) {
    cell = gtk_cell_renderer_text_new();
  } else if (gtype == GDK_TYPE_PIXBUF) {
    cell = gtk_cell_renderer_pixbuf_new();
  }

  return cellReturn TRUE if the given object property can be sorted (i.e. in the list
  view)bool objprop_is_sortable(const struct objprop *op)
{
  GType gtype;
  if (!op) {
    return FALSE;
  }
  gtype = objprop_get_gtype(op);
  return gtype == G_TYPE_INT || gtype == G_TYPE_STRINGReturn TRUE if the given object property cannot be edited (i.e. it is
  displayed information only)bool objprop_is_readonly(const struct objprop *op)
{
  if (!op) {
    return TRUE;
  }
  return !(op->flags & OPF_EDITABLE)Callback for entry widget 'changed' signalobjprop_widget_entry_changed(GtkEntry *entry, gpointer userdata)
{
  struct objprop *op;
  struct property_page *pp;
  struct propval value = {{0,}, VALTYPE_STRING, FALSE};

  op = userdata;
  pp = objprop_get_property_page(op);
  value.data.v_const_string = gtk_entry_get_text(entry);

  property_page_change_value(pp, op, &value);  
}

******
  Callback for spin button widget 'value-changed' signalobjprop_widget_spin_button_changed(GtkSpinButton *spin,
                                               gpointer userdata)
{
  struct objprop *op;
  struct property_page *pp;
  struct propval value = {{0,}, VALTYPE_INT, FALSE};

  op = userdata;
  pp = objprop_get_property_page(op);
  value.data.v_int = gtk_spin_button_get_value_as_int(spin);

  property_page_change_value(pp, op, &value);  
}

******
  Callback for toggle type button widget 'toggled' signalobjprop_widget_toggle_button_changed(GtkToggleButton *button,
                                                 gpointer userdata)
{
  struct objprop *op;
  struct property_page *pp;
  struct propval value = {{0,}, VALTYPE_BOOL, FALSE};

  op = userdata;
  pp = objprop_get_property_page(op);
  value.data.v_bool = gtk_toggle_button_get_active(button);

  property_page_change_value(pp, op, &value)Create the gtk widget used to edit or display this object propertyobjprop_setup_widget(struct objprop *op)
{
  GtkWidget *w = NULL;
  GtkWidget *hbox, *hbox2, *label, *image, *entry, *spin, *button;
  struct extviewer *ev = NULL;
  int propid;

  if (!op) {
    return;
  }

  if (!objprop_has_widget(op)) {
    return;
  }

  hbox = gtk_hbox_new(TRUE, 4);
  w = hbox;
  op->widget = w;

  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(hbox), label, TRUE, TRUE, 0);
  objprop_set_child_widget(op, "name-label", label);

  propid = objprop_get_id(op);

  switch (propid) {

  case OPID_TILE_ADDRESS:
  case OPID_TILE_INDEX:
  case OPID_TILE_X:
  case OPID_TILE_Y:
  case OPID_TILE_NAT_X:
  case OPID_TILE_NAT_Y:
  case OPID_TILE_CONTINENT:
  case OPID_TILE_TERRAIN:
  case OPID_TILE_RESOURCE:
  case OPID_TILE_XY:
  case OPID_UNIT_ADDRESS:
  case OPID_UNIT_ID:
  case OPID_UNIT_XY:
  case OPID_UNIT_TYPE:
  case OPID_CITY_ADDRESS:
  case OPID_CITY_ID:
  case OPID_CITY_XY:
  case OPID_PLAYER_ADDRESS:
    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);
    objprop_set_child_widget(op, "value-label", label);
    break;

  case OPID_TILE_IMAGE:
  case OPID_UNIT_IMAGE:
  case OPID_CITY_IMAGE:
    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);
    objprop_set_child_widget(op, "image", image);
    break;

  case OPID_CITY_NAME:
  case OPID_PLAYER_NAME:
  case OPID_GAME_SCENARIO_NAME:
    entry = gtk_entry_new();
    gtk_entry_set_width_chars(GTK_ENTRY(entry), 8);
    g_signal_connect(entry, "changed",
        G_CALLBACK(objprop_widget_entry_changed), op);
    gtk_box_pack_start(GTK_BOX(hbox), entry, TRUE, TRUE, 0);
    objprop_set_child_widget(op, "entry", entry);
    break;

  case OPID_CITY_SIZE:
  case OPID_CITY_SHIELD_STOCK:
  case OPID_PLAYER_GOLD:
  case OPID_GAME_YEAR:
    spin = gtk_spin_button_new_with_range(0.0, 100.0, 1.0);
    g_signal_connect(spin, "value-changed",
        G_CALLBACK(objprop_widget_spin_button_changed), op);
    gtk_box_pack_start(GTK_BOX(hbox), spin, TRUE, TRUE, 0);
    objprop_set_child_widget(op, "spin", spin);
    break;

  case OPID_UNIT_MOVES_LEFT:
  case OPID_UNIT_FUEL:
  case OPID_UNIT_HP:
  case OPID_UNIT_VETERAN:
  case OPID_CITY_FOOD_STOCK:
    hbox2 = gtk_hbox_new(FALSE, 4);
    gtk_box_pack_start(GTK_BOX(hbox), hbox2, TRUE, TRUE, 0);
    spin = gtk_spin_button_new_with_range(0.0, 100.0, 1.0);
    g_signal_connect(spin, "value-changed",
        G_CALLBACK(objprop_widget_spin_button_changed), op);
    gtk_box_pack_start(GTK_BOX(hbox2), spin, TRUE, TRUE, 0);
    objprop_set_child_widget(op, "spin", spin);
    label = gtk_label_new(NULL);
    gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
    gtk_box_pack_start(GTK_BOX(hbox2), label, TRUE, TRUE, 0);
    objprop_set_child_widget(op, "max-value-label", label);
    break;

  case OPID_TILE_SPECIALS:
  case OPID_TILE_BASES:
  case OPID_TILE_VISION:
  case OPID_CITY_BUILDINGS:
  case OPID_PLAYER_NATION:
  case OPID_PLAYER_INVENTIONS:
  case OPID_GAME_SCENARIO_DESC:
    ev = extviewer_new(op);
    objprop_set_extviewer(op, ev);
    gtk_box_pack_start(GTK_BOX(hbox), extviewer_get_panel_widget(ev),
                       TRUE, TRUE, 0);
    property_page_add_extviewer(objprop_get_property_page(op), ev);
    break;

  case OPID_UNIT_MOVED:
  case OPID_UNIT_DONE_MOVING:
  case OPID_GAME_SCENARIO:
  case OPID_GAME_SCENARIO_PLAYERS:
    button = gtk_check_button_new();
    g_signal_connect(button, "toggled",
        G_CALLBACK(objprop_widget_toggle_button_changed), op);
    gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 0);
    objprop_set_child_widget(op, "checkbutton", button);
    break;

  default:
    log_error("Unhandled request to create widget for "
              "property %d (%s) in objprop_setup_widget().",
              propid, objprop_get_name(op));
    break;
  }

  returnRefresh the display/edit widget corresponding to this object property
  according to the value of the bound object. If a stored modified value
  exists, then check it against the object's current value and remove it
  if they are equal.
  
  If 'ob' is NULL, then clear the widgetobjprop_refresh_widget(struct objprop *op,
                                   struct objbind *ob)
{
  GtkWidget *w, *label, *image, *entry, *spin, *button;
  struct extviewer *ev;
  struct propval *pv;
  bool modified;
  int propid;
  double min, max, step, big_step;
  char buf[256];

  if (!op || !objprop_has_widget(op)) {
    return;
  }

  w = objprop_get_widget(op);
  if (!w) {
    return;
  }

  propid = objprop_get_id(op);

  /* NB: We must take care to propval_free the return value of
   * objbind_get_value_from_object, since it always makes a
   * copy, but to NOT free the result of objbind_get_modified_value
   * since it returns its own stored value. */
  pv = objbind_get_value_from_object(ob, op);
  modified = objbind_property_is_modified(ob, op);

  if (pv && modified) {
    struct propval *pv_mod;
   
    pv_mod = objbind_get_modified_value(ob, op);
    if (pv_mod) {
      if (propval_equal(pv, pv_mod)) {
        objbind_clear_modified_value(ob, op);
        modified = FALSE;
      } else {
        propval_free(pv);
        pv = pv_mod;
        modified = TRUE;
      }
    } else {
      modified = FALSE;
    }
  }

  switch (propid) {

  case OPID_TILE_IMAGE:
  case OPID_UNIT_IMAGE:
  case OPID_CITY_IMAGE:
    image = objprop_get_child_widget(op, "image");
    if (pv) {
      gtk_image_set_from_pixbuf(GTK_IMAGE(image), pv->data.v_pixbuf);
    } else {
      gtk_image_set_from_pixbuf(GTK_IMAGE(image), NULL);
    }
    break;

  case OPID_TILE_ADDRESS:
  case OPID_TILE_XY:
  case OPID_TILE_TERRAIN:
  case OPID_TILE_RESOURCE:
  case OPID_UNIT_ADDRESS:
  case OPID_UNIT_XY:
  case OPID_UNIT_TYPE:
  case OPID_CITY_ADDRESS:
  case OPID_CITY_XY:
  case OPID_PLAYER_ADDRESS:
    label = objprop_get_child_widget(op, "value-label");
    if (pv) {
      gtk_label_set_text(GTK_LABEL(label), pv->data.v_string);
    } else {
      gtk_label_set_text(GTK_LABEL(label), NULL);
    }
    break;

  case OPID_TILE_INDEX:
  case OPID_TILE_X:
  case OPID_TILE_Y:
  case OPID_TILE_NAT_X:
  case OPID_TILE_NAT_Y:
  case OPID_TILE_CONTINENT:
  case OPID_UNIT_ID:
  case OPID_CITY_ID:
    label = objprop_get_child_widget(op, "value-label");
    if (pv) {
      char buf[16];
      fc_snprintf(buf, sizeof(buf), "%d", pv->data.v_int);
      gtk_label_set_text(GTK_LABEL(label), buf);
    } else {
      gtk_label_set_text(GTK_LABEL(label), NULL);
    }
    break;

  case OPID_CITY_NAME:
  case OPID_PLAYER_NAME:
  case OPID_GAME_SCENARIO_NAME:
    entry = objprop_get_child_widget(op, "entry");
    if (pv) {
      gtk_entry_set_text(GTK_ENTRY(entry), pv->data.v_string);
    } else {
      gtk_entry_set_text(GTK_ENTRY(entry), "");
    }
    gtk_widget_set_sensitive(entry, pv != NULL);
    break;

  case OPID_CITY_SIZE:
  case OPID_CITY_SHIELD_STOCK:
  case OPID_PLAYER_GOLD:
  case OPID_GAME_YEAR:
    spin = objprop_get_child_widget(op, "spin");
    if (pv) {
      disable_gobject_callback(G_OBJECT(spin),
          G_CALLBACK(objprop_widget_spin_button_changed));
      if (objbind_get_allowed_value_span(ob, op, &min, &max,
                                         &step, &big_step)) {
        gtk_spin_button_set_range(GTK_SPIN_BUTTON(spin), min, max);
        gtk_spin_button_set_increments(GTK_SPIN_BUTTON(spin),
                                       step, big_step);
      }
      gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin), pv->data.v_int);
      enable_gobject_callback(G_OBJECT(spin),
          G_CALLBACK(objprop_widget_spin_button_changed));
    }
    gtk_widget_set_sensitive(spin, pv != NULL);
    break;

  case OPID_UNIT_MOVES_LEFT:
  case OPID_UNIT_FUEL:
  case OPID_UNIT_HP:
  case OPID_UNIT_VETERAN:
  case OPID_CITY_FOOD_STOCK:
    spin = objprop_get_child_widget(op, "spin");
    label = objprop_get_child_widget(op, "max-value-label");
    if (pv) {
      disable_gobject_callback(G_OBJECT(spin),
          G_CALLBACK(objprop_widget_spin_button_changed));
      if (objbind_get_allowed_value_span(ob, op, &min, &max,
                                         &step, &big_step)) {
        gtk_spin_button_set_range(GTK_SPIN_BUTTON(spin), min, max);
        gtk_spin_button_set_increments(GTK_SPIN_BUTTON(spin),
                                       step, big_step);
        fc_snprintf(buf, sizeof(buf), "/%d", (int) max);
        gtk_label_set_text(GTK_LABEL(label), buf);
      } else {
        gtk_label_set_text(GTK_LABEL(label), NULL);
      }
      gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin), pv->data.v_int);
      enable_gobject_callback(G_OBJECT(spin),
          G_CALLBACK(objprop_widget_spin_button_changed));
    } else {
      gtk_label_set_text(GTK_LABEL(label), NULL);
    }
    gtk_widget_set_sensitive(spin, pv != NULL);
    break;

  case OPID_TILE_SPECIALS:
  case OPID_TILE_BASES:
  case OPID_TILE_VISION:
  case OPID_CITY_BUILDINGS:
  case OPID_PLAYER_NATION:
  case OPID_PLAYER_INVENTIONS:
  case OPID_GAME_SCENARIO_DESC:
    ev = objprop_get_extviewer(op);
    if (pv) {
      extviewer_refresh_widgets(ev, pv);
    } else {
      extviewer_clear_widgets(ev);
    }
    break;

  case OPID_UNIT_MOVED:
  case OPID_UNIT_DONE_MOVING:
  case OPID_GAME_SCENARIO:
  case OPID_GAME_SCENARIO_PLAYERS:
    button = objprop_get_child_widget(op, "checkbutton");
    disable_gobject_callback(G_OBJECT(button),
        G_CALLBACK(objprop_widget_toggle_button_changed));
    if (pv) {
      gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button),
                                   pv->data.v_bool);
    } else {
      gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), FALSE);
    }
    enable_gobject_callback(G_OBJECT(button),
        G_CALLBACK(objprop_widget_toggle_button_changed));
    gtk_widget_set_sensitive(button, pv != NULL);
    break;

  default:
    log_error("Widget refresh missing in "
              "objprop_refresh_widget() for objprop id=%d "
              "name \"%s\".", propid, objprop_get_name(op));
    break;
  }

  if (!modified) {
    propval_free(pv);
  }

  label = objprop_get_child_widget(op, "name-label");
  if (label) {
    const char *name = objprop_get_name(op);
    if (modified) {
      char buf[128];
      fc_snprintf(buf, sizeof(buf),
                  "<span foreground=\"red\">%s</span>", name);
      gtk_label_set_markup(GTK_LABEL(label), buf);
    } else {
      gtk_label_set_text(GTK_LABEL(label), name);
    }
  }
}

******
  Returns the gtk widget used to display or edit this property, or NULL
  if not applicableGtkWidget *objprop_get_widget(struct objprop *op)
{
  if (!op) {
    return NULL;
  }
  if (!op->widget) {
    objprop_setup_widget(op);
  }
  return op->widgetStores the given widget under the given name. This function will have no
  effect if objprop_get_widget does not return a valid GtkWidget instanceobjprop_set_child_widget(struct objprop *op,
                                     const char *widget_name,
                                     GtkWidget *widget)
{
  GtkWidget *w;

  if (!op || !widget_name || !widget) {
    return;
  }

  w = objprop_get_widget(op);
  if (!w) {
    log_error("Cannot store child widget %p under name "
              "\"%s\" using objprop_set_child_widget for object "
              "property %d (%s) because objprop_get_widget does "
              "not return a valid widget.",
              widget, widget_name, objprop_get_id(op), objprop_get_name(op));
    return;
  }

  g_object_set_data(G_OBJECT(w), widget_name, widget)Retrieves the widget stored under the given name, or returns NULL and
  logs an error message if not foundGtkWidget *objprop_get_child_widget(struct objprop *op,
                                           const char *widget_name)
{
  GtkWidget *w, *child;

  if (!op || !widget_name) {
    return NULL;
  }

  w = objprop_get_widget(op);
  if (!w) {
    log_error("Cannot retrieve child widget under name "
              "\"%s\" using objprop_get_child_widget for object "
              "property %d (%s) because objprop_get_widget does "
              "not return a valid widget.",
              widget_name, objprop_get_id(op), objprop_get_name(op));
    return NULL;
  }

  child = g_object_get_data(G_OBJECT(w), widget_name);
  if (!child) {
    log_error("Child widget \"%s\" not found for object "
              "property %d (%s) via objprop_get_child_widget.",
              widget_name, objprop_get_id(op), objprop_get_name(op));
    return NULL;
  }

  return chilStore the extviewer struct for later retrievalobjprop_set_extviewer(struct objprop *op,
                                  struct extviewer *ev)
{
  if (!op) {
    return;
  }
  op->extviewer = evReturn the stored extviewer, or NULL if none existsstruct extviewer *objprop_get_extviewer(struct objprop *op)
{
  if (!op) {
    return NULL;
  }
  return op->extviewerGet the property page in which this property is installedstruct property_page *objprop_get_property_page(const struct objprop *op)
{
  if (!op) {
    return NULL;
  }
  return op->parent_pagCreate a new object propertystruct objprop *objprop_new(int id,
                                   const char *name,
                                   int flags,
                                   int 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.)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;
  int propid, 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_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(_("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_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 store "
              "for property %d (%s) in extviewer_new().",
              propid, objprop_get_name(op));
    break;
  }

  ev->store = store;
  ev->textbuf = textbuf;

  /* Create the view widget. */

  vbox = gtk_vbox_new(FALSE, 4);
  gtk_container_set_border_width(GTK_CONTAINER(vbox), 4);
  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_scrolled_window_set_policyGTK_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, _("Present"), G_TYPE_BOOLEAN, TRUE, FALSE,
               G_CALLBACK(extviewer_view_cell_toggled), ev);
    add_column(view, 1, _("ID"), G_TYPE_INT,
               FALSE, FALSE, NULL, NULL);
    add_column(view, 2, _("Name"), G_TYPE_STRING,
               FALSE, FALSE, NULL, NULL);
    break;

  case OPID_TILE_VISION:
    add_column(view, 0, _("ID"), G_TYPE_INT,
               FALSE, FALSE, NULL, NULL);
    add_column(view, 1, _("Nation"), GDK_TYPE_PIXBUF,
               FALSE, FALSE, NULL, NULL);
    add_column(view, 2, _("Name"), G_TYPE_STRING,
               FALSE, FALSE, NULL, NULL);
    add_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"), G_TYPE_BOOLEAN, TRUE, FALSE,
               G_CALLBACK(extviewer_view_cell_toggled), ev);
    add_column(view, 1, _("ID"), G_TYPE_INT,
               FALSE, FALSE, NULL, NULL);
    add_column(view, 2, _("Name"), G_TYPE_STRING,
               FALSE, FALSE, NULL, NULL);
    add_column(view, 3, _("Turn Built"), 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, TRUE,
               G_CALLBACK(extviewer_view_cell_toggled), ev);
    add_column(view, 1, _("ID"), G_TYPE_INT,
               FALSE, FALSE, NULL, NULL);
    add_column(view, 2, _("Flag"), 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 "this invention is known". */
    add_column(view, 0, _("Known"), G_TYPE_BOOLEAN, TRUE, FALSE,
               G_CALLBACK(extviewer_view_cell_toggled), ev);
    add_column(view, 1, _("ID"), G_TYPE_INT,
               FALSE, FALSE, NULL, NULL);
    add_column(view, 2, _("Name"), G_TYPE_STRING,
               FALSE, FALSE, NULL, NULL);
    break;

  case OPID_GAME_SCENARIO_DESC:
    g_signal_connect(textbuf, "changed",
                     G_CALLBACK(extviewer_textbuf_changed), ev);
    break;

  default:
    log_error("Unhandled request to configure view widget "
              "for property %d (%s) in extviewer_new().",
              propid, objprop_get_name(op));
    break;
  }

  gtk_widget_show_all(ev->panel_widget);
  gtk_widget_show_all(ev->view_widget);

  return evReturns the object property that is displayed by this extviewestruct objprop *extviewer_get_objprop(struct extviewer *ev)
{
  if (!ev) {
    return NULL;
  }
  return ev->objpropReturns the "panel widget" for this extviewer, i.e. the widget the
  is to be placed into the properties panelGtkWidget *extviewer_get_panel_widget(struct extviewer *ev)
{
  if (!ev) {
    return NULL;
  }
  return ev->panel_widgetReturns the "view widget" for this extviewer, i.e. the widget the
é@ „æ…$9¹@K8—D‡D‚EˆI“DH“IY„K&†@L8‹F+„E‚\ˆI-E‚D‡E‚\‹@W6„J8ˆG*U1EVb„2G2D.†GEG2ƒD.„Df‚F„ZƒDƒ„H„D…D]†Df‹E…+E…<„F…?„E…ŒE…iE…aŽD†G…vˆD@„J…sXIFf‡Kƒ~D"G„t„DfF…‚H„sE†l…E†{G…O‡G…F‡GIG„\ŠEtŠT†GF†~D‡M…N‡[DfM‡[‚H„[‡F†zE†D†`ƒI†G† GˆGI† D‡AFƒŠE‚\DV‹E†ŠDƒE‚\ŽF‰$‚Eˆ}ŠE‹Dˆ?…F‡G‚DSD…=—EVO‰*†E†EˆD…D†7‡HS‚E‡F…D‹D…]F‹EŠaD…]ŒEŠrH‹G…5E‰x„HŠ]D‹I‹3O‰*†FŠLƒD†7X‹iD‰9LŒ„H‹;„E…‚E‹„G‹3ZŠX„F‹H‡‰E‡VG‹3E‰*„DŒ+D† ŠFˆ„F8EG‹3…E‡@OŠ„hŠ1„NŠeDŽ3OŠvEŽ3F‰bGŽDO‹FŽYP‹ NŽea‹<DŽ3DŒK@|‹iQŽ3@	Œ~†gŠ2DƒˆJŽ<D’OŠvG’HŽ^E’!H‹E‡EJ’„DG’AJŠvI‹H’4‚H’H‹‚F…pƒD"„F’AƒE‹*I“†R’o‚S“HbE“A@V‹kVŒMG’NE…iL’naŒ‚G“M”`ƒD†p‰H”pg“_^‹<EŠYˆEŠY…\DRŒ,KŒ?K”bF–F’HŠkIRt•u‡MDc•…V–]U–rJŒ~U’
JŒ~TnhŠ1‡D‰JŽ<G™ KŠv…IŠ]K™ J™3L—	‡I‹H“~E‡M™ „J™3O‹L™ RŽPš&J…"D’~K‹PD…(…H†QN•uKšk„H›E›D…HPƒTšxF‡?@k‹nZ„.GKŒZS™ @Œ~Šj‘aF“6K’G“6I—
J‹<Hžp‚MšvO“6E‡F“6HšO“6S“O“6G‹GŸ7‚D•@‚OO“6@^‹rZ„.J•%j”Z]•=F“~Pž`JŒ~n5X„.^Ÿ}QŸH’R“WŸD‰*„E–H†F£EG…KQE£@H•%H™S”n\¡WF“~[ž…Dž6hŠ1†JŠiŠG¥OŠvI¥Fš H¥R›K£$…EžcD›O‹H¥RŽP¥@@s‹rO¥@Œ~’FŠ2‰G•>‘EˆG† Z¢BF©‹JG† †D‡fJ£6D† ‚E†J>G† L¥YE…QGK	‚@I¨Mp©F+E£E…D 	EˆK&†H’@o	‡FŠ2›D‰ G„	I‚`O„.ZƒEH„t…R¬_E‹ˆDŒ?F…	L‡	E“‚H©;GnD¤-@S‚DŠHE‚\HƒG„@fƒ#EŠG]„q„g@†=o‡FbGIOR‚F±GHžxo5E±iI†URŠ]ŠXxY‘O\˜av¤?IˆJP­[rž#P³dv£<I²$U³r@*¨2K¨l„@,©|„H«+I­bm¬#EŠGZ¬W‚Y¯4@5­E¬>H‚kFƒƒEVœG‚ZH.D±ƒPƒDG®QEDºU@g&OƒzFVFºFEºM‡FºGFºFh„-F›}„D†3„D‰xM„gM9Fˆ>I„WD2Eºs‚E„~V„mEˆ‚I¼mE„@@†AD†_L‡	M½H‡M½†Iº4ƒD‡Y@U‚Hº)„D „E…/ˆFƒK‚hIº7ƒF»@f»,E&D¿VE¿@F¼$…D‚s„EÀn‚D¿Vj¼8F…W„kÁu¼fO„t\½J…K†'ˆDÂfV†'J…„R…R„UI…,E IŒ?M…<‚E¥rQ…eL±Fo½ID½JM‡[I½V@Y†FFÃBD“#‚FÀgGÀ}GÀlE†lFÃBD¿Vi¾ƒEÂlƒDHˆGOJ³hE½ZE©C„EÂlF‡ƒF£IGEÂlIŒ5DÁAY‡hH‹>FÃBFˆlvŠNÆ1OÆPDŒK	E½Z…DŸ1‚DŸ1ˆK™iJ†OH¤-F‡EE…7Jžxƒ[‹KIFO“E†bÈITŠ3D‰9IˆJUŒ5IŒZ@@DÇGEŽ3‡@GÈP?dÈjQÌ@9É!X˜k@DÇGbÈNškGÆ{‹E›ŠGÉZXšyM› G´z@@›;uÉ"Q@3@DÇGGŸ7HË7…QÈ2RÈFÃQŸ4WŸQÓJŸz‚H’:IFhÉ&D«(KÉUOÑwEÆ@‰OÆPDbHÃoÐ!E·xOÓ~@‚J¢tÇGG¥OÇ|H¥dË7Y¥ZJÏwÐ"@yÐab¬#G»GÀm‡D‚h[¬`RÀc@W­LÈK­bQ¾=F©4D‡4‚E¾\‚D©c@]¾cD…?‚V¿_ƒDƒ@f»,O©,D¼&S†h„-@oÁoO„UF¿[—GÔn‚HÃ5GÞE†2‡GŒLÃUF†tÃ}@A†^gÅ\P©CE«DàEÔJ©[EáVEÐ!TáBƒPá[‚FÔ@EÝFÅ-PáFN©WFájFâL·vFƒS©iD› Eà#GÄ/EÜEÅ~^²2X¨2@m«3kÚ†hÚEPÝ@ÚD¤EˆDã@V¾cˆDç%F•>H¾?‚D‰D‚[Dº>DºuD‡#ƒE»E@\»,O¾@„H†pI„Q½DF”EÃDéFŒTDéD“*FéG…‡S½-ƒE†^H‡	ƒRéDé4dépVé†Dé4…F‰n…H‡	D¨MEéH‡EéHDê/‹PãJ¾DG†mE‡8‚E™iI³z‚Eß]DŠ%FŠ2Hè~JŠ E£Z†D£AO¢B‘EëyŠJßX†GÐ!RëI‡Eë`‡zëjFßbYì*‡Fë_‡{ëi_í…Fë`Dš zëjƒYì*”@Vî,Rï@Dî,‹E‰KHï‚D‚hD“6LðP‚FénEðMDˆƒLðQ†D‰D‚hŒFŠ Tì/ƒDï‡@EïYðD@wð^IñV@EïRëI‰EñVE™wƒ@Wî,Rïl„{ï_íHŠ*EñVF‹„PëyMénPì
Gö(ˆJßXDÈCFŠ+Yó}EŽEñVD@@Lö	EŽYó}†Föy†D÷QëmsõAF‘^EñVE–høKøC…WgGë8„SëCDù/@dëZEùF@U÷nEùFDß]FìJ‚@UíCFùFFë`@Qî,EùF@lõEùF‰Fô‰qô,Yö9\ü6„EñV„@eý\DýCFûtDýR@Iý\ƒUö[EùFƒDÆEßeŽ@TÿBJðDŠD¼gF¿H„Vñ6EùF‚E€3‚@eý\†GøMDŠlqìUcþWùD˜kSëCE˜k@cë[E˜kƒFûƒqëiYö9ZíE˜k@U÷nFƒW@YûtE˜k@lõE˜kƒFûƒ@J„P\†VI˜pFöz‡@K÷ŠY‡JŠFþE‰@`ý\F‡^„L‰\…@Z‰kWùFž-SëCIž-N„F@FöZíGž-@U÷nMž-G„HD‹+@IŒFž4[6J¤PGî"H¥g@IŒJ¤PZ‰:Gž-ƒFûtƒDÿA@HŽh_‹?D¨2SëCE¨2„E€3„@SfRZH¨7FŠc‡@Jö	W€N¨2I‹~H‘k@gŒR¨2N’fEñG^}„TMénp“9Fž-Gõ{D‰E’@K÷J€WÚLÛb†H‘K@U­lG¨[EE‰iJ‚xDçIƒD‰.D†D DºJEÜu@]®XPè<G—&MÞ„I—%ƒkÁbÞI_½ˆL±FE¾Q½N‚W†GD½ZI×JK˜DË8Gš HžxQè<„DD†pD™1E¾\N²$E™7RëRšAI†{J¾DH‡	IŽ=EÜHžxH‡	N„	DÜ‚F²(^›FŒ~@S‚…E–„DšƒEºv‚G—#ŠD–)Gœ^H™.Jƒ	EÃLºcDç;EV@W6H¿NX˜„@D˜0TÂ]m¼8Ižz„E˜AnÁAF˜oI¿NˆIšoŸIÁo™ƒDÃ‚Y†'E¾O™NEÒNHŸKOSD«(M™kXÆ,OÆPI¡O\¡WF¡lšea×J†IÙD½ZR HžxD½ZD¢GG¢BJžxD…}‚DšDßpH›MŸ>DÁAH›P™'ƒF¢FI±IEWDœfGâ)N™}F«OšM´sED†_D¤3ƒH±eD¤~†DæHL—
DŸFE¥H½RJ”gR×JT¢
MÆ_V¤ƒD†oO“oe×FD£G¦O•-F£AI¦DéNL¥T™rJÈ$G‹
H¤G¦L§Iä5N§I“~F‰-ˆF£d‡J¢tD¥"EæAO¤bH§ZDˆD¤3J›xfš/F§K¤(M“Efš/H›XDë.M¡_@\–"E‰Fº+DÝE—.Dâ{G$ƒD–{D™2„H®P@j—5Eª0Dª6Eª;LÞIDª<oŸy˜nF…QGÁ:HãK«JK†'…E‰W„EÂpP½ƒD†3‚E…uE…0ƒFÄ?T™BKâ$F«<Iâ;DH†E«UF©;DÃuO­EéWGæGo›E½ZH‡	ƒJ›LI§AƒI®CE¾N‚E‰-DE­WI¥jN™vFÌIG­$S­rE­$ƒE›1FÐ"O¾J®PJÇoV®DD®bP±eF®=G­$P”wH«…Z“<K°6„L°EKÈ#‚DÆL‡	D¤>FÀcE‰WH‡N¯lT®oD®bD±Q°I×JK±Eš<D–ˆH¯ M¨^c›aL¾=G­~E¨D£w@T­m‚DðYD‰?G[O—D¿HJƒGç-DçNDðtE\E¤%D®>EºdD³VEº[ƒDœpE³9@W6V½N¾@DéXD…Gë Q´yDD­b™K«J…Fµu…FµxD¶D¶DV†EŒUI¬aH‰Dµ{†E9H«SF¶?‚DâQˆEä9K¶*G¼2‰E£@G¶k†E‰…D¶UƒK†'N˜8G¶kLÀxFÁ
^¬cƒD‡l‡D#D¸HÃƒG±!D¤6E›1DûƒEŠf…HÃƒFÒyP…M„FŠeƒD¶`G…^E…@…FÃ]HÆ%FÇzGë D®bH¹…D¨dDß]P¢&JbH¡3‚E¨Y„I!T½G­jFêBJ‡"H…Dº
‡I¤6Gº(EµIºD§~D D­rGãH¸G¤7Dº_E¸EµDHD‡c‹G®PêB‚Fê4DéXEê5Dˆ2„D‹bF»4ƒG»=T¾;NèKE›
Gº GšIQ»"…c»3f„-F¡G»3DÆ2…HE¼uJ»zƒz¼F¼iaénK½	o®f®gK¸‚r²ƒG¬r„Hª(FˆB‡E³eD™1F‰$H¼fD‰?†D RFƒ‚Gñ6Q¾[K¸6F¹YF¹`L¸H"E¸/F©;K¸6‚DØ\Eû†HÏ/@Y¾LÀ:F¸IDØ\L‡	E¸6J±(J›;Dš=G±yE‡G¸HI¥GF¸It¾fG»D•AHˆBO‰*„LÀLÁ7E¯gE¨NÃEºpE¯&DÅ/EÃ(Jº>DÅ/FÃ5Dš=‚D«‚Eº}†EÃ(†IºG»FÃ'H¿DýX…H³fD‰.F¿xDŠ DâbƒGÃ-DÄ1E»/GÔpIÃ?D™vƒG©P…E¯C‚Eº}Dô†DÄ1LÄJFÃ5…SÃZFµwFÓzG«(D¬~H¶6HºhE¶6‰E»/F¡I²$TÅPE«	‚DÅ`EÁ[Eº~IÅD`¨wJ©DºŽFŽ0XÅw†@BÆEÃ[wÇ7IÆuDÄ=DÅFáUEÆƒHÄ~K¶5JÅ4ƒFÅ>E»K¤8E&D¼„FÆ5EÆKÆPÂNHÀ4LÈsDš=‰FÈ;EÆDìD¶ALÅ8p¾w®fF¤|L¸dOÁKDÊ[„GŽ6GM¯eMÊ[^¯I¸IL‡	LÁwK¯gG¸Iƒ^¯G‹T­GKÇoD¸s_Ë(D¿WJÌF´NÅ2OËEÅS^Ê=F±NÉ3G±yIÈIÊw‚FŒTnÁKÎO¸cF¸Iu«ZG²$N×EP±tƒDE²MÉP‡D»…H‰?Y±k…D¨MFÏK«([ÏEEÄeUÏcL¾1D™J‚EêMPÁ*WÎ}EºMUÏc\Îy‚LËYE²MÂO“EhÐRL·xJÌIJÎFŒH±!UÉP‚F»UNÁiR±HÒ9k² EÆNÐRJ¤MHÃWOÉTN¢pJ˜Dš=DÂlF¤^EÆa„Dž6ˆF«+‚FÚHDÄU„F¤^G©4U½YK©_˜D£oO¢oNÓYF¤QEž2F‹+JŸ\žDÔkIÅlQÄOƒOÄpKÆ/EÈiLºDÕGÈjD¶AJ¹	GºDÐ8D…Q…D¾4Eé*HÍD¶HÃ-UÄ=dÈ(F¶GÔpGÔpGÈcDÏaEºHFÓG¼Iº?FÖJWÖPDÈcF™D³VFÓF£@E¼FÆFD¨`DºD‰_ƒDýCg„-E£VƒF»„IŽ/[È*E×M‚F×pT×E¬,E±aGÂ_E:DéXD€5‡L©;_ØhG¶HVÙ`ÕRF×.G×KÐ!Kºo‚DÅ[F-H¸DEÚ/K©=Hº7E?‚EÉHÚxHÚeJ½Y„D÷}Dâ{EçDG×.‹L¬DE¿,DÖ6MÚQDƒ	FÙ>‰EŽGD‚]FÖH—"Fñ%JÜNÛ`D‰.Df‚HÚmPÔH¶zG¼VÔ*[Ô>GÛqO¼JÔjOØbDŒLØwEaF¶|@×ƒFÓo@pØMF³8@‚ ÙDF´‚D¨WH³fG³ZMÛaD‹EçNG‰G O³KD‰?…E¬KNÛaG´DºRF‹ƒGâ‚D´Dµ$F´HÜ
MÛaD…DØF‚kFµADÚxDà†EƒD(RâD‚Eã-EÜ‚HâwD6Fã,E¿T…Eâr‚Nã‚D¶E¿P‚DÜ%EãpE´ƒ@`Ü:GÌq@TÝ"G©!‡GÄQ+GÄ*aÖLNÅSÃZF¶PÅ4@_Ä1[ØhIÅ+U×„[‚qDâREå}GâxR+GðxE¿X‚HG´ƒD§aJ‚xG„D!ˆFèQEå}Dª=ƒFŒDè.„DýTEè,D¿XG¶dLÄ)H×QZÄ<bçWUÈUHé@GÙ)Hé@NÃ:L«DºpG¬EHé@EÃkIÙMê9FÆDÆƒEÝLˆIêjLÑvVëFÄdgë[È.DÙJêkPÈWFÂLJKê.J¶cDæ‚HºgDìb…F®hëxF·U×b×MmÄRHØaélIíFêU×W×.VØƒKë7lÚFPÜHƒDŒZÜXK©O°a‰E£nHÃwRëxPÝIDÙ]Ý\Dˆr‚HágUè<GÄ*ŒE¹ I!E¹ E€3„I,P”E›;EÖ*J­OHÖ=FÃF‹DÐREñtF®Eñ-`êKG¶Pêu^È.G¶SÈW@(ÅDƒKï@/Æ\ÕVEñtLÈIJærbéTmÄVHîEê2‚WÅME°hI·_ÆGâ`]öwD÷Cl÷G¶YHéUG¶YG»/D·$D÷CIòIø TÆDì„EÉ]D¶\GÓoSô!\ÕVKøfFöfRí]bÕ`EøjG½B@G®^¯d¯N‚^¯cë}Wå^g²$\×MeîHÚ3PîDGönYÙ$E­GÙD|ÙMDÃEª<L­FMìx_ÚxG¶PG§A„F¿OG­GâxˆGœ^K+DœjDë‚KãEð}F­ƒD€9„DèsEª…D³zGìnDèmƒLþPˆDþm‹GâZ‡D»E‡DÏ„DéKþQ‰HþzˆEœoƒHÿ	†Eª%‚DÉ‚DÜ:G§AGÜ?QÜHG¶PQÔ"YÔ@X«1NÔj_ØhG¶PSÈW@YütîTƒGÏ<qïpÚucÛ'‚JäfK+‚NÿYaÜEÄ MÛSMþOR‚ƒsEÌKþDDª(JÜK+KþQF6KÜ;wÜHYÔ@„ZÝ ~ð*mî[†D»@ ‚‚iDÈ3k‚ƒmIÜHÜ
Fè,‚Iâ EÜƒE»F‚ˆfN‚„	F‰G¿*EÛ[@\‚…$H„	@V‚†G[D½*@S‚H³vD‚„H‹$‚FÌNè9I—M³g@U8L…QRëE“F…Q\èYW™TG“\KjQñV^ë@a‚Š^K³gJ»M‚‹VDþm‚DÐ,ƒ@X‚‹pH…Vëz‚ŒkE¸RKjKº
@]²cH£GÄVE G×pM³ZDŠYFâZF×qDÛ?D¢@ƒDœpGâxF•L‚‘&FìP‚D‚ˆEí?D¿:H‹‚DýCƒLZD‚‰E¬4Dþm‚Dñ&ƒDèPDˆu†D…TD‚ƒnN¡WH‚‰„E‚’0G[F¿[E‰iƒEê+‡Eè[@Yç^K…eGÌqEŠYG£OG½DŠYƒDŠYGF‚G‚‘mDØ\FUFž.D©D»‚F‚€$Fž.GìCS‚”ZS‚”ZL‚”Z…L‚”Z…L‚”ZGöUM‚”mGöUM‚•GöUD‚)L¸G‚‘n‚E‰;E»F•M‚ŠOGÌqF£FØF•E‚”*HÔ3F¡F•K‚•@^²bi‚‘E6@p‚’!D6O‚”Eãp‚D6a‚”/Dù/L‚”Z…I‚š$@N‚•wF¡E‚™h½SEÙ!@‚–Z‚D4@o‚’"D‚œ`O‚”D‚œ`ƒD‚œ`@)‚”/D˜ka‚•KD˜k@f‚•_E‚žUDŠYF‚žnH‚–PE‚žne„-@‚›GF‚–FEãp‚E‚žgE‚ŠRDEÜGè,G‚‘nD‰.Fñ%F‚›G@q‚œdS‚–2R‚”nŸR‚™ru‚¥\K‚žhnŸD‚”5G‚›Gq‚¦]K‚–`L„h†G‚§]HÃG‚§]‚I‚¨E¸@S…eDñDÈmDŠYEš=DÀjDŠZFÄkG‚¨5FñoD¥%R‚¨5‚Då}M‚¨LL‚¨1W‚¨BL‚¨ZV‚¨kDùsI“‚H‚¥6EºzDÄsŒH‚?F‚§~‚F‚‡J‚©U„G”p…G‚ª%F‚©EF‚§^G‡"†Gì#F³yE‚ª5‚I‚©KK‚¨%H‚¨H¸'H‚¨F¸'L‚ª|‰D‚ªDñD¤rE¸'‚DÒ<I‚–…Iš'‰F™[F‚ªRH‚–VƒV‚§S‚–EG‚›[‚¦WR‚¨MšSJ‚ŠSG…q@U‚Š`„Lç(D™1GÛxHÜ
F‚£4O#F—@j—5F¯?G¿?^èW`™TUŠ8QÉE‚©"Dê6Fð„E­K‚D»vO¼V»V\š@@\‚–mKáqHQ³]F³?D‚£5D†5F‚€‚DéFƒ@w‚­uDÚQHšIX½qÞ%GÖQ¼rK™.MÃJºIÁoƒJ¹	Y™[Jº]ëEÃG‡IñYD½‚G•=HñfE‚³VI‚³,D‚‡‚D‚«HêWFÀSHÓHD½ZE‚¯a‰S‚¯wD‚´uU‡hHš`H½DéXY‚´]H½E½J+D¦KH»xSê5O‚µ.G©@Z²eE¿$HþnM‚­KIãHÜ
G‚‰J‚£ F‰!O‚…HÄVIÜ@‚±WF‚´PE‚¡0@@‚²`L‚¬2L‚ŒlO‚”$O¡@F‚”*V†H@CëZ‚²FDÕDHÁoF‚¬hùE‚™fE‰.IŽ=D‚¨B‚D6G‚¬Lžx\‚ºsF‚™HÑ;Q‚»GZ˜MQƒ9E¦^DŠZD‚œ`F‚»XKú<^‚»vQ‚¼bV¤)X•y@[‚F±"N¿ZEÄ FˆBT‚‹OL³rD«(D‚¼]D‰x‡DäE‚·~HÛSD†E‚œdDˆuEèWE‚’VE­$G‚¾/„D–Dª(QÁN@W‚‹qG…0P‚°F‰3FÜ@D‚¹RÂv‚ÀiH™1l‚§L†+EŒI‚”0F¸IZÃ#D‚”5K…M…@H£hZÃeW…xP‚ºPÂODÒOF¡IJ¦mG[E·xN¡jd®gU‚ÃVfËFVËnU‚ÃVEÄ1H‚¶3G‡1‚O‚´PI¯CUÄGO‚Ã\c‡Jˆ@P‚Ã0MãIé'I²BKˆ1UŠ2KŒ,FŒ8GÎ4NØCLÙN³tL€y‚Æ3D…0a‚ÆoFßbJ‚¼XDñ†F›PKÓH©vƒD›-D‚È%H°‚F‚ÈDÜWD¶GƒHÜ@F°{I¤qD…sD£i‚J‚«FF‚Å&‚D¦i„D‚Ã@H‚È}M‚É‚L¥D‚È}„O¡mXÐ#U‚ÆLN•*V‚ÆzFì$y‚Æ3Q•'W‚ÆzJ‰6I³*X&Q‚ËJöRT‚Ë)KŽr«3@G‚ÉPLž4n£e‚Æ=P•(}£Z‚½?P±EÜ@c©%E‰oD¿:H‚Ä~„D‚·}DƒG‚ŽX‚H³RI‚¿K—I‚ÅnF´EþED´„D‚­E…G‚±;E„D‚’J‚À1@d®QN‚À3D‚ªP„M‚À3J‚¯T‚³:V‚Ã!K‚° Z™^QÉG‚È/TÂuI‚Ò"ˆEÿU‚N‚Ò3PÂeY£rF¯VÆS‚¯LS‚ºlH‚ÑdM›'K¦nG¾1I‚ÅƒD•G‚e™iV‹rP‚Ã0cŒW‚Ô=E¦@O¦KG¥"SÆ-D¥"MÆPI¥GDÊgIÐRƒD‚‰vF‚ÒGE‚µaGÆQE¡SQÐI¨ M‚ÕvH‚ÓmEÏZH‚ÓzƒD‚ÕEU‚¼u^›V¨rL‚ÀEHÜD‚Ö6NŒeûYW‚×*L‚ÓLI²BO™rPÆ6ƒNÇTKú<Y·1E‚È4IÙ'fÓ OÖH‚½)WÔrEÕE¢E¤_LŒE¨e@xš_G‚ZH‚ÁZE‰N„DˆgH‚£%H³gDç@D»H Dª(Dø ‚GÛxGÜDÏ‚Eä2P+Eÿ%H³~@[‚ŽsP‚³:bšht‚ŒqSbD‚Ã0OšA@]‚IDç@GºYDœqH‚„vVðvƒEé>E‚¬[F¬R@z‚ÐT‚°@H‚¹R‚³:KFV™[FÂLOšAE‚Ä|@d‚eE™1„I‚ÛpJ‚Û]H‚ˆRG‚¸EÃF‚ÜBF‚Å%…KF‚µ @y‚ÜP@P‚à_G‚§G‚´f‚@H‚Ñ7N¹IE¦E‚¯a†E‚³/T‚µ&P‚´|J‚åE‚ÕzI‚/@[‚¬kF‚ÐGâxHâ!I‚Ï&D‚’…DÜEáq‚J‚·>D‚Ñ:„DälEÄ DâxD‚¨6@j‚Ð(„E‚¹Z‚Ñg‚§Q‚¹gE‚Í‚E‚ç]M‚áAE‚Ã@F‚é.V†HI‚é#I‚ÓPE‚ç]G‚»U¨oW‚¹E‚¼I‚»GŒcR‚¼'QùsM‚ÑE‚´6@Y‚Š`F‚’qF‰c‚I‚ç„O‚ˆJP‚ŽX@m‚ŽwD‚«9I‚®rM‚¹g^‚¯e‚å/E›1K‚¬ZF»+‚]‚¯p@W–"DÚ6F—D¼nDº_G‚±F¿[F»Q‚¸ƒE‚ïƒF³rH‚ÐO‚…G»‚D‚Ï!‚D‚Ûg@q—.MÛ~@A‚¹{‚ÁX„U\·1UÂaR£^U£tTÂuc‚Ñ=G‚ÃEP‚ÙZ™^KÐ1D‚Ð D‚‘_R‚ÄJ‚º%@D‚ØXq¤3E‚ÓK‚«#h¤vT¥"y¥:p¢uGñRI‚Ö&HägG‚ÀJF‚ÅIæ7QÒS‚ÖD‚á`V¨n¢G`›=@U‚P‚ƒkG‚ˆqD¿IEÛAGÜJ+@l—5G‚ö`‚Ñ@ ‚ñcE‚»EƒDÅ‚E‚¾{F‚úYK‚òKGÔE˜>‚EÔDã‡DÔ\‚Ã[‚ó@E‚óQ{™tPÄ"E‚úZQ‚´DîoF‚ü]H›	F‚áGE‚úZD‚ÊSH‚»U‚ó<z‚ôE‚éG‚úxƒG©KG‚ûFño@-‚ôTL‚ÓiD®LI‚öM‚¶M™iH‚öEÈ2G‚ÜH‚ù+E‚¶E‚úZL•Qo‚ÖGe‚óh¦wM‚ÿpX‚öPƒ€i‚×.TÕ"G‚ÿuE‚ü|Qƒ@L°{`‚ö3N‚ýn‚S‚ý|V¨O‚êVF‚ö8Rƒ‚@[‚Š`H¼fDé#H‚ü\ƒF»#J‚ŽRR‚‹`†E‚Ï^I‚ßDƒƒ ƒEÛ.YƒƒF‚îaN‚“@Y´!R‚úSX‚üg^‚®{W‚úSD‚”AE¡Z‚³oK‚úcn‚º)Z‚ºXF‚ýE‚·^V¹ZKƒ‡HQ­ZWù"Gƒ‡HEãp^ƒ‡TE‚»hV´yQƒ9Gƒ‡HE‚žh^ƒ‡TE‚žo]ƒˆML‹^Gƒ‡HF’T_ƒˆF’T^ƒ‰"JPGƒ‡HDÏ_ƒˆDÏQƒ‰"[‚Î
Oƒ†p@W‚÷7F‚ï-G‚±WF‚ý@n‚ø>_ƒ†h‚§W‚úSN‚§QI‚ýoj‚úf‚ý@Bƒ‡Kƒ‚Eµ?F‚¹G‚ûHƒ@Fƒ‡q\ƒˆNJù/QƒŽnD6QƒK‚¼Vƒ‡~Jƒ@QƒŽnE‚¼gPƒE‚žohƒ‰$QƒŽnF’TQƒ%Gƒ‰xfƒŠ QƒŽnDÏQƒ%EƒŠP\·~@^­bD¿uD‚Ï"J‚’
‚D‚ÛgEE‚Ï5D‚ÏR@nƒ‹tLƒƒ @]ƒŒnl‚ýG‚ÖO‚ýEì8Oƒ•I¤#@U‚Š`D‚èLL®EQ‚øK+H‚îI‚ø*E‚ëfF‚÷DÜƒDÿU‚FðF‚ÐF‚ˆWE‚¿P‚ø@jƒ‹xE‚ˆh‚®qq‚ñcSÂvV‚ò&R£^j‚Ñ=@.‚û/|‚ý2@.‚þH‚öF¯?D‚¯mN‚öE‚ÿ_J›@‚ÖH@i‚ö.@F›GÙ=N‚ø%HÜ
G‚ß-Uâ!@jƒ‹xHÝGƒ–T@ƒ˜@q‚úl@‚‚ý2H‚öG¬EOƒ¡aJƒœr@\ƒ‚3@Z²eHÜ
U‚Û]EçNEâxQ‚ëy‚HäE‚çI‚HâF‚´`EârF!E‚ç*Gƒ‰SD‚Ï/FœiNãG‚ÜDÃFµAGã2Dâ\DÉKF‚èPJ‰D‚îqM‚çUD‚îaDþsE‚çGJƒ¨jG‚ß @^´T‚ð/FÌr`ƒ¡jk‚§R‚éJƒªJ‚Â"K‚³XD‚”5„E…Nƒ©?HÃƒoƒ£Mƒ¬G‚”(K“oH½Fƒ‰T‚Fƒ­D@O‚³oF‚ó bÖ*P‚éRDâ}E‚ìrD©HŠFì{FârE¸PKƒŽ)HñgSë,Jù/E‚µJƒ¬*I‚È/Q‚ê<Kƒ¯6ƒL‚é{IËj‚Hƒ«DE‚™fGƒŽ}Fƒ¯iNƒ€EHƒ­-Eƒ¯id§/Rƒ¯JLƒžJúvM‚ézT‚¦Yƒœv]‚ÓLD‚«NFƒˆ&L‚ÓmPƒ§$I”iEƒ±]D±SWƒ¯E‚™fF‚¡0FƒˆHVƒ°Pƒ²)eƒ°7c‚×Y_ƒ°sHƒ­-EËWD¼iF‚©1ƒF‚ªRH×E[ƒ°wK§;HÊTƒDÄ3EµAEýeFÊrF‚çNHƒsƒEƒ¯(Gƒ²_Hƒ®xPƒ´$FË7Oƒ´CHßKPƒ´$FÜOƒ´CUƒ?Gƒ«DJƒ%Fƒ¬LE‚¼bG¥9Eƒ‡rd‚§Nƒ¬Rƒhƒ"jƒ´D˜kHÓIƒ‰S„Hƒ´:KÓ>Dƒ´KÌ4Hƒ¶|ƒ@Gƒ¯7‰Fƒ°Jƒ°D‚¶Fƒ‰yMénD±SD‚žVDƒ²DåD›<Dƒª8Hƒ¸E±i@vƒ°@Vƒ³GEƒ©IRƒµDê^Pƒ¶lRƒµ,Fƒ¸1@JƒµDDê^cƒ¶L‹^Rƒµ,G’TPƒºbTƒ¶n¸Nƒ¨dDâxD‚ŽNQ¬`†E‚­l]ƒ«7‚QÔ*L‚´][ñYjÛTGŠAGä0Eƒ®nE‚½‚Gƒ©@@Vƒ¨ƒGƒ¨fJ‚ç%H‚aƒEïE‚ÛiƒLÜFƒD‚£I‚åEÿCG©4ƒLâyKƒ…F‚µ Dƒª<E‚ëNJ‚µ|Dƒª#E‚­AJ‚·?@w‚­uH¨SGÞ@Cƒ«TM‚ä~k‚§E…0GƒÀ\‚³4Y‚Ò:Z‚öfN©H‚åI‚ýP‚ÃLJƒ¤xGÊgS‚ÓpHƒ®Eƒ·2W‚ÕTEƒ·‚J‚Ø.W£t]‚Ò$NÂeo‚ÓT‚ÕN‚Õ]I‚Õ1J‚Ö:y¥:EƒÃJGƒÂZ”xFƒÅ_a‚Ô<Q“Erƒ€!x‚ÖvmƒQH°{c‚ö.HƒÃGNƒÅ`L‚¯aEýGs‚åvW‚óEŸdšiV‚é`‚ÖTb›=iƒQ@\¹TD‚ÏsDâdFÓ0‚I‚âjGä0Dƒ‘7‚F–yHãH‚„C‚E‚·e‚Dƒª#DéF‚ïKDƒÀ‡Dƒ’dE¬GD¶Eƒ¿p…Lƒ„VE‚ëgD‰[Eƒ©8ƒEêMƒD‚ëND»DŠHƒªRJ‚±E™1H‚îLƒ¿&D‚†YMƒ¿7Nâ7IçD@rƒÀ$F´@HƒÁEƒ¾S‚ä~O‚³ HÃI‚³XIƒ”XMƒœD½‚F–(Hƒ¾[‡hLƒ—lD‚­BUƒ¾H‚öci‚´Gƒ¿XI¹HëEÕD‚´RD‡O‚´^EƒÃK‚Ãh‚I‚»kPÄ"]‚»wGƒÐDRƒžu@e‚êd‚Fƒ–L¿hL»H‚ÏMM³MDƒÌeD‚Û{E‚§\D‚†YO‚ß%V‚p@]5W‚²AJ¾S@Bƒ«TZ2N¬WO‚í$Y†EDÈmZG†yNú{N‚áVMê9GÒE¾4MëVì<Fû?@Z‚°5ƒFðtFƒX‚pOƒÒG²Gƒ [Kƒžv@oƒÌkO¾N@Jƒ«TaƒÔ0EƒÔAHê/M¶bE…E·@gƒÔQNê+dƒÕSFƒ•I×tIê=F‚üo‚KêjFÖQëH‚ÿ}E¾4JêkEº @Vƒ‹E†Q³]IƒËDƒÌHƒÒ2E‚îbKÛVFƒÊtDƒ©,‡EƒÒ8JDçAˆDƒÜ^Eâr…@m‚ø;Rƒ½@Cƒ«TQƒÎ(Fƒ¾NƒÎCE‚³lIƒÔ'Fƒ–vDƒÎ}D†U‚ÑOI½W‚ýV‚´vIƒÏOX‚µI½N‚µ8K¬0†G‚£"F‰nUƒÜT­„H‚ÏIHƒÌEƒÌ2NƒÒ$‰Sƒ½Eƒ¾Eƒ‚\ëP‚§W‚ŒTF‚aTƒŽYƒˆ(GƒˆK‚EƒßdD‚¨[Hƒ¬m‚Hƒ®xEârU‚¶NƒßfDµ.@VƒÛ)‚DƒÍaG‰GDƒâFârF³?E‚­BKƒ¿TMƒÜ‚DƒÒ9Eé=Dü^@cƒ…Uƒ—cRƒÏ9@GƒÝvHƒÎ+@|ƒÞOGƒákU‚åfOƒßfIƒÕXƒÐIIƒâ ‚HƒÕJƒâ ‚JËzVƒÈSƒæhF‚EƒçAHƒàR‰Gñ6@V­k„G‚ÏgH‚·WDƒãeFþhFƒÜ&MƒËGFƒ–v@j‚¿WMƒÎ~Yƒ«T\ƒåHjƒÞ|L‚Ã\`ƒæ.L‚í\^ƒßW@`‚¬kƒIƒ ZJƒÌ@o‚®Dƒì(f‚ÝXfƒß^‚¯_JƒßDƒæJ‚FƒÛ~Fƒì'DœjFƒ„aGƒ’{JƒçtEñ
@Y¾fF‚ï-G¼HÚGH‚î‚D‚†H‚†[@~‚­nT‚† ¼&s˜pO™GZ‚ù@X‚êqfƒï+G‚ï%OƒïV@zƒ×V‚‰w@Cƒðq@Nƒñ2Oƒ—v@^ƒòNÛHTáh@‚­nTå@Dƒô0zƒñ4DàE‚”Lƒ™
P‚é#Rƒ­2Kƒ­'c‚³oGƒødL‚´Gƒ´$F‚Õ1FƒÆIºLMë6FâGƒùJ‚ê<GìxTƒžvM‚ÓLGƒødL‚Ó[Hƒ­-\ƒ±dE£Nƒ±J‚ê<GŒM‚és]²U‚×j]ƒ«7H‚½D‚–iLƒûGÛqFƒû@`ÜDºNH‚·PGÛqHƒïV@rƒ x@ƒô"Pƒ¡b@X‚êqK³8Dâ;P³JN‚îK³gDƒüOƒÒFƒ´$Dƒ„LN‚¾m‰@X:N‚À.Gƒ´$DÚQEƒùdZµ0g‚§KƒÎ[mµJEÙ0V…MIƒ”XF‚Ã?DðIƒÕna‚ÃOw¹O‚ÄlMƒùLIµIƒÐ'G‹gVƒ†aN‚Ã]H’zYƒá>DƒüVÙ$EÌ@H‚‡cƒÕ>L„ƒ]‚§JÃuGÙnGƒúƒM„„^‚GƒÐ'EØ\@e‚Î5L‚‹3g„€%@w´#PƒùY[„vR„‚6L„ƒ@D¹Hƒ†pZ„†@g²cS„€RH‚ï=‚D¬?@g´#Iµ@O„ˆ)DéXDƒzV™Jµ@P¬SE¶<JêkEµvTƒÎWE‡$Vƒ‡VEƒŠSFƒî&DƒçpP„ŠK‡FÅ]Hñ
JÅJKÅ]DØFÆ(ˆJÅqKÆEò
K„*FÕxEÛ'Gƒ×EµAKýKÆJÏ^Q„XI«(O„ŽG¬#Fƒº6Q„X†E‚ª+Q„Ž3MÃRM„\G„‡DÀUˆG0P„CD‹%D‚ûD§`Y„D„_ˆU„|HÝEÉFºOj„ŽEƒÐIÉKN„J„-DÀNDêW…Fímö9FÕxGÄLPÔE„ŒFð‚D¥gaÔ*\ïI²$Jð‚D„tæsRÕ`GÕxDü?H„ŒeI„lE„†Hñ
eê.oëM„Ž,^È.]ì K„ƒPìRE‚þJƒÏX‚W¹#I„”oK‚«FX„^Kƒ½2JåoO°6Dƒœ^E„…@IðL„‰;@]‚ÚxP„ŠKH‚îF‚û‚F‚ï@P8V„‹wDƒ´$R¾"Fƒ´$K„‹jE½ZƒP„—jH„ƒ%S„˜
SƒùMIìxK‚¬ZS„˜
@Wƒ•8F¬RS‚ïGƒ©|Mƒ¿Jƒèn@]‚çUN‚ÐGƒ´$[‚èLl„‚c‚é`Â4IƒÐ'J…MF…D‚ÕbƒF‚”?MƒˆaJƒùvE‚š%Më6D‚šBO„ˆk\‚éE|„”_^ƒùLO„•4Pƒû[K‚èLNƒûzJ„œvK‚«.K‚–I„œ…N‚«Ca„7J„œHÐ H‡E[‚ìhD™[LËzMƒ´F„˜RLƒÏXJ„žlbƒÚy[„…4K„•6@T‚Hƒ¿P„™YG„™sD¼nF‚€Hƒ‹lE´N‚Û_Gƒ¿5Dƒ¼\DƒöO‡D‚ïEFƒ·L„€@@e„š…z„ˆ@KðZ‚¯!GÅ]GÏL„ŽPKðIƒævg¹K±n@@„Ÿb@XƒÊDÄV„ŠGE„
@g„¡jTƒêPµ@P„ƒZ„£R°_Mð@iƒÊJƒ©iE‚ûD„¡*GƒéDéH„€@Kƒ¿DE„›YEƒÌ!F‚[GÛZEÄ†Eƒ¿Fƒ’pHƒÈ@e„¥HFª`ƒÁq„‚M‚äxE‚´`s„ªqƒÁgMƒÂ`™J„¦R[‚ów„ˆyW„„`„DQƒœ~LƒÁMƒÂ{D‚’E„«(@k„§EƒÒ5F¿<Dƒ¿[D‚¿ HèhD–L‚ïƒ@t„¨mWƒÍb{„©xXƒÎ0Oƒ¬9]„«2{„”_iƒ®!V¯~„6O„¯Iƒ¾NƒÂ@[­kM‚ÐE„†W‚¸ G„€_@d„šHŠG_„¦7k„°
^„«O@y„œ{O‚®lIÝ3YƒíG„„u@\„²ƒEƒ–Jƒ TP„€OU„¡&J„™uJƒÐ Fƒ„H„D²‚Eâ>Kƒ `F‚ß'I„”G@TƒÌlU„š]Eƒ–n„ˆ@{„«2n„6^‚³tb„µ]Vƒ¯\ƒ‰1F‚›GK‚ÓPFƒ‰yh‚»mMƒ‘H˜7Z˜DZƒŠ]‚»wlƒ‘^cƒÑ@„Ÿ\M‚±IƒÒ$Gþ`IƒËFƒMþ[ƒ„LE‚€R²MNƒ…Iƒ…‚Fð|Mþ‰D„yKÿH‚çU‚D„¿ƒL„¿"D„„yEƒ¿k‚IþzPÿkEƒËGEƒ…EƒÌI‚I‰Dã~Hƒ„OG‚€I‚¿‚D‚“HÜsD„·^„DƒËLE‚ëYEƒÌHÕEƒÒBFœkEƒ¾vGƒË|G„¿	GÚxRƒ¼yEìx@g´#I­S­vL…QF„¿	V™N­H„´DùGÕD­KƒÞa‚D‚ö;EÿrƒJ„›sD„´ ‚HË4D„¶}M„ÃI‚ÂWI„Ã	D‚ÂgJ„ÃQ„Ã=P…MG„ÂuIÃƒFƒú DÃuVƒ‡VE,H„¹|G„¿	‚G„ÀnEÀED‚ÉI‚É"Hƒ†pE…uF‚ÙTN„Ã
Gƒ³L‡F„¿	D‚ãH„ÃTa„ª:N„Ã?d„Å †FÓy‰V‚«#O„ÄqM‚«CEƒ®!J„Ã5‚S„ÄLW„±‚Dã‡H„ÂZD„Æ{EârF¹Q„ÃN„Å M„Æ>L„Ãe‚§o„ÅAF„ÇuƒX„ÅvG„´pDöx„DØP„Ã‚P‚ÈmL„ÃQV„ÆJZ™t‚DƒùL„D„ÇI„ÂYG„ÉAF„ÇI‚ÕEÿrL„ÇH‚H„ÇKƒŽ*F„ÉfƒKÍDƒã3ƒFŠ2G„É6D¥D‚€‚I¡eK„Ê.Gâ$F‚ÈƒH„ÊƒL•0M§;M¬#a„ÊLX„ÊqJ„É2H„ÉTL¾fFƒ•H„ÅL„ÇIQ„ÈYHƒÄjH„ÇF¾fIƒ•R„Ç2K„ÅI„ÌK„‰;@X‚¬jN‚¾mK„ÀkF­$Lƒ‹fNç-F‚œcK„¿H„ÍYEƒãhD¿rƒH¿ZF‚¾qDƒªE‚Û{D‚ÆQE„¨,†E‚Ï]D€9ƒF„ÃDƒöOFœ_D‚ø&ƒG„ÎOFƒî6F„Î(‚K„ÎcH„Î$F„¹|D„ÎJÿoJ„Í[L‚‹JU„ÍeDƒ¯|E„ÏD„¹|‚Dƒî.D„ E‚±GE¿XF‚€D„¶~G‚ßGF„Ï ƒJã=D„Ì\E„ËƒG„Ï"K‚ÐE‚ï:E‚âfF‚„kGÄV„D„Æ<…DèPE„Ðe„Ð‚E‚ÏsK„ÐDDèPƒt„ÐD„ÐQH„Ñ‚n„Ð‚D‚ÏxD„®‚MÔ*D‚£G„ÐE„D„ÑVE„Ïtƒ@K„À N‚À.M¯4Z„Â/d„ª:M‚¹gK„tN™R„Âs^„ÂMT…QJ­E„ÅF„ÀF„ÌF„ÀQ„ÄFƒ°~I”vQ¡_H®=e„„9XÌ!QÌ;Y‚ÃVI„ÌR‚üBO¢5H„Õ`‚H„„HS„žI„ÌN‚«CV„ÆuF„ŸXF„ÇI„×@J„ÊBP„ÈJJ„ËWO„ÈjX„É:D„É{F„ËF‚¿.DŸ
H„ÊQK„ÄLPénD„ÄCE‚ÈD„ÏPƒGÍeI„ÙJ‚ÙF„×I„Ê6LƒÅfH„ØzE„Ï!P„ËGM„ØK„Ø‚F„ÙkL„ÙIJ„ØLƒÅfS„ËBGÒpK„×>J„Úf‚O„ÕiI„Æ8P„Ú;Q„Ÿ1K‚æ&H„Û@U„§Dƒ’]F„Ð'†Nƒ’uN„¾@eƒì=L²TZ„Â/~„Õb„ÕxY„ž	u„×c@K„Ø/I„ÙQEªQ°Hƒ•I„Ù?KƒvK„ÊQR“rI„ÆnJƒâ"I‚íSJ„×G„à8@]²[H„Í>L‚‹>GâxE‹N‚îF–F‚£,@P„³L…QM–sI‚Œb„M–rƒG‚§QH‚ÆGÍF‚Ë„G‘cJðDFøSF‚£,E„áL†E„àSEþ+D‰‚J‚‹?Iñ6G[D’hŠHÜ@O‚ÆzD-GŠ1@U„ã…R„ãtZ¬#ˆD‚øL„ã&Eñ&V„âJSƒ½HÒ=UƒŠrD¬9E–)DÜ@‚  is to be used for viewing/editing a complex property.
*/
static GtkWidget *exter_get__w(struct  *ev)
{
  if (!ev)   return NULL;
  }
ev->;
}

/
  Set the s inextendederdisplaygiven valuevoid_refreshs,val *pobj *opinid,type_builtbool presenchar buf[128]onst*namGdkPixbuf *ptkListStore *sTextBufftextTreeIter iter;

  op =(ev) =id(op_equal(pv,pv_cached)free( =_copy(pv->/* NB: Remembhave -1 aslast argument to* gtk_list__set() andusecorrect columnnuwhen inserdata. :) */witchidase OPID_TILE_SPECIALS:clear(  tile_special__ate(spe  s_translation = BV_ISSET(pv->v_bv,append, &, 0,, 1,2,, -1}_endas_stringbuf, sizeof(buf)abel_(GTK_LABELanel)breakBASEbasepsVISIONer_slots_is_am   = flag->n} else""1,  gect_unrefvision->known3_seen[v]4 + v}}CITY_BUILDINGimprovef (iscontinundex[id].>= 0_us_to, &3PLAYER_NAT =adiv23}imag_from_IMAGE)INVENadvancA_FIRST, pinvenGAME_SCENARIO_DESCdisable_gcallback(G_OBJECTG_CALLBACK(_chang_b,ensensi, TRUEdefaultlog_error("Unhandled reques "")id=%d\"%s\"."opC !, ""FALSinH's  button click. This should saget_ed(GtkB*poinuser_*p =_show_(pp)ogglof aean celltre_CellRrerT *gpathModel *mold_a64pptkr(
   = TREE_MODree_ter!1d(0 <=&&< S_LASTBV_BV_CLRcount()B? game.info : I_NEVER || !bynth_child signalueopangextfer= {{0,}, VALTYPE_STRING},start, ,&enden&modifiInstall ieaicanetup
#define ADDPROP(ARGs) do {\MY_new, pp);hash_(pp->t, FC_INT_TO_PTR(->id), } while (0)ppBJ, _("I"OPF_IN_LISTVIEW |HAS_WIDGETPIXBUFTERRAINTerrainRESOURCResourcINDEXINTX, Q_("?coordinate:XYY/* TRANS: T Xvs.*civsystemdescribeddoc/HACKING.NAT_("NAT YYCONTINENTCents:X,Ss"),EDITABLEBADDRESAddresV_DATAUNITypDDMOVES_LEFMoves LefFUELFueldBOODONV_("Done MovingHP = Hit PsunitHPHPVETERAeNAMNamSIZSizuildingUILT_ARRAYFOOD_STOCKood StockHIELShielGOLGolYEARYearcenario DpP#undef
a's 's selreeS*sebind *obpped_rows(sel) < 1_foc(obMonitich  arbeed, so we gfuncPath_urrently, *ob0, &ob=G *new (; p= p->ntesforeach((GFunc)quientr__wViewC *cofil*pmatENTRY(phas)&& in(pfwwhow(whidecoble(col,preRscnotcd
,oevbox,2, *hd, *frscrollwiniew, *,po*noteboo *hsep, *Adjust*hadjadjGtkGroup *gnumG *garraycol1attrstrtitle< NUMSfcoc(1tooltipp__GROUP_BOTH =fkeyvcmp_fullfn_t)tag++/* zeroholds ais nevedm*[0G_POINT,newv,nhpoonPANED(), 256= sidebox4ainbordethAINER()pack1ed_windowhaCROLLED_WINDOW(HADOW_ETCHED_IpolicyOLICY_AUTOMATICBOX, 0withrules_hin()ibut!< 0s(siz_COLUMNW_ONLresizororcosELEC_MULTIPLg_nect""adderved2o_RECONBUTT),estroy"2adip_("Pwill send ar" (i.e. er."""ADD asadd ieficndaken te. Soexa,\"\"ts \"\"paffion/* Righ2/* Ered bence somemto msel2(absNOTEBOOK)searatoCLO_swd_on_deleteowfc_snprintf()%s PNONdjaPORT)!wwF:_("E to limitn."is or mpattey |(\"or\")& (\"and\")ymbol & highercedethan |. A may alsnegprefixt  !APPllofM'rapplREFREStirs (yo)ed,-1non-nnlyts,ds.MaybaputYou munon-you longer  *pnt[ND123WATERROADS3= ((,*pFOCUSci *p(or''*canvasw, h, i, fh, fw,_xuhedkDLORSPACE_RGB8fhfill, 0x0.CANVASv.+= (fh - i i; i++ut_one_el&[i]moves)_alliegthkeyiomkeGkey_exist,(s()->s was ennver*ouetrlcpy28)sza... p*p'\n'tr' ' 'Iys owbreytherreadylRowRefer*rrowobrrow(, rirsGspon
 rm/sDoewhosno suidlookupextraneupplload *,ofbounumsviaGUIifth&non etmyclient._do(unsui Resuld u}*Fbe. H, d Pschr''iapnoutag*paunique_tag, aanaemappnoETTdtagvali&& !is_enemyb%d (%s).agUpdacchowb''. Irdr(raoft Ifisweviousl'tag'iag . IwyisecAdsMakNumeus abouo do, up'' timAttemptwic%p (%d %ssst->Deifs--<=herees 'st'hecktag/*d''"A"g,"successfue->s[pbudialog _TOPLEVE(E780, 5_POS_CE_ON_PAREtoplevelDHDIALO"-e =0;'stheired) - 1i>,'front ()popupd(inclutagnd Alsoker&d
 is '|' ("'&andofbc!'rIfbeha,uufjcpf*pfau,*s[PF_MAX_CLAUSES, j||0tokens(DISJUNSEPARATORi]fcpf->dis[ CON0; j jjpf&pfc[=[j[0]'!' =dup + uthat leaOR ANDAngnd. F:a- M "a" "A")!doa|bb&cei"aboth"c" =str!&&!||memorya""enum vl_MAI. Feeleuneen (Main)IInvisrecogniz%v_}
ENDREP
DELTA 15813 48238 3194
SVN  â(â)* î1 ƒ ’Sî3‚ ¼5‚ \½?‚ [½? Z¿x‚ ¡TÀTfc_fcfcfcfcENDREP
DELTA 14427 114881 2830
SVN  ’’>#h †? – ‚†>€L Ÿ0‰‚ ‚d¨=‚ Ïo«#‚ —û/* common & utility *//* client */
#include "canvas.h"
#include "citydlg.h" 
#include "client_mainfcfcfcENDREP
DELTA 17099 0 764
SVN  ÙÚ:.^ –! € Uˆ@€B ‚R—$„ „,™z‹ cš8 "Ÿ† –p¯1ƒ ’sÆ#
  If available pass the source code string as code, else NULL.
  Will handle Lua errors by printing error description and tracebackint script_call(lua_State *L, int narg, int nret, const char *codecode, str);
  }, NULLfc_ENDREP
DELTA 15694 2184 24849
SVN  ‚€J‚‰
gŒ< †l € ±I‡\€P †-¹X‰ ·QÀ‰ …$÷V‰ }üz‰ Œ{þw‚ ’‹t ½žƒ Ü NÈ €‚{ F£ €E LÈ €„l F£  ‹5ð€l „üI/* utility */
#include "fcintl.h"
#include "log.h"
#include "mem.h"
#include "support.h"

/* client */
#include "options.h"

/* gui-gtk-2.0 */
#include "colorModel *model;
  GtkTreePath *path;
  GtkTreeIter iter;

  if ((model = gtk_tree_view_get_model(view))
      && gtk_tree_model_get_iter_first(model, &iter)
      && (path = gtk_tree_model_get_path(model, &itergui_gtk2_gui_gtk2_gui_gtk2_gui_gtk2_fcfc_assert_retfc_void gui_update_font(const char *font_name, const char *font_value)
{
  char str[512];

  fc_snprintf(str, sizeof(str),
              "style \"ext-%s\" {\n"
              "  font_name = \"%s\"\n"
              "}\n"
              "\n"
              "widget \"Freeciv*.%s\" style \"ext-%s\"",
              font_name, font_value, font_name, font_name);

  gtk_rc_parse_string(str)************
  Update a font option which is not attached to a widget**/
void gui_update_font_full(const char *font_name, const char *font_value,
                          GtkStyle **pstyle)
{
  GtkSettings *settings;
  GdkScreen *screen;
  GtkStyle *style;
  char buf[64];

  gui_update_font(font_name, font_value);

  screen = gdk_screen_get_default();
  settings = gtk_settings_get_for_screen(screen);

  fc_snprintf(buf, sizeof(buf), "Freeciv*.%s", font_name);
  style = gtk_rc_get_style_by_paths(settings, buf, NULL, G_TYPE_NONE);

  if (style) {
    g_object_ref(style);
  } else {
    style = gtk_style_new();
  }

  if (*pstyle) {
    g_object_unref(*pstyle);
  }
  *pstyle = stylefc_assert_ret_val(view != NULL, NULL);
  fc_assert_ret_val(GTK_IS_TREE_VIEW(view), NULL);
  fc_assert_ret_vaENDREP
DELTA 16992 0 44
SVN  ‚£3‚£3 Á ‚ âÁfcENDREP
DELTA 17042 35865 81
SVN  ƒ¡6ƒ¡6qa ñr ‚ „Iñt‚ „oö?‚ Œ+û0‚ „‡]‚ ‰R‹r‚ ‹t•F‚ ‡L¡<‚ ƒm¡< ‹A¬w‚ ¡¸:‚ ûÙJ‚ „K‚ÔZ‚ ˜‚Ù'‚ ƒj‚ñ7‚ „=‚õ#€E §‚ú%fcfcfcfcfcfcfcfcfcfcfcfcfcfcfc_snprintf(cBuf, sizeof(cBuf), _("Declare WAR"));
      } else {
	fcENDREP
DELTA 16929 169256 944
SVN  †  †  ‚„ æ ‚ ƒMæ‚ Ê8éV‚ ¹#´‚ …[í5‚ ®ró‚ $‚¢‚ @‚£,‚ |‚¤n‚ ¼)‚¥l‚ °‚â€‚O ¥Wƒ”‚ Š%ƒ¹e‚ ƒÄ‚ ‹\ƒÑ‚ …5ƒÜ}‚ †ƒâ4‚ ‚ƒè=‚ „ƒêS‚ nƒîa‚ „JƒïQ‚ ‚}ƒô‚ †|ƒ÷‚ á>ƒþ [ƒ¾ Š„à?‚ ƒX„êT‚ ƒ)„î.‚ „„ñY‚ ˆ„õj‚ Š„þ‚ Š)…ˆ"‚ Š…’M‚ ˆ,…œl‚ ‰ …¥‚ ˆg…®‚ ‰[…·‚ ˆ\…Àb‚ ‰…É@€g s…Ó8‚ z…Ô-‚ Éb…Õ)fcfcfcfcfcfcfcfcfcfc
    if (canvas_to_city_pos(&col, &row,
                           city_map_radius_sq_get(pCityDlg->pCity),
      1/city_map_zoom * (Main.event.motion.x - pMap->dst->dest_rect.x
                         - pMap->size.x),
      1/city_map_zoom * (Main.event.motion.y - pMap->dst->dest_rect.y
                         - pMap->size.y))) {
fcfcfcfcfcfcfcfcfcfcfcfcdestroy(sourcesfcfcfcfcfcfcfcfcfcfcfcfcfcfc_snprintf(cBuf, sizeof(cBuf), _("City growth: blocked"));
  } else if (count == FC_INFINITY) {
    fcfcfc†  ¦H§K4‚€u R ‚ T‚ Ånb‚ >ÇR€i _Éwƒ qÊXƒ ƒIËK– Î*Ï%– ˆh` city_production_turns_to_build(pCity, TRUE);
      if (count == 999) {
        fc_snprintf(cBuf, sizeof(cBuf), "(%d/fcfcfcfc_strlcat(cBuf, _(" - DISORDER"), sizeof(cBuf));
  } else {
    if (city_celebrating(pCity)) {
      fc_fc_fc_real_city_dialog_popupal_city_dialog_refreshENDREP
DELTA 16929 170231 40
SVN  Ø	Ø	
 › ‚ ¼h›!fcENDREP
DELTA 16977 325 910
SVN  ‚Ž)‚ŽNXƒ ¾[ ² 	¿ƒ ¼cÀ‚ ü|€e aŠ}€C ¡CŒ!‚ D­fƒ †s½,ƒ ¦4Ä!€[ ƒë €W †Wîoƒ –ZõH‚ ‚‚Œ$fc_strlcat(buffer, "\n", sizeof(buffer));
  }
  fcfc_fcfc_snprintf(buf, sizeof(buf), fmt, num, _("st"));
  } else if ((num % 10) == 2 && num != 12) {
    fcfc_snprintf(buf, sizeof(buf), fmt, num, _("rd"));
  } else {
    fcfcfc_fc_fc_strlcpy(player_name_ptrs[player_index(pplayer)],
                 player_name(pplayer), fc_strlcpy(player_names[player_index(pplayer)],
                 player_name(pplayer), fc_fcENDREP
DELTA 17101 3525 561
SVN  †  †  ‚‡ ¦j €Y †$§A› ¥)­j‚ ªÓ€I ‚ýl€K ú5€7‚ Öúnƒ „‚Ðƒ £D‚Õƒ „t‚øI¨ ˆ&‚ýOƒ é8ƒ…w€U ƒBƒïpƒ ƒ@ƒó4‚ „?ƒöv‚ …ƒû7‚ „„€@‚ ­S„„[ƒ šA„²0ƒ ÞP„Ìs¦ M…¶  ‰&…¬6‚ T…»  „L…¶2‚ Ž…» ƒ e…Éƒ ,…Ë‚ „q…Ì/ƒ ‚7…Ñ"‘ \…Óh€h G…Û~ r…Õp‘ ^…Öq€D J…×~ g…ØG‘ \…Ú=¥ ‚…Û<‘ _…Ýi³ \…Þx x…ßSƒ …àMƒ L…áR€\ »…ãxfc_strcasecmp(name, ANON_PLAYER_NAME) == 0) {
      return PNameIllegal;
  } else if (fc_                        fc_fc0 == fc_strcasecmp(arg, "u")
             || 0 == fc_strcasecmp(arg, "up"0 == fc_strcasecmp(arg, "d")
             || 0 == fc_strcasecmp(arg, "down"fcfc_fc_fc_fc_strncasecmp,
                        fc_fc_snprintf(buf, sizeof(buf), _("%-*s value   (min,max)      "),
                    fc_fcfcfcfcfc_fc_fc_snprintf(buffer, sizeof(buffer),
  fcfcfc_fc_fcfc_fc_strlcpy(msg,
  msg_len);
      } else {
        fc_strlcpy(msg, _("Sorry, one can't take barbarians in this game."),
 fc_strlcpy(msg,
  msg_len);
      } else {
        fc_strlcpy(msg,
                  fc_strlcpy(msg,
  msg_len);
      } else {
        fc_fc_strlcpy(msg,
  msg_len);
      } else {
        fc_strlcpy(msg,
 fc_fc_fc_strlcpy(msg, _("Sorry, one can't take players already "
                      "connected †  ƒû]ƒþ6 ‰.€  ¿^ ‚ ¢
¿`‚ ¢ál‚ ƒƒv€ z‡r‚ Æ^‰nƒ ¿ÐNƒ [‚O‚ ‚P‚ ,ƒ  *‚¢~ƒ u‚Ã*¡ 0‚Ô*€C ŠS‚â‚ ‚}‚ìd€‚+ ›Z‚ñ2‚ Žƒƒ ¢Iƒœ€‚v dê~‚ N´ ‚ƒÂQ¿ d‚Œv …ƒÅ}€H °ƒËCn->playing));
    goto end;
  }

  /* Make sure there is free player slot if there is need to
   * create new player. This is nefcfcfcfc_isalnum(*cptr_s)
       && cptr_d < command + sizeof(command) - 1; cptr_s++, cptr_d++) {
    *cptr_d = *cptr_s;
  }
  *cptr_d = fcfc_fc_fcfc_fc_                              fc_          && strcmp(pplayer->username, "nouser") != 0) {
        fcfc        fc_snprintf(buf, sizeof(buf),
                    _("  %s from %s (command access level %s), "
                      "bufsize=%dkb"),
                    pconn->username, pconn->addr, 
                    cmdlevel_name(pconn->access_level),
                    (pconn->send_buffer->nsize >> fcfc_fc_isalnum(*str_itr)) {
    str_itr++;
  }

  if (fc_strncasecmp(str_itr, cmd, cmd_len) != 0) {
    return FALSE;
  }
  str_itr += cmd_len;

  if (fc_isalnum(*str_itr)) {
    /* Not a distinct word. */
    return FALSE;
  }

  if (!allow_fluff) {
    for (; str_itr < rl_line_buffer + start; str_itr++) {
      if (fc_isalnum(*str_itr)) {
        return FALSE;
      }
    }..fc_isalnum(*str_itr)) {
      return FALSE;
    }
    str_itr++fc_isalnum(*chptr)) {
      if (!alnum) {
        alnum = TRUE;
        ENDREP
DELTA 16015 8500 212
SVN  îî8$ > ” ’@ ”bd† —V¥L‚ ‚*½$‚ …}¿P‚ É> ‚OÆm‚ “[É>‚ Ýdestroy(dialog_list)removefcfcfcfcfcENDREP
DELTA 16984 8913 1446
SVN  ‚¶s‚·,b â ƒ Š=âƒ ƒQìQƒ âVð$ƒ À.Ò|€S ‰/‚“gƒ ™[‚fc_fc_fc_fc_          && !fc_isdigit(name[0])
          && is_ascii_name(name)
          && fc_fc_ENDREP
DELTA 16929 173715 1348
SVN  î/î2. œ' ƒ ˆœ)ƒ ‰ ¤>ƒ ”f­@‚ ŒmÂ(‚ ‚Ï‚ †<Ñ+‚ –F×ifc_fc_fc_fcfcfcfcENDREP
DELTA 16199 43023 119
SVN  à]à^% ž) ‚ „ž+€s X£6‚ ‡=¥Ÿ C ƒ A  ²k­rfcfc_snprintf(dsbuf, sizeof(dsbuf), "%s (%d)",
		  diplstate_text(pds->type), pds->turns_left);
    } else {
      fcfcfc_strcasecmp(text1,text2);
}



 ENDREP
DELTA 16929 183691 887
SVN  ´X¼1‚›X …t « ˆ5…y‚ ;Ž0€a 1:€B  “€d 1•w² 0—L² 2™ ² .šv­ _•w ‚"² ^ŸX‚ ‚/°8‚ :²i€  M¹s€| ¶`¤ #¸*¤ E¹x€W >¼€O A¾(¤ À¤ ‚6Á[€‚ 
Æ1‚ =Ç=‚ ‚HÈ|€ƒB ‚Î3‚ 9ÐB½ MÒ8€u ?Óz‚ =Õ;‚ lÖz€‚J ŸB×8€c zöj€Z ‡N…2€L ƒOL… …?‘ª C@» †A˜€‚ ˆ}žp€‚ Šc©umath.h>
#include <stdio.h>
#include <stdlibfcfc_snprintf(buf, sizeof(buf), "%s",
              (city_celebrating(pcity) ? "*"
               :fc_snprintf(buf, sizeof(buf), "%s",
              (city_celebrating(pcity) ? Q_("?city_state:Celebrating")
               : (city_unhappy(pcity) ? Q_("?city_state:Disorder")
                  : fc_snprintf(buf, sizeof(buf), "%d/%d/%d/%d",
              pcity->feel[CITIZEN_HAPPY][FEELING_FINAL],
              pcity->feel[CITIZEN_CONTENT][FEELING_FINAL],
              pcity->feel[CITIZEN_UNHAPPY][FEELING_FINAL],
        fc_snprintf(buf, sizeof(buf), "%2d",
             fc_snprintf(buf, sizeof(buf), "%2d",
             fc_snprintf(buf, sizeof(buf), "%2d",
             fc_snprintf(buf, sizeof(buf), "%2d",
        fc_snprintf(buf, sizeof(buf), "%2d",
             fcfcfc_snprintf(buf, sizeof(buf), "%d/%d/%d",
              pcity->surplus[O_FOOD],
              pcity->surplus[O_SHIELD],
        foodplus(const struct city *pcity,
				     const void *data)
{
  static char buf[8];
  fc_snprintf(buf, sizeof(buf), "%3d",fc_snprintf(buf, sizeof(buf), "%3d",fc_snprintf(buf, sizeof(buf), "%3d",fc_snprintf(buf, sizeof(buf), "%3d/%d/%d",
              goldie, pcity->prod[O_LUXURY],fc_snprintf(buf, sizeof(buf), "+%d", pcity->surplus[O_GOLD]);
  } else {
    fcfc_snprintf(buf, sizeof(buf), "%3d",fc_snprintf(buf, sizeof(buf), "%3d",fc_snprintf(buffer, sizeof(buffer), "---");
  } else {
    /* Shrinking cities get a negative value. */
    fc_snprintf(buffer, sizeof(buffer), "%4d", turns);
  }
  fc_snprintf(buf, sizeof(buf), "%s (%d/%d)",
              buffer, pcity->food_stock, city_granary_size(pcity->size)fcfc
  if (city_production_has_flag(pcity, IF_GOLD)) {
    fc_snprintf(buf, sizeof(buf), "%s (%d)%s",
                city_production_name_translation(pcity),
                MAX(0, pcity->surplus[O_SHIELD]), from_worklist);
  } else {
    fc_snprintf(buf, sizeof(buf), "%s (%d/%d)%s",
                city_production_name_translation(pcity),
                pcity->shield_stock,
                city_production_build_shield_cost(pcity),
                fcfc_snprintf(bufone, sizeof(bufone), "---");
  } else {
    fcfc_snprintf(buftwo, sizeof(buftwo), "--");
  } else {
    fc_snprintf(buftwo, sizeof(buftwo), "%3d", turns);
  }
  fcfcfcplague_risk(const struct city *pcity,
                                        const void *data)
{
  static char buf[8];
  if (!game.info.illness_on) {
    fc_snprintf(buf, sizeof(buf), " -.-");
  } else {
    fc_snprintf(buf, sizeof(buf), "%4.1f",
                (float)city_illness_calc(pcity, NULL, NULL, NULL, NULL)/10.0);
  } 4, 1, N_("?plague risk [short]:Pla"), N_("(%)"), N_("Plague risk"),
    NULL, FUNC_TAG(plague_riskfc_snprintf(explanation[i], sizeof(explanation[i]),
                _("Specialists: %s"), numeric and string fields, then we compare
  lexicographically.  Two numericfloatfloat because we happen to use
  strtof).
***/
static void init_datum_number(struct datum *dat, floatif (a->numeric_value == b->numeric_value) {
        return 0;
      } else if (a->numeric_value < b->numeric_value) {
        return -1;
      } else if (a->numeric_value > b->numeric_value) {
        return +1;
      } else {
        return 0; /* shrug */
      }float value;

    value = strtof(str, &endptr);
    if(endptr == str || !isfinite(value)) {
      /* that wasn't a sensible number; go on */
      str++;
    } else {
      /* that was a number, so stop the string we were parsing, add 
         it (unless it's empty), then add the numbENDREP
DELTA 16929 181011 2649
SVN  Ì{Ì|
 «s ƒ ¡«ufc_ENDREP
DELTA 17115 3800 3130
SVN  ‚µ6‚µ6P ÌR ‚ 3ÌT‚ rÌT ‚jÎ{‚ zÑg‚ ‚Óc‚ ;Óc [×>‚ ‚gå‚ oå ¤@ès‚ ÁM5‚  PÏ‚ Å`ïVfcfcfcfcfcfcfcfcfcfcENDREP
DELTA 16578 271757 38
SVN  ëë šk ƒ ƒPšmƒ ÌWž?fc_fc_ENDREP
DELTA 16199 55188 6404
SVN  ƒðƒöc‚D®4 …t  §{†€I ‹T®L€ƒM ƒ\¿~€ˆi „'Åk€u †Ëtƒ aÒ€? ‡7Õ&ƒ ‚6Ü]€‚ ŒIá€‚@ ‚qð ± „eó2® ¡AøS» õBšk€G ‚u‚‘€‚f ›9‚–#‹ ‡‚±p€/ Nš €ƒ' Rƒä>” Sš  „x‚¹j€l ‡X‚¿>ž ‰b‚ÎaŠ Q‚ØVŠ ‚[‚Ú:¿ }‚Ý[Š ƒ7‚Þk° „g‚âY€c —‚é€0 lƒ€zƒ ‚8ƒhœ ]ƒ„(ƒ  ƒ’§ ‚|ƒ²1’ ‚fƒµ=ƒ ‚Nƒ¸%€ Mƒä= Žƒ¼?€I (ƒË)€M ‚/ƒÍ0€r …!ƒÐG€{ Bƒ×@€‚o ‚ƒÚBˆ ƒÜY€g ’8ƒÝflog_error("received player_rates packet from %s before start",
          fc_assert_ret(pplayer->target_government
                != game.government_during_revolution
                && NULL != pplayer->target_government);
  fc_assert_ret(pplayer->revolution_finishes <= game.info.turn);

  pplayer->government = government;
  pplayer->target_government = NULL;

  log_debug("Revolution finished for %s. Government is %s. "
            "Revofin %d (%d).", player_name(pplayer),
            government_rule_name(government),
          /* only change rates if one exceeds the maximal rate */
    if (pplayer->economic.science > max || pplayer->economic.tax > max
        || pplayer->economic.luxury > max) {
      int save_science = pplayer->economic.science;
      int save_tax = pplayer->economic.tax;
      int save_luxury = pplayer->economic.luxury;

      pplayer->economic.science = MIN(100 - pplayer->economic.luxury, max);
      pplayer->economic.tax = MIN(100 - pplayer->economic.luxury
                                  - pplayer->economic.science, max);
      pplayer->economic.luxury = 100 - pplayer->economic.science
                                 - pplayer->economic.tax;

      notify_player(pplayer, NULL, E_REVOLT_DONE, ftc_server,
                    _("The tax rates for the %s are changed from "
                      "%3d%%/%3d%%/%3d%% (tax/luxury/science) to "
                      "%3d%%/%3d%%/%3d%%."), 
                    nation_plural_for_player(pplayer),
                    save_tax, save_luxury, save_science,
                    pplayer->economic.tax, pplayer->economic.luxury,
                    pplayer->economic.science);
    }log_debug("Government changed for %s. Target government is %s; "
            "old %s. Revofin %d, Turn %d.", player_name(pplayer),
            government_rule_name(gov),
            government_rule_name(government_of_player(pplayer)),
          fc_log_debug("Revolution started for %s. Target government is %s. "
            "Revofin %d (%d).", player_name(pplayer),
            government_rule_name(pplayer->target_government),
          fc_log_debug("Government change complete for %s. Target government is %s; "
            "now %s. Turn %d; revofin %d.", player_name(pplayer),
            government_rule_name(pplayer->target_government),
            government_rule_name(government_of_player(pplayer)),
          log_debug("Update revolution for %s. Current government %s, "
            "target %s, revofin %d, turn %d.", player_name(pplayer),
            government_rule_name(government_of_player(pplayer)),
            pplayer->target_government
            ? government_rule_name(pplayer->target_government) : "(none)",
          log_debug("Update: finishing revolution for %s.",log_debug("Update: resetting revofin for %s.",log_error("non-pact diplstate in handle_player_cancel_pact"log_verbose("Player%d inventions:%s",
              player_number(plr),fc_assert(S_S_RUNNING != server_state()
            || A_UNSET == research->researching
            || is_future_tech(research->researching)
            || (A_NONE != research->researching
                && valid_advance_by_number(research->researching)));
  fc_assert(A_UNSET == research->tech_goal
            || (A_NONE != research->tech_goal
           log_normal(Returns the default diplomatic state between 2 players.

  Mainly, this returns DS_WAR, but it can also return DS_PEACE if both
  players are allied with the same third playerstatic enum diplstate_type
get_default_diplstate(const struct player *pplayer1,
                      const struct player *pplayer2)
{
  players_iterate(pplayer3) {
    if (pplayer3 != pplayer1
        && pplayer3 != pplayer2
        && pplayer3->is_alive
        && pplayers_allied(pplayer3, pplayer1)
        && pplayers_allied(pplayer3, pplayer2)) {
      return DS_PEACE;
    }
  } players_iterate_end;

  return DS_WAR Update contact infoenum diplstate_type new_state = get_default_diplstate(pplayer1,
                                                          pplayer2);

    pplayer1->diplstates[player2].type = new_state;
    pplayer2->diplstates[player1].type = new_state    return;
  } else {
    fc_log_debug(log_debug(log_debug("set_shuffled_players: loading shuffled array %p",
  log_debug(log_debug("shuffled_player(%d) = %d (%p %s)",
    struct nation_type **p;

    for (p = n1->conflicts_with; *p != NO_NATION_SELECTED; p++) {
      if (*p == n2) {
        return -1;
      }
    }

    for (p = n2->conflicts_with; *p != NO_NATION_SELECTED; p++) {
      if (*pfc_assert_ret_val(num_nations_avail > 0, NO_NATION_SELECTED);
  fc_assert_ret_val(pref_nations_avail >= 0, NO_NATION_SELECTED);

  if (pref_nations_avail == 0) {
    pick = fc_fc_log_error("No nation found!"fc_disorder adds 5%, each celebrating citycities in disorderfc_log_verbose("Civil war chance for %s: prob %d, dice %d",
              player_name(pplayer), prob, dice);
  
  return (dice < problog_normal(_("Could not throw %s into civil war - too many players"),
   log_normal(_("Could not throw %s into civil war - no available nations"),
   log_verbose("%s civil war; created AI %s",
              nation_rule_name(nation_of_player(pplayer)),
            fc_rand(2) == 1)) {
        /* Transfer city and units supported by this city to the new owner.
         * We do NOT resolve stack conflicts here, but rather later.
         * Reason: if we have a transporter from one city which is carrying
         *         * resolved stack conflicts for each city we would teleport the first
         * of the units we met since the other would have another owner. */
        transfer_city(cplayer, pcity, -1, FALSE, FALSE, FALSE);
        log_verbose("%s declares allegiance to the %s.", city_name(pcity),
                    nation_rule_name(nation_of_player(cplayer)));
                /* Choose a capital (random). */
  city_build_free_buildings(city_list_get(cplayer->cities, fc_rand(i))ENDREP
DELTA 11958 0 6175
SVN  •–Nƒu   ³ Z§n 7°2€^ … ¢{¤ l§n› ‚D¨o† ~¢{ ƒu¬5† H°.€
 ¯cÁn Fñz€S jö~ ŸzóR¼ ”  
  cairo_set_antialias(cr, CAIRO_ANTIALIAS_NONE);spec->x, spec->y, spec->width, spec->height);
	
  cairo_set_operator(cr, CAIRO_OPERATOR_SOURCEantialias(cr, CAIRO_ANTIALIAS_NONE);    double dashes = 3;
    SOURCESOURCErectangle(cr, dest_pos->x, dest_pos->y, size->width, size->height);
  cairo_clip(cr);

  cairo_translate(cr, dest_pos->x, dest_pos->y);
  
  cairo_translate(cr, rect->x, rect->y);
  
  cairo_paint_with_alpha(cr, alpha/255fc_strlcpy(real_filename, filename, strlen(filename));
  fc_ENDREP
DELTA 12859 11899 10894
SVN  ‚ÃB‚Öbƒm a …t  x†– Y†€} W‰Z€Z „‹vœ ˜  ~¨(° B‚µ €a R‚‰? ‚&ª3€X „)¬\‡ 1±‰ ‚x²D Bµ@¹ l¶/€E Cê €i ‚-­3» _¯g X³8€_ …Y·5¬ „w½6€M Cê €ƒE Lë| Sé~ "Æ· Eê €- ‚1É3€‚M UÍ7€M >Î …Ñ“ ‚tÖ2 ƒWÙT› Ý8¨ „`ìm¨ ‚"ñl€‚ „óBŠ •9÷B€e j‹{ˆ ”4Œi ‚+¡3€‚ 8¥f¥ …K§+ ‚8¬}€d †°€} o·9 ‚X¹(‚ ˆ'¼‰ ƒÄ4€u lÈ;® ÉR® …Ë
‰ ‚ÐŒ NÆ~° ‡Ó7› fÚhŒ &Á ŠQÜ{ ƒ"ç{› ‰së‡ ƒ4õ „>øMƒ ƒ]ýŒ ‚‚€{ z‚ƒ!Œ ˆ*‚…, ‚'‚g¡ T‚…= … ‚‘¥ ˆA‚–O€e T‚Ÿw¡ a‚­`¡ ‚$‚®V€, ‚²¯ ‡‚³RŒ ‚i‚ºY… …h‚½A»/* common & utility *//* client */
#include "chatline.h"
#include "choice_dialog.h"
#include "citydlg.h"
#include "client_main.h"
#include "climiscplrdlg.h"
#include "text.h"
#include "tilespec.h"

#include "dialogs.h"
#include "editprop#define SELECT_UNIT_ALL    3
  User clicked close for connect message dialog/
static void notify_connect_msg_response(GtkWidget *w, gint response)
{
  gtk_widget_destroy(w);                              const struct text_tag_list *tags,
                        Goto _LInspect _NULL != pcity && city_owner(pcity) == client.conn.playing**********
  Popup a dialog to display connection message from server*********/
void popup_connect_msg(const char *headline, const char *message)
{
  GtkWidget *shell, *labelmessage);
  gtk_label_set_selectable(GTK_LABEL(label), 1);
g_signal_connect(shell, "response", G_CALLBACK(notify_connect_msg_response),
                  0 > client.conn.playing->revolution_finishes*******
  NB: 'data' is a value of enum tile_special_type casted to a pointer******/
static void pillage_callback(GtkWidget *w, gpointer data)
{
  struct unit *punit;
  int what = GPOINTER_TO_INT(data);

  punit = game_find_unit_by_number(unit_to_use_to_pillage);
  if (punit) {
    Base_type_id pillage_base = -1;

    if (what > S_LAST) {
      pillage_base = what - S_LAST - 1;
      what = S_LAST;
    }

    request_new_unit_activity_targeted(punit, ACTIVITY_PILLAGE,
                                       what, pillage_base  Opens pillage dialog listing possible pillage targetsvoid popup_pillage_dialog(struct unit *punit,
			  bv_special may_pillage,
                          bv_bases bases)
{
  GtkWidget *shl;
  int what;
  enum tile_special_typebases)) != S_LAST) {
      bv_special what_bv;
      bv_bases what_base;

      BV_CLR_ALL(what_bv);
      BV_CLR_ALL(what_base);

      if (what > S_LAST) {
        BV_SET(what_base, what - S_LAST - 1);
      } else {
        BV_SET(what_bv, what);
      }

      choice_dialog_add(shl, get_infrastructure_text(what_bv, what_base),
if (what > S_LAST) {
        BV_CLR(bases, what - S_LAST - 1);
      } else {client.conn.playingunit_name_translation(punitunit_owner(punit) == client.conn.playingunit_owner(punit) == client.conn.playingcase SELECT_UNIT_ALL:
    {
      unit_list_iterate(ptile->units, punit) {
        if (unit_owner(punit) == client.conn.playing) {
          if (punit->activity == ACTIVITY_IDLE &&
              !punit->ai.control) {
            /* Give focus to it */
            add_unit_focus(punitselect_allselect_all_cmd =
    gtk_dialog_add_button(GTK_DIALOG(shell),
      _("Select _all"), SELECT_UNIT_ALLlect_allused = (pnation->player != NULL && pnation->player != races_player);
    gtk_list_store_set(store, &it, 0, nation_number(pnation), 1, used, -1);
    img = get_flag(pnation);
    if (img != NULL) {
      gtk_list_store_set(store, &it, 2, img, -1);
      g_object_unref(img);
    }nation_adjective_translation(pnation)Nation _Groupnation_group_count(); i++) {
    struct nation_group* group = (i == 0 ? NULL: nation_group_by_numberC_S_RUNNING == client_state()) {
    title = _("Edit Nation");
  } else if (NULL != pplayer && pplayer == client.conn.playing_59TRUE, TRU(GTK_TABLE(table), label, 0, 1, 0, 2, 0, 0, 0, 0);
  gtk_table_attach(GTK_TABLE(table), combo, 1, 3, 0, 1, 0, 0, 0, 0(GTK_TABLE(table), cmd, 1, 2, 1, 2, 0, 0, 0, 0(GTK_TABLE(table), cmd, 2, 3, 1, 2, 0, 0, 0, 0AUTOMATICCity _Styles(GTK_TABLE(table), label, 0, 1, 2, 3, 0, 0, 0, 0city_style_name_translation_DescriptionC_S_RUNNING == client_state()pplayer) {
    return;
  }
nation_nation_by_numberfc_nation_groupnation_by_numbernation_groupnation_by_numbernation_group_count(); i++) {
    city_style_of_nation(nation_by_numbernation_by_number(selected_nation), name)) {
    selected_sex = get_nation_leader_sex(nation_by_numberoutput_window_append(ftc_client, output_window_append(ftc_client, output_window_append(ftc_client, _("You must type a legal name."));
      return;
    }

    dsend_packet_nation_select_req(&client.conn,
				   player_number(races_player)client.conn,
				   player_number(races_player)
				   "%s""%s",property_editor_popdown(editprop_get_property_editor());
}
ENDREP
DELTA 14469 0 6071
SVN  õpö6n…] † €K Š{‡:‚ ‚z’7¾ •m¦ Uµ> Š—|Œ ¢
Ž eæ: '£r‚ g±€m …k²o€N ’4¹(‚ ‚kË^‚ @ÎK‚ ‚sÐ€Y jæ;¤ Jœ  „<Õ4€R ›0Ú@/* utility */
#include "fcintl.h"
#include "log.h"
#include "support.h"

/* common */
#include "map.h"
#include "combat.h"
#include "government.h"

/* client */
#include "climisc.h"
#include "client_mainfclog_verbose("expand from %lu to %lu to add '%s'",
            fc_strlcat(*buffer, buf, *buffer_size) /* DEBUG */, ptile->basesfcfc_snprintf(parts[n], sizeof(parts[n]), _("%+d shield"), diff[1]);
    n++;
  }

  if (diff[2] != 0) {
    fcfc_snprintf(shortcut, sizeof(shortcut), " (%s)", shortcut_);
  } else {
    fcfcfcfclog_verbose("warning: get_unit_action_tooltip: unknown action %s",
                actiontooltip for a possible city action.
log_verbose("warning: get_city_action_tooltip: unknown action %s",
               ENDREP
DELTA 17056 2573 115
SVN  ‚Û}‚Ü!( ‚ˆL ƒ …C‚ˆNŸ †'‚Ž.ƒ ƒd‚”Wƒ Ã@‚˜=fc_fc_rand(map.xsize), nat_y = fc_fc_fc_ENDREP
DELTA 15785 78452 340
SVN  »» –{ ‚ P–}‚ ¢D˜OfcfcENDREP
DELTA 16598 14405 228
SVN  ¾`¾` ž, ‚ †$ž.‚ š¤TfcfcENDREP
DELTA 17059 0 2387
SVN  ƒÌDƒë5‚  Á ­ ¯%Á)² Pƒ  Oøuœ LÝ  Qó‚ ‡‚Y‚ ‰n‰x€Z @Û@ ˆ”œ Tƒ  ‰;ž  “G§Jƒ ‚M»ƒ ‚o½bƒ 6ÀS€P „*ÂW” †Ç‚  sÍ3‚ “î(‚ /‚2ƒ (‚c€G ‚&‚žP‚ –6‚ xƒ ‚‚·0‚ ¢‚¹>¥ ‚Ûq‚ ‰8‚Ü~ƒ ´‚æ8ƒ Yƒš;€k „#ƒ›}‚ †Yƒ "‚ ƒ¦}¶ £3ƒ¨3ƒ \ƒËh G €/ PÝ €‡+ Qƒ €f PÝ €ˆl Qƒ €ƒ8 UÝ €…fc_strlcpy(tokens[token], str, len + 1);     fc_rand(sizeof(base64url) - 1)];
  }
  s[i] = '\0'two strings.  Case-sensitivefcfcfc_snprintf(p, n, "foo%p", p);
     p = end_of_strn(p, &n);
     fc_strlcpy(p, "yyy", n);
fc_strlcpy(buffer, str, len)fc_strdup(env);fc_fc_fc_fc_strlcpy(buf, "name", bufsz);
#else
  fc_snprintf(buf, bufsz, "name%d", (int) fc_strdup(dir_list);fcfcfcfc_fc_strlcat(realfile.str, PATH_SEPARATOR, len);
      }
      (void) fc_fcfc_fcfc_strdup("\3");
  grouping_sep = fc_fcfc_fc_fc_strdup(default_multicast_group_ipv6);
      } else
#endif /* IPv6 support */
      {
        group = fc_fcfcfc_strdup(user_home_dir());
  } else  {
    return fc_fc_
******
  Test an asterisk in the pattern against test. Returns TRUE if test fit the
  pattern. May be recursive, as it calls wildcard_fit_string() itself (if
  many asterisks)static bool wildcard_asterisk_fit(const char *pattern, const char *test)
{
  char jump_to;

  /* Jump over the leading asterisks. */
  pattern++;
  while (TRUE) {
    switch (*pattern) {
    case '\0':
      /* It is a leading asterisk. */
      return TRUE;
    case '*':
      pattern++;
      continue;
    case '?':
      if ('\0' == *test) {
        return FALSE;
      }
      test++;
      pattern++;
      continue;
    }

    break;
  }

  if ('[' != *pattern) {
    if ('\\' == *pattern) {
      jump_to = *(pattern + 1);
    } else {
      jump_to = *pattern;
    }
  } else {
    jump_to = '\0';
  }

  while ('\0' != *test) {
    if ('\0' != jump_to) {
      /* Jump to next matching charather. */
      test = strchr(test, jump_to);
      if (NULL == test) {
        /* No match. */
        return FALSE;
      }
    }

    if (wildcard_fit_string(pattern, test)) {
      return TRUE;
    }

    (test)++;
  }

  return FALSE*
  Test a range in the pattern against test. Returns TRUE if **test fit the
  first range in *patternstatic bool wildcard_range_fit(const char **pattern, const char **test)
{
  const char *start = (*pattern + 1);
  char testc;
  bool negation;

  if ('\0' == **test) {
    /* Need one character. */
    return FALSE;
  }

  /* Find the end of the pattern. */
  while (TRUE) {
    *pattern = strchr(*pattern, ']');
    if (NULL == *pattern) {
      /* Wildcard format error. */
      return FALSE;
    } else if (*(*pattern - 1) != '\\') {
      /* This is the end. */
      break;
    } else {
      /* Try again. */
      (*pattern)++;
    }
  }

  if ('!' == *start) {
    negation = TRUE;
    start++;
  } else {
    negation = FALSE;
  }
  testc = **test;
  (*test)++;
  (*pattern)++;

  for (; start < *pattern; start++) {
    if ('-' == *start || '!' == *start) {
      /* Wildcard format error. */
      return FALSE;
    } else if (start < *pattern - 2 && '-' == *(start + 1)) {
      /* Case range. */
      if (*start <= testc && testc <= *(start + 2)) {
        return !negation;
      }
      start += 2;
    } else if (*start == testc) {
      /* Single character. */
      return !negation;
    }
  }

  return negation*
  Returns TRUE if test fit the pattern. The pattern can contain special
  characters:
  * '*': to specify a substitute for any zero or more characters.
  * '?': to specify a substitute for any one character.
  * '[...]': to specify a range of characters:
    * '!': at the begenning of the range means that the matching result
      will be inverted
    * 'A-Z': means any character between 'A' and 'Z'.
    * 'agr': means 'a', 'g' or 'r'wildcard_fit_string(const char *pattern, const char *test)
{
  while (TRUE) {
    switch (*pattern) {
    case '\0':
      /* '\0' != test. */
      return '\0' == *test;
    case '*':
      return wildcard_asterisk_fit(pattern, test); /* Maybe recursive. */
    case '[':
      if (!wildcard_range_fit(&pattern, &test)) {
        return FALSE;
      }
      continue;
    case '?':
      if ('\0' == *test) {
        return FALSE;
      }
      break;
    case '\\':
      pattern++;
      /* break; not missing. */
    default:
      if (*pattern != *test) {
        return FALSE;
      }
      break;
    }
    pattern++;
    test++;
  }

  return FALSE;
}
ENDREP
DELTA 15410 150909 259
SVN  ÇAÇk$ ¢ €$ ¤;£fc_snprintf(buf, sizeof(buf),
                _("Your %s has arrived at %s.\nWhat is your command?"),
                unit_name_translation(punit),
                ENDREP
DELTA 16193 57485 98
SVN  —E—E
 “ ‚ „.“fcENDREP
DELTA 16752 84441 1373
SVN  ’U’}:+ …t  ‹	† ‰‘€@ 
šhƒ Y§tƒ ¨O€@ „F¶ƒ ƒaº_ƒ ¼{¾@‚ —û=fc_assert_ret_val(FALSE, NULLfc_assert_ret_val(!is_non_allied_unit_tile(ptile, pplayer), NULLfc_fc_fc_assert_action(pplayer->nation != NO_NATION_SELECTED, continuefc_fc_fcENDREP
DELTA 16929 199586 951
SVN  ‚õ}‚ö;?„s ‘: ƒ †L‘<ƒ ‚ÁF˜
€P r‚Ú€‚ o‚Üƒ n‚Ýp€ „S‚ßR€ ˆX‚å!ƒ ˆ‚í{fc_fc_fc_strlcat(buf, _("(none)"), bufsz);
    return buf;
  case VUT_ADVANCE:
    fc_fc_strlcat(buf, government_name_translation(psource->value.govern),
               bufsz);
    return buf;
  case VUT_IMPROVEMENT:
    fc_strlcat(buf, improvement_name_translation(psource->value.building),
               bufsz);
    return buf;
  case VUT_SPECIAL:
    fc_fc_fc_strlcat(buf, nation_adjective_translation(psource->value.nation),
               bufsz);
    return buf;
  case VUT_UTYPE:
    fc_/* FIXME */
    fc_strlcat(buf, get_output_name(psource->value.outputtype), bufsz);
    return buf;
  case VUT_SPECIALIST:
    fc_fc_ENDREP
DELTA 16878 0 1410
SVN  ‚óY‚ù,Oœ{ …t  …o†² —‹ ‰G£‚ ŽX¬Z‚ M»4‚ ‚½‚ uÀ)§ ‡À)‚ ´3ÇC‚ =ûx‚ ‚)ý7‚ k€t§ Ã	€t‚ „ Ã‚ ¯ È!• Z÷3€K ˜,øz‚ ‡z‚‘(‚ s‚™$€c …5‚ªj †-‚°#€ƒT †:‚¹HŸ ‚À€ „,‚ÂE˜ ƒY‚Ç	€d „)‚ÊUŸ ‰‚Î€Œx J³? …Y‚á3€†c …)‚î0options.h"
#include "text.h"

/* client/gui-xaw */const char *namefcfcfcfcA_NONE)),
		  0);
    } else {
      fcfcfcfcfcA_NONE)),
		  0);
    } else {
      fcfcfc (ret->list_index != punittype2 = can_upgrade_unittype(client.conn.playing, punittype1);

    fcfcfcconst char *name)
{
  if (!settable_options_dialog_shell) {
    create_settable_options_dialog(nameconst char *name/* Count the server options. */
  i = 0;
  options_iterate(server_optset, poption) {
    i++;
  } options_iterate_end;

  if (!settable_options_widgets) {
    settable_options_widgets = fc_calloc(i, sizeof(Widget));
  }

  prev_widget = NULL; /* init the prev-Widget */

  i = 0;
  options_iterate(server_optset, poption) {
    char buf[256];
    size_t len;

    fc_snprintf(buf, sizeof(buf), "%s: %s",
                option_name(poption), option_description(poption  i++;
  } options_iterate_end;i = 0;
  options_iterate(server_optset, poption) {
    if (option_is_changeable(poption)) {
      switch (option_type(poption)) {
      case OT_BOOLEANOT_INTEGER:
      case Ocase OT_FONT:
        log_error("Option type %d not supported yet.", option_type(poption));
          i++;
  } options_iterate_end; = 0;

    options_iterate(server_optset, poption) {
      if (option_is_changeable(poption)) {
        switch (option_type(poption)) {
        case OT_BOOLEAN:
          XtVaSetValues(settable_options_widgets[i],
                        XtNstate, option_bool_get(poption) ? True : False,
                        XtNlabel,
                        option_bool_get(poption) ? _("Yes") : _("No"), NULL);
          break;
        case OT_INTEGER:
          fc_snprintf(buf, sizeof(buf), "%d", option_int_get(poption));
          XtVaSetValues(settable_options_widgets[i], XtNstring, buf, NULL);
          break;
        case OT_STRING:
          fc_snprintf(buf, sizeof(buf), "%s", option_str_get(poption));
          XtVaSetValues(settable_options_widgets[i], XtNstring, buf, NULL);
          break;
        case OT_FONT:
          log_error("Option type %d not supported yet.",
                    option_type(poption));
          break;
        }
      } else {
        switch (option_type(poption)) {
        case OT_BOOLEAN:
          fc_snprintf(buf, sizeof(buf), "%s",
                      option_bool_get(poption) ? _("true") : _("false"));
          break;
        case OT_INTEGER:
          fc_snprintf(buf, sizeof(buf), "%d", option_int_get(poption));
          break;
        case OT_STRING:
          fc_snprintf(buf, sizeof(buf), "%s", option_str_get(poption));
          break;
        case OT_FONT:
          log_error("Option type %d not supported yet.",
                    option_type(poption));
          break;
        }
        XtVaSetValues(settable_options_widgets[i], XtNlabel, buf, NULL);
      }
      i++;
    } options_iterate_end;
    int val, i = 0;
    XtPointer dp;

    options_iterate(server_optset, poption) {
      if (option_is_changeable(poption)) {
        switch (option_type(poption)) {
        case OT_BOOLEAN:
          XtVaGetValues(settable_options_widgets[i], XtNstate, &b, NULL);
          option_bool_set(poption, b);
          break;
        case OT_INTEGER:
          XtVaGetValues(settable_options_widgets[i], XtNstring, &dp, NULL);
          sscanf(dp, "%d", &val);
          option_int_set(poption, val);
          break;
        case OT_STRING:
          XtVaGetValues(settable_options_widgets[i], XtNstring, &dp, NULL);
          option_str_set(poption, dp);
          break;
        case OT_FONT:
          log_error("Option type %d not supported yet.",
                    option_type(poption));
          break;
        }
      }
      i++;
    } options_iterate_end;ENDREP
DELTA 16578 288710 536
SVN  ‚…R‚…T ¡ ƒ ‚g¡ƒ Î`£m‚ “òOfc_fc_fcENDREP
DELTA 16199 80099 1226
SVN  ƒÃ`ƒÃc\ È ƒ „ZÈƒ æiÌi‚ ‰+³T‚  ³T ªY¾!‚ „gè| É=íc‚ ƒ‚·"‚ ©4‚º9‚ ‚‚ão‚ ƒ‚æ‚ ˆ‚é	‚ ÒF‚ñfc_fc_fcfcfc fcfcfcfcfcfcENDREP
DELTA 16929 205279 136
SVN  ‚B‚DG âO €E É;ã‚ ðs¬Ofc_strdup("-*-*-*-*-*-*-14-*");

    city_productions_font_name = fc_fcENDREP
DELTA 17042 41974 44
SVN  »6»6
   ‚ ›  fcENDREP
DELTA 16992 23913 73
SVN  ŽnŽt@\ ŸM ƒ ŸOƒ ‚| R‚ £Pƒ ‚b¤Z€F ˜g¨ ƒ ƒRÀi‚ ±:Ä=‚ ;õy‚ x÷6‚ –>ø0fc_fc_fcfc_fc_strdup(s);
	  s = end + 1;
	} else {
	  result->row[row].text = fc_fc_fcfcfcfcENDREP
DELTA 16297 42652 960
SVN  Î~Î7 ‹N ¤ S·?“ U²9 ÁR,fc_strdup(string);
  }
  return NULLCreate a new stringENDREP
DELTA 16643 22502 1905
SVN  øfù/J‚" …t  œ^†ƒ ‡¢hƒ U©{ƒ G«Rƒ šR­¼ ^È)‚ Š+É	Œ ‚0Ó9® EÕ‹ „bÖE² ƒÛK€a ™Yßfc_fc_fc_fc_FC_FD_ZERO(&readfs);
    FD_SET(socket_fd, &readfs);

    FCFCfc_assert_re        fc_assert_action(packet != NULL, break        fc_fc_assert_ret(expected_request_id);
  fc_assert_re          fc_assert(packet == NULL);
	  break;
	}

        fc_assert_action(packet != NULL, breakENDREP
DELTA 16354 686 656
SVN  ö0ö#„m ²+ €@ 4²kŠ ƒh´2€q J¹|€j »0‚ i¼4‚ x½‚ c¾ƒ „Q¿~€o SÅ>‚ nÆ‚ ‚Ç‚ ˆrÉ‚ RÑz‚ 	ÓN‚ ÔY‚ Õ^‚ 
Öc‚ ×o‚ Ù‚ Ú‚ Û%‚ 
Ü5‚ ˆ,ÝAƒ Wåo± $çlog_error("Metaserver: can't open stream socket: %s",
          log_error(fc_gethostname(host, sizeof(host)) != 0) {
    sz_strlcpy(host, "unknown");
  }

  fc_snprintf(s, rest, "host=%s&port=%d&state=%s&",
              host, srvarg.port, state);
  s = end_of_strn(s, &rest);

  if (flag == META_GOODBYE) {
    fc_fc_snprintf(s, rest, "version=%s&", fc_url_encode(VERSION_STRING));
    s = end_of_strn(s, &rest);

    fcfcfcfcfc_fc_snprintf(s, rest, "plu[]=%s&", fc_url_encode(plr->username));
        s = end_of_strn(s, &rest);

        fcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfc_log_error(_("Metaserver: bad address: <%s %d>."),ENDREP
DELTA 17107 30111 911
SVN  ÈTÈW	  ƒ ¾iƒ ‡FÎpƒ òÖ8fc_fc_fc_ENDREP
DELTA 14417 81446 4535
SVN  Ð#ÐQ/? ˆ) €R vˆO€[ Ž(Š/„ “R˜Vƒ …]¬*„ ²„ ‚*³ƒ šXµK/* utility */
#include "log.h"
#include "mem.h"
#include "support.h"

/* common *//* client */
#include "client_main.h"
#include "control.h"
#include "goto.h"

/* gui-xaw */connfc_connconnfc_ENDREP
DELTA 17042 42799 508
SVN  „áq„âo[ µa ‚ „µc‚ †&º‚ …SÀ+‚ †)Æ º ‡Ìa– •!Ót– ‘+é&– ÔNúb‚ ƒ‚Ï2‚ !‚ÒA‚ *‚Ód€I Ðr‚ÕV‚ œƒ¦J‚ ‚ƒÂN‚ ÐƒÄm‚ Ìj„•fcfcfcfcfc_strlcpy(retbuf, _("(is empty)"), n);
  } else {
    fc_al_city_dialog_refreshreal_city_dialog_popupal_city_dialog_refreshfcfcfcfc_strlcpy(bptr, _("No trade routes exist.\n"), nleft);
  } else {
    fcfcfcfcfcENDREP
DELTA 16578 297817 9595
SVN  ‚Œu‚Ž 1„- ˆ  ¤Dˆ#ƒ …H¬i‚ 2²3ƒ q³g€W Pü: ªtÅy« ‡^ñ« ‘"ø{§ „;Š0ƒ ‚Žmƒ }u‡ †n‘vƒ ‚˜fƒ Všsƒ †yœKƒ ˆ£F¢ ‰4«pƒ …Lµ&ƒ „ºrƒ ‡V¿ª _Æ}ª ‰jÇu€F ¢6Ò• ôY€X ‚‚0† ‰0‚ƒEfc_fcfc_destroy(t->specfiles);
    small_sprite_list_destroy(t->small_sprites);
    FC_FREE(t);'%s':\n%s"), sf->file_name, secfile_error()'%s':\n%s"), sf->file_name, secfile_error()fc_assert_action(num_tags > 0, continuefc_fc_destroyfc_fc_fc_fc_'%s':\n%s", fname, secfile_error()fc_fc_fc_fc_assert_ret_val(ss->ref_count >= 0, NULLfc_assert_ret_val(ss->ref_count == 0, NULLfc_assert_ret(ss);
  fc_assert_ret(ss->ref_count >= 1);
  fc_assert_refc_assert(s != NULL),remove(t->small_sprites, ss);
    if (ss->file) {
      FC_FREE(ss->file);
    }
    fc_removeENDREP
DELTA 17115 0 871
SVN  ‚èF‚é‚_ ‰\ €
 ’tŠJ€` Ïž€u ù]îifc_snprintf(text, sizeof(text), _("Future Tech. %d"),
                  GPOINTER_TO_INT(g_list_nth_data(sorting_list, i))
                fc_snprintf(text, sizeof(text), "%d",
                num_unknown_techs_for_goal(client_player()fc_snprintf(economy_total, sizeof(economy_total),
                _("Income: %d    Total Costs: %d"),
               ENDREP
DELTA 16578 307444 472
SVN  ‚‚'@‚ ¶ ‚ ”C¶‚ ­fÊ]‚ •cøE‚ š[Ž*‚ ©©‚ µÒ&€k ƒ"‚ˆ-€! R•> l‚fcfcfcfcfcfccase AUTH_NEWUSER_FIRST:
  case AUTH_NEWUSER_RETRY:
    popup_new_user_passwd_dialog(message);
    return;
return;
  case AUTH_LOGIN_RETRY:
    popup_user_passwd_dialog(message);
    return;
  }

  log_error("Not supported authentication type %d: %s.", type, message);ENDREP
DELTA 17042 43885 773
SVN  ƒ ƒ  ‚Ò ‚ ºl‚Òƒ aƒŒv‚ ‘3ƒŽYfcfc_fcENDREP
DELTA 13151 10820 83608
SVN  …ûc†Œ„m£S ‰ ‡ t‰ƒ a‰€C —!‹5£ „{¢hŸ Š¨€P FÞ €E Nß?€m i³$€ ŽÃ%‹ CÑ9 ¦}â%² ˆA‰o— ‚8’U‚ „(•€ ‚f™O¶ ƒ0œa€  ‚‚Ñ+ „£&ª ‰§R‹ _°W€ Nß? jÁ/“ Â'€` FÞ  „Å=‚ ŠFÉE€ Y¯}‹ ™CÔ„ X×  hƒ¾  ]¸@ bê0 ŽZñc€} „f‚#— ƒ:‚†.— ŽG‚Š€] †V‚™:€ †‚ -« N‚³<€H •H‚¨g‹ W‚¾>€' Š'‚À9º ƒ@‚éV [‚ÎP‚ _‚Ð-Ÿ Ž6‚Ñ+‚ ‚g‚ßc‚ †)‚âL€q ‡=‚éV‚ _‚Ð-Ÿ ‚?‚Ñ+© G£}Œ Z‚Ôg „‚ö(‚ ‚‚ú1— …p‚ü^‹ Aƒ‚O€‚d ‡yƒ”H€< „tƒž€ ‚ƒ£€ƒ" Rƒ¦=€p $ƒ§L€Q …5ƒªj‹ ªXƒ° €` ‘hƒÛO­ §9ƒí`¡ ‚„•.Š ‹„—=‡ p„² ƒ5„£Iƒ ‹„§ ‡ „!„²ƒ „§  Æ[„·S‡ j„þ.ƒ ^„ÿƒ S„§  †f…M G  b‚~¡ †S…ˆ]‡ œ_…2¦ X„Ó> %…­ ¶1…¼7€x ‚C…ó]ƒ …A…ö" O@€U Nß?¬ Rä@€S Nß?€b"SDL.h"amelient_main.h"
#include "climap.h" /* for client_tile_get_known() */option_dialog_popdown(client_optsetC_S_PREPARING == client_state()                              const struct text_tag_list *tags,
                              struct tile *ptile)
{
  log_error("popup_notify_goto_dialog() PORT ME\na: %s\nb: %s",
            headline, lines)**********
  Popup a dialog to display connection message from servervoid popup_connect_msg(const char *headline, const char *message)
{
  log_error("popup_connect_msg() PORT ME"WF_WIDGET_HAS_INFO_LABEL | WF_RESTORE_BACKGROUND);
  pBuf->string16 = create_str16_from_char(_("Close Dialog (Esc)"), adj_font(12)adj_size(2)
      player_find_unit_by_id(client.conn.playing,head_of_units_in_focus(fcWF_WIDGET_HAS_INFO_LABEL | WF_RESTORE_BACKGROUND);
  pBuf->string16 = create_str16_from_char(_("Close Dialog (Esc)"), adj_font(12) (unit_owner(pUnit) == client.conn.playing) {
      fcfc_snprintf(cBuf , sizeof(cBuf), _("%s %s %s(A:%d D:%d M:%d FP:%d) HP:%d%%"),
            nation_adjective_for_player(unit_owner (unit_owner(pUnit) == client.conn.playingadj_size(2)***********
  Return a (static) string with terrain defense bonus.
  This does not include bonuses some units may get out of basestile_terrain(ptile)
  fc_snprintf(buffer, sizeof(buffer), "Terrain Defense Bonus: +%d%% ", bonus);

  return bufferfcWF_WIDGET_HAS_INFO_LABEL | WF_RESTORE_BACKGROUND);
  pBuf->string16 = create_str16_from_char(_("Close Dialog (Esc)"), adj_font(12));adj_size(2)NULLhurry_productionunit_owner(punit) == client.conn.playing
         && ACTIVITY_IDLE == punit->activity
         && !punit->ai.control
        head_of_units_in_focus(head_of_units_in_focus(tile_city(ptile);
  n = unit_list_size(ptile->units);
  pFocus_Unit = head_of_units_in_focus(WF_WIDGET_HAS_INFO_LABEL | WF_RESTORE_BACKGROUND);
  pBuf->string16 = create_str16_from_char(_("Close Dialog (Esc)"), adj_font(12));city_owner(pCity) == client.conn.playing)
 
    fc_snprintf(cBuf, sizeof(cBuf), _("Zoom to : %s"), city_name(pCity)_tile(ptile_tile(ptile) || !pCity)) &&
      !(((pCity && pplayers_non_attack(client.conn.playing, city_owner(pCity)))
      || is_non_attack_unit_tile(ptile, client.conn.playing (unit_owner(pUnit) == client.conn.playing) {
          fcfcadjective_for_player(unit_ownerfcfccity_owner(pCity) == client.conn.playing)
	 || (unit_owner(pUnit) == client.conn.playing))
        {
          fcfcadjective_for_player(unit_owner	    /* calculate chance to win */
      _Unit)) {
  fcutype_number(pUnitType)adj_size(2)int what = MAX_ID - pWidget->ID;

    popdown_pillage_dialog();
    
    if (pUnit) 
    {
      Base_type_id pillage_base = -1;

      if (what > S_LAST) {
        pillage_base = what - S_LAST - 1;
        what = S_LAST;
      }

      request_new_unit_activity_targeted(pUnit, ACTIVITY_PILLAGE, what,
                                         pillage_basebv_bases bases)
{
  struct widget *pWindow = NULL, *pBuf = NULL;
  SDL_String16 *pStr;
  int what;
  enum tile_special_type prereq;
  SDL_Rect area;

  if (pPillage_Dlg) {
    return;
  }
WF_WIDGET_HAS_INFO_LABEL | WF_RESTORE_BACKGROUND);
  pBuf->string16 = create_str16_from_char(_("Close Dialog (Esc)"), adj_font(12)bases)) != S_LAST) {
    bv_special what_bv;
    bv_bases what_base;
    const char *name;

    BV_CLR_ALL(what_bv);
    BV_CLR_ALL(what_base);

    if (what > S_LAST) {
      struct base_type *pbase = base_by_number(what - S_LAST - 1);
      BV_SET(what_base, what - S_LAST - 1);
      name = base_name_translation(pbase);
    } else {
      BV_SET(what_bv, what);
      name = special_name_translation(what);
    }

(char *) name, pillage_callback);

    if (what > S_LAST) {
      BV_CLR(bases, what - S_LAST - 1);
    } else {
      }
    }

    pBuf->data.unit = pUnit;
    set_wstate(pBuf, FC_WS_NORMAL);
adj_size(2)during_revolution) {
      continue;
    }

    if (can_change_to_government(client.conn.playing0 <= client.conn.playing->revolution_finishesoutput_window_append(ftc_client, client.connation_fc_nation_fc_nation_fc_fc_get_playable_nation_count(void)
{int i;
fc_rand(get_playable_nation_count());
log_debug("  [%d]: %d = %s", nation_index(nation),
                (!nation->is_available || nation->player),
          fc_Ruleset (modpack) has suggested loading certain tileset. Confirm from
  user and loadvoid popup_tileset_suggestion_dialog(void)
{Tileset (modpack) has suggested loading certain theme. Confirm from
  user and loadbool popup_theme_suggestion_dialog(const char *theme_name)
{
  /* Don't load */
  return FALSE;
}
ENDREP
DELTA 16929 209180 691
SVN  àà °Y ‚ ¯<°[fcENDREP
DELTA 17013 6063 43
SVN  ·H·b;4 ŽJ ƒ „WŽL€H “G“d‚ _§-ƒ +¨ƒ <©;‚ Tªy® G  †1¬A® ƒ^³ƒ V¶rfc_fc_snprintf(buf, sizeof(buf), "%s/%s/gtk-2.0/gtkrc", directory,
        fcfc_fc_fcfc_strdup(buf);
  }

  return directories;
}

fc_snprintf(buf, sizeof(buf),
                fc_ENDREP
DELTA 17058 50696 3595
SVN  ƒË1ƒÍ,†E °? Ž ‚…Z°9€ƒ  ƒ¸X€} gƒ»&¨ \ƒ¼'€r Xƒ½Y || pcargo == fc_snprintf(buf, bufsz, _("Upgrade %s to %s for %d gold?\n"
                              "Treasury contains %d gold."),
                utype_name_translation(from_unittype),
                utype_name_translation(to_unittype),
                upgrade_cost, pplayer->economic.gold);
    break;
  case UR_NO_UNITTYPE:
    fc_snprintf(buf, bufsz,
                _("Sorry, cannot upgrade %s (yet)."),
                fc_snprintf(buf, bufsz,
                _("Upgrading %s to %s costs %d gold.\n"
                  "Treasury contains %d gold."),
                utype_name_translation(from_unittype),
                utype_name_translation(to_unittype),
                fc_snprintf(buf, bufsz,
                fc_snprintf(buf, bufsz,
                _("Upgrading this %s would strand units it transports."),
                ENDREP
DELTA 16929 211003 10689
SVN  l‘" ×) ƒ ²×+Ÿ ‡.‰>fc_
                         + fc_ENDREP
DELTA 15860 1687 8671
SVN  ‚¡_‚¦V‚fŸ] …t €k –J‡FŸ ‚ž €A Z½@ •Y¡J€l ‚B·o€X m½9— T¿  ƒH¼K¹ œWÀ6€O [½? åt— ƒáQš [½? „)å]€ƒP Q½@‚ N¿ €j ƒJî}€J [½?® à4€S S½? ƒGø!ƒ ˜eûjƒ „”Qƒ ƒV˜U€z ‚z€z ‚U cŒ G£=€ W‚~ t¦€x ¨lƒ ‚sª€r ƒ3­P€S Z½@ 5³€{ [ ~ ‚µ}€s Š¸F€b ˆgÃ€ ‹Ì=€r ‹BØž U‚~ †ä=€/ Q½@ Wì€‚ ƒ'îy€ „Pòf€ „O÷€ —ýœ ‚‚”+» P½@® M³@ ƒ"‚˜@’ …v‚›istring.h>

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

/* common */
#include "game.h"
#include "government.h"
#include "movement.h"
#include "playerfc_assert_ret_val(punittype, -1fc_assert_ret_val(punittype, -1);
  return punittype->item_number                     enum unit_class_flag_id flag)
{
  fc_assert_ret_val(flag >= 0 && flag < UCF_LAST, FALSEfc_assert_ret_val(flag >= 0 && flag < F_LAST, FALSE);
  return BV_ISSET(punittype->flagsunit has the given flagfc_assert_ret_val(role >= L_FIRST && role < L_LAST, FALSEconst struct unit_type *punittype)
{
  return name_translation(&punittype->namethe (translated)name_translation(const rule_name(&punittype->namefc_snprintf(buffer, sizeof(buffer), "%d/%d/%d(%d)",
                punittype->attack_strength,
                punittype->defense_strength,
                punittype->move_rate / 3,
                punittype->move_rate / 3 * utype_fuel(punittype));
  } else {
    fc_snprintf(buffer, sizeof(buffer), "%d/%d/%d",
                punittype->attack_strength,
                punittype->defense_strength,
                punittype->move_rate / 3);
  }
  return buffer..const char *utype_values_translation(const struct unit_type *punittype)
{
  static char buffer[256];

  fcconst struct unit_class *pclass)
{
  return name_translation(&pclass->namethe (untranslated) rule name of the unit classclass_rule_name(const struct unit_class *pclass)
{
  return rule_name(&pclass->namefc_fc_fc_fc_assert_ret_val(ARRAY_SIZE(unit_class_flag_names) == UCF_LAST, UCF_LAST);

  for(i = 0; i < UCF_LAST; i++) {
    if (fc_fc_assert_ret_val(ARRAY_SIZE(unit_class_flag_names) == UCF_LAST, NULL);
  fc_assert_ret_val(id >= 0 && id < UCF_LAST, NULLfc_assert_reNULL) {
    free(user_flag_names[ufid]);
    user_flag_names[ufid] = NULL;
  }

  if (name && name[0] != '\0') {
    user_flag_names[ufid] = fc_strdup(name)fc_assert_ret_val(ARRAY_SIZE(flag_names) == F_USER_FLAG_1, F_LAST);

  for (i = 0; i < F_USER_FLAG_1; i++) {
    if (fc_fc_fc_assert_ret_val(ARRAY_SIZE(flag_names) == F_USER_FLAG_1, NULL);
  fc_assert_ret_val(id >= 0 && id < F_LAST, NULLfc_assert_ret_val(ARRAY_SIZE(role_names) == (L_LAST - L_FIRST), L_LAST);

  for(i = L_FIRST; i < L_LAST; i++) {
    if (fc_strcasecmp(role_names[i - L_FIRST], s) == 0) {
      return i;
    }
  }
  return L_LASTfc_assert_ret_val(ARRAY_SIZE(role_names) == L_LAST, NULL);
  fc_assert_ret_val(id >= 0 && id < L_LAST, NULL);
  return role                                  const struct unit_type *punittype)
{
  fc_assert_ret_val(NULL != punittype, FALSEfc_assert_ret_val(utype_has_role(punittype, L_BARBARIAN_BUILD_TECH),
                        FALSE
        && (great_wonder_is_built(punittype->need_improvement)
            || great_wonder_is_destroyed(punittype->need_improvement)                                 const struct unit_type *punittype)
{
  fc_assert_ret_val(NULL != punittype, FALSEfc_assert(j == n_with_role[i])fc_assert_ret_val((role >= 0 && role < F_LAST)
                    || (role >= L_FIRST && role < L_LAST), -1);
  fc_assert_ret_val(!first_init, -1);
  return n_with_role[role]fc_assert_ret_val((role >= 0 && role < F_LAST)
                    || (role >= L_FIRST && role < L_LAST), NULL);
  fc_assert_ret_val(!first_init, NULL);
  if (index==-1) {
    index = n_with_role[role]-1;
  }
  fc_assert_ret_val(index >= 0 && index < n_with_role[role], NULL
  fc_assert_ret_val((role >= 0 && role < F_LAST)
                    || (role >= L_FIRST && role < L_LAST), NULL);
  fc_assert_ret_val(!first_init, NULLfc_assert_ret_val((role >= 0 && role < F_LAST)
                    || (role >= L_FIRST && role < L_LAST), NULL);
  fc_assert_ret_val(!first_init, NULLfc_assert_ret_val((role >= 0 && role < F_LAST)
                    || (role >= L_FIRST && role < L_LAST), NULL);
  fc_assert_ret_val(!first_init, NULLfc_assert_ret_val(pclass, -1fc_assert_ret_val(pclass, -1);
  return pclass->item_number**
  Returns unit class pointer for an ID valufc_assert(NULL != ENDREP
DELTA 16998 70940 541
SVN  „¬„­ %…( ‚Ž, ¶ ’6‚ŽT‚ †Fƒ¡€F 'ƒ¨
€„* ÿ)ƒ¬ffc_snprintf(buf, sizeof(buf), "%s:\n%s",
             fc          && user_get_rating(pplayer->username, &rating)) {
        fc          && user_get_record(pplayer->username,
                             &wins, &losses, &ties, &forfeits)) {
        if (forfeits == 0 && ties == 0) {
          fc_snprintf(record_text, sizeof(record_text), "%d-%d",
                      wins, losses);
        } else if (forfeits == 0) {
          fc_snprintf(record_text, sizeof(record_text), "%d-%d-%d",
                      wins, losses, ties);
        } else {
          fc_snprintf(record_text, sizeof(record_text), "%d-%d-%d-%d",
                      wins, losses, ties, forfeits);
        ENDREP
DELTA 14417 92900 20775
SVN  ‚Þ_‚ß5‚Z †g Š ®y‡• }Ê|€c “!·L• }Ê|€c ÆtÌ=‚ „%‚“3¥ o‚—x„ ŠC‚˜f‚ z‚£+„ 
‚˜f *‚™q I‚Õ{ U‚™p Ÿ‚§v¥ j‚Ç3„ d‚˜f ‰V‚É ‚ y‚ÒX„ d‚˜f G‚É  ˆd‚Õ{lient_mainreachable(client.connconn.playing, i)
         || TECH_PREREQS_KNOWN ==
              player_invention_state(client.connreachable(client.connconn.playing, i)
         || TECH_PREREQS_KNOWN ==
              player_invention_state(client.connfcconn.playing->economic.gold) {
    fcconnfcconnconn.playing->economic.gold) {
    fcconnfcconnENDREP
DELTA 1516 4141 2560
SVN  ©H°a) ( €[ G  5‘*™ ƒ|’h€X X—(€] G  {™p€w `’n¥ @…@€ƒU G ¥ @…@€' G ³ @…@€x G €[ @…@€ G © @…@€wfdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <stdarg.h>

#include "log.h"                /* fc_assert */
#include "mem.h"
#include "support.h"            /* fc_vsnprintf, fc_strlcat */

#include "astring.h"


  fc_assert_ret(NULL != size_t n)
{
  int n1;
  bool was_null = (astr->n == 0);

  fc_assert_ret(NULL != astr);
(char *)fc_realloc(astr->str, astr->n_alloc);
  if (was_null) {
    astr_clear(astr);
  }
}

fc_assert_ret(NULL != astr);

  if (astr->n_alloc > 0) {
    fc_assert_ret(NULL != astr->str);
    free(astr->str);
  }******
  Add the text to the string.
************/
static void vadd(struct astring *astr, const char *format, va_list ap)
{
  size_t new_len;
  char buf[1024];

  if (fc_vsnprintf(buf, sizeof(buf), format, ap) == -1) {
    die("Formatted string bigger than %lu bytes",
        (unsigned long)sizeof(buf));
  }

  /* Avoid calling strlen with NULL. */
  astr_minsize(astr, 1);

  new_len = strlen(astr->str) + strlen(buf) + 1;

  astr_minsize(astr, new_len);
  fc_strlcat(astr->str, buf, astr->n_alloc);
}

******
  Add the text to the string.
************/
void astr_add(struct astring *astr, const char *format, ...)
{
  va_list args;

  va_start(args, format);
  vadd(astr, format, args);
  va_end(args);
}

******
  Add the text to the string in a new line.
************/
void astr_add_line(struct astring *astr, const char *format, ...)
{
  va_list args;

  if (astr->n > 0 && astr->str[0] != '\0') {
    astr_add(astr, "\n");
  }

  va_start(args, format);
  vadd(astr, format, args);
  va_end(args);
}

******
  Replace the spaces by line breaks when the line lenght is over the desired
  one.
************/
void astr_break_lines(struct astring *astr, size_t desired_len)
{
  fc_assert_ret(NULL != astr);

  fc_break_lines(astr->str, desired_len);
}


  Sets the content to the empty string.
*******/
void astr_clear(struct astring *astr)
{
  fc_assert_ret(NULL != astr);

  if (astr->n == 0) {
    /* astr_minsize is really astr_size, so we don't want to reduce the
     * size. */
    astr_minsize(astr, 1);
  }
  astr->str[0] = '\0';
}
ENDREP
DELTA 11212 0 2319
SVN  ¨¨i<„ …| €b T†6Ÿ ƒF‡;Š 5+ aŒ@Š …2+€\ n“'€k ƒ•Y€" ƒP™| Š5L/* utility */
#include "support.h"

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

/* client */lient_main.h"
#include "climiscclient.conclient.congame_find_city_by_number(caravan_city_id);
  struct unit* caravan = game_find_unit_by_numberfc_snprintf(buf, bufsize, _("Help build _Wonder (%d remaining)"),
                impr_build_shield_cost(destcity->production.value.building)
                - destcity->shield_stock);
    *help_build_possible = TRUE;
  } else {
    fcfc_snprintf(buf, sizeof(buf),
              _("Your caravan from %s reaches the city of %s.\nWhat now?"),
              city_name(phomecity), city_name(pdestcity) ENDREP
DELTA 13136 5145 4368
SVN  ¶d·oI†X …f €t =†S· q‘; F‡@€b ….–2€& ƒCœ{€E W‘@ ƒ¡S€Y „{¦1š ƒ«'€j <¯ƒ †"°Bstdlib.h>

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

/* common */fc_assert_ret_val(NULL != pteam, -1);
  return pteam - ******/
Team_type_id team_number(const struct team *pteam)
{
  fc_assert_ret_val(NULL != pteam, -1fc_assert_ret(pplayer != NULL);
  fc_assert_ret(pteam != NULL);

  log_debug("Adding player %d/%s to team %s.", player_number(pplayer),
            pplayer->username,fc_assert_ret(pteam->players <= MAX_NUM_PLAYERS + MAX_NUM_BARBARIANS)log_debug("Removing player %d/%s from team %s (%d)",
              player_number(pplayer), pplayer->username,
              team_rule_name(pplayer->team), pplayer->team->players);
    pplayer->team->players--;
    fc_/* TRANS: missing value */fc_assert_ret_val(team_name != NULL, NULL);
  fc_assert_ret_val(game.info.num_teams <= MAX_NUM_TEAMS, NULLfc_ENDREP
DELTA 17101 0 356
SVN  à4à8A ’ ‚ `’‚ œ?“j‚ ‹L°+ƒ ‡!»yƒ ‚_Ãƒ IÅ}ƒ ’gÆH‚ ‚+Ù1‚ „VÛ^fcfcfcfc_fc_fc_fc_fcfcENDREP
DELTA 16578 336696 2760
SVN  ;ŽD7 ˆ| ƒ ¡rˆ~€N Šªy‚  4µ€@ TÚ5 ±}Öƒ ‚:ˆ‚ TŠNƒ Œ$fc_log_error("Unsupported authentication type %d: %s.", type, message);
    breakfclog_error("Unsupported dialog configuration: %d", dialog_config)fc_fcfc_ENDREP
DELTA 13297 328056 18054
SVN  ñXñz‚b«} ‡	 €‚ ƒ]ˆt´ …e<€R i“M€B k•t“ W–n€@ Z™}€ uœ`€4 žq“ p¤¶ O¡'“ }£“ ‚Q¤€z y¨K“ ©S“ ªo¾ i¬6“ H™} ­v€k ˆq¯kŠ ‚K¸f£ K»PŠ …+½%º ‘kÂa€? Ö‚ ž$× › *÷@ ˆ÷	“ …ÿ€N „t€ ‚/†p ‚ä< w‹$§ ƒl:€ƒw ‚;”H€†[ Qœ5€‚k KŸ~€‚? „^¢\€. ‡a¨ ¯x ˆ±€t ˆ1º€s Ã€h !Æ€L Èe€O Š0Ë/€D ‰`×e€K [áhƒ iâW• 0ã]€ƒ
 èdƒ ‡Bê/* utility */
#include "fcintl.h"
#include "log.h"
#include "shared.h"
#include "support.h"

/* common */
#include "government.h"
#include "packets.h"
#include "unitlist.h"

/* client */
#include "chatline_common.h"	/* send_chat() */ 
#include "cityrep.h"
#include "client_main
struct impr_type *economy_improvement_type[B_LAST];/* TRANS: Research report title */
  sz_strlcpy(text, get_report_title(_("ResearchTECH_KNOWN == player_invention_state(client.conn.playing, tech_id)client.conn.playingA_UNSET == get_player_research(client.conn.playing)->researching) {
    id = ComboBox_AddString(GetDlgItem(science_dlg, ID_SCIENCE_RESEARCH),
			    advance_name_for_player(client.conn.playingfc_snprintf(text, sizeof(text), "%d/%d",
		get_player_research(client.conn.playing)->bulbs_researched,
		total_bulbs_required(client.conn.playingclient.conn.playing)->researching)) {
    advance_index_iterate(A_FIRST, tech_id) {
      if (TECH_PREREQS_KNOWN !=
            player_invention_state(client.conn.playing, tech_id)client.conn.playingif (tech_id == get_player_research(client.conn.playingclient.conn.playingclient.conn.playingreachable(client.conn.playing, tech_id)
        && TECH_KNOWN != player_invention_state(client.conn.playing, tech_id)
        && (11 > num_unknown_techs_for_goal(client.conn.playing, tech_id)
	    || tech_id == get_player_research(client.conn.playingclient.conn.playingclient.conn.playingA_UNSET == get_player_research(client.conn.playing)->tech_goalclient.conn.playingclient.conn.playing,
                            get_player_research(client.conn.playing)->tech_goal);
  fcclient.conclient.conn.playing, to);
	      fcclient.con/* TRANS: Research report title */
					       _("Researchfc_snprintf(buf0, sizeof(buf0), "%s", improvement_name_translation(p->type));
    fc_snprintf(buf1, sizeof(buf1), "%5d", p->count);
    fc_snprintf(buf2, sizeof(buf2), "%5d", p->cost);
    fcfcclient.conn, (size_t)data);client.conn.playing = can_upgrade_unittype(client.conn.playing, activeunits_type[sel]);
	      fcype_name_translation(ut1),
			  utype_name_translation(ut2),
			  unit_upgrade_price(client.conn.playing, ut1, ut2),
			  client.conn.playing->economic.gold);[O_LAST];
    int building_count;
  };

   city_list_iterate(client.conn.playing->cities, pcity) {
      unit_list_iterate(client.conn.playing->units, punit) {
        Unit_type_id uti = utype_index(unit_type(punit));

        (unitarray[uti].active_count)++;
        if (punit->homecity) {
          output_type_iterate(o) {
            unitarray[uti].upkeep[o] += punit->upkeep[o];
          } output_type_iterate_end;
        }
      } unit_list_iterate_end;
   } city_list_iterate_end;

    city_list_iterate(client.conn.playing->cities, putype) {
      int index = utype_index(putype);
      if ((unitarray[index].active_count > 0)
	  || (unitarray[index].building_count > 0)) {
        can = (can_upgrade_unittype(client.conn.playing, putype) != NULL);
        fc_snprintf(buf[0], sizeof(buf[0]), "%s",
                    utype_name_translation(putype));
        fc_snprintf(buf[1], sizeof(buf[1]), "%c", can ? '*': '-');
        fc_snprintf(buf[2], sizeof(buf[2]), "%3d",
                    unitarray[index].building_count);
        fc_snprintf(buf[3], sizeof(buf[3]), "%3d",
                    unitarray[index].active_count);
        fc_snprintf(buf[4], sizeof(buf[4]), "%3d",
                    unitarray[index].upkeep[O_SHIELD]);
        fc_snprintf(buf[5], sizeof(buf[5]), "%3d",
                    unitarray[index].upkeep[O_FOOD]);
        /* TODO: add upkeep[O_GOLD] here */
        ndex].active_count > 0) ? putype : NULL;
        k++;
        unittotals.active_count += unitarray[index].active_count;
        output_type_iterate(o) {
          unittotals.upkeep[0] = unitarray[index].upkeep[o];
        } output_type_iterate_end;
        unittotals.building_count += unitarray[index].building_count;
      }
    } unit_type_iterate_end;

    fcfc_snprintf(buf[2],sizeof(buf[2]),"%d",unittotals.building_count);
    fc_snprintf(buf[3],sizeof(buf[3]),"%d",unittotals.active_count);
    fc_snprintf(buf[4],sizeof(buf[4]),"%d",unittotals.upkeep[O_SHIELD]);
    fc_snprintf(buf[5],sizeof(buf[5]),"%d",unittotals.upkeep[O_FOOD]);
    /* TODO: add upkeep[O_GOLD] here */
        N_("Unit Type"),
        N_("?Upgradable unit [short]:U"),
        N_("In-Prog"),
        N_("Active"),
        N_("Shield"),
        N_("Food"),
        NULL
      QQadjective_for_player(player_by_number(packet->id[i])),
                 player_name(player_by_number(packet->id[i]))struct options_settable *o = &settable_options[i];

	  tab = categories[o->scategory];
	  if (SSET_BOOL == o->stypeo->val) {
	      send_chat_printf("/set %s %d", o->name, val);
	    }
	  } else if (SSET_INT == o->stypeo->val) {
              send_chat_printf("/set %s %d", o->name, val);
	    }o->strval) != 0) {
              send_chat_printf("/set %s %s", o->name, strvalcalloc(num_options_categories, sizeof(*used));
  categories = fc_calloc(num_options_categories, sizeof(*categories));

  for (i = 0; i < num_settable_options; i++) {
    used[settable_options[i].sstruct options_settable *o = &settable_options[i];

    j = categories[o->so->SSET_BOOL == o->stypeo->val ? BST_CHECKED : BST_UNCHECKED);
    } else if (SSET_INT == o->stype) {
      /* integer */
      char buf[80];
      int length;
      fc_snprintf(buf, 80, "%d", o->max);
      buf[79] = 0;
      length = strlen(buf);
      fc_snprintf(buf, 80, "%d", o->min);
      buf[79] = 0;
      if (length < strlen(buf)) {
        length = strlen(buf);
      }
      fc_snprintf(buf, 80, "%d", o->o->ENDREP
DELTA 11958 12930 7841
SVN  ª	ª„  z €^ T€‚% v”€} „¦c_fopen(filename, "rb");
  if (!fp) {
    freelog(LOG_FATAL, "Failed reading PNG file: \"%s\"""Failed creating PNG struct");
    exit(EXIT_FAILURE);
  }

  infop = png_create_info_struct(pngp);
  if (!infop) {
    freelog(LOG_FATAL, "Failed creating PNG struct");
    exit(EXIT_FAILURE);
  }
  
  if (setjmp(pngp->jmpbuf)) {
    freelog(LOG_FATAL, "Failed while reading PNG file: \"%s\""fc_strlcpy(real_filename, filename, strlen(filename));
  fc_strlcat(real_filename, fileext, strlen(fileext));
  
  file = fc_ENDREP
DELTA 16578 339483 956
SVN  ¨I¨YP ¥C — nšc¹ X¦qfc_strdup macro, strdup/
char *real_fc_strdup(const char *str,
                 ENDREP
DELTA 17117 0 7043
SVN  …¢w…¢w! „àS ‚ „L„àU‚ ‚/„å#‚ ›~„çT‚ Ÿ#…ƒTfcfcfcfcENDREP
DELTA 1220 4924 1169
SVN  Žx“Iˆ7 …^ €Q ƒr…\€= G  {Šr€…)#include <stdlib.h>             /* size_t; actually stddef.h, but stdlib.h
                                 * might be more reliable? --dwp */

/* utility */
#include "support.h"            /* fc__attribute */                                           
#define FC_FREE(ptr)       do { free(ptr); (ptr) = NULL; } while(0)

#define fc_strdup(str) real_fc_strdup((str), "strdup", __LINE__, __FILE__)

                     const char *called_as, int line, const char *file)
                     fc__attribute((warn_unused_result));
void *fc_real_realloc(void *ptr, size_t size,
                      const char *called_as, int line, const char *file)
                      fc__attribute((warn_unused_result));
void *fc_real_calloc(size_t nelem, size_t elsize,
                     const char *called_as, int line, const char *file)
                     fc__attribute((warn_unused_result));

char *real_fc_strdup(const char *str,
                     const char *called_as, int line, const char *file)
                     fc__attribute((warn_unused_result));

#endif /* FC__MEM_H */
ENDREP
DELTA 15785 45796 18155
SVN  §w¨cˆ0 ˆE €g M‰€{ ‹‰ “:ŒLƒ ‚Y ¯ ‚8¢^€$ ŽA¦=ƒ gµ ƒ Œµgƒ ƒSÁq¦ ŠVÆ€{ ®Ñf€E ƒO€Mƒ „€] W†ƒ †.‡j¦ ŠŽX¦ ‡ ™$€w ¡€Z …;¢</* utility */
#include "fcintl.h"
#include "log.h"
#include "rand.h"
#include "support.h"

/* common *//* ai */
#include "aidata.h"
#include "aitools.h"

/* server */
#include "gamehand.h"
#include "maphand.h"
#include "notifybarbarianfc_global_initial_techs(barbarians);
  give_nationlog_verbose("Created barbarian %s, player %d", player_name(barbarians),
              player_number(barbarians));
  notify_player(NULL, NULL, E_UPRISING, ftc_serverfc_fc_fc_log_debug("Created barbarian unit %s",log_debug("Moved barbarian unit from (%d, %d) to (%d, %d)", 
                      TILE_XY(ptile), TILE_XY(dir_tiles[rdir])log_debug("Closest city (to %d,%d) is %s (at %d,%d) distance %d.",
  fc_fc_rand(100) > get_player_bonus(victim, EFT_CIVIL_WAR_CHANCE)) {
    return;
  }
  log_debug(fc_log_debug("Created barbarian unit %s",log_debug("Created barbarian unit %s", ftc_server,
                  _("Native unrest near %s led by %s."),
                  city_link(pc),
                 ftc_server,
                  _("Sea raiders seen near %s!"),
                  city_linkENDREP
DELTA 16015 9635 2436
SVN  ¿¿
 ¥; ‚ ™\¥=fcENDREP
DELTA 17068 28977 5256
SVN  †  †  ‚x˜ ˆy Ž ‰^ˆi  '“€A -³u‚ vµ$€A £k·M‚ lÜ|€V ä9Ü|ƒ †pÁ7ƒ ˆqÈ)ƒ ‹Ñ’ ˆnÜb“ zåb“  æn“ ‚è “ rê“ ƒUì“ ¡hï› …m‚’8š §S‚˜t§ „$‚Àl€` \‚Ånƒ  ‚ÆL“ c‚Ó~¿ ƒy‚Õ“ 3‚Ù)“ ƒ‚Ún“ Õy‚Þ˜ m„îu c„å@ (ƒ¶&“ „ƒÃ`¹ —;ƒÈ€ †^ƒá€ †9ƒé$– ýqƒð$¤ |Üx ˆ„ïd‚ †M„ø— M„þs€b ˜…€x€J …š,€  ™C…œf€„ {…¹Y€f †…½ƒ ž`…Ãƒ ‰…áy€e ‡p…ërƒ \…ódž ‚G…÷x» Ž…÷^€Y •+†‡$§ d†œtƒ &†žZ€ƒlme_translationfc_snprintf(filename, sizeof(filename), "%s/%s.%s",
             fcfc_snprintf(filename, sizeof(filename), "%s_%s.%s",
             fcINT:
      {
        int val;

        if (entry_int_get(pentry, &val)) {
          fcfc_fc_fc_et(&a->name, name)rule_name(&a->name)rule_name(&a->name)rule_name(&a->name)rule_name(&a->name)rule_name(&a->name)rule_name(&a->name)et(&punitclass->name, name)et(&punittype->name, name)fc_strlcat(tmp, sec_name, 200);
    fc_fc_strcasecmp(hut_str, "Normal") == 0) {
      ut->hut_behavior = HUT_NORMAL;
    } else if (fc_fc_rule_name(&u->name)fc_strlcat(tmp, section_name(psection), sizeof(tmp));
      fc_rule_name(&u->name)rule_name(&u->name)rule_name(&u->name)et(&b->name, name);
  }
rule_name(&b->name)
                                     rule_name(&b->name)if (0 == strcmp(name, "unused")) {
      name_set(&pterrain->name, "");
    } else {
      name_set(&pterrain->name, name);
    }
    if (0 == strcmp(name, "unused")) {
      name_set(&presource->name, "");
    } else {
      name_set(&presource->name, name);
    }et(&pbase->name, name)et(&gov->name, name);
  } governmentfcname_set(&title->male,
name_set(&title->female,
             secfile_lookup_str(file, "%s.ruler_female_title", sec_name))et(&pl->adjective, adjective);
    name_set(&pl->noun_plural, noun_plural)rule_name(&n2->adjective), rule_name(&pl->adjective))
          || 0 == strcmp(rule_name(&n2->noun_plural),
                         rule_name(&pl->noun_plural)
          if (fc_strcasecmp(name, "river") == 0) {
            city_names[j].river = setting;
          } else {
            /* "handled" tracks whether we find a match
             * (for error handling) */
            bool handled = FALSE;
            int l = strlen(name);

            if (l > 0  && 's' == fc_tolower(name[l-1])) {
              /* remove frequent trailing 's' */
              name[--l] = '\0';
            }

            terrain_type_iterate(pterrain) {
              const int i = terrain_index(pterrain);
                      if (NULL != fc_strcasestr(isection, name)) {
                city_names[j].terrain[i] = setting;
                handled = TRUE;
                break;
              }
            } terrain_type_iterate_end;
        fc_fc_fc_strcasecmp(leaders[j], "Male")) {
        pl->leaders[j].is_male = TRUE;
      } else if (0 == fc_fc_fc_strcasecmp(barb_type, "LandLAND_BARBARIAN;
      barb_land_count++;
    } else if (fc_        name_set(&title->male, male_name);

        name_set(&title->female, female_name)fc_strlcat(tmp, sec_name, 200);
    fc_fc_ = '\0';
    }

    pl->player = NULL;
  } nations_iterate_end;

  /* Calculate parent nations.  O(n^2) algorithm. */
  nations_iterate(pl) {
    struct nation_type *parents[nation_count()];
    int count = 0;

    nations_iterate(p2) {
      for (k = 0; p2->civilwar_nations[k] != NO_NATION_SELECTED; k++) {
	if (p2->civilwar_nations[k] == pl) {
	  parents[count] = p2;
	  count++;
	}
      }
    } nations_iterate_end;

    fc_assert(sizeof(parents[0]) == sizeof(*pl->parent_nations));
    †  ƒÊ?ƒÅ9‡ ‰ ƒl€a ˆEŽ€k °K™(‚ ¸QÉu€u Å$ƒ9“ …DÈo“ –ÎE€S …-å,“ ‰bêk“ Œô_š k‚€z› …t‚‘“ oô_ ‹_‚˜t“ „Y‚¤e€\ ˆ5‚ª€X Ž ‚³#Ÿ ˆ~‚ÁAet(&city_styles[i].name,
               secfile_lookup_str(file, "%s.name", section_name(style)))name_set(&s->name, secfile_lookup_str(file, "%s.name", sec_name));

    item = secfile_lookup_str_default(file, rule_name(&s->name),
                                      "%s.short_name", sec_name);
    name_set(&s->abbreviation, item)fcfc_strcasecmp(sval, "Pollution") == 0) {
    game.info.nuke_contamination = CONTAMINATION_POLLUTION;
  } else if (fc_rule_name(&c->name)rule_name(&u->name)rule_name(&s->name));
    sz_strlcpy(packet.short_name, rule_name(&s->abbreviation)rule_name(&a->name)rule_name(&b->name)rule_name(&pterrain->name)rule_name(&presource->name)rule_name(&b->name)rule_name(&g->name)rule_name(&p_title->male));
      sz_strlcpy(title.female_title, rule_name(&p_title->female)rule_name(&n->adjective));
    sz_strlcpy(packet.noun_plural, rule_name(&n->noun_plural)rule_name(&city_styles[k].name)ENDREP
DELTA 16929 235016 492
SVN  â+â@;t ™Y €z NšBƒ ›Wœ¦ †
¸€H „P¾_ƒ ƒ-Ã1‚ „sÆ`‚ #Æ` ‹RÌx‚ ‰_ØLfc_strcasecmp(local_encoding, "ANSI_X3.4-1968") == 0
        || fc_strcasecmp(local_encoding, "ASCII") == 0
        || fc_fc_fc_strdup(text);
    } else {
      fcfc_strdup(text); /* The best we can do? */
        } else {
          fcfc_fcfcfcENDREP
DELTA 17077 2609 3681
SVN  ‚£l‚¤_‚i…t ‹@ €c ¤Œ#‚ 6°&‚ ‚±^ƒ ³s‚ „Vµƒ '¹hƒ ‰T»ƒ ‡gÄe‚ Œ ÌN‚ †Øp‚ ‰ß
 Œ$è=‚ /Øp …Wö‚ ûk‚ ,ý	‚ (þ7‚ }ÿa‚ a€`‚ ‚qC‚ Fˆ} r„|‚ ˆ} x†}‚ ‡w‚ ‚ˆ}‚ Fˆ} w‹U‚ ˆ} R€P „"%‚ ˆ6“I‚ tœ‚ bw€I ‡N "» Œ
¨ƒ ‚,´ƒ –s¶=‚ uÍ2‚ dÎ)€Y Ïf‚ JÐkƒ ‚Ò7– ;ÔV€I [ÖYƒ ”%æ4¼ úp€X ŽüY‚ )‚›@ „I‚Œ‚ ‚¡> ƒc‚‘~‚ …[‚•c‚ …|‚›@‚ ‚.‚¡>ft_offset_t start_offset;             /* The start offset (in bytes). */
  ft_offset_t stop_offset;fcfcfc_fcft_FT_fc_fcfcfcft_offset_t start_offset, ft_fcfcfcfcfcfcfcfcfcfcfcfcfcfc_snprintf(buf + ret, len - ret, "%c", SEQ_END);
      }

      return ret + fcfcfcfcfc_snprintf(buf, len, "%s", _(ptag->link.name));
  } else {
    return fcft_offset_t start_offset,
                              ft_ft_ft_fcfcfc_isspace(*end); end--);
    } else {
      *seq_type = ST_START;
    }
  }

  while (fcfcfc_
          && 0 == fc_fc_isspace(*read)) {
    read++;
  }

  if (end - read + 2 > 0) {
    fc_FT_ft_offset_t start_offset,
                               ft_FT_OFFSET_UNSET
      || start_offset > strlen(text_source)
      || (stop_offset != FT_fcfcfcfcfcENDREP
DELTA 16929 235539 770
SVN  È~É&j —e “ G¯= …P˜<¬ I¯=¨ @—  äŸiƒ Ä„jdestroy(dialog_listremove(dialog_list, pdialog);
  free(pdialogreturn the cma_dialog for a given city.
fc_ENDREP
DELTA 16955 0 226
SVN  ÖCÖC5v ÁI ‚ @ÁK‚ ;Ã‚ ÄJ‚ HÅ`‚ ‚?Ç*‚ ‚6Ék‚ nÌ#€h ‡JÎyfcfcfcfcfcfcfcfc_snprintf(buf, sizeof(buf), "%d", vi->no);
    gtk_label_set_text(GTK_LABEL(vib->no_count_label), buf);
    fc_snprintf(buf, sizeof(buf), "%d", vi->abstain);
    gtk_label_set_text(GTK_LABEL(vib->abstain_count_label), buf);
    fcENDREP
DELTA 16998 15984 290
SVN  †  †  ƒ_ƒU © ‚ ¨2©­ Gê:€B Ó ‚ Ô‚ Õ,‚ ‡nÖ4‚ ƒÞ$‚ ‚ká:‚ ‚iä'‚ ‚iç‚ Fé}‚ Oè@ ÿg ^€x /ú‚ ƒaû3‚ ƒZÿ‚ „‚r€_ „‡d‚ Rñq UŒ<‚ Û+‚ Cè@‚ Sû3 Wð9 CëL‚ Q‚r Wð9 Uî9€r oð ‚ Qñq‚ {ð  ŽTô?‚ ,‚ƒ‚ 4‚„C‚ 0‚…y‚ ®Y‚‡+‚ ‚¶‚ Ël‚·‚ ‚Nƒ‚z‚  aƒ…J‚ Lƒ¦-‚ &ƒ§{‚ )ƒ©#‚ š<ƒªN‚ ‚ƒÅ‚ ƒ8ƒÇ‚ ‚ƒÊK‚ ƒ,ƒÌ`‚ ^ƒÐ‚ ‚kƒÑn‚ 6ƒÔ[‚ ‚qƒÖ‚ XƒÙ‚ ƒ^ƒÚ`‚ ‚`ƒÞ@‚ 'ƒí4 ‡ƒâI‚ Eƒõ= ƒƒê#‚ ˆƒí4‚ ‚Zƒõ=‚ ‚Mƒø‚ Šƒúh‚ ‚„„p‚ ‚x„†z‚ œ3…‰t‚ ”…¦)„ S…º.„ j…÷= «R…Ëk„ –j…÷=‚ ‘K†Ž)fcfc_snprintf(cBuf, sizeof(cBuf), _("active"));SF_CENTER;
  pText1 = create_text_surf_from_str16(pStr);
    
  fcfcfcfcfcfcfcfcfcfcfcfcfcfc_snprintf(cBuf, sizeof(cBuf), "%d", units[utype_index(i)].building_count);
      } else {
	fcfcfcfcfcfood upkeep */
            fcfcfc_snprintf(cBuf, sizeof(cBuf), "%d", units[utype_index(i)].building_count);
            } else {
              fcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcvoidvoidvoidfc†  ¸U¸aŒ ¸U scrollbar_arENDREP
DELTA 15410 143670 266
SVN  ×E×E –L ‚ ­7–N‚ zÄ‚ }Æ‚ CÈfcfcfcfcENDREP
DELTA 16929 236922 8040
SVN  ûqûq! ÖR ‚ ƒwÖT‚ JÖT ™oÜ‚ 	ö‚ „^÷fcfcfcfcENDREP
DELTA 16824 7560 1624
SVN  ‚Äc‚Äd,) ±~ ¢ H² €T ÿ´;‚ „Q‚³V‚ ‚‚¸)¯ {‚³} ˆr‚»qfc_isdigit(plus[1]))) {
    if (fcfc_toupper(*plus);
    newaccel.fVirt=FVIRTKEY;
  } else {
    return;
  }
  if (fc_fcfcfc_snprintf(transtext, sizeof(transtext), transENDREP
DELTA 16929 244989 2074
SVN  4lF„ ·f ‚ ‘q·h€ ÊM€ cÌC€\ ^Ï{‚ ‡8Ð[ƒ ŽØ‚ †7æ/ƒ :ìhƒ …Š$‚ |8fc
        internal_to_local_string_malloc(logfile);

    fc_snprintf(logcmdline, sizeof(logcmdline), " --debug 3 --log %s",
                
        internal_to_local_string_malloc(scriptfile);

    fc_snprintf(scriptcmdline, sizeof(scriptcmdline),  " --read %s",
                fc_snprintf(options, sizeof(options), "-p %d -q 1 -e%s%s --saves \"%s\"",
              internal_server_port, logcmdline, scriptcmdline, savescmdline);
  fc_snprintf(cmdline1, sizeof(cmdline1), "./ser %s", options);
  fcfcfc_fcfc_fc_fcENDREP
DELTA 16601 1544 2319
SVN  ¢	¢` ŠW ‚ ŠEŠY€Y ‡;•v‚ ƒ~3ƒ V¡3fcfc_snprintf(buf, sizeof(buf), "%s/themes/gui-sdl", data_dir);

    directories[i++] = fc_fcfc_ENDREP
DELTA 16929 247093 3391
SVN  Û*Û/ ¯] ƒ ƒL¯_† „³1ƒ †·L‡ >½lfc_removefc_destroyENDREP
DELTA 16630 1144 1653
SVN  ‚–d‚–g ’E ‚ –’G† ÃS¨b‡ ª+ì9fcremovedestroyENDREP
DELTA 16945 31089 1022
SVN  „žL„Ÿ$D ­2  l­3Ÿ ‚Å®ƒ þg‚ó#ƒ š'ƒòŸ ’„Œ3city_map_radius_sq_get(acity), fc_fc_city_map_radius_sq_get(pcity), ENDREP
DELTA 17042 76489 174
SVN  ¡Q¡Q “ ‚ Ž<“fcENDREP
DELTA 16929 252744 8583
SVN  ûsûz1a –= » P¸= ‘—E€b ‹w©2† Ÿ/µ/‚ Cé@ ‰TÕ#º Šß/‚ ’3é@destroy(client.worklists);
    client.worklists = NULL;
  }fc_strdup(universal_type_rule_name(worklist.entries + i));
        puni_name->name =
          fc_removefcfc_strdup(kind);
      pgwl->unbuilt.entries[i].name = fc_fcENDREP
DELTA 16397 64235 2176
SVN  ¹ ¹   ‚ …W	‚ ‚"¢b‚ ”¥fcfcfcENDREP
DELTA 13518 4033 2345
SVN  œdœ@‚$ ‰ ‚ &‰‚ {Š/‚ ‹,‹,€‚ ƒJ™fcfcfcfc_snprintf (msgbuf, sizeof (msgbuf),
               /* TRANS: No full stop after the URL, could cause confusion. */
               _("THIS IS A BETA VERSION\n"
                 "Freeciv %s will be released in %s, at %s"),
               NEXT_STABLE_VERSION, _(NEXT_RELEASE_MONTH), WIKIENDREP
DELTA 16929 261927 333
SVN  ‚òV‚òY[? ¯S ƒ ¿:¯U‚ ±ï‚ – -‚ §B·.‚ ˆ|Þr‚ „:çp‚ Içp ˜Níu‚ „n‚†E‚ ¬‚‹5ƒ šx‚·L© -‚¤? ž=‚Ôfc_fcfcfcfcfcfcfcfcfc_fc_strcasecmp(first_string, second_stringENDREP
DELTA 11355 17644 4048
SVN  Ëhâ.	—i …~ ‰ f…r© „‡Tƒ „zŒU€Q ƒR’3€ˆJ G €‚m E@ ‰Y˜h™ ¢Y€E G  „N¤p€P E@€: G  &©5¢ „yªX€‚ Š&¯JŒ …|ºŒ ‚	À« ƒ2Â)ƒ „HÅ[« 4Ê- G €B E@€ƒZunistd.h>#include "srv_main.h"
#include "stdinhandfc_case GGZ_SEAT_ABANDONED:
    break;
  }

  players_iterate(pplayer) {
    if (fc_  const GGZdModState *old_state = data;
  GGZdModState new_state = ggzdmod_get_state(ggz);

  log_debug("ggz changed state to %d.", new_state);

  if (*old_state == GGZDMOD_STATE_CREATED) {
    const char *savegame = ggzdmod_get_savedgame(ggz);

    /* If a savegame is given, load it. */
    log_debug("Instructed to load \"%s\".", savegame);
    if (savegame) {
      if (!load_command(NULL, savegame, FALSE)) {
	/* no error handling? */
	server_quit();
      }
    }

    /* If we loaded a game that'll include the serverid.  If not we
     * generate one here. */
    if (strlen(srvarg.serverid) == 0) {
      strcpy(srvarg.serverid, "ggz-civ-XXXXXX");
      if (!mkdtemp(srvarg.serverid)) {
        log_error(_("Unable to make temporary directory for GGZ game.\n"));
        server_quit();
      }
    }

    /* Change into the server directory */
    if (chdir(srvarg.serverid) < 0) {
      log_error(_("Unable to change into temporary server directory %s.\n"),
                srvarg.serverid);
      server_quit();
    }
    log_debug("Changed into directory %s.", srvarg.serverid);
  }
}

******
  Handles a seat-change event as reported by the GGZ server.

  This typically happens when a human player joins or leaves the game.
  This function links the GGZ seat player (which is just a seat number) to
  the correct player.  In the case of a join event we also get the socket
  for the player's connection, which is treated just like a new connection.
log_debug("%s is leaving.log_error("Couldn't match player %s.", old_seat->name);
    }
  }
}

Handles a ggzdmod error.  This simply exits the server with an error
  message.
*******/
static void handle_ggz_error(GGZdMod * ggz, GGZdModEvent event,
			     const void *data)
{
  const char *err = data;

  log_error("Error in ggz: %s", err);
  server_quit();
}

with_ggz = ggzdmod_is_ggz_mode();
ggzdmod_set_handler(ggzdmod, GGZDMOD_EVENT_SPECTATOR_LEAVE,
			&handle_ggz_spectator_seat_event);
    ggzdmod_set_handler(ggzdmod, GGZDMOD_EVENT_SPECTATOR_SEAT,
			&handle_ggz_spectator_seat_event);
    ggzdmod_set_handler(ggzdmod, GGZDMOD_EVENT_ERROR,
    			&handle_ggz_errorlog_verbose(log_verbose(/* FIXME: this can happen for AI players */fc_/* FIXME: this can happen for AI players */******
  Reports a savegame file to the GGZ server.  GGZ will allow
  reloading from a file later by providing the savegame at launch time
  (in the STATE event when leaving the CREATED state).
*******/
void ggz_game_saved(const char *filename)
{
  char full_filename[strlen(filename) + strlen(srvarg.serverid) + 2];

  if (!path_is_absolute(filename)) {
    snprintf(full_filename, sizeof(full_filename), "%s/%s",
	     srvarg.serverid, filename);
  } else {
    sz_strlcpy(full_filename, filename);
  }
  log_debug("Reporting filename %s => %s to ggz.", filename, full_filename);

  if (with_ggz) {
    ggzdmod_report_savegame(ggzdmod, full_filename);
  }
}

#endif
ENDREP
DELTA 17042 98894 5379
SVN  ÎLÎP °Z € œ\±pfc_strlcat(buf, "\n[", bufsz);
      } else {
        fc_strlcat(buf, " [", bufsz);
      }
    } else {
      fc_strlcat(buf, "/", bufsz);
    }

    fc_ENDREP
DELTA 16992 22786 207
SVN  ¢Z¢[
 —6 ƒ ‹"—8fc_ENDREP
DELTA 16999 4619 141
SVN  ‚ÐF‚ÐF‚mD Î" ‚ ƒ\Î$‚ ƒ6Ò‚ ƒdÕ:‚ ƒCÙ ‚ ƒ\Üe‚ ƒfàC‚ ƒfä+‚ ƒ;è‚ ƒBëP‚ ƒ1ï‚ ƒ=òG‚ ƒwö‚ ƒqù‚ ƒqýr‚ ƒXe‚ X…?‚ …†‚ ƒf‹!‚ ƒp	‚ ƒ0’{‚ ƒ=–-‚ ƒ>™l‚ ƒT,‚ ƒE¡‚ ƒD¤I‚ ƒI¨‚ ƒG«Z‚ ƒ;¯#‚ ƒA²`‚ ƒE¶#‚ ƒe¹j‚ ƒ_½Q‚ ƒuÁ2‚ ƒrÅ)‚ É‚ G‚†> „VÊn‚ ƒZÏF€\ «Ó|‚ Mþ‚ „{ÿN‚ q‚„K‚ …9‚†>‚ ‚>‚‹y‚ „w‚Ž9‚ ‚B‚“2‚ ‚)‚•v‚ „p‚˜!‚ „‚‚ W‚¡$‚ ƒU‚¢}‚ ”~‚¦T‚ ‚&‚»T‚ ’J‚½|fcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfc_snprintf(cBuf, sizeof(cBuf),"%s (%s)", _("Add to City"), "B");
  len = strlen(cBuf);
  fcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcENDREP
DELTA 16578 395475 160
SVN  ÒÒ16 œB ¬ fŸr #T‚ þAžy‚ ‚<‚ ‚YŸC‚ Ž¢‚ ¡d°$fc_snprintf(buf, sizeof(buf),
		_("Bribe unifcfcfcfcfcENDREP
DELTA 16929 263394 5648
SVN  Ì(Ìto†-  € G  Š<‘x€P ‹œmƒ ‚_§{€U t«-Ÿ G  ®ƒ ‚¯¯ }±bƒ „]²e€` y±f‹ ‚²iƒ G  „'¼€z ƒ%Á&£ G  YÅ4ƒ @Æ€ „È"fc_srand(), updated by fc_rand(),
 * Can be duplicated/saved/restored via fc_rand_state()
 * and fc_rand_set_state().
 */
static RANDOM_STATE rand_state;

fc_rand_debug(RANDOM_TYPE size, const char *called_as,
                         fc_fc_rand() this was important to pass
     * test_random1().  Now using divisor in fc_fc_rand(MAX_UINT32);
    }
} 

fc_fc_rand_state(void)
{
  int i;

  log_rand("fc_fc_fc_rand_set_state(RANDOM_STATE state)
{
  int i;

  rand_state = state;

  log_rand("fc_rand_setfc_rand_set}

fc_rand_state();
  /* fc_srand(time(NULL)); */  /* use current state */

  for (i = 0; i < n+2; i++) {
    new_value = fc_fc_rand_set_state(saved_state);
}

fc_fc_randomly_debug(RANDOM_TYPE seed, RANDOM_TYPE size,
                              const char *called_as,
                             ENDREP
DELTA 16984 70452 11905
SVN  „Ú9„Úcf „£- €d ”F„¤g‚ ¡
„¹/                               const int production[])
{
  fc_snprintf(buffer, bufsz, "[%d %d %d %d %d %d]",
              production[O_FOOD], production[O_SHIELD],
              production[O_TRADE], production[O_GOLD],
        fcENDREP
DELTA 13354 3245 5923
SVN  ‚¨‚« † † ¾ Œ{†1¸ †“%‚ Ó{™)€ íC‹ •ýZ‚ ‚[’{‚ y’{ w–Q‚ E’{ ‡w™¯ žt¡0ƒ ƒvÀ(€) ƒTÅ2€ ŽÉ"ƒ Ÿ×6‹ „GöUƒ ”$û ƒ G‚Hƒ …'‚‘€` n‚—ommon */
#include "game.h"

/* client */
#include "client_mainpMotionEvent->x -= pMotion->pScrollBar->dst->dest_rect.xfc	                  WF_WIDGET_HAS_INFO_LABEL | WF_RESTORE_BACKGROUND);
  pBuf->string16 = create_str16_from_char(_("Close Dialog (Esc)"), adj_font(12)adj_size(2)fcfcfcresult_from_main_map(&result, pCma->pCity, TRUELASfc_snprintf(cBuf, sizeof(cBuf),
	      _("City of %s (Population %s citizens) : %s"),
	      city_name(pCity),
	      population_to_text(city_population(pCity)),
	                        WF_WIDGET_HAS_INFO_LABEL | WF_RESTORE_BACKGROUND);
  pBuf->string16 = create_str16_from_char(_("Close Dialog (Esc)"), adj_font(12)LASadj_size(2)LASLASLASLAST]->h) / 2;
  alphablit(pText[O_LAST], NULL, pWindow->theme, &dst);
  FREESURFACE(pText[O_LASENDREP
DELTA 17107 28525 1317
SVN  öyö} ®3 ƒ ˆ3®5ƒ 6¶jƒ ›xÇ"ƒ “]ãfc_fc_fc_fc_ENDREP
DELTA 14406 1060 362
SVN  K
„x ˆ €„x8ŒWfc_rand(_size) \
  fc_rand_debug((_size), "fc_rand", __LINE__, __FILE__)

RANDOM_TYPE fc_rand_debug(RANDOM_TYPE size, const char *called_as,
                          int line, const char *file);

void fc_srand(RANDOM_TYPE seed);

bool fc_rand_is_init(void);
RANDOM_STATE fc_rand_state(void);
void fc_rand_set_state(RANDOM_STATE state);

void test_random1(int n);

/*===*/

#define fc_randomly(_seed, _size) \
  fc_randomly_debug((_seed), (_size), "fc_randomly", __LINE__, __FILE__)

RANDOM_TYPE fc_randomly_debug(RANDOM_TYPE seed, RANDOM_TYPE size,
                              const char *called_as,
                             ENDREP
id: 33f.5ck.r17122/319196
type: file
pred: 33f.5ck.r17107/31053
count: 8
text: 17122 36122 2808 6035 e5e13fa8a1cd6431773015559defbe85
props: 10490 6797 110 0 dce24d5ac3f5e86568d59a55fa196991
cpath: /trunk/common/specialist.c
copyroot: 15280 /trunk

id: vb.5ck.r17122/319445
type: file
pred: vb.5ck.r17107/31546
count: 87
text: 17122 273526 44 25687 04dcc28639a3ad54123f1442a616f7a5
props: 11067 578 111 0 3f70303ff9ea148b5e232db96a904e98
cpath: /trunk/common/improvement.c
copyroot: 15280 /trunk

id: 3jw.5ck.r17122/319693
type: file
pred: 3jw.5ck.r17107/32039
count: 29
text: 17122 43079 42 10832 41d27dd472df6e793acce8efa418d497
props: 12670 90710 34 0 25e6c2f7558b7484000d4d090dea5b92
cpath: /trunk/common/base.c
copyroot: 15280 /trunk

id: v.5ck.r17122/319936
type: file
pred: v.5ck.r17113/70
count: 330
text: 17122 281479 895 59024 01ce41facda73379fff48091d049b518
props: 11030 219 112 0 04d6f3553e14be31b9e437b066651140
cpath: /trunk/common/unit.c
copyroot: 15280 /trunk

id: v9.5ck.r17122/320174
type: file
pred: v9.5ck.r17107/32522
count: 120
text: 17122 282500 4434 37718 fb4c87ccff4ee0dd476e6d08877206eb
props: 10932 10175 111 0 3f70303ff9ea148b5e232db96a904e98
cpath: /trunk/common/unittype.c
copyroot: 15280 /trunk

id: t.5ck.r17122/320424
type: file
pred: t.5ck.r17107/32769
count: 123
text: 17122 48306 219 30582 e98d0ef1e13d9c43ec38276965169acf
props: 11069 11747 112 0 0ba48eb7b1f123775dc0e292f9b3ab64
cpath: /trunk/common/tech.c
copyroot: 15280 /trunk

id: 33i.5ck.r17122/320666
type: file
pred: 33i.5ck.r16929/272456
count: 12
text: 17122 291210 941 7151 62eddefcdce59dfee2a3c1853534cf50
props: 10866 15548 110 0 705660468cdcbf270377dea86b274451
cpath: /trunk/common/team.c
copyroot: 15280 /trunk

id: 4h3.5ck.r17122/320912
type: file
pred: 4h3.5ck.r17101/7762
count: 14
text: 17122 306732 1132 37471 89cc219515f2c59a89bbb576fb615d34
cpath: /trunk/common/featured_text.c
copyroot: 15280 /trunk

id: 33h.5ck.r17122/321109
type: file
pred: 33h.5ck.r16955/3011
count: 23
text: 17122 55930 148 13375 98a8ca8170be88e718df76726ccaad9a
props: 10982 419 110 0 7d181b70073f10d0c5a58c73a72d4f04
cpath: /trunk/common/events.c
copyroot: 15280 /trunk

id: wp.5ck.r17122/321353
type: file
pred: wp.5ck.r16929/273443
count: 94
text: 17122 56320 489 22685 a5a2ac49b3c230b83881b13063827f7e
props: 11060 17292 111 0 e77f29e20031f26b4b1e16b63c7aa55c
cpath: /trunk/common/combat.c
copyroot: 15280 /trunk

id: q.5ck.r17122/321599
type: file
pred: q.5ck.r17107/33499
count: 466
text: 17122 58458 594 98999 8f166e8fefc1330db279e3ab68e46e0e
props: 11069 12442 112 0 7c45f13e78520e4754bc476682276743
cpath: /trunk/common/city.c
copyroot: 15280 /trunk

id: 18x.5ck.r17122/321841
type: file
pred: 18x.5ck.r16984/83519
count: 81
text: 17122 317176 265 77155 80fdc0dff8435d8d394641468b73d67a
props: 11052 815 111 0 3d8b904835b9008e2a0a4d4db6ee628d
cpath: /trunk/common/aicore/cm.c
copyroot: 15280 /trunk

PLAIN
K 11
Makefile.am
V 24
file 18u.5ck.r15407/8822
K 11
aisupport.c
V 25
file 2em.5ck.r16015/33732
K 11
aisupport.h
V 22
file 2en.0.r8119/19806
K 9
caravan.c
V 26
file 33l.5ck.r16929/275194
K 9
caravan.h
V 26
file 33m.5ck.r16578/406062
K 9
citymap.c
V 25
file 2gj.5ck.r16984/84014
K 9
citymap.h
V 22
file 2gk.0.r10181/7464
K 4
cm.c
V 26
file 18x.5ck.r17122/321841
K 4
cm.h
V 25
file 18y.5ck.r16984/83769
K 14
path_finding.c
V 24
file 2ds.5ck.r17034/6374
K 14
path_finding.h
V 26
file 2dt.5ck.r16578/405802
K 10
pf_tools.c
V 26
file 2du.5ck.r16929/274426
K 10
pf_tools.h
V 24
file 2dv.5ck.r15868/6236
END
ENDREP
id: 18t.5ck.r17122/322703
type: dir
pred: 18t.5ck.r17034/7240
count: 222
text: 17122 322090 600 600 96b0a04e4ae619671490f8b1f1bfda23
props: 11108 8037 65 0 8b44e87f657ecca3b8458ca1746fb7c6
cpath: /trunk/common/aicore
copyroot: 15280 /trunk

id: oe.5ck.r17122/322944
type: file
pred: oe.5bk.r14377/2278985
count: 10
text: 17122 311406 333 3648 874abf5f046d379d585419e5d4d2de54
props: 7546 3154 110 0 705660468cdcbf270377dea86b274451
cpath: /trunk/common/version.c
copyroot: 15280 /trunk

id: 2xv.5ck.r17122/323190
type: file
pred: 2xv.5ck.r16929/276493
count: 60
text: 17122 110155 372 20182 965efed75bb57ec4d13977240e700ecb
props: 10755 46938 111 0 28e613ef70fc8e4efe7ed7b15f74e6e7
cpath: /trunk/common/movement.c
copyroot: 15280 /trunk

id: 2ys.5ck.r17122/323441
type: file
pred: 2ys.5ck.r17042/105693
count: 49
text: 17122 315194 182 26448 9f7189037dbf1ee6d7a0f77c6e247dd8
props: 10854 444 111 0 d4514082fc7e52be026d3360dec4dcb0
cpath: /trunk/common/tile.c
copyroot: 15280 /trunk

id: 2fp.5ck.r17122/323686
type: file
pred: 2fp.5ck.r17107/33977
count: 63
text: 17122 318430 54 31613 add2f84f63f91c739f43a12a31e37e62
props: 10805 60404 111 0 eaeaff8c6ba56cfe19b921c33649c016
cpath: /trunk/common/terrain.c
copyroot: 15280 /trunk

id: 2eo.5ck.r17122/323934
type: file
pred: 2eo.5ck.r17042/105938
count: 87
text: 17122 7998 37 37402 e80b4e80a4ca42dcaf5fd53e90ef2443
props: 11071 1400 111 0 efbf1421a4b2405f7925bee6ef319aa7
cpath: /trunk/common/effects.c
copyroot: 15280 /trunk

id: he.5ck.r17122/324180
type: file
pred: he.5ck.r17107/34715
count: 71
text: 17122 10072 24 9268 3380a59cb9fdeb726e8ef341b1c7d0dd
props: 11057 31287 111 0 a3a3251698e05efa35962766e5c7e5c1
cpath: /trunk/common/government.c
copyroot: 15280 /trunk

id: 45.5ck.r17122/324427
type: file
pred: 45.5ck.r16984/85123
count: 237
text: 17122 244497 155 39822 f051fe3c9b68b96d33e978cf25f2663d
props: 11057 32005 112 0 5a3876431ad0faf061b096a2484d7aad
cpath: /trunk/common/player.c
copyroot: 15280 /trunk

id: un.5ck.r17122/324674
type: file
pred: un.5ck.r16929/278483
count: 63
text: 17122 16552 251 22840 e8f2cf55e906fd753c3722b44cd8a2d3
props: 10151 829 111 0 d69121ee529fb8cb3643d711ec0f2158
cpath: /trunk/common/connection.c
copyroot: 15280 /trunk

id: 3u.5ck.r17122/324922
type: file
pred: 3u.5ck.r17074/29061
count: 330
text: 17122 21909 88 24203 0c2cf9eb7a603b223b75f65ef7ff4884
props: 11041 20516 112 0 779057fa36f350a13e5c75663a7074d1
cpath: /trunk/common/game.c
copyroot: 15280 /trunk

id: r.5ck.r17122/325165
type: file
pred: r.5ck.r17056/4837
count: 263
text: 17122 261669 86 44546 a117e6d5501ebe9e10548bcb6ecdab7e
props: 10724 27851 112 0 420a5381801e97e189af945ae9b174d4
cpath: /trunk/common/map.c
copyroot: 15280 /trunk

id: 2wq.5ck.r17122/325405
type: file
pred: 2wq.5ck.r16929/280380
count: 71
text: 17122 266886 704 47931 eb3db1ec7afb7bef8eb9e91d7baf1a3d
props: 10865 25397 111 0 1c266b4433d829481714f1852322e965
cpath: /trunk/common/requirements.c
copyroot: 15280 /trunk

id: il.5ck.r17122/325660
type: file
pred: il.5ck.r17107/35379
count: 77
text: 17122 25130 46 21075 665798abbf14fe541c889942f1e3ed83
props: 11057 33068 111 0 b67b0fa27168318cbcd02c748356f132
cpath: /trunk/common/nation.c
copyroot: 15280 /trunk

id: 43.5ck.r17122/325904
type: file
pred: 43.5ck.r16929/281123
count: 295
text: 17122 25389 25 21647 faa3ed7a564565183c14967edbbac69b
props: 11001 6188 112 0 be233b9f2c09b9a4fa715b44e3833b02
cpath: /trunk/common/packets.c
copyroot: 15280 /trunk

PLAIN
K 11
Makefile.am
V 24
file 5h.5ck.r17107/35625
K 4
ai.c
V 26
file 4go.5ck.r16929/276308
K 4
ai.h
V 25
file 4gp.5ck.r15837/11321
K 6
aicore
V 25
dir 18t.5ck.r17122/322703
K 6
base.c
V 26
file 3jw.5ck.r17122/319693
K 6
base.h
V 25
file 3jx.5ck.r17107/32283
K 9
borders.c
V 26
file 4f0.5ck.r16929/278729
K 9
borders.h
V 24
file 4f1.5ck.r15975/2116
K 8
capstr.c
V 24
file dv.5ck.r15284/31880
K 8
capstr.h
V 24
file dw.5bk.r14881/38989
K 6
city.c
V 24
file q.5ck.r17122/321599
K 6
city.h
V 24
file 3q.5ck.r17107/33736
K 8
combat.c
V 25
file wp.5ck.r17122/321353
K 8
combat.h
V 21
file wq.0.r12783/4096
K 12
connection.c
V 25
file un.5ck.r17122/324674
K 12
connection.h
V 24
file uo.5ck.r16643/26599
K 8
dataio.c
V 26
file 15r.5ck.r16929/272949
K 8
dataio.h
V 23
file 15s.0.r10480/10050
K 11
diptreaty.c
V 25
file 3r.5ck.r17042/105205
K 11
diptreaty.h
V 20
file 3s.0.r9582/5141
K 9
effects.c
V 26
file 2eo.5ck.r17122/323934
K 9
effects.h
V 24
file 2ep.5ck.r15795/3002
K 8
events.c
V 26
file 33h.5ck.r17122/321109
K 8
events.h
V 24
file 3t.5ck.r16427/12542
K 10
fc_types.h
V 25
file 2ll.5ck.r17107/34470
K 15
featured_text.c
V 26
file 4h3.5ck.r17122/320912
K 15
featured_text.h
V 24
file 4h4.5ck.r17101/7954
K 6
game.c
V 25
file 3u.5ck.r17122/324922
K 6
game.h
V 24
file 3v.5ck.r17074/29301
K 19
generate_packets.py
V 26
file 2f4.5ck.r16929/277237
K 12
government.c
V 25
file he.5ck.r17122/324180
K 12
government.h
V 24
file hf.5ck.r17107/34964
K 6
idex.c
V 23
file qo.5ck.r17056/5076
K 6
idex.h
V 21
file qp.0.r8119/15235
K 13
improvement.c
V 25
file vb.5ck.r17122/319445
K 13
improvement.h
V 24
file vc.5ck.r17107/31794
K 5
map.c
V 24
file r.5ck.r17122/325165
K 5
map.h
V 25
file 41.5ck.r16929/280138
K 10
movement.c
V 26
file 2xv.5ck.r17122/323190
K 10
movement.h
V 23
file 2xw.5ck.r15857/778
K 18
name_translation.h
V 25
file 4k1.5ck.r17107/35209
K 8
nation.c
V 25
file il.5ck.r17122/325660
K 8
nation.h
V 24
file im.5ck.r17107/35869
K 9
packets.c
V 25
file 43.5ck.r17122/325904
K 11
packets.def
V 25
file 2f5.5ck.r17058/55305
K 9
packets.h
V 23
file 44.5ck.r16689/1380
K 8
player.c
V 25
file 45.5ck.r17122/324427
K 8
player.h
V 24
file 46.5ck.r16984/85369
K 14
requirements.c
V 26
file 2wq.5ck.r17122/325405
K 14
requirements.h
V 25
file 2wr.5ck.r15815/55883
K 11
spaceship.c
V 20
file 98.0.r9977/2632
K 11
spaceship.h
V 20
file 99.0.r9977/2979
K 12
specialist.c
V 26
file 33f.5ck.r17122/319196
K 12
specialist.h
V 25
file 33g.5ck.r17107/31301
K 6
team.c
V 26
file 33i.5ck.r17122/320666
K 6
team.h
V 23
file 33j.0.r13136/23073
K 6
tech.c
V 24
file t.5ck.r17122/320424
K 6
tech.h
V 23
file u.5ck.r17107/33259
K 9
terrain.c
V 26
file 2fp.5ck.r17122/323686
K 9
terrain.h
V 24
file qs.5ck.r17107/34226
K 6
tile.c
V 26
file 2ys.5ck.r17122/323441
K 6
tile.h
V 24
file 2yt.5ck.r15423/7247
K 6
unit.c
V 24
file v.5ck.r17122/319936
K 6
unit.h
V 24
file 48.5ck.r17058/55063
K 10
unitlist.c
V 26
file 39m.5ck.r16929/279404
K 10
unitlist.h
V 25
file 39n.5ck.r15930/60875
K 10
unittype.c
V 25
file v9.5ck.r17122/320174
K 10
unittype.h
V 24
file va.5ck.r17107/33011
K 9
version.c
V 25
file oe.5ck.r17122/322944
K 9
version.h
V 21
file e7.0.r13518/7887
K 8
vision.c
V 26
file 4dm.5ck.r16929/278916
K 8
vision.h
V 26
file 4dn.5ck.r16929/279652
K 10
worklist.c
V 25
file o8.5ck.r16929/277491
K 10
worklist.h
V 24
file o9.5ck.r16319/92430
END
ENDREP
id: p.5ck.r17122/329486
type: dir
pred: p.5ck.r17113/3615
count: 2706
text: 17122 326150 3323 3323 db3e68d85f9eab84ee7f31b68418f58a
props: 12883 2571 96 0 2763e13ff5d021346ae24ff6c9ced232
cpath: /trunk/common
copyroot: 15280 /trunk

id: 2ek.5ck.r17122/329719
type: file
pred: 2ek.5ck.r16929/285860
count: 137
text: 17122 23675 219 66893 1a230f287371ec25609149bc3f846033
props: 11095 5259 111 0 09fa8b389220258550f0df17fa730769
cpath: /trunk/ai/advdiplomacy.c
copyroot: 15280 /trunk

id: 20.5ck.r17122/329969
type: file
pred: 20.5ck.r16984/89844
count: 318
text: 17122 310817 117 69515 50e0a94cf7b730ad3eacbf3fc2162bf5
props: 11069 16784 112 0 24b501182e64f7bbc4aaaa8b3f1d9020
cpath: /trunk/ai/aicity.c
copyroot: 15280 /trunk

id: 15t.5ck.r17122/330212
type: file
pred: 15t.5ck.r16929/287819
count: 52
text: 17122 50608 2594 11117 eeed4b45f866789e24ed4602e0e19312
props: 11074 1421 111 0 18cdb9becb11c47631b7a093e907200c
cpath: /trunk/ai/ailog.c
copyroot: 15280 /trunk

id: b.5ck.r17122/330455
type: file
pred: b.5ck.r16929/288794
count: 413
text: 17122 50537 40 91890 f2a5b5658215fc8206da9ce1f3ec035c
props: 10755 57649 112 0 77fd11a7d1954721a87806f6d511a224
cpath: /trunk/ai/aiunit.c
copyroot: 15280 /trunk

PLAIN
K 11
Makefile.am
V 24
file 5d.5ck.r15407/13434
K 14
advdiplomacy.c
V 26
file 2ek.5ck.r17122/329719
K 14
advdiplomacy.h
V 25
file 2el.5ck.r15803/15045
K 13
advdomestic.c
V 25
file 1m.5ck.r16929/285130
K 13
advdomestic.h
V 23
file 1n.0.r13297/443238
K 13
advmilitary.c
V 25
file 1u.5ck.r16929/287088
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 26
file 15y.5ck.r16929/287337
K 7
aiair.h
V 24
file 15z.0.r13297/446696
K 8
aicity.c
V 25
file 20.5ck.r17122/329969
K 8
aicity.h
V 24
file 21.5ck.r15837/16785
K 8
aidata.c
V 26
file 15o.5ck.r16578/415545
K 8
aidata.h
V 25
file 15p.5bk.r14492/10883
K 12
aidiplomat.c
V 26
file 16r.5ck.r16929/286596
K 12
aidiplomat.h
V 24
file 16s.0.r13297/446010
K 12
aiexplorer.c
V 26
file 2lj.5ck.r16929/285377
K 12
aiexplorer.h
V 25
file 2lk.5bk.r14247/21983
K 9
aiferry.c
V 26
file 2iw.5ck.r16929/284884
K 9
aiferry.h
V 22
file 2ix.0.r13146/1787
K 9
aiguard.c
V 26
file 335.5ck.r16929/288311
K 9
aiguard.h
V 22
file 336.0.r10445/8032
K 8
aihand.c
V 25
file 22.5ck.r16929/286844
K 8
aihand.h
V 23
file 23.0.r13297/446240
K 8
aihunt.c
V 26
file 2gc.5ck.r16929/288552
K 8
aihunt.h
V 24
file 2gd.0.r13297/447855
K 7
ailog.c
V 26
file 15t.5ck.r17122/330212
K 7
ailog.h
V 26
file 15u.5ck.r16578/417011
K 15
aiparatrooper.c
V 26
file 36o.5ck.r16929/288061
K 15
aiparatrooper.h
V 23
file 36p.0.r12670/95202
K 11
aisettler.c
V 25
file 2lh.5ck.r16984/90084
K 11
aisettler.h
V 25
file 2li.5ck.r16984/89603
K 8
aitech.c
V 25
file 24.5ck.r16578/417990
K 8
aitech.h
V 22
file 25.0.r10755/53545
K 9
aitools.c
V 24
file 9.5ck.r16929/285619
K 9
aitools.h
V 24
file a.5ck.r16929/286111
K 8
aiunit.c
V 24
file b.5ck.r17122/330455
K 8
aiunit.h
V 22
file c.5bk.r15066/5373
END
ENDREP
id: 8.5ck.r17122/332501
type: dir
pred: 8.5ck.r16984/92135
count: 1244
text: 17122 330695 1793 1793 b4a0d0d077b2cce427402600b68c9ec4
props: 11108 11315 64 0 abac628483ea4fdfa3bea3a3a56e0532
cpath: /trunk/ai
copyroot: 15280 /trunk

id: h9.5ck.r17122/332732
type: file
pred: h9.5ck.r16929/291321
count: 44
text: 17122 61566 5192 29588 263d75a52ece524cc62b962d023e875a
props: 10290 128 111 0 0a665f39d0e6b710aae173fcfb77dd8e
cpath: /trunk/utility/inputfile.c
copyroot: 15280 /trunk

id: uh.5ck.r17122/332981
type: file
pred: uh.5ck.r16929/291570
count: 25
text: 17122 309511 52 15857 43110ebae19c1d505231c620b770da2d
props: 9074 52 111 0 4b4193808cb95e702a5e5065e4345324
cpath: /trunk/utility/ioz.c
copyroot: 15280 /trunk

id: dh.5ck.r17122/333221
type: file
pred: dh.5ck.r17071/62643
count: 97
text: 17122 48554 807 81851 e34257c70a64dc581621786b4f5b63da
props: 11100 7043 111 0 b4cfde065419379bdf3504580a67fa13
cpath: /trunk/utility/registry.c
copyroot: 15280 /trunk

id: t7.5ck.r17122/333468
type: file
pred: t7.5ck.r16445/1179
count: 21
text: 17122 107728 56 3259 1e6d5628dad90f4426ec19123f8aad75
props: 8410 11615 111 0 5396249b3009eb64cd90e5da0b7a56fa
cpath: /trunk/utility/netintf.h
copyroot: 15280 /trunk

id: m9.5ck.r17122/333712
type: file
pred: m9.5ck.r17035/5713
count: 45
text: 17122 24117 987 28692 bb57465f9a4bbae8c15fc3b0672bee5f
props: 10006 230 111 0 b4233197920770c602c29330b7f7c623
cpath: /trunk/utility/support.c
copyroot: 15280 /trunk

id: 7p.5ck.r17122/333956
type: file
pred: 7p.0.r7748/30787
count: 12
text: 17122 53530 981 2883 107865b6756a9b4b30864d65e363ddef
props: 7748 30663 111 0 5396249b3009eb64cd90e5da0b7a56fa
cpath: /trunk/utility/capability.c
copyroot: 15280 /trunk

id: ma.5ck.r17122/334201
type: file
pred: ma.5ck.r17080/4517
count: 33
text: 17122 27703 645 4555 b1cebf1111a6987e1922bded479cd8c9
props: 7602 5819 111 0 df9f31216c5039327c376b7fe82756f5
cpath: /trunk/utility/support.h
copyroot: 15280 /trunk

id: 4hy.5ck.r17122/334444
type: file
pred: 4hy.5ck.r16297/44612
count: 3
text: 17122 272192 85 10111 ea2da6771d2557df14a1ffb901283322
cpath: /trunk/utility/string_vector.c
copyroot: 15280 /trunk

id: 3ce.5ck.r17122/334640
type: file
pred: 3ce.5ck.r16601/71496
count: 4
text: 17122 298590 556 21773 a2aef3ce9edbee0ebca5ade4e3f06d12
props: 12670 4415 34 0 25e6c2f7558b7484000d4d090dea5b92
cpath: /trunk/utility/ftwl/be_common_32.c
copyroot: 15280 /trunk

id: 2jz.5ck.r17122/334897
type: file
pred: 2jz.5ck.r17042/110913
count: 12
text: 17122 118407 197 31762 5d4f8c32d72d871b7f55f8daa69d4e93
props: 9577 65700 110 0 7d181b70073f10d0c5a58c73a72d4f04
cpath: /trunk/utility/ftwl/widget_window.c
copyroot: 15280 /trunk

id: 2jj.5ck.r17122/335158
type: file
pred: 2jj.5ck.r16992/24503
count: 7
text: 17122 271995 169 18292 0a60750c73cb6084358f63a2f42d72dd
props: 10128 12381 110 0 7d181b70073f10d0c5a58c73a72d4f04
cpath: /trunk/utility/ftwl/common_types.c
copyroot: 15280 /trunk

id: 3cg.5ck.r17122/335417
type: file
pred: 3cg.0.r12670/5328
count: 4
text: 17122 255437 593 19227 1b3377851d68104be281dc8a1c7313e7
props: 12670 5281 34 0 25e6c2f7558b7484000d4d090dea5b92
cpath: /trunk/utility/ftwl/be_common_cairo_32.c
copyroot: 15280 /trunk

id: 2jn.5ck.r17122/335677
type: file
pred: 2jn.5ck.r16131/505
count: 14
text: 17122 46471 1228 23136 615aa9632a7991bb5a07931f9539b774
props: 10141 17724 111 0 b491beec13ba952c0167e367d3cb48d2
cpath: /trunk/utility/ftwl/theme_engine.c
copyroot: 15280 /trunk

PLAIN
K 11
Makefile.am
V 25
file 2jc.5ck.r15407/15909
K 10
back_end.h
V 22
file 2jd.0.r12291/3916
K 14
be_common_32.c
V 26
file 3ce.5ck.r17122/334640
K 14
be_common_32.h
V 22
file 3cf.0.r12670/4751
K 20
be_common_cairo_32.c
V 26
file 3cg.5ck.r17122/335417
K 20
be_common_cairo_32.h
V 22
file 3ch.0.r12670/5905
K 18
be_common_pixels.c
V 23
file 337.0.r11958/32223
K 18
be_common_pixels.h
V 23
file 338.0.r11958/32635
K 8
be_sdl.c
V 23
file 2jh.5bk.r15188/451
K 18
be_sdl_pixels_32.c
V 27
file 3ci.5bk.r14370/4374126
K 24
be_sdl_pixels_cairo_32.c
V 27
file 3cj.5bk.r14370/4374670
K 17
be_x11_cairo_32.c
V 23
file 3ck.5bk.r15188/187
K 18
be_x11_ximage_32.c
V 23
file 3cl.0.r13368/10702
K 14
common_types.c
V 26
file 2jj.5ck.r17122/335158
K 14
common_types.h
V 21
file 2jk.0.r8467/7518
K 15
text_renderer.c
V 27
file 2jl.5bk.r14370/4373580
K 15
text_renderer.h
V 22
file 2jm.0.r10110/1044
K 14
theme_engine.c
V 26
file 2jn.5ck.r17122/335677
K 14
theme_engine.h
V 23
file 2jo.0.r10141/19667
K 8
widget.c
V 26
file 2jp.5ck.r17042/111173
K 8
widget.h
V 22
file 2jq.0.r12157/3432
K 15
widget_button.c
V 22
file 2jr.0.r12157/2245
K 13
widget_core.c
V 22
file 2js.0.r12157/3902
K 13
widget_edit.c
V 22
file 2jt.0.r12157/3666
K 14
widget_label.c
V 22
file 2ju.0.r12157/2727
K 13
widget_list.c
V 22
file 2jv.0.r12157/2487
K 10
widget_p.h
V 22
file 2jw.0.r12291/2646
K 15
widget_slider.c
V 21
file 2jx.0.r13155/883
K 16
widget_timeout.c
V 26
file 2jy.5ck.r17042/111420
K 15
widget_window.c
V 26
file 2jz.5ck.r17122/334897
END
ENDREP
id: 2jb.5ck.r17122/337455
type: dir
pred: 2jb.5ck.r17042/113187
count: 69
text: 17122 335935 1507 1507 086a1f047fdaa5727c2b28f32c4f1bcf
props: 7897 1555 52 0 99ffa4e3e0608cced72bc06a75f6aece
cpath: /trunk/utility/ftwl
copyroot: 15280 /trunk

id: 55.5ck.r17122/337697
type: file
pred: 55.5ck.r17082/3959
count: 166
text: 17122 261908 4406 62901 abf059f3af18b007205e6f6f9290d2db
props: 10717 469 112 0 62f136c4e8601b29898c811272b88b7d
cpath: /trunk/utility/shared.c
copyroot: 15280 /trunk

id: h5.5ck.r17122/337943
type: file
pred: h5.5ck.r16929/294024
count: 16
text: 17122 288247 2198 6175 a3a3fd7c00fc82462499b5cbd6e9992b
props: 10751 2663 111 0 d4514082fc7e52be026d3360dec4dcb0
cpath: /trunk/utility/astring.c
copyroot: 15280 /trunk

id: d9.5ck.r17122/338191
type: file
pred: d9.5ck.r16578/422965
count: 13
text: 17122 299176 106 5209 23a34b139416e69fd529dae6be3f14fe
props: 9038 295 111 0 b491beec13ba952c0167e367d3cb48d2
cpath: /trunk/utility/mem.c
copyroot: 15280 /trunk

id: 53.5ck.r17122/338432
type: file
pred: 53.5ck.r16929/294759
count: 55
text: 17122 244681 74 14130 a63ea35e2df8271318c6e6f0ad7c7a67
props: 10715 668 111 0 8a31d593ba19cf3c77978cca3b416828
cpath: /trunk/utility/log.c
copyroot: 15280 /trunk

id: da.5ck.r17122/338674
type: file
pred: da.5ck.r17080/4755
count: 4
text: 17122 299392 1116 2505 966eaf290d994d3bf48a62b55967e526
props: 1231 274 110 0 2a94ed7a58fe1feebaea27ee0c48460d
cpath: /trunk/utility/mem.h
copyroot: 15280 /trunk

id: m5.5ck.r17122/338913
type: file
pred: m5.5ck.r16929/295002
count: 17
text: 17122 316209 936 9844 5b62a50d4f2bf6adb91accecd9411a62
props: 5819 15963 111 0 3d57169d64a739976bce7d2e578e29eb
cpath: /trunk/utility/rand.c
copyroot: 15280 /trunk

id: 2g7.5ck.r17122/339157
type: file
pred: 2g7.5ck.r16929/295490
count: 23
text: 17122 306387 315 12608 f9fef097bc76b253646a1da17dd6e276
props: 10128 14152 111 0 28e613ef70fc8e4efe7ed7b15f74e6e7
cpath: /trunk/utility/fciconv.c
copyroot: 15280 /trunk

id: el.5ck.r17122/339408
type: file
pred: el.5ck.r16929/295740
count: 16
text: 17122 118636 3311 13265 0b281e1a3e3e04837a820fb842a2b4f6
props: 7373 1165 111 0 5396249b3009eb64cd90e5da0b7a56fa
cpath: /trunk/utility/timing.c
copyroot: 15280 /trunk

id: m6.5ck.r17122/339655
type: file
pred: m6.5bk.r14406/1701
count: 7
text: 17122 318514 654 1739 cb5ef2be3ae23ae713dd5e293254e86d
props: 4423 3984 110 0 dce24d5ac3f5e86568d59a55fa196991
cpath: /trunk/utility/rand.h
copyroot: 15280 /trunk

PLAIN
K 11
Makefile.am
V 23
file 2gg.5ck.r16311/717
K 9
astring.c
V 25
file h5.5ck.r17122/337943
K 9
astring.h
V 24
file h6.5ck.r16861/19799
K 12
capability.c
V 25
file 7p.5ck.r17122/333956
K 12
capability.h
V 21
file 7q.0.r4176/34610
K 12
distribute.c
V 25
file 2lp.5ck.r17068/38008
K 12
distribute.h
V 21
file 2lq.0.r8056/3668
K 9
fciconv.c
V 26
file 2g7.5ck.r17122/339157
K 9
fciconv.h
V 25
file 2g8.5ck.r16601/74225
K 8
fcintl.c
V 19
file k3.0.r7638/236
K 8
fcintl.h
V 22
file fw.5bk.r14576/680
K 4
ftwl
V 25
dir 2jb.5ck.r17122/337455
K 20
generate_specenum.py
V 26
file 4ia.5ck.r16929/293279
K 9
genlist.c
V 25
file 51.5ck.r17042/110173
K 9
genlist.h
V 25
file 52.5ck.r17042/110667
K 6
hash.c
V 23
file qe.5ck.r17056/8806
K 6
hash.h
V 23
file qf.5ck.r17056/9045
K 11
inputfile.c
V 25
file h9.5ck.r17122/332732
K 11
inputfile.h
V 24
file ha.5ck.r16752/87941
K 5
ioz.c
V 25
file uh.5ck.r17122/332981
K 5
ioz.h
V 21
file ui.0.r12506/5414
K 10
iterator.c
V 24
file 4h5.5ck.r15904/1850
K 10
iterator.h
V 24
file 4f3.5ck.r15904/1425
K 5
log.c
V 25
file 53.5ck.r17122/338432
K 5
log.h
V 24
file 54.5ck.r17034/10977
K 5
md5.c
V 23
file 33q.5ck.r16650/269
K 5
md5.h
V 23
file 33r.5ck.r15332/631
K 5
mem.c
V 25
file d9.5ck.r17122/338191
K 5
mem.h
V 25
file da.5ck.r17122/338674
K 9
netintf.c
V 21
file t6.5ck.r16982/92
K 9
netintf.h
V 25
file t7.5ck.r17122/333468
K 8
pqueue.c
V 26
file 2cu.5ck.r16929/293538
K 8
pqueue.h
V 21
file 2cv.0.r5979/6616
K 6
rand.c
V 25
file m5.5ck.r17122/338913
K 6
rand.h
V 25
file m6.5ck.r17122/339655
K 10
registry.c
V 25
file dh.5ck.r17122/333221
K 10
registry.h
V 25
file di.5ck.r16460/215473
K 9
sbuffer.c
V 25
file dm.5ck.r16929/293037
K 9
sbuffer.h
V 21
file dn.0.r5615/14850
K 8
shared.c
V 25
file 55.5ck.r17122/337697
K 8
shared.h
V 23
file 1d.5ck.r17082/4198
K 10
speclist.h
V 25
file gb.5ck.r17042/113428
K 9
specvec.h
V 25
file z9.5ck.r16929/295986
K 15
string_vector.c
V 26
file 4hy.5ck.r17122/334444
K 15
string_vector.h
V 25
file 4hz.5ck.r16297/44807
K 9
support.c
V 25
file m9.5ck.r17122/333712
K 9
support.h
V 25
file ma.5ck.r17122/334201
K 8
timing.c
V 25
file el.5ck.r17122/339408
K 8
timing.h
V 25
file em.5ck.r16578/424420
END
ENDREP
id: 1c.5ck.r17122/342075
type: dir
pred: 1c.5ck.r17082/6600
count: 635
text: 17122 339895 2167 2167 9e9d8e213e12ef17ecc1835cf042a313
props: 11108 3477 69 0 09e82dc36e85984f70ccefc82bea8069
cpath: /trunk/utility
copyroot: 15280 /trunk

id: dd.5ck.r17122/342310
type: file
pred: dd.5ck.r16598/29263
count: 35
text: 17122 261848 31 8032 a790ebf1b0572397415b785db8065cde
props: 10070 3405 111 0 45c0e160a790dc8f7645f8a7eabea654
cpath: /trunk/server/console.c
copyroot: 15280 /trunk

id: 2mj.5ck.r17122/342554
type: file
pred: 2mj.5ck.r15901/20779
count: 11
text: 17122 125551 640 8119 c31737f83ec27476f735a28de093bd18
props: 9051 9269 110 0 2297367bb62237eae251d6a189335c2c
cpath: /trunk/server/generator/height_map.c
copyroot: 15280 /trunk

id: 2mg.5ck.r17122/342813
type: file
pred: 2mg.5ck.r17042/116565
count: 62
text: 17122 43337 2210 79997 981050e5715621b7501244b38c3efc60
props: 10829 1266 111 0 18cdb9becb11c47631b7a093e907200c
cpath: /trunk/server/generator/mapgen.c
copyroot: 15280 /trunk

id: 2mp.5ck.r17122/343071
type: file
pred: 2mp.5ck.r16929/300420
count: 25
text: 17122 282404 64 18567 d001433e4dd42d2b0e1a3d317a969194
props: 10724 13457 111 0 8e6f231ffe21dad0a34f68090b1c0b69
cpath: /trunk/server/generator/utilities.c
copyroot: 15280 /trunk

PLAIN
K 11
Makefile.am
V 25
file 2mf.5ck.r15407/20236
K 12
height_map.c
V 26
file 2mj.5ck.r17122/342554
K 12
height_map.h
V 26
file 2mk.5bk.r13949/117031
K 8
mapgen.c
V 26
file 2mg.5ck.r17122/342813
K 8
mapgen.h
V 22
file 2mh.0.r12456/2830
K 17
mapgen_topology.c
V 25
file 2ml.5ck.r16984/92867
K 17
mapgen_topology.h
V 24
file 2mm.5ck.r16810/1371
K 10
startpos.c
V 25
file 2mt.5ck.r16984/92609
K 10
startpos.h
V 22
file 2mu.0.r12456/2354
K 17
temperature_map.c
V 25
file 2mn.5ck.r17068/40642
K 17
temperature_map.h
V 23
file 2mo.0.r13481/13067
K 11
utilities.c
V 26
file 2mp.5ck.r17122/343071
K 11
utilities.h
V 24
file 2mq.5bk.r15277/5924
END
ENDREP
id: 2me.5ck.r17122/343983
type: dir
pred: 2me.5ck.r17068/41555
count: 100
text: 17122 343332 638 638 46cc1104315f3c741178ce9ce68fad9e
props: 11108 4081 68 0 445aae39c72ff2e5199436fb06040160
cpath: /trunk/server/generator
copyroot: 15280 /trunk

id: 4q.5ck.r17122/344228
type: file
pred: 4q.5ck.r16929/301825
count: 49
text: 17122 108319 121 13969 b37721f1d516c41e6daefb81650cd53b
props: 10956 2433 111 0 4135f0dfb17a4d11b2424d95e27830f5
cpath: /trunk/server/handchat.c
copyroot: 15280 /trunk

id: 2eg.5ck.r17122/344476
type: file
pred: 2eg.5ck.r16984/94020
count: 53
text: 17122 25335 25 18616 8130c2ce1bd4b41b0603650e106e4aa0
props: 11057 11773 111 0 45c0e160a790dc8f7645f8a7eabea654
cpath: /trunk/server/score.c
copyroot: 15280 /trunk

id: vg.5ck.r17122/344721
type: file
pred: vg.5ck.r17041/9471
count: 468
text: 17122 116565 1601 79277 89bee47db2bb5bb3f25d1a7b5be2ed52
props: 11057 12128 112 0 85dbe778568e34751643d476c23a0d7c
cpath: /trunk/server/srv_main.c
copyroot: 15280 /trunk

id: 32a.5ck.r17122/344970
type: file
pred: 32a.5ck.r17042/117716
count: 18
text: 17122 310645 58 11695 e59a32a777e024042f6598fa15e5659c
props: 10485 11635 110 0 2297367bb62237eae251d6a189335c2c
cpath: /trunk/server/scripting/script_signal.c
copyroot: 15280 /trunk

id: 32e.5ck.r17122/345235
type: file
pred: 32e.5ck.r16578/431214
count: 4
text: 17122 49388 801 1718 b70cba18d03d6197462153fd85e25957
props: 10404 2476 110 0 2a94ed7a58fe1feebaea27ee0c48460d
cpath: /trunk/server/scripting/api_utilities.c
copyroot: 15280 /trunk

id: 328.5ck.r17122/345497
type: file
pred: 328.5ck.r17105/296
count: 22
text: 17122 237622 280 11578 981dca0c9d8b79b597d3d9c8714e0803
props: 10470 1475 110 0 7d181b70073f10d0c5a58c73a72d4f04
cpath: /trunk/server/scripting/script.c
copyroot: 15280 /trunk

PLAIN
K 11
Makefile.am
V 24
file 31z.5ck.r17103/3474
K 7
api.pkg
V 25
file 320.5ck.r17119/10964
K 13
api_actions.c
V 25
file 32c.5ck.r17119/11215
K 13
api_actions.h
V 25
file 32d.5ck.r17119/10452
K 13
api_effects.c
V 24
file 4jz.5ck.r17104/1008
K 13
api_effects.h
V 24
file 4k0.5ck.r17104/1452
K 10
api_find.c
V 23
file 321.5bk.r15093/142
K 10
api_find.h
V 24
file 322.5bk.r14962/1768
K 10
api_intl.c
V 21
file 323.0.r13553/885
K 10
api_intl.h
V 22
file 324.0.r13553/1122
K 13
api_methods.c
V 25
file 33d.5ck.r17119/11472
K 13
api_methods.h
V 25
file 33e.5ck.r17119/10708
K 12
api_notify.c
V 26
file 325.5ck.r16199/111739
K 12
api_notify.h
V 22
file 326.0.r10928/4596
K 11
api_types.h
V 23
file 327.0.r10702/16760
K 15
api_utilities.c
V 26
file 32e.5ck.r17122/345235
K 15
api_utilities.h
V 24
file 32f.5bk.r14813/2223
K 8
script.c
V 26
file 328.5ck.r17122/345497
K 8
script.h
V 22
file 329.5ck.r17093/52
K 15
script_signal.c
V 26
file 32a.5ck.r17122/344970
K 15
script_signal.h
V 21
file 32b.0.r12805/385
END
ENDREP
id: 31x.5ck.r17122/346768
type: dir
pred: 31x.5ck.r17119/12744
count: 120
text: 17122 345752 1003 1003 1d81dbe04d74787e4e5c3e7fb888ed47
props: 11108 4390 88 0 1e9d0e3735a93cd0fae3d0e1df53b911
cpath: /trunk/server/scripting
copyroot: 15280 /trunk

id: 2dw.5ck.r17122/347015
type: file
pred: 2dw.5ck.r17042/119140
count: 116
text: 17122 38960 365 23361 95325cafccdadc3aedafa0d184aec244
props: 11086 310 111 0 e5ad8d36ef6bfd356bb06d6f3ece066f
cpath: /trunk/server/connecthand.c
copyroot: 15280 /trunk

id: 4g.5ck.r17122/347267
type: file
pred: 4g.5ck.r17119/12988
count: 459
text: 17122 41454 674 86041 47a950757fd9a39c432ba9f2efc1b9d4
props: 10971 452 112 0 14688860b403b675ea6c3d1b6f5d2330
cpath: /trunk/server/citytools.c
copyroot: 15280 /trunk

id: 2m0.5ck.r17122/347514
type: file
pred: 2m0.5ck.r17074/33044
count: 98
text: 17122 5511 689 96380 9cda80323e2b3f49006717efce2c9947
props: 11041 15094 111 0 1c266b4433d829481714f1852322e965
cpath: /trunk/server/settings.c
copyroot: 15280 /trunk

id: 39c.5ck.r17122/347762
type: file
pred: 39c.5ck.r16929/304752
count: 22
text: 17122 8141 390 31639 af719be5d673a46f461e1882da0910f5
props: 12670 11903 34 0 25e6c2f7558b7484000d4d090dea5b92
cpath: /trunk/server/auth.c
copyroot: 15280 /trunk

id: vi.5ck.r17122/348006
type: file
pred: vi.5ck.r16977/1265
count: 109
text: 17122 241223 516 34638 a18ff156c6dd4aaab7eac7dae0982376
props: 11057 12485 111 0 28afbdca13063c4ab06acfd332f60a0d
cpath: /trunk/server/report.c
copyroot: 15280 /trunk

id: 4i.5ck.r17122/348252
type: file
pred: 4i.5ck.r17042/119636
count: 424
text: 17122 16832 3558 95688 51dbfa584e81f451cf56854877c686a1
props: 10955 1971 112 0 e17e3e5087e98ab1d6f041bdc6ae85ee
cpath: /trunk/server/cityturn.c
copyroot: 15280 /trunk

id: lw.5ck.r17122/348501
type: file
pred: lw.5ck.r16929/305739
count: 136
text: 17122 300536 1221 21603 85a4d6e70540f0bc60659cd269a98d36
props: 11004 1858 112 0 0ba48eb7b1f123775dc0e292f9b3ab64
cpath: /trunk/server/barbarian.c
copyroot: 15280 /trunk

id: 8w.5ck.r17122/348752
type: file
pred: 8w.5ck.r17107/39660
count: 426
text: 17122 301840 4517 160441 89778043115049785e674d173d144b66
props: 11085 367 112 0 7f6d12fc80ead5cc285da723cb8caa9d
cpath: /trunk/server/ruleset.c
copyroot: 15280 /trunk

id: 4o.5ck.r17122/349000
type: file
pred: 4o.5ck.r16929/306484
count: 206
text: 17122 266613 243 18813 1b1b31d3512e5a9ea3da3a48995169da
props: 11057 13195 112 0 0c4c829d27ee6fd81512219fee75ff65
cpath: /trunk/server/gamehand.c
copyroot: 15280 /trunk

id: 39a.5ck.r17122/349250
type: file
pred: 39a.5ck.r16929/306979
count: 8
text: 17122 311965 3199 12590 e25975d5820004f8cbf494df0ddc529a
props: 12670 12447 34 0 25e6c2f7558b7484000d4d090dea5b92
cpath: /trunk/server/ggzserver.c
copyroot: 15280 /trunk

id: 3bk.5ck.r17122/349501
type: file
pred: 3bk.5ck.r16929/307228
count: 68
text: 17122 32716 3375 46395 8bfc465e4f96d48b207c7a248756d8ac
props: 12670 12724 34 0 25e6c2f7558b7484000d4d090dea5b92
cpath: /trunk/server/edithand.c
copyroot: 15280 /trunk

id: 4s.5ck.r17122/349751
type: file
pred: 4s.5ck.r16578/436111
count: 94
text: 17122 272712 787 15139 ce711fa325b7bde88168173863b302b6
props: 11087 3026 111 0 c246f5509cfd811186cfd3230be7c3ab
cpath: /trunk/server/meta.c
copyroot: 15280 /trunk

id: vz.5ck.r17122/349995
type: file
pred: vz.5ck.r16578/436353
count: 135
text: 17122 3327 283 49431 e2bb1fed5035ea38397bdfa76ebb1859
props: 10915 10832 111 0 8ab1a522471ad7dd5014b23b42c49491
cpath: /trunk/server/diplomats.c
copyroot: 15280 /trunk

id: 15.5ck.r17122/350244
type: file
pred: 15.5ck.r17042/120376
count: 196
text: 17122 45574 867 40242 3bf55d4eedb605d445e277f47af95bcb
props: 10956 5264 112 0 3b4f53580729e091747f5670a0f86c52
cpath: /trunk/server/sernet.c
copyroot: 15280 /trunk

id: 1a.5ck.r17122/350490
type: file
pred: 1a.5ck.r17119/13227
count: 546
text: 17122 6230 1738 120051 53c5fee6984725a32befe4bd81f07f54
props: 11095 1637 112 0 c5bfe3670c093a84ebf28b66298044e4
cpath: /trunk/server/unittools.c
copyroot: 15280 /trunk

id: 33n.5ck.r17122/350739
type: file
pred: 33n.5ck.r17042/120868
count: 65
text: 17122 9688 353 29912 c0d4da039ffc8ba10b54714982d75896
props: 11004 2210 111 0 05a46e497021c8716b647ee1425e21a2
cpath: /trunk/server/techtools.c
copyroot: 15280 /trunk

id: 4ex.5ck.r17122/350988
type: file
pred: 4ex.5ck.r17042/121119
count: 11
text: 17122 50217 41 24138 63de2a0fb254206e48c878a4e7ce4ef2
cpath: /trunk/server/voting.c
copyroot: 15280 /trunk

id: 4i2.5ck.r17122/351177
type: file
pred: 4i2.5ck.r17101/11639
count: 13
text: 17122 292180 100 28728 663abf85ccd0cd1618b109844ddd0620
cpath: /trunk/server/notify.c
copyroot: 15280 /trunk

id: 18.5ck.r17122/351367
type: file
pred: 18.5ck.r17058/60269
count: 434
text: 17122 50287 219 73666 001d6625d1f35c57992400fa539a977c
props: 11060 7742 112 0 090627d3849ce880ce4f29c1c260669f
cpath: /trunk/server/unithand.c
copyroot: 15280 /trunk

id: 4z.5ck.r17122/351614
type: file
pred: 4z.5ck.r17101/11824
count: 589
text: 17122 241766 2572 167734 ff6cd15acaf8b16d9e19ed7a74b19d00
props: 11087 3718 112 0 d0e5ada95c1c714385b6751e38a4f15d
cpath: /trunk/server/stdinhand.c
copyroot: 15280 /trunk

id: vl.5ck.r17122/351865
type: file
pred: vl.5ck.r17074/33540
count: 470
text: 17122 56981 1397 209827 c1ee0c5df77a4cad4fd96c3fe86e72a0
props: 11092 74 112 0 de3988801a325e2d7d51fcbc7209a255
cpath: /trunk/server/savegame.c
copyroot: 15280 /trunk

id: 4u.5ck.r17122/352112
type: file
pred: 4u.5ck.r17049/6484
count: 504
text: 17122 249128 6279 64355 b3aa1eda50f1d0497b0ddbb55292c912
props: 11057 14272 112 0 ab87823e529bcaae2ff952f918d53839
cpath: /trunk/server/plrhand.c
copyroot: 15280 /trunk

PLAIN
K 11
Makefile.am
V 24
file 5q.5ck.r16224/20275
K 9
aiiface.c
V 25
file 4gm.5ck.r15837/20486
K 9
aiiface.h
V 25
file 4gn.5ck.r15803/18216
K 6
auth.c
V 26
file 39c.5ck.r17122/347762
K 6
auth.h
V 23
file 39d.0.r13513/10535
K 11
barbarian.c
V 25
file lw.5ck.r17122/348501
K 11
barbarian.h
V 21
file lx.0.r13220/1454
K 10
cityhand.c
V 24
file 10.5ck.r16984/92364
K 10
cityhand.h
V 23
file 4f.0.r13297/423686
K 11
citytools.c
V 25
file 4g.5ck.r17122/347267
K 11
citytools.h
V 23
file 4h.5ck.r17049/6245
K 10
cityturn.c
V 25
file 4i.5ck.r17122/348252
K 10
cityturn.h
V 23
file 4j.5ck.r15766/7385
K 11
civserver.c
V 22
file 4k.5ck.r17075/335
K 11
civserver.h
V 21
file 4l.0.r2805/33121
K 10
commands.c
V 23
file 2ly.5ck.r16997/688
K 10
commands.h
V 24
file 2lz.5ck.r16033/8570
K 13
connecthand.c
V 26
file 2dw.5ck.r17122/347015
K 13
connecthand.h
V 25
file 2dx.5ck.r16334/13190
K 9
console.c
V 25
file dd.5ck.r17122/342310
K 9
console.h
V 24
file de.5ck.r16598/29507
K 10
diplhand.c
V 25
file 4m.5ck.r17042/120128
K 10
diplhand.h
V 21
file 4n.0.r13421/6826
K 11
diplomats.c
V 25
file vz.5ck.r17122/349995
K 11
diplomats.h
V 24
file w0.5bk.r13745/13943
K 10
edithand.c
V 26
file 3bk.5ck.r17122/349501
K 10
edithand.h
V 23
file 4ez.5ck.r15317/588
K 10
gamehand.c
V 25
file 4o.5ck.r17122/349000
K 10
gamehand.h
V 24
file 4p.5ck.r15698/24111
K 9
generator
V 25
dir 2me.5ck.r17122/343983
K 11
ggzserver.c
V 26
file 39a.5ck.r17122/349250
K 11
ggzserver.h
V 25
file 39b.5bk.r15001/48999
K 10
gotohand.c
V 25
file 11.5ck.r16929/298882
K 10
gotohand.h
V 25
file 7r.5ck.r16929/301579
K 10
handchat.c
V 25
file 4q.5ck.r17122/344228
K 10
handchat.h
V 22
file dj.0.r7100/189089
K 9
maphand.c
V 24
file 13.5ck.r16984/97418
K 9
maphand.h
V 24
file 14.5ck.r16436/77319
K 6
meta.c
V 25
file 4s.5ck.r17122/349751
K 6
meta.h
V 23
file 4t.5bk.r14763/1928
K 8
notify.c
V 26
file 4i2.5ck.r17122/351177
K 8
notify.h
V 25
file 4i3.5ck.r16357/30259
K 9
plrhand.c
V 25
file 4u.5ck.r17122/352112
K 9
plrhand.h
V 25
file 4v.5ck.r16578/438972
K 8
report.c
V 25
file vi.5ck.r17122/348006
K 8
report.h
V 24
file vj.5ck.r16847/19782
K 9
ruleset.c
V 25
file 8w.5ck.r17122/348752
K 9
ruleset.h
V 24
file 8x.5ck.r16686/46254
K 13
sanitycheck.c
V 24
file wi.5ck.r16984/98160
K 13
sanitycheck.h
V 25
file wj.5ck.r16578/437729
K 10
savegame.c
V 25
file vl.5ck.r17122/351865
K 10
savegame.h
V 24
file vm.5ck.r15698/25092
K 7
score.c
V 26
file 2eg.5ck.r17122/344476
K 7
score.h
V 22
file 2eh.0.r11430/3487
K 9
scripting
V 25
dir 31x.5ck.r17122/346768
K 8
sernet.c
V 25
file 15.5ck.r17122/350244
K 8
sernet.h
V 25
file 4y.5bk.r14427/262734
K 10
settings.c
V 26
file 2m0.5ck.r17122/347514
K 10
settings.h
V 25
file 2m1.5ck.r16846/12347
K 10
settlers.c
V 24
file 7s.5ck.r16984/96678
K 10
settlers.h
V 24
file 7t.5bk.r14416/98109
K 11
spacerace.c
V 25
file 9a.5ck.r16929/306235
K 11
spacerace.h
V 21
file 9b.0.r11338/1129
K 10
srv_main.c
V 25
file vg.5ck.r17122/344721
K 10
srv_main.h
V 23
file vh.5ck.r16647/3913
K 11
stdinhand.c
V 25
file 4z.5ck.r17122/351614
K 11
stdinhand.h
V 24
file 50.5ck.r16302/31441
K 11
techtools.c
V 26
file 33n.5ck.r17122/350739
K 11
techtools.h
V 24
file 33o.5ck.r15913/5569
K 10
unithand.c
V 25
file 18.5ck.r17122/351367
K 10
unithand.h
V 23
file 19.5ck.r16959/4142
K 11
unittools.c
V 25
file 1a.5ck.r17122/350490
K 11
unittools.h
V 24
file 1b.5ck.r17119/13475
K 8
voting.c
V 26
file 4ex.5ck.r17122/350988
K 8
voting.h
V 25
file 4ey.5ck.r15675/47518
END
ENDREP
id: z.5ck.r17122/355806
type: dir
pred: z.5ck.r17119/17148
count: 3965
text: 17122 352360 3433 3433 a617d7443910e15c06cb5b08ae8e5b48
props: 13932 1834 123 0 2b883b78ac685994a9940e39e0d24770
cpath: /trunk/server
copyroot: 15280 /trunk

id: 2m5.5ck.r17122/356041
type: file
pred: 2m5.5ck.r17035/8586
count: 50
text: 17122 39465 882 15163 e1a4a93380679c10f2946d2c441475d3
props: 10836 16751 111 0 2a5912525b098cb46a1301ee940f7617
cpath: /trunk/manual/civmanual.c
copyroot: 15280 /trunk

PLAIN
K 11
Makefile.am
V 25
file 2m4.5ck.r15407/26771
K 11
civmanual.c
V 26
file 2m5.5ck.r17122/356041
END
ENDREP
id: 2m2.5ck.r17122/356404
type: dir
pred: 2m2.5ck.r17035/8944
count: 64
text: 17122 356290 101 101 f8bade5230824a30b74750e77978174a
props: 8143 8148 62 0 2b9cf7a0db52b94110accde14413565f
cpath: /trunk/manual
copyroot: 15280 /trunk

id: zl.5ck.r17122/356636
type: file
pred: zl.5ck.r17042/126168
count: 43
text: 17122 10239 1447 13089 c57d3f87b2c6a513c74458282b2c03a9
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 25
file zh.5ck.r17042/125665
K 8
agents.h
V 22
file zi.0.r8387/119237
K 10
cma_core.c
V 25
file zj.5ck.r16984/108101
K 10
cma_core.h
V 20
file zk.0.r8132/2370
K 9
cma_fec.c
V 25
file zl.5ck.r17122/356636
K 9
cma_fec.h
V 20
file zm.0.r8132/1669
K 5
sha.c
V 26
file 2fy.5ck.r17042/125918
K 5
sha.h
V 23
file 2fz.0.r9577/101433
END
ENDREP
id: zf.5ck.r17122/357295
type: dir
pred: zf.5ck.r17042/126826
count: 159
text: 17122 356891 391 391 edcce82e7d8060a45af5e7295dfa80c8
props: 11108 11608 65 0 c67827893bff2f279fa7f0439c4cba47
cpath: /trunk/client/agents
copyroot: 15280 /trunk

id: z4.5ck.r17122/357537
type: file
pred: z4.5ck.r17068/45704
count: 129
text: 17122 55176 726 33554 61e7b9fa5a714db4f6dcde844b6503f7
props: 11067 4204 111 0 32cf26490c5995022c752556481ff094
cpath: /trunk/client/citydlg_common.c
copyroot: 15280 /trunk

id: mb.5ck.r17122/357790
type: file
pred: mb.5ck.r17030/1319
count: 74
text: 17122 245017 3822 24113 e0e72532ba68e8c7f31f08de8a73ca1e
props: 10806 19211 111 0 93646be3752db5a3cd8e77177837d494
cpath: /trunk/client/cityrepdata.c
copyroot: 15280 /trunk

id: 33a.5ck.r17122/358041
type: file
pred: 33a.5ck.r16929/316194
count: 25
text: 17122 248869 24 9852 531b4e663fa75e1ecd110e9a68f98517
props: 11081 99 111 0 d4514082fc7e52be026d3360dec4dcb0
cpath: /trunk/client/colors_common.c
copyroot: 15280 /trunk

id: zy.5ck.r17122/358292
type: file
pred: zy.5ck.r17079/19901
count: 181
text: 17122 108471 1655 94021 8fe22a54dab11f8c94a24c9d6fd5b892
props: 11072 618 112 0 0564c5503f2d15442a967c72794b21e8
cpath: /trunk/client/gui-gtk-2.0/citydlg.c
copyroot: 15280 /trunk

id: 118.5ck.r17122/358551
type: file
pred: 118.5ck.r17115/7215
count: 141
text: 17122 275032 395 46219 50618f9ea908aaba16dcefb7a1b7ba2f
props: 11057 38502 111 0 89e24921275908e1dbda216a065c4859
cpath: /trunk/client/gui-gtk-2.0/repodlgs.c
copyroot: 15280 /trunk

id: 34x.5ck.r17122/358813
type: file
pred: 34x.5ck.r17013/10030
count: 7
text: 17122 281201 251 7138 ca8629207674690635ab0d55eef5f14f
props: 10945 10388 110 0 94a2a96823d3c54fff31bdd51de17982
cpath: /trunk/client/gui-gtk-2.0/themes.c
copyroot: 15280 /trunk

id: 10k.5ck.r17122/359071
type: file
pred: 10k.5ck.r16998/73466
count: 243
text: 17122 286963 731 71328 28a4b07b91eb2a4c2b4a32f8acc00258
props: 11057 38870 112 0 ec3aa248409009be6c82cab2c7e95ef5
cpath: /trunk/client/gui-gtk-2.0/gui_main.c
copyroot: 15280 /trunk

id: 376.5ck.r17122/359334
type: file
pred: 376.5ck.r16397/92668
count: 8
text: 17122 290473 711 5225 c6be2de31dcb289e37b94f8852884938
props: 12670 98153 34 0 25e6c2f7558b7484000d4d090dea5b92
cpath: /trunk/client/gui-gtk-2.0/caravan_dialog.c
copyroot: 15280 /trunk

id: 4ej.5ck.r17122/359599
type: file
pred: 4ej.5ck.r16929/317992
count: 26
text: 17122 10126 87 58175 d8b80c9c760b1314f816a6ab3539881e
cpath: /trunk/client/gui-gtk-2.0/editgui.c
copyroot: 15280 /trunk

id: 10m.5ck.r17122/359801
type: file
pred: 10m.5ck.r16973/8995
count: 40
text: 17122 237927 1713 33930 94c3939d9ab2dafbeb68b0e83f4a8538
props: 10967 1745 111 0 05a46e497021c8716b647ee1425e21a2
cpath: /trunk/client/gui-gtk-2.0/gui_stuff.c
copyroot: 15280 /trunk

id: 2pi.5ck.r17122/360063
type: file
pred: 2pi.5ck.r17110/513
count: 117
text: 17122 11715 279 82208 2d5d73de92330303233cae3bff833744
props: 11100 16432 111 0 622f1432038f91cce287c1d90e4f7964
cpath: /trunk/client/gui-gtk-2.0/pages.c
copyroot: 15280 /trunk

id: 10z.5ck.r17122/360320
type: file
pred: 10z.5ck.r17117/7350
count: 153
text: 17122 299312 54 86391 f7b832c35fa2193132aa273fcc5d3b1a
props: 11057 39977 111 0 05d0c9433d86d9823b0e8b2536eb2299
cpath: /trunk/client/gui-gtk-2.0/menu.c
copyroot: 15280 /trunk

id: 102.5ck.r17122/360577
type: file
pred: 102.5ck.r17042/128545
count: 38
text: 17122 307893 157 25730 4e9b63bd6726bf6d39abb86a64bba069
props: 9773 10560 111 0 23629f8214b2309975780a037517e920
cpath: /trunk/client/gui-gtk-2.0/cma_fe.c
copyroot: 15280 /trunk

id: 4h8.5ck.r17122/360837
type: file
pred: 4h8.5ck.r16955/11098
count: 3
text: 17122 308080 311 11075 c88d83d9455128b81e0082512cc4c8c5
cpath: /trunk/client/gui-gtk-2.0/voteinfo_bar.c
copyroot: 15280 /trunk

id: 100.5ck.r17122/361044
type: file
pred: 100.5ck.r17079/20158
count: 110
text: 17122 22025 651 70150 0a98a3a32b30056ad1a6d7794b6c443b
props: 11057 40343 111 0 9323cb943074f1605bbe84192873bd2e
cpath: /trunk/client/gui-gtk-2.0/cityrep.c
copyroot: 15280 /trunk

id: 108.5ck.r17122/361305
type: file
pred: 108.5ck.r16929/318968
count: 160
text: 17122 256056 4701 43874 1731febacf6d19c3a7980f1f6bab4ac4
props: 11088 8070 112 0 858133ad234580a5fc7c24a791c3b702
cpath: /trunk/client/gui-gtk-2.0/dialogs.c
copyroot: 15280 /trunk

id: 36n.5ck.r17122/361568
type: file
pred: 36n.5ck.r15410/341404
count: 19
text: 17122 266340 192 25579 10f9670b86d98841f8c509c37b871add
props: 11088 8800 110 0 94a2a96823d3c54fff31bdd51de17982
cpath: /trunk/client/gui-gtk-2.0/diplomat_dialog.c
copyroot: 15280 /trunk

id: 47d.5ck.r17122/361837
type: file
pred: 47d.5ck.r16193/58569
count: 3
text: 17122 266562 23 3013 ad177ac664dec2a278a3a7ce93804374
props: 13968 60058 34 0 25e6c2f7558b7484000d4d090dea5b92
cpath: /trunk/client/gui-gtk-2.0/theme_dlg.c
copyroot: 15280 /trunk

id: 10a.5ck.r17122/362096
type: file
pred: 10a.5ck.r17042/128804
count: 57
text: 17122 107810 480 29329 a1e766b2f8b5d8c0f860111931a44851
props: 11093 473 111 0 7a0697bf766451f41e947e71ce1310bc
cpath: /trunk/client/gui-gtk-2.0/diplodlg.c
copyroot: 15280 /trunk

id: 104.5ck.r17122/362357
type: file
pred: 104.5ck.r16929/319229
count: 8
text: 17122 110553 1668 3070 c76e3085272dd21ac4969da6e69da2e9
props: 10458 4167 110 0 7d181b70073f10d0c5a58c73a72d4f04
cpath: /trunk/client/gui-gtk-2.0/colors.c
copyroot: 15280 /trunk

id: 10u.5ck.r17122/362616
type: file
pred: 10u.5ck.r17042/129061
count: 37
text: 17122 114494 2042 12727 74709b5b2a66ff923a4af3835ff1fa4e
props: 11054 96 111 0 0b146d6d431c2ad00452618c43381276
cpath: /trunk/client/gui-gtk-2.0/inteldlg.c
copyroot: 15280 /trunk

id: 377.5ck.r17122/362877
type: file
pred: 377.0.r13481/22903
count: 3
text: 17122 39351 31 5972 782c3a345fa779341ecc8b64c7cfa567
props: 12670 99018 34 0 25e6c2f7558b7484000d4d090dea5b92
cpath: /trunk/client/gui-gtk-2.0/choice_dialog.c
copyroot: 15280 /trunk

id: 4gq.5ck.r17122/363137
type: file
pred: 4gq.5ck.r15814/16205
count: 1
text: 17122 126425 24 1645 7e5254871775314d326c6d0c76a89905
cpath: /trunk/client/gui-gtk-2.0/embedggz.c
copyroot: 15280 /trunk

id: 4el.5ck.r17122/363338
type: file
pred: 4el.5ck.r17087/91
count: 32
text: 17122 127042 110271 181011 061575fe27ffee487eb394020de1cddc
cpath: /trunk/client/gui-gtk-2.0/editprop.c
copyroot: 15280 /trunk

id: zw.5ck.r17122/363543
type: file
pred: zw.5ck.r17117/7601
count: 43
text: 17122 9462 198 44250 17295cb4f7aaf53c5b46ffb2384f7f97
props: 9577 108867 111 0 d4514082fc7e52be026d3360dec4dcb0
cpath: /trunk/client/gui-gtk-2.0/chatline.c
copyroot: 15280 /trunk

id: 10d.5ck.r17122/363800
type: file
pred: 10d.5ck.r17037/30544
count: 46
text: 17122 23924 78 11075 985cb8e16251b2d28f87b5fa58f0c212
props: 11057 41811 111 0 b4233197920770c602c29330b7f7c623
cpath: /trunk/client/gui-gtk-2.0/gamedlgs.c
copyroot: 15280 /trunk

PLAIN
K 11
Makefile.am
V 24
file zu.5ck.r16998/74500
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.r17122/359334
K 10
chatline.c
V 25
file zw.5ck.r17122/363543
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.r17122/358292
K 9
citydlg.h
V 20
file zz.0.r5493/6351
K 9
cityrep.c
V 26
file 100.5ck.r17122/361044
K 9
cityrep.h
V 22
file 101.0.r9098/11480
K 8
cma_fe.c
V 26
file 102.5ck.r17122/360577
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.r17122/361305
K 9
dialogs.h
V 22
file 109.0.r11212/7101
K 10
diplodlg.c
V 26
file 10a.5ck.r17122/362096
K 10
diplodlg.h
V 23
file 10b.0.r9577/108261
K 17
diplomat_dialog.c
V 26
file 36n.5ck.r17122/361568
K 9
editgui.c
V 26
file 4ej.5ck.r17122/359599
K 9
editgui.h
V 25
file 4ek.5ck.r15355/70937
K 10
editprop.c
V 26
file 4el.5ck.r17122/363338
K 10
editprop.h
V 24
file 3bj.5cl.r15704/4438
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 24
file 10e.5ck.r16899/8280
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 26
file 10k.5ck.r17122/359071
K 10
gui_main.h
V 25
file 10l.5ck.r16281/14952
K 11
gui_stuff.c
V 26
file 10m.5ck.r17122/359801
K 11
gui_stuff.h
V 25
file 10n.5ck.r16281/15466
K 11
happiness.c
V 26
file 10o.5ck.r17042/128029
K 11
happiness.h
V 23
file 10p.0.r9577/106064
K 9
helpdlg.c
V 26
file 10q.5ck.r16929/319741
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 26
file 10u.5ck.r17122/362616
K 10
inteldlg.h
V 23
file 2d1.0.r9577/108626
K 9
mapctrl.c
V 26
file 10v.5ck.r16929/319486
K 9
mapctrl.h
V 25
file 10w.5bk.r14157/11089
K 9
mapview.c
V 24
file 10x.5ck.r17115/6956
K 9
mapview.h
V 23
file 10y.0.r12881/17128
K 6
menu.c
V 26
file 10z.5ck.r17122/360320
K 6
menu.h
V 25
file 110.5ck.r16067/65085
K 12
messagedlg.c
V 23
file 111.0.r11771/10924
K 12
messagedlg.h
V 22
file 2d2.0.r5989/22693
K 12
messagewin.c
V 24
file 112.5ck.r16973/9506
K 12
messagewin.h
V 23
file 113.0.r10108/19424
K 11
optiondlg.c
V 26
file 4js.5ck.r17042/127567
K 11
optiondlg.h
V 25
file 114.5ck.r17037/29773
K 7
pages.c
V 26
file 2pi.5ck.r17122/360063
K 7
pages.h
V 25
file 2pj.5ck.r16532/16664
K 8
plrdlg.c
V 26
file 115.5ck.r16929/319999
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 26
file 118.5ck.r17122/358551
K 10
repodlgs.h
V 24
file 119.5ck.r17115/7471
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 26
file 2y8.5ck.r16578/445568
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 25
file 45i.5bk.r13968/60424
K 14
voteinfo_bar.c
V 26
file 4h8.5ck.r17122/360837
K 14
voteinfo_bar.h
V 25
file 4h9.5ck.r16063/46876
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.r17122/367851
type: dir
pred: zs.5ck.r17117/11621
count: 1297
text: 17122 364060 3778 3778 47308ea1525b848898329a072bd064d3
props: 11108 11912 79 0 480bb3268560e84c2d6c8376c422c65e
cpath: /trunk/client/gui-gtk-2.0
copyroot: 15280 /trunk

id: 2g3.5ck.r17122/368100
type: file
pred: 2g3.5ck.r17044/3035
count: 114
text: 17122 59572 1964 49090 014361c75fb5e433ae959354a0ffe1bc
props: 11057 45424 111 0 93646be3752db5a3cd8e77177837d494
cpath: /trunk/client/text.c
copyroot: 15280 /trunk

id: 11i.5ck.r17122/368346
type: file
pred: 11i.5ck.r16971/56554
count: 57
text: 17122 22702 944 8319 5db31a67acc1c55cb802fe2bca8bda21
props: 11057 45776 111 0 9b377c828b4ca1827963af8e19878787
cpath: /trunk/client/repodlgs_common.c
copyroot: 15280 /trunk

id: ar.5ck.r17122/368601
type: file
pred: ar.5ck.r17037/34815
count: 33
text: 17122 122441 23 12862 3cef443a07da31f55dae3cad611db879
props: 10897 2598 111 0 7c94b769c2c0998a2747d858cb1e860f
cpath: /trunk/client/gui-xaw/optiondlg.c
copyroot: 15280 /trunk

id: 9w.5ck.r17122/368856
type: file
pred: 9w.5ck.r17079/24439
count: 170
text: 17122 273879 344 78083 0b280f3a9e64f1010b85d496c4d55ba4
props: 10820 1319 112 0 e0e21d00fa120c81b59fd1c92d742949
cpath: /trunk/client/gui-xaw/citydlg.c
copyroot: 15280 /trunk

id: ab.5ck.r17122/369111
type: file
pred: ab.5ck.r16015/53991
count: 36
text: 17122 273599 250 10321 810277e1c57d36a24320fc7899de84d5
props: 10536 6353 111 0 eaeaff8c6ba56cfe19b921c33649c016
cpath: /trunk/client/gui-xaw/gotodlg.c
copyroot: 15280 /trunk

id: al.5ck.r17122/369365
type: file
pred: al.5ck.r16929/325441
count: 221
text: 17122 281145 26 28695 365b46e6100a2f9ed493cf73bca99924
props: 11084 5307 112 0 a976793c1b86634c19e93e3af962ba38
cpath: /trunk/client/gui-xaw/mapview.c
copyroot: 15280 /trunk

id: ay.5ck.r17122/369620
type: file
pred: ay.5ck.r16998/79274
count: 108
text: 17122 267620 3929 48300 b41895a399f9511b29abd05d33ffe53a
props: 10957 5571 111 0 04c7a6fe9bf3a5db3539a62041388438
cpath: /trunk/client/gui-xaw/repodlgs.c
copyroot: 15280 /trunk

id: bm.5ck.r17122/369877
type: file
pred: bm.5ck.r16929/325951
count: 155
text: 17122 271812 102 36548 07754dc4aad8fabbced6c736433e3480
props: 10925 3549 112 0 177404f64081975a31585790400154e7
cpath: /trunk/client/gui-xaw/gui_main.c
copyroot: 15280 /trunk

id: 2qm.5ck.r17122/370134
type: file
pred: 2qm.5ck.r16999/11642
count: 22
text: 17122 20421 57 9603 43b72e97f4709e00a163b47e4fa1f04d
props: 10598 2663 110 0 fdfdab56f53d2388a66f6a5ce0985f95
cpath: /trunk/client/gui-xaw/pages.c
copyroot: 15280 /trunk

id: an.5ck.r17122/370385
type: file
pred: an.5ck.r16999/11888
count: 114
text: 17122 43150 157 40113 3d3ae13673be8420b8833e58f7843ac2
props: 10882 2348 111 0 014f4f31d8fa52a1c17e04bfb7ac7579
cpath: /trunk/client/gui-xaw/menu.c
copyroot: 15280 /trunk

id: 2ei.5ck.r17122/370636
type: file
pred: 2ei.5ck.r15813/72072
count: 17
text: 17122 237343 66 28969 258d840e998b3dc5aabba612dcd2b8cf
props: 9853 84 111 0 b491beec13ba952c0167e367d3cb48d2
cpath: /trunk/client/gui-xaw/cma_fe.c
copyroot: 15280 /trunk

id: 9y.5ck.r17122/370887
type: file
pred: 9y.5ck.r17079/24689
count: 76
text: 17122 100405 136 33139 867d61e49f02b9a3c8bee8e678b8d4bd
props: 10852 5556 111 0 ae073b1a8624f4e72ab3bef202bf2f05
cpath: /trunk/client/gui-xaw/cityrep.c
copyroot: 15280 /trunk

id: a6.5ck.r17122/371141
type: file
pred: a6.5ck.r16929/326713
count: 149
text: 17122 311768 167 47449 3bc1d3f2254a975d1e53e95c54bf51eb
props: 10957 6289 112 0 ac8a0c5808e41faff6290e5ee8a4284e
cpath: /trunk/client/gui-xaw/dialogs.c
copyroot: 15280 /trunk

id: 37p.5ck.r17122/371397
type: file
pred: 37p.5ck.r16578/452827
count: 19
text: 17122 316063 116 26888 a9c86d9504c1daf6ea5704eb0533b061
props: 12670 103088 34 0 25e6c2f7558b7484000d4d090dea5b92
cpath: /trunk/client/gui-xaw/diplomat_dialog.c
copyroot: 15280 /trunk

id: a8.5ck.r17122/371663
type: file
pred: a8.5ck.r17042/134575
count: 60
text: 17122 56839 112 31244 532a522e5db9fe8a246e353e8e1535a2
props: 10442 1972 111 0 8ba011ca1ef4e408ab91a853a48e15eb
cpath: /trunk/client/gui-xaw/diplodlg.c
copyroot: 15280 /trunk

id: ad.5ck.r17122/371918
type: file
pred: ad.5ck.r16601/86298
count: 81
text: 17122 58404 25 17830 4454be481c87912236c4c56f1e827073
props: 10789 5855 111 0 3d8b904835b9008e2a0a4d4db6ee628d
cpath: /trunk/client/gui-xaw/graphics.c
copyroot: 15280 /trunk

id: ai.5ck.r17122/372171
type: file
pred: ai.5ck.r17042/134829
count: 44
text: 17122 59081 404 16539 ac563a3dcddbbc0e1f98a056de9e3273
props: 10696 129 111 0 23629f8214b2309975780a037517e920
cpath: /trunk/client/gui-xaw/inteldlg.c
copyroot: 15280 /trunk

id: ax.5ck.r17122/372425
type: file
pred: ax.5ck.r15410/352614
count: 27
text: 17122 309434 47 11205 be63c19a6f55413a38e2fc53ecb42fcb
props: 10442 2333 111 0 5515c59917848b493fbf45ffb42836b3
cpath: /trunk/client/gui-xaw/ratesdlg.c
copyroot: 15280 /trunk

id: aa.5ck.r17122/372680
type: file
pred: aa.5ck.r16015/55751
count: 16
text: 17122 3782 1700 6663 9eeeb8172ae146395b2e973a0ff06164
props: 10411 149687 111 0 d4514082fc7e52be026d3360dec4dcb0
cpath: /trunk/client/gui-xaw/finddlg.c
copyroot: 15280 /trunk

id: af.5ck.r17122/372934
type: file
pred: af.5ck.r16992/29381
count: 91
text: 17122 239670 26 37299 9a7f09fe0831d71c25bbc9bb9863c7b9
props: 10882 3426 111 0 10d822456e37f81dabb45dad0c15b842
cpath: /trunk/client/gui-xaw/helpdlg.c
copyroot: 15280 /trunk

id: aw.5ck.r17122/373187
type: file
pred: aw.5ck.r16199/127963
count: 56
text: 17122 25444 2229 13261 5caa52ea1aaddb3c58a9371bf9cde6aa
props: 10442 2694 111 0 77af0ec85c332e0d4fd7e7ef86a518fd
cpath: /trunk/client/gui-xaw/plrdlg.c
copyroot: 15280 /trunk

id: 9u.5ck.r17122/373441
type: file
pred: 9u.5ck.r16992/29629
count: 29
text: 17122 315406 24 4443 9148b1b9a2303f27e128296efc23a69e
props: 9160 4724 111 0 45c0e160a790dc8f7645f8a7eabea654
cpath: /trunk/client/gui-xaw/chatline.c
copyroot: 15280 /trunk

id: a4.5ck.r17122/373693
type: file
pred: a4.5ck.r16929/327980
count: 50
text: 17122 292305 224 18244 a43ad066306b5cb452cc9e5955e93572
props: 10882 3786 111 0 2e2357461112b5dbc5fe4daab6abde1a
cpath: /trunk/client/gui-xaw/connectdlg.c
copyroot: 15280 /trunk

PLAIN
K 11
Makefile.am
V 24
file bq.5ck.r16063/52349
K 9
actions.c
V 24
file nt.5ck.r16397/97629
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.r17122/368856
K 9
citydlg.h
V 20
file 9x.0.r2187/8309
K 9
cityrep.c
V 25
file 9y.5ck.r17122/370887
K 9
cityrep.h
V 20
file g1.0.r5489/4916
K 8
cma_fe.c
V 26
file 2ei.5ck.r17122/370636
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 25
file a4.5ck.r17122/373693
K 12
connectdlg.h
V 21
file a5.0.r2187/12228
K 9
dialogs.c
V 25
file a6.5ck.r17122/371141
K 9
dialogs.h
V 21
file a7.0.r10882/3191
K 10
diplodlg.c
V 25
file a8.5ck.r17122/371663
K 10
diplodlg.h
V 20
file a9.0.r2187/7955
K 17
diplomat_dialog.c
V 26
file 37p.5ck.r17122/371397
K 9
finddlg.c
V 25
file aa.5ck.r17122/372680
K 9
finddlg.h
V 22
file 2dk.0.r5989/31562
K 9
gotodlg.c
V 25
file ab.5ck.r17122/369111
K 9
gotodlg.h
V 21
file ac.0.r1888/21069
K 10
graphics.c
V 25
file ad.5ck.r17122/371918
K 10
graphics.h
V 21
file ae.0.r10789/6338
K 10
gui_main.c
V 25
file bm.5ck.r17122/369877
K 10
gui_main.h
V 22
file bn.0.r11408/10219
K 11
gui_stuff.c
V 25
file bo.5ck.r16929/326206
K 11
gui_stuff.h
V 21
file bp.0.r4964/56392
K 9
helpdlg.c
V 25
file af.5ck.r17122/372934
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.r17122/372171
K 10
inteldlg.h
V 23
file 2dl.0.r10108/22972
K 9
mapctrl.c
V 25
file aj.5ck.r16929/327222
K 9
mapctrl.h
V 21
file ak.0.r10532/9667
K 9
mapview.c
V 25
file al.5ck.r17122/369365
K 9
mapview.h
V 24
file am.5bk.r13912/46304
K 6
menu.c
V 25
file an.5ck.r17122/370385
K 6
menu.h
V 24
file ao.5ck.r16824/42452
K 12
messagedlg.c
V 25
file ap.5bk.r14427/290582
K 12
messagedlg.h
V 22
file 2dm.0.r5989/31896
K 12
messagewin.c
V 25
file aq.5bk.r14427/286529
K 12
messagewin.h
V 20
file g3.0.r5489/3851
K 11
optiondlg.c
V 25
file ar.5ck.r17122/368601
K 11
optiondlg.h
V 24
file as.5ck.r16998/79026
K 7
pages.c
V 26
file 2qm.5ck.r17122/370134
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 25
file aw.5ck.r17122/373187
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 25
file ay.5ck.r17122/369620
K 10
repodlgs.h
V 24
file az.5ck.r16998/79526
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 23
file 350.0.r10945/14451
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.r17122/377146
type: dir
pred: 9o.5ck.r17079/28122
count: 920
text: 17122 373951 3182 3182 2c554cbd02c7a4164ac1e6dc18bd741a
props: 11108 12237 78 0 a27c61ac5fddbd709df8c1876129f940
cpath: /trunk/client/gui-xaw
copyroot: 15280 /trunk

id: yl.5ck.r17122/377390
type: file
pred: yl.5ck.r16165/71706
count: 18
text: 17122 0 3297 6330 c690688e4854484e3da26e7aeb193250
props: 7269 14883 111 0 8e6f231ffe21dad0a34f68090b1c0b69
cpath: /trunk/client/gui-win32/optiondlg.c
copyroot: 15280 /trunk

id: xm.5ck.r17122/377643
type: file
pred: xm.5ck.r16984/117391
count: 132
text: 17122 122955 1194 63489 4d98f8ebe97a3288363354cb52553b7d
props: 10989 3245 112 0 e7136c353c3addf3d4cc60888f1c16d6
cpath: /trunk/client/gui-win32/citydlg.c
copyroot: 15280 /trunk

id: ye.5ck.r17122/377902
type: file
pred: ye.5ck.r15410/357978
count: 170
text: 17122 237439 152 18750 1eaf09e1ce4b4e386dd8f602159db032
props: 11084 8847 112 0 64942f9576ccbd6a94350596bbb7a5cc
cpath: /trunk/client/gui-win32/mapview.c
copyroot: 15280 /trunk

id: yq.5ck.r17122/378160
type: file
pred: yq.5ck.r16025/6283
count: 80
text: 17122 292560 5998 30970 b03b7ad5f87510daef4f9b5adaabd2d5
props: 10883 3315 111 0 93646be3752db5a3cd8e77177837d494
cpath: /trunk/client/gui-win32/repodlgs.c
copyroot: 15280 /trunk

id: yg.5ck.r17122/378417
type: file
pred: yg.5ck.r16824/48038
count: 77
text: 17122 309594 227 41572 f77ba450e334915efa4cb3b96e490b21
props: 10989 3605 111 0 d69121ee529fb8cb3643d711ec0f2158
cpath: /trunk/client/gui-win32/menu.c
copyroot: 15280 /trunk

id: 2fu.5ck.r17122/378670
type: file
pred: 2fu.5ck.r17042/139022
count: 15
text: 17122 310964 27 20689 bb93ba95dc4a3d27ef9dca32dbad68e5
props: 9591 2990 111 0 3d57169d64a739976bce7d2e578e29eb
cpath: /trunk/client/gui-win32/cma_fe.c
copyroot: 15280 /trunk

id: xo.5ck.r17122/378926
type: file
pred: xo.5ck.r16199/131876
count: 50
text: 17122 25206 101 36072 5fca8f8d3ac9b0ce241bcfbda1f3d039
props: 10839 2574 111 0 2e2357461112b5dbc5fe4daab6abde1a
cpath: /trunk/client/gui-win32/cityrep.c
copyroot: 15280 /trunk

id: xu.5ck.r17122/379182
type: file
pred: xu.5ck.r16397/102289
count: 110
text: 17122 271652 130 57827 aed355a22b85fda5c7e2075d7bedaf23
props: 10989 3964 111 0 8264fa93116f43c430f41dcf0da62390
cpath: /trunk/client/gui-win32/dialogs.c
copyroot: 15280 /trunk

id: xw.5ck.r17122/379440
type: file
pred: xw.5ck.r17042/139276
count: 45
text: 17122 122491 93 25793 4cbb3b34aedcdc1c1dee83befee92148
props: 10411 156138 111 0 23629f8214b2309975780a037517e920
cpath: /trunk/client/gui-win32/diplodlg.c
copyroot: 15280 /trunk

id: yb.5ck.r17122/379699
type: file
pred: yb.5ck.r15410/360287
count: 26
text: 17122 126218 176 5872 b4b5811a26173063bf357d73bf701c86
props: 10736 12122 111 0 d4514082fc7e52be026d3360dec4dcb0
cpath: /trunk/client/gui-win32/inteldlg.c
copyroot: 15280 /trunk

id: yp.5ck.r17122/379957
type: file
pred: yp.5ck.r15410/360544
count: 15
text: 17122 8064 47 9870 eaf4dd3f457bd983e0083096ec4edd91
props: 10989 4324 111 0 3d57169d64a739976bce7d2e578e29eb
cpath: /trunk/client/gui-win32/ratesdlg.c
copyroot: 15280 /trunk

id: yn.5ck.r17122/380211
type: file
pred: yn.5ck.r16199/132642
count: 35
text: 17122 244786 202 12382 ee996098cc93467e24e638939db40807
props: 10427 5013 111 0 0b146d6d431c2ad00452618c43381276
cpath: /trunk/client/gui-win32/plrdlg.c
copyroot: 15280 /trunk

id: yv.5ck.r17122/380467
type: file
pred: yv.5ck.r16289/42501
count: 32
text: 17122 66789 33509 33491 6184fae169de0586f97c55137f74561e
props: 10839 2935 111 0 1912998302effd94f7d1c131050552ad
cpath: /trunk/client/gui-win32/wldlg.c
copyroot: 15280 /trunk

id: xs.5ck.r17122/380722
type: file
pred: xs.5ck.r16578/458040
count: 59
text: 17122 271575 47 33492 5bf9891c423d7fa0bd5b4133d054a122
props: 10884 2435 111 0 14533b38c2d22fb145a05b253c8fb2e8
cpath: /trunk/client/gui-win32/connectdlg.c
copyroot: 15280 /trunk

PLAIN
K 11
Makefile.am
V 24
file nr.5ck.r16063/58955
K 8
canvas.c
V 26
file 2ya.5ck.r16578/457273
K 8
canvas.h
V 22
file 2yb.0.r10131/2132
K 10
chatline.c
V 25
file xk.5ck.r16199/132896
K 10
chatline.h
V 20
file xl.0.r5785/7678
K 9
citydlg.c
V 25
file xm.5ck.r17122/377643
K 9
citydlg.h
V 19
file xn.0.r5671/865
K 9
cityrep.c
V 25
file xo.5ck.r17122/378926
K 9
cityrep.h
V 22
file xp.0.r3745/159022
K 8
cma_fe.c
V 26
file 2fu.5ck.r17122/378670
K 8
cma_fe.h
V 20
file 2fv.0.r7442/210
K 8
colors.c
V 21
file xq.0.r10461/1484
K 8
colors.h
V 21
file xr.0.r10461/1841
K 12
connectdlg.c
V 25
file xs.5ck.r17122/380722
K 12
connectdlg.h
V 20
file xt.0.r8331/7783
K 9
dialogs.c
V 25
file xu.5ck.r17122/379182
K 9
dialogs.h
V 21
file xv.0.r10883/4520
K 10
diplodlg.c
V 25
file xw.5ck.r17122/379440
K 10
diplodlg.h
V 22
file xx.0.r13481/26989
K 9
finddlg.c
V 23
file xy.5ck.r16025/7544
K 9
finddlg.h
V 22
file 2dg.0.r5989/39776
K 9
gotodlg.c
V 23
file xz.5ck.r16025/6031
K 9
gotodlg.h
V 20
file y0.0.r3786/3776
K 10
graphics.c
V 25
file y1.5ck.r17042/139532
K 10
graphics.h
V 21
file y2.0.r10294/2998
K 10
gui_main.c
V 25
file y3.5ck.r17042/138767
K 10
gui_main.h
V 24
file y4.5ck.r16059/40327
K 11
gui_stuff.c
V 23
file y5.5ck.r16025/6536
K 11
gui_stuff.h
V 22
file y6.0.r13328/10851
K 11
happiness.c
V 23
file 137.5bk.r14335/341
K 11
happiness.h
V 23
file 138.0.r13481/26751
K 9
helpdlg.c
V 24
file y7.5ck.r16992/33296
K 9
helpdlg.h
V 22
file y8.0.r3745/150873
K 10
inputdlg.c
V 19
file y9.0.r8895/460
K 10
inputdlg.h
V 22
file ya.0.r3745/153242
K 10
inteldlg.c
V 25
file yb.5ck.r17122/379699
K 10
inteldlg.h
V 22
file 2dh.0.r5989/39102
K 9
mapctrl.c
V 25
file yc.5ck.r15410/360029
K 9
mapctrl.h
V 21
file yd.0.r6430/14685
K 9
mapview.c
V 25
file ye.5ck.r17122/377902
K 9
mapview.h
V 22
file yf.0.r13412/11359
K 6
menu.c
V 25
file yg.5ck.r17122/378417
K 6
menu.h
V 20
file yh.0.r5785/9458
K 12
messagedlg.c
V 25
file yi.5bk.r14427/299083
K 12
messagedlg.h
V 22
file 2di.0.r5989/40112
K 12
messagewin.c
V 25
file yj.5bk.r14427/295548
K 12
messagewin.h
V 22
file yk.0.r3745/155966
K 11
optiondlg.c
V 25
file yl.5ck.r17122/377390
K 11
optiondlg.h
V 21
file ym.0.r3959/96575
K 7
pages.c
V 25
file 2qk.5ck.r16063/58356
K 7
pages.h
V 22
file 2ql.0.r8639/12634
K 8
plrdlg.c
V 25
file yn.5ck.r17122/380211
K 8
plrdlg.h
V 20
file yo.0.r3847/6164
K 10
ratesdlg.c
V 25
file yp.5ck.r17122/379957
K 10
ratesdlg.h
V 22
file 2dj.0.r5989/39439
K 10
repodlgs.c
V 25
file yq.5ck.r17122/378160
K 10
repodlgs.h
V 22
file yr.0.r3745/151547
K 14
spaceshipdlg.c
V 25
file yt.5ck.r17042/139786
K 14
spaceshipdlg.h
V 20
file yu.0.r3778/5068
K 8
sprite.c
V 25
file 2yc.5ck.r16059/39575
K 8
sprite.h
V 23
file 2yd.0.r10141/44406
K 8
themes.c
V 23
file 34z.0.r10945/20562
K 14
voteinfo_bar.c
V 25
file 4he.5ck.r16063/58606
K 14
voteinfo_bar.h
V 25
file 4hf.5ck.r16063/58781
K 7
wldlg.c
V 25
file yv.5ck.r17122/380467
K 7
wldlg.h
V 24
file yw.5ck.r16285/95572
END
ENDREP
id: np.5ck.r17122/383915
type: dir
pred: np.5ck.r17042/142973
count: 696
text: 17122 380981 2921 2921 dca79348ce0d62e494a5f70c615ed5e9
props: 11108 12557 68 0 fbaef5f6348d6ae4b0cc177104ca4ad2
cpath: /trunk/client/gui-win32
copyroot: 15280 /trunk

id: n.5ck.r17122/384162
type: file
pred: n.5ck.r17107/43563
count: 729
text: 17122 118194 183 112399 802bc3e9d9a5b28dc0d129d7b0fe3a4e
props: 11088 14698 112 0 2c9d3e41a2f20488aa9cdb8d740d094e
cpath: /trunk/client/packhand.c
copyroot: 15280 /trunk

id: 18d.5ck.r17122/384410
type: file
pred: 18d.5ck.r17037/40418
count: 88
text: 17122 12019 4504 81193 10e27ff3b95c2915876062d4db427c2c
props: 9803 3079 111 0 9b377c828b4ca1827963af8e19878787
cpath: /trunk/client/gui-sdl/optiondlg.c
copyroot: 15280 /trunk

id: 170.5ck.r17122/384667
type: file
pred: 170.5ck.r17079/30596
count: 140
text: 17122 239971 1170 123851 8c01f8c0b32a1e6061f8ee0b378687e5
props: 10779 67589 111 0 515f6afa6448327e59cdac91d637f582
cpath: /trunk/client/gui-sdl/citydlg.c
copyroot: 15280 /trunk

id: 17f.5ck.r17122/384927
type: file
pred: 17f.5ck.r16929/332404
count: 47
text: 17122 241171 23 11273 f4d4b91310843a6d86b7f809853d119a
props: 10534 12701 111 0 3d57169d64a739976bce7d2e578e29eb
cpath: /trunk/client/gui-sdl/gotodlg.c
copyroot: 15280 /trunk

id: 186.5ck.r17122/385184
type: file
pred: 186.5ck.r17115/11731
count: 177
text: 17122 248924 113 39606 455190351d4c634f9fa3f27f4d0b1381
props: 10779 67955 111 0 1566ee949d8102994e5ce1bbf3530de9
cpath: /trunk/client/gui-sdl/mapview.c
copyroot: 15280 /trunk

id: 18i.5ck.r17122/385442
type: file
pred: 18i.5ck.r17013/14298
count: 118
text: 17122 308416 989 109665 bbaba9bfc4e5b26c5ee1d683a38535b2
props: 10779 68322 111 0 622f1432038f91cce287c1d90e4f7964
cpath: /trunk/client/gui-sdl/repodlgs.c
copyroot: 15280 /trunk

id: 38p.5ck.r17122/385702
type: file
pred: 38p.5ck.r16601/93391
count: 17
text: 17122 310481 135 4363 256686ac2544a9f8840aabf0b92b0de0
props: 12670 109742 34 0 25e6c2f7558b7484000d4d090dea5b92
cpath: /trunk/client/gui-sdl/themes.c
copyroot: 15280 /trunk

id: 17o.5ck.r17122/385957
type: file
pred: 17o.5ck.r17042/143971
count: 146
text: 17122 310734 54 35687 1714f7c7b31074385401768c2bc08ed1
props: 10411 162763 111 0 93121dcfd7714818c8d46f9c51a886fa
cpath: /trunk/client/gui-sdl/gui_main.c
copyroot: 15280 /trunk

id: 3bp.5ck.r17122/386217
type: file
pred: 3bp.5ck.r16397/106733
count: 17
text: 17122 311337 39 7328 9c7df6f1a050dbf65c42b7b0b7ad1600
props: 12670 110608 34 0 25e6c2f7558b7484000d4d090dea5b92
cpath: /trunk/client/gui-sdl/caravan_dialog.c
copyroot: 15280 /trunk

id: 188.5ck.r17122/386480
type: file
pred: 188.5ck.r16999/18279
count: 71
text: 17122 315459 576 43078 0c0fee7e6e68a40eb567a8c14a999870
props: 10805 77668 111 0 18cdb9becb11c47631b7a093e907200c
cpath: /trunk/client/gui-sdl/menu.c
copyroot: 15280 /trunk

id: 174.5ck.r17122/386734
type: file
pred: 174.5ck.r15813/79444
count: 56
text: 17122 317472 929 38272 323c808d5aec12fa60377cf0bed170d6
props: 9108 25970 111 0 433ca8234d38d2ba821c9aa09a03d731
cpath: /trunk/client/gui-sdl/cma_fe.c
copyroot: 15280 /trunk

id: 390.5ck.r17122/386989
type: file
pred: 390.5ck.r17042/144229
count: 28
text: 17122 274252 749 34560 718d1a9b2177673117e8fc68af363ce0
props: 12670 112635 34 0 25e6c2f7558b7484000d4d090dea5b92
cpath: /trunk/client/gui-sdl/themespec.c
copyroot: 15280 /trunk

id: 172.5ck.r17122/387249
type: file
pred: 172.5ck.r17079/30853
count: 67
text: 17122 42152 899 38905 ec5d3669b9c0230850cfa418affd2c1b
props: 10779 68689 111 0 df9f31216c5039327c376b7fe82756f5
cpath: /trunk/client/gui-sdl/cityrep.c
copyroot: 15280 /trunk

id: 17a.5ck.r17122/387505
type: file
pred: 17a.5ck.r17013/14799
count: 160
text: 17122 275915 5199 99843 375e218eed7774a3b5641d707a32a1f8
props: 10805 78030 111 0 ae073b1a8624f4e72ab3bef202bf2f05
cpath: /trunk/client/gui-sdl/dialogs.c
copyroot: 15280 /trunk

id: 3bn.5ck.r17122/387764
type: file
pred: 3bn.5ck.r15410/369250
count: 36
text: 17122 287723 493 44981 8b89a8315f51ff6eded7f3819ab84fa5
props: 12670 114091 34 0 25e6c2f7558b7484000d4d090dea5b92
cpath: /trunk/client/gui-sdl/diplomat_dialog.c
copyroot: 15280 /trunk

id: 17c.5ck.r17122/388030
type: file
pred: 17c.5ck.r17042/144488
count: 63
text: 17122 239720 223 53430 c214d2c6027ea53a9ef4c4a47b3b595c
props: 10411 163500 111 0 433ca8234d38d2ba821c9aa09a03d731
cpath: /trunk/client/gui-sdl/diplodlg.c
copyroot: 15280 /trunk

id: 184.5ck.r17122/388290
type: file
pred: 184.5ck.r17022/1139
count: 106
text: 17122 53232 268 79506 b70009fb2378a7c5f90b4c8147090d52
props: 9803 6307 111 0 4135f0dfb17a4d11b2424d95e27830f5
cpath: /trunk/client/gui-sdl/mapctrl.c
copyroot: 15280 /trunk

id: 183.5ck.r17122/388544
type: file
pred: 183.5ck.r17042/144746
count: 54
text: 17122 244366 103 14109 30c119af6651932d18148e5a4466a238
props: 10411 163869 111 0 d4514082fc7e52be026d3360dec4dcb0
cpath: /trunk/client/gui-sdl/inteldlg.c
copyroot: 15280 /trunk

id: 17e.5ck.r17122/388804
type: file
pred: 17e.5ck.r16015/63375
count: 41
text: 17122 301788 23 8089 dcc67ae104e311fdb4837448379df25e
props: 10411 164236 111 0 8e6f231ffe21dad0a34f68090b1c0b69
cpath: /trunk/client/gui-sdl/finddlg.c
copyroot: 15280 /trunk

id: 17z.5ck.r17122/389060
type: file
pred: 17z.5ck.r16578/464537
count: 67
text: 17122 59515 28 69780 bee20258c05b2d35732c8a9eb6bc1ef0
props: 10411 164601 111 0 3d57169d64a739976bce7d2e578e29eb
cpath: /trunk/client/gui-sdl/helpdlg.c
copyroot: 15280 /trunk

id: 18f.5ck.r17122/389317
type: file
pred: 18f.5ck.r15785/122781
count: 53
text: 17122 261783 36 23955 1efa1e51f28c72e871697a3d1e343cb2
props: 10411 164967 111 0 28e613ef70fc8e4efe7ed7b15f74e6e7
cpath: /trunk/client/gui-sdl/plrdlg.c
copyroot: 15280 /trunk

id: 16y.5ck.r17122/389574
type: file
pred: 16y.5ck.r17042/145003
count: 58
text: 17122 24032 56 28256 b764c0b5f7720127bb95e2b5f1048b87
props: 9030 114052 111 0 2a5912525b098cb46a1301ee940f7617
cpath: /trunk/client/gui-sdl/chatline.c
copyroot: 15280 /trunk

id: 18m.5ck.r17122/389831
type: file
pred: 18m.5ck.r17042/145260
count: 35
text: 17122 271944 23 7606 a60a865ce83ad5a81a4471973946d9af
props: 9803 7024 111 0 3d57169d64a739976bce7d2e578e29eb
cpath: /trunk/client/gui-sdl/spaceshipdlg.c
copyroot: 15280 /trunk

id: 18q.5ck.r17122/390090
type: file
pred: 18q.5ck.r16929/335510
count: 73
text: 17122 121976 433 56508 56ea7ca7ddfa3a8ff1c4254ea14c7046
props: 10779 69053 111 0 433ca8234d38d2ba821c9aa09a03d731
cpath: /trunk/client/gui-sdl/wldlg.c
copyroot: 15280 /trunk

id: 17r.5ck.r17122/390346
type: file
pred: 17r.5ck.r16929/335767
count: 31
text: 17122 39410 26 18011 7cd2cffb2372725df79b9a3b1da7caeb
props: 9030 115855 111 0 d4514082fc7e52be026d3360dec4dcb0
cpath: /trunk/client/gui-sdl/gui_string.c
copyroot: 15280 /trunk

id: 178.5ck.r17122/390605
type: file
pred: 178.5ck.r16929/336027
count: 62
text: 17122 275452 358 34727 a88b805dc2c1b65d873690b0888ddf21
props: 10804 14832 111 0 45c0e160a790dc8f7645f8a7eabea654
cpath: /trunk/client/gui-sdl/connectdlg.c
copyroot: 15280 /trunk

PLAIN
K 11
Makefile.am
V 25
file 16u.5ck.r16063/63204
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.5bk.r15074/21186
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 26
file 16y.5ck.r17122/389574
K 10
chatline.h
V 26
file 16z.5ck.r16199/137581
K 9
citydlg.c
V 26
file 170.5ck.r17122/384667
K 9
citydlg.h
V 23
file 171.0.r13354/55222
K 9
cityrep.c
V 26
file 172.5ck.r17122/387249
K 9
cityrep.h
V 22
file 173.0.r12769/2941
K 8
cma_fe.c
V 26
file 174.5ck.r17122/386734
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 26
file 178.5ck.r17122/390605
K 12
connectdlg.h
V 23
file 179.0.r12349/45319
K 9
dialogs.c
V 26
file 17a.5ck.r17122/387505
K 9
dialogs.h
V 23
file 17b.0.r13354/61529
K 10
diplodlg.c
V 26
file 17c.5ck.r17122/388030
K 10
diplodlg.h
V 22
file 17d.0.r11584/2869
K 17
diplomat_dialog.c
V 26
file 3bn.5ck.r17122/387764
K 9
finddlg.c
V 26
file 17e.5ck.r17122/388804
K 9
finddlg.h
V 20
file 2d8.0.r5991/702
K 9
gotodlg.c
V 26
file 17f.5ck.r17122/384927
K 9
gotodlg.h
V 22
file 17g.0.r6515/58208
K 10
graphics.c
V 26
file 17h.5ck.r16929/334736
K 10
graphics.h
V 23
file 17i.0.r12611/13939
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 26
file 17n.5ck.r16397/107249
K 10
gui_main.c
V 26
file 17o.5ck.r17122/385957
K 10
gui_main.h
V 25
file 17p.5ck.r16059/44129
K 11
gui_mouse.c
V 23
file 3ca.0.r13354/59349
K 11
gui_mouse.h
V 24
file 3cb.0.r12670/112397
K 12
gui_string.c
V 26
file 17r.5ck.r17122/390346
K 12
gui_string.h
V 23
file 17s.0.r13481/30445
K 14
gui_tilespec.c
V 26
file 191.5ck.r16929/332661
K 14
gui_tilespec.h
V 25
file 192.5bk.r13912/53929
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 26
file 17z.5ck.r17122/389060
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 26
file 183.5ck.r17122/388544
K 10
inteldlg.h
V 22
file 2d9.0.r11409/2687
K 9
mapctrl.c
V 26
file 184.5ck.r17122/388290
K 9
mapctrl.h
V 23
file 185.0.r13354/63700
K 9
mapview.c
V 26
file 186.5ck.r17122/385184
K 9
mapview.h
V 23
file 187.0.r13354/56676
K 6
menu.c
V 26
file 188.5ck.r17122/386480
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 24
file 18b.5ck.r15883/3836
K 12
messagewin.h
V 23
file 18c.0.r6286/140236
K 5
mmx.h
V 23
file 2e1.0.r6286/134429
K 11
optiondlg.c
V 26
file 18d.5ck.r17122/384410
K 11
optiondlg.h
V 25
file 18e.5ck.r16998/86101
K 7
pages.c
V 23
file 2qg.5ck.r17022/893
K 7
pages.h
V 22
file 2qh.0.r8639/16416
K 8
plrdlg.c
V 26
file 18f.5ck.r17122/389317
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 26
file 18i.5ck.r17122/385442
K 10
repodlgs.h
V 23
file 18j.0.r13354/58129
K 14
spaceshipdlg.c
V 26
file 18m.5ck.r17122/389831
K 14
spaceshipdlg.h
V 23
file 18n.0.r5500/263363
K 8
sprite.c
V 26
file 39k.5ck.r16578/462217
K 8
sprite.h
V 24
file 39l.0.r12670/108062
K 18
themebackgrounds.c
V 26
file 3ff.5ck.r16929/333181
K 18
themebackgrounds.h
V 25
file 3fg.5bk.r13794/17440
K 13
themecolors.c
V 26
file 392.5ck.r16929/334218
K 13
themecolors.h
V 24
file 393.0.r12670/114433
K 8
themes.c
V 26
file 38p.5ck.r17122/385702
K 11
themespec.c
V 26
file 390.5ck.r17122/386989
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.5bk.r15218/30693
K 8
widget.h
V 25
file 3fv.5bk.r15218/31232
K 15
widget_button.c
V 24
file 3fh.5bk.r14076/3619
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 13
widget_core.c
V 23
file 3fj.0.r13354/61769
K 13
widget_edit.c
V 23
file 3fk.0.r13354/64909
K 13
widget_edit.h
V 24
file 3g9.0.r12670/115595
K 13
widget_icon.c
V 23
file 3fl.0.r13354/59104
K 13
widget_icon.h
V 24
file 3ga.0.r12670/112107
K 14
widget_label.c
V 24
file 3fm.5bk.r13597/6851
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.r16929/336288
K 18
widget_scrollbar.h
V 24
file 3gc.0.r12670/116811
K 15
widget_window.c
V 23
file 3fp.0.r13354/55944
K 15
widget_window.h
V 23
file 3gd.0.r12699/32533
K 7
wldlg.c
V 26
file 18q.5ck.r17122/390090
K 7
wldlg.h
V 26
file 18r.5ck.r16285/100508
END
ENDREP
id: 16t.5ck.r17122/395854
type: dir
pred: 16t.5ck.r17115/16961
count: 592
text: 17122 390866 4975 4975 5dc243c45c7424c4de59a24ffb056a84
props: 11108 12869 78 0 a27c61ac5fddbd709df8c1876129f940
cpath: /trunk/client/gui-sdl
copyroot: 15280 /trunk

id: 14u.5ck.r17122/396100
type: file
pred: 14u.5ck.r16929/341814
count: 36
text: 17122 47730 545 10671 dbe54b77023e886eed08673601272f37
props: 11094 491 111 0 45c0e160a790dc8f7645f8a7eabea654
cpath: /trunk/client/plrdlg_common.c
copyroot: 15280 /trunk

id: 2kz.5ck.r17122/396353
type: file
pred: 2kz.5ck.r17042/150996
count: 48
text: 17122 112250 2213 49679 750eb6a11fc3062a4401d6c84ea41192
props: 10452 1016 111 0 45c0e160a790dc8f7645f8a7eabea654
cpath: /trunk/client/gui-ftwl/mapview.c
copyroot: 15280 /trunk

id: 2kr.5ck.r17122/396612
type: file
pred: 2kr.5ck.r16630/21566
count: 34
text: 17122 3639 114 13489 0a7a5875725f12123140ed2bd77d04e2
props: 10130 8501 111 0 d4514082fc7e52be026d3360dec4dcb0
cpath: /trunk/client/gui-ftwl/gui_main.c
copyroot: 15280 /trunk

id: 2kf.5ck.r17122/396868
type: file
pred: 2kf.5ck.r16532/35569
count: 12
text: 17122 56106 184 5636 419f453817db87fd918336450c57c477
props: 10804 18979 110 0 fdfdab56f53d2388a66f6a5ce0985f95
cpath: /trunk/client/gui-ftwl/connectdlg.c
copyroot: 15280 /trunk

id: 2kh.5ck.r17122/397127
type: file
pred: 2kh.5ck.r16578/472572
count: 27
text: 17122 249066 33 13720 03aa02871f9656bda0e5611ba3d63e99
props: 10452 1380 111 0 3d57169d64a739976bce7d2e578e29eb
cpath: /trunk/client/gui-ftwl/dialogs.c
copyroot: 15280 /trunk

id: 2mr.5ck.r17122/397384
type: file
pred: 2mr.5ck.r16578/472829
count: 36
text: 17122 260788 855 15158 631e0db5a05ab67c0ec7d1c9e114f52b
props: 10805 82177 111 0 8e6f231ffe21dad0a34f68090b1c0b69
cpath: /trunk/client/gui-ftwl/gui_text.c
copyroot: 15280 /trunk

PLAIN
K 11
Makefile.am
V 25
file 2k4.5ck.r16063/69242
K 8
canvas.c
V 26
file 2ye.5ck.r16578/471809
K 8
canvas.h
V 23
file 2yf.0.r10109/10676
K 6
chat.c
V 26
file 2k5.5ck.r16578/472321
K 6
chat.h
V 22
file 2k6.0.r7939/79684
K 10
chatline.c
V 25
file 2k7.5ck.r15990/78271
K 10
chatline.h
V 22
file 2k8.0.r7939/74301
K 9
citydlg.c
V 26
file 2k9.5ck.r16578/471040
K 9
citydlg.h
V 22
file 2ka.0.r7939/67918
K 9
cityrep.c
V 22
file 2kb.0.r7939/78333
K 9
cityrep.h
V 22
file 2kc.0.r7939/80015
K 8
colors.c
V 22
file 2kd.0.r11941/5347
K 8
colors.h
V 22
file 2ke.0.r11941/5582
K 12
connectdlg.c
V 26
file 2kf.5ck.r17122/396868
K 12
connectdlg.h
V 22
file 2kg.0.r7939/80350
K 9
dialogs.c
V 26
file 2kh.5ck.r17122/397127
K 9
dialogs.h
V 22
file 2ki.0.r7939/80688
K 10
diplodlg.c
V 22
file 2kj.0.r7939/64892
K 10
diplodlg.h
V 22
file 2kk.0.r7939/67247
K 9
finddlg.c
V 22
file 2kl.0.r7939/69930
K 9
finddlg.h
V 22
file 2km.0.r7939/70941
K 9
gotodlg.c
V 26
file 2kn.5ck.r15410/377451
K 9
gotodlg.h
V 22
file 2ko.0.r7939/67583
K 10
graphics.c
V 23
file 2kp.0.r10141/54754
K 10
graphics.h
V 22
file 2kq.0.r7939/68252
K 10
gui_main.c
V 26
file 2kr.5ck.r17122/396612
K 10
gui_main.h
V 22
file 2ks.0.r11943/1292
K 10
gui_text.c
V 26
file 2mr.5ck.r17122/397384
K 10
gui_text.h
V 22
file 2ms.0.r11941/8598
K 9
helpdlg.c
V 22
file 2kt.0.r7939/71611
K 9
helpdlg.h
V 22
file 2ku.0.r7939/72285
K 10
inteldlg.c
V 22
file 2kv.0.r7939/66910
K 10
inteldlg.h
V 22
file 2kw.0.r7939/69594
K 9
mapctrl.c
V 26
file 2kx.5ck.r16578/471296
K 9
mapctrl.h
V 22
file 2ky.0.r7939/69259
K 9
mapview.c
V 26
file 2kz.5ck.r17122/396353
K 9
mapview.h
V 21
file 2l0.0.r11943/817
K 6
menu.c
V 25
file 2l1.5ck.r16226/38585
K 6
menu.h
V 22
file 2l2.0.r7939/76324
K 12
messagedlg.c
V 22
file 2l3.0.r7939/76990
K 12
messagedlg.h
V 22
file 2l4.0.r7939/79008
K 12
messagewin.c
V 23
file 2l5.0.r9577/142349
K 12
messagewin.h
V 22
file 2l6.0.r7939/75986
K 7
pages.c
V 26
file 2qc.5ck.r16199/143286
K 7
pages.h
V 22
file 2qd.0.r8639/25123
K 8
plrdlg.c
V 23
file 2l7.0.r9577/141628
K 8
plrdlg.h
V 22
file 2l8.0.r7939/73967
K 10
ratesdlg.c
V 22
file 2l9.0.r7939/68588
K 10
ratesdlg.h
V 22
file 2la.0.r7939/70605
K 10
repodlgs.c
V 22
file 2lb.0.r7939/71947
K 10
repodlgs.h
V 22
file 2lc.0.r7939/72955
K 14
spaceshipdlg.c
V 22
file 2ld.0.r7939/75645
K 14
spaceshipdlg.h
V 22
file 2le.0.r7939/77329
K 8
sprite.c
V 23
file 2yg.0.r11958/37010
K 8
sprite.h
V 23
file 2yh.0.r10141/56198
K 8
themes.c
V 24
file 3cc.0.r12670/122700
K 14
voteinfo_bar.c
V 25
file 4h6.5ck.r16063/68895
K 14
voteinfo_bar.h
V 25
file 4h7.5ck.r16063/69069
K 7
wldlg.c
V 22
file 2lf.0.r7939/76656
K 7
wldlg.h
V 22
file 2lg.0.r7939/77669
END
ENDREP
id: 2k2.5ck.r17122/400301
type: dir
pred: 2k2.5ck.r17042/153907
count: 131
text: 17122 397644 2644 2644 83828040e95154ca9567b3c32b7a07a1
props: 11108 13191 78 0 667fe0aa2722f6798d567486294a1d2e
cpath: /trunk/client/gui-ftwl
copyroot: 15280 /trunk

id: h1.5ck.r17122/400549
type: file
pred: h1.5ck.r17042/154154
count: 213
text: 17122 20504 1376 75653 848730fe5816d76f410b2e4e70bcf6c6
props: 10865 39466 112 0 7c92b74246787b3b87930d3304880700
cpath: /trunk/client/helpdata.c
copyroot: 15280 /trunk

id: 2fw.5ck.r17122/400799
type: file
pred: 2fw.5ck.r16929/342570
count: 57
text: 17122 309850 600 18540 8ac6b670770ff11f45e624da25271102
props: 9999 36135 111 0 b4233197920770c602c29330b7f7c623
cpath: /trunk/client/connectdlg_common.c
copyroot: 15280 /trunk

id: 4i6.5ck.r17122/401058
type: file
pred: 4i6.5ck.r17042/154592
count: 6
text: 17122 311020 286 15866 93fe92e93b5a7443307f6085e7fc6349
cpath: /trunk/client/global_worklist.c
copyroot: 15280 /trunk

id: 14q.5ck.r17122/401257
type: file
pred: 14q.5ck.r17101/20001
count: 25
text: 17122 100327 49 8680 ae3baa5e2ea5127a6c19c4ad5a70b8bd
props: 9577 150942 110 0 2297367bb62237eae251d6a189335c2c
cpath: /trunk/client/chatline_common.c
copyroot: 15280 /trunk

id: 139.5ck.r17122/401512
type: file
pred: 139.5ck.r16929/343729
count: 32
text: 17122 100571 7132 12374 04bf06c550220fbece95e0d0e306c229
props: 10416 5336 111 0 227f1557f5d66bc46d32e4db301b2671
cpath: /trunk/client/audio.c
copyroot: 15280 /trunk

id: hl.5ck.r17122/401760
type: file
pred: hl.5ck.r17115/17205
count: 435
text: 17122 28374 4315 174348 f37f302d7b70fbe0ff07a5e9a44bfc69
props: 11096 3792 112 0 71c6b453a620995957914f193a952f13
cpath: /trunk/client/tilespec.c
copyroot: 15280 /trunk

id: nb.5ck.r17122/402009
type: file
pred: nb.5ck.r15410/383805
count: 60
text: 17122 54539 611 8846 7eee468e1d8ddd75f68be656dff14721
props: 10411 182447 111 0 515f6afa6448327e59cdac91d637f582
cpath: /trunk/client/gui-stub/mapview.c
copyroot: 15280 /trunk

PLAIN
K 11
Makefile.am
V 24
file mj.5ck.r16998/92932
K 8
canvas.c
V 25
file 2y0.5bk.r15074/29613
K 8
canvas.h
V 23
file 2y1.0.r10095/12720
K 10
chatline.c
V 24
file ml.5ck.r15990/83099
K 10
chatline.h
V 21
file mm.0.r5491/41569
K 9
citydlg.c
V 24
file mn.5ck.r17079/36521
K 9
citydlg.h
V 21
file mo.0.r5491/35843
K 9
cityrep.c
V 24
file mp.5ck.r17079/36775
K 9
cityrep.h
V 21
file mq.0.r5491/46587
K 8
colors.c
V 22
file mr.0.r10458/11165
K 8
colors.h
V 22
file ms.0.r10458/11524
K 12
connectdlg.c
V 25
file mt.5ck.r16929/344729
K 12
connectdlg.h
V 21
file mu.0.r5491/46943
K 9
dialogs.c
V 25
file mv.5ck.r16397/116369
K 9
dialogs.h
V 20
file mw.0.r8956/1107
K 10
diplodlg.c
V 21
file mx.0.r10144/8226
K 10
diplodlg.h
V 21
file my.0.r5491/35128
K 9
finddlg.c
V 21
file mz.0.r5491/37629
K 9
finddlg.h
V 22
file 2dc.0.r5989/44093
K 9
gotodlg.c
V 25
file n0.5ck.r15410/383554
K 9
gotodlg.h
V 21
file n1.0.r5491/35486
K 10
graphics.c
V 22
file n2.0.r10141/65831
K 10
graphics.h
V 21
file n3.0.r5491/36199
K 10
gui_main.c
V 24
file n4.5ck.r16630/24721
K 10
gui_main.h
V 21
file n5.0.r5491/41925
K 9
helpdlg.c
V 21
file n6.0.r10144/9660
K 9
helpdlg.h
V 21
file n7.0.r5491/39423
K 10
inteldlg.c
V 21
file n8.0.r7847/24779
K 10
inteldlg.h
V 22
file 2dd.0.r5989/43421
K 9
mapctrl.c
V 21
file n9.0.r7018/49625
K 9
mapctrl.h
V 21
file na.0.r5491/37272
K 9
mapview.c
V 25
file nb.5ck.r17122/402009
K 9
mapview.h
V 21
file nc.0.r5491/38349
K 6
menu.c
V 24
file nd.5ck.r16999/24332
K 6
menu.h
V 21
file ne.0.r5491/43723
K 12
messagedlg.c
V 21
file nf.0.r5491/44434
K 12
messagedlg.h
V 22
file 2de.0.r5989/44428
K 12
messagewin.c
V 21
file ng.0.r9098/29017
K 12
messagewin.h
V 21
file nh.0.r5491/43363
K 11
optiondlg.c
V 25
file 4jt.5ck.r17037/45888
K 11
optiondlg.h
V 25
file 4ju.5ck.r16998/92511
K 7
pages.c
V 25
file 2qi.5ck.r16999/24085
K 7
pages.h
V 22
file 2qj.0.r8639/28697
K 8
plrdlg.c
V 21
file ni.0.r9098/28662
K 8
plrdlg.h
V 21
file nj.0.r5491/41213
K 10
ratesdlg.c
V 21
file nk.0.r5491/36557
K 10
ratesdlg.h
V 22
file 2df.0.r5989/43757
K 10
repodlgs.c
V 24
file nl.5ck.r16998/92681
K 10
repodlgs.h
V 21
file nm.0.r5491/40138
K 14
spaceshipdlg.c
V 21
file nn.0.r5491/42999
K 14
spaceshipdlg.h
V 21
file no.0.r5491/44796
K 8
sprite.c
V 22
file 2y2.0.r11749/1632
K 8
sprite.h
V 23
file 2y3.0.r10095/12384
K 8
themes.c
V 23
file 34y.0.r10945/24922
K 14
voteinfo_bar.c
V 25
file 4hc.5ck.r16063/72831
K 14
voteinfo_bar.h
V 25
file 4hd.5ck.r16063/73005
K 7
wldlg.c
V 21
file qj.0.r5491/44077
K 7
wldlg.h
V 21
file qk.0.r5491/45158
END
ENDREP
id: mh.5ck.r17122/404797
type: dir
pred: mh.5ck.r17079/39556
count: 171
text: 17122 402265 2519 2519 5a1a7822a0a2faf4db1e16c6bf5b1f9f
props: 11108 13796 68 0 fbaef5f6348d6ae4b0cc177104ca4ad2
cpath: /trunk/client/gui-stub
copyroot: 15280 /trunk

id: hc.5ck.r17122/405042
type: file
pred: hc.5ck.r16929/347665
count: 138
text: 17122 272306 376 15535 5d1d5132d1ce139091df2083ed54bd0a
props: 10997 68 112 0 8869376353a720fe76c0d512d1b8c326
cpath: /trunk/client/clinet.c
copyroot: 15280 /trunk

id: z2.5ck.r17122/405287
type: file
pred: z2.5ck.r17078/428
count: 292
text: 17122 40373 1050 115537 c4c7188910c81f806b6b6464c38a777f
props: 11084 12552 112 0 73ff9df0f3aabd6f615c7264c2fe22c7
cpath: /trunk/client/mapview_common.c
copyroot: 15280 /trunk

id: 2f.5cp.r17122/405541
type: file
pred: 2f.5cp.r17075/4227
count: 306
text: 17122 122612 317 31078 99699a3759f21631c31f590145c0c0fe
props: 15407 50334 136 0 d530209ca649bf20b5cecaa6957aa1ef
cpath: /trunk/client/client_main.c
copyroot: 15407 /trunk/client/client_main.c

id: d5.5ck.r17122/405813
type: file
pred: d5.5ck.r17101/20255
count: 217
text: 17122 124180 1343 40804 2f332609bfff2e4d4d92cb9326dcf1db
props: 11057 49717 112 0 a13a5521476fb3b00a5e0433e6f85ac7
cpath: /trunk/client/climisc.c
copyroot: 15280 /trunk

id: 3bg.5ck.r17122/406062
type: file
pred: 3bg.5ck.r17042/156322
count: 45
text: 17122 275840 46 53261 a37f9995c1bbf88f80b0cd58fef16593
props: 12670 125674 34 0 25e6c2f7558b7484000d4d090dea5b92
cpath: /trunk/client/editor.c
copyroot: 15280 /trunk

id: 33x.5ck.r17122/406310
type: file
pred: 33x.5ck.r17042/156570
count: 37
text: 17122 126478 536 27005 0f8b6da986bef43631687b3dc6e85e99
props: 11101 62 110 0 fdfdab56f53d2388a66f6a5ce0985f95
cpath: /trunk/client/servers.c
copyroot: 15280 /trunk

id: dc.5ck.r17122/406557
type: file
pred: dc.5ck.r17037/48855
count: 214
text: 17122 8561 870 140283 495321a6f1d326809b776a81f37ffc51
props: 10965 83 112 0 b4bb2e29c9087472d2e44c6eab39b6d6
cpath: /trunk/client/options.c
copyroot: 15280 /trunk

PLAIN
K 11
Makefile.am
V 24
file 5f.5ck.r16999/27621
K 6
agents
V 24
dir zf.5ck.r17122/357295
K 11
attribute.c
V 24
file xh.5ck.r17034/13614
K 11
attribute.h
V 19
file xi.0.r4715/844
K 7
audio.c
V 26
file 139.5ck.r17122/401512
K 7
audio.h
V 25
file 13a.5ck.r16165/81556
K 12
audio_none.c
V 23
file 13d.0.r6129/145164
K 12
audio_none.h
V 22
file 13e.0.r4452/27228
K 11
audio_sdl.c
V 26
file 13f.5ck.r16578/477644
K 11
audio_sdl.h
V 22
file 13g.0.r4452/26570
K 17
chatline_common.c
V 26
file 14q.5ck.r17122/401257
K 17
chatline_common.h
V 25
file 14r.5ck.r16888/19266
K 16
citydlg_common.c
V 25
file z4.5ck.r17122/357537
K 16
citydlg_common.h
V 25
file z5.5ck.r16984/109254
K 13
cityrepdata.c
V 25
file mb.5ck.r17122/357790
K 13
cityrepdata.h
V 21
file mc.0.r9153/21475
K 11
civclient.c
V 23
file 4f2.5ck.r15408/695
K 13
client_main.c
V 25
file 2f.5cp.r17122/405541
K 13
client_main.h
V 23
file hz.5cq.r16632/1773
K 8
climap.c
V 25
file 197.5ck.r16888/19519
K 8
climap.h
V 25
file 198.5ck.r16888/20012
K 9
climisc.c
V 25
file d5.5ck.r17122/405813
K 9
climisc.h
V 23
file i0.5ck.r17044/3522
K 8
clinet.c
V 25
file hc.5ck.r17122/405042
K 8
clinet.h
V 25
file i1.5bk.r14427/324634
K 15
colors_common.c
V 26
file 33a.5ck.r17122/358041
K 15
colors_common.h
V 25
file 33b.5ck.r16397/92170
K 19
connectdlg_common.c
V 26
file 2fw.5ck.r17122/400799
K 19
connectdlg_common.h
V 25
file 2fx.5ck.r16532/38983
K 9
control.c
V 23
file gz.5ck.r17076/1017
K 9
control.h
V 24
file i2.5ck.r16594/13196
K 7
dummy.c
V 23
file 4f9.5ck.r15641/551
K 8
editor.c
V 26
file 3bg.5ck.r17122/406062
K 8
editor.h
V 25
file 3bh.5ck.r15761/13075
K 11
ggzclient.c
V 25
file 394.5ck.r15814/34717
K 11
ggzclient.h
V 24
file 395.0.r12670/122419
K 17
global_worklist.c
V 26
file 4i6.5ck.r17122/401058
K 17
global_worklist.h
V 26
file 4i7.5ck.r16319/100206
K 6
goto.c
V 25
file vu.5ck.r17042/143219
K 6
goto.h
V 24
file vv.5ck.r15509/18108
K 8
gui-ftwl
V 25
dir 2k2.5ck.r17122/400301
K 11
gui-gtk-2.0
V 24
dir zs.5ck.r17122/367851
K 7
gui-sdl
V 25
dir 16t.5ck.r17122/395854
K 8
gui-stub
V 24
dir mh.5ck.r17122/404797
K 9
gui-win32
V 24
dir np.5ck.r17122/383915
K 7
gui-xaw
V 24
dir 9o.5ck.r17122/377146
K 10
helpdata.c
V 25
file h1.5ck.r17122/400549
K 10
helpdata.h
V 25
file i3.5bk.r14417/261925
K 7
include
V 23
dir b8.5ck.r17079/30356
K 16
mapctrl_common.c
V 25
file 15m.5ck.r17068/46203
K 16
mapctrl_common.h
V 23
file 15n.0.r11378/41712
K 16
mapview_common.c
V 25
file z2.5ck.r17122/405287
K 16
mapview_common.h
V 25
file z3.5ck.r16578/482844
K 19
messagewin_common.c
V 25
file 14s.5ck.r17077/10273
K 19
messagewin_common.h
V 25
file 14t.5ck.r15909/37338
K 9
options.c
V 25
file dc.5ck.r17122/406557
K 9
options.h
V 24
file i4.5ck.r16998/72284
K 17
overview_common.c
V 25
file 2yk.5ck.r16930/40265
K 17
overview_common.h
V 25
file 2yl.5ck.r16930/40516
K 10
packhand.c
V 24
file n.5ck.r17122/384162
K 10
packhand.h
V 24
file i5.5bk.r14422/90154
K 15
plrdlg_common.c
V 26
file 14u.5ck.r17122/396100
K 15
plrdlg_common.h
V 26
file 14v.5bk.r14417/257761
K 17
repodlgs_common.c
V 26
file 11i.5ck.r17122/368346
K 17
repodlgs_common.h
V 25
file 11j.5ck.r16971/56809
K 9
reqtree.c
V 26
file 2ym.5ck.r16929/315694
K 9
reqtree.h
V 23
file 2yn.0.r13481/22674
K 9
servers.c
V 26
file 33x.5ck.r17122/406310
K 9
servers.h
V 25
file 33y.5ck.r15505/14398
K 6
text.c
V 26
file 2g3.5ck.r17122/368100
K 6
text.h
V 24
file 2g4.5bk.r14284/8380
K 15
themes_common.c
V 25
file 352.5ck.r16930/48921
K 15
themes_common.h
V 25
file 353.5ck.r16930/49172
K 10
tilespec.c
V 25
file hl.5ck.r17122/401760
K 10
tilespec.h
V 24
file i6.5ck.r16930/49667
K 14
update_queue.c
V 25
file 4jw.5ck.r17079/36327
K 14
update_queue.h
V 25
file 4jx.5ck.r16999/23921
K 10
voteinfo.c
V 26
file 4fe.5ck.r17042/154402
K 10
voteinfo.h
V 25
file 4ff.5ck.r16201/17543
END
ENDREP
id: d.5ck.r17122/410593
type: dir
pred: d.5ck.r17117/15639
count: 4771
text: 17122 406801 3779 3779 062d63563df1d122028b592e04de8dfa
props: 12883 2898 109 0 732f4656541fb514e4368d9517bdf317
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.r15924/3800068
K 7
INSTALL
V 23
file 6.5ck.r16872/79279
K 11
Makefile.am
V 23
file 59.5bk.r14918/1267
K 4
NEWS
V 23
file 6m.5ck.r16839/2057
K 6
README
V 20
file 7.0.r4421/96382
K 2
ai
V 23
dir 8.5ck.r17122/332501
K 10
autogen.sh
V 24
file 12o.5ck.r16223/7590
K 9
bootstrap
V 23
dir 2p5.5ck.r16731/2595
K 6
client
V 23
dir d.5ck.r17122/410593
K 6
common
V 23
dir p.5ck.r17122/329486
K 12
config.mac.h
V 20
file hb.0.r6045/5982
K 12
configure.ac
V 24
file 149.5ck.r17010/2239
K 4
data
V 21
dir w.5ck.r17120/4710
K 6
debian
V 23
dir 5w.5ck.r16224/17276
K 12
dependencies
V 23
dir 2yu.5ck.r17024/5709
K 11
diff_ignore
V 23
file qq.5ck.r16311/3290
K 3
doc
V 22
dir k7.5ck.r17012/6320
K 2
m4
V 23
dir 12p.5ck.r17012/4520
K 6
manual
V 25
dir 2m2.5ck.r17122/356404
K 2
po
V 22
dir fs.5ck.r17026/2600
K 7
scripts
V 23
dir 2yo.5bk.r14810/1300
K 6
server
V 23
dir z.5ck.r17122/355806
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 24
dir 1c.5ck.r17122/342075
K 10
version.in
V 24
file 2lo.5ck.r17041/9237
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.r17122/412107
type: dir
pred: 3.5ck.r17120/6210
count: 12855
text: 17122 410828 1266 1266 48c3dab91ff830b39663b0707903f83a
props: 11109 0 255 0 8cbc80e0da9c47b05b8ffee17ea9b0f1
cpath: /trunk
copyroot: 15280 /trunk

PLAIN
K 8
branches
V 19
dir 1.0.r17121/5260
K 4
tags
V 19
dir 2.0.r16877/5158
K 5
trunk
V 23
dir 3.5ck.r17122/412107
K 7
website
V 18
dir 3ge.0.r12388/0
END
ENDREP
id: 0.0.r17122/412496
type: dir
pred: 0.0.r17121/5577
count: 17122
text: 17122 412332 151 151 a5ccc32e3b2e383ac979888491dab544
cpath: /
copyroot: 0 /

4i6.5ck.t17121-1 modify true false /trunk/client/global_worklist.c

oe.5ck.t17121-1 modify true false /trunk/common/version.c

ay.5ck.t17121-1 modify true false /trunk/client/gui-xaw/repodlgs.c

139.5ck.t17121-1 modify true false /trunk/client/audio.c

il.5ck.t17121-1 modify true false /trunk/common/nation.c

a6.5ck.t17121-1 modify true false /trunk/client/gui-xaw/dialogs.c

xs.5ck.t17121-1 modify true false /trunk/client/gui-win32/connectdlg.c

aw.5ck.t17121-1 modify true false /trunk/client/gui-xaw/plrdlg.c

bm.5ck.t17121-1 modify true false /trunk/client/gui-xaw/gui_main.c

37p.5ck.t17121-1 modify true false /trunk/client/gui-xaw/diplomat_dialog.c

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

18m.5ck.t17121-1 modify true false /trunk/client/gui-sdl/spaceshipdlg.c

18q.5ck.t17121-1 modify true false /trunk/client/gui-sdl/wldlg.c

17r.5ck.t17121-1 modify true false /trunk/client/gui-sdl/gui_string.c

4s.5ck.t17121-1 modify true false /trunk/server/meta.c

2fp.5ck.t17121-1 modify true false /trunk/common/terrain.c

ar.5ck.t17121-1 modify true false /trunk/client/gui-xaw/optiondlg.c

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

xm.5ck.t17121-1 modify true false /trunk/client/gui-win32/citydlg.c

yl.5ck.t17121-1 modify true false /trunk/client/gui-win32/optiondlg.c

118.5ck.t17121-1 modify true false /trunk/client/gui-gtk-2.0/repodlgs.c

aa.5ck.t17121-1 modify true false /trunk/client/gui-xaw/finddlg.c

15.5ck.t17121-1 modify true false /trunk/server/sernet.c

2jn.5ck.t17121-1 modify true false /trunk/utility/ftwl/theme_engine.c

2eo.5ck.t17121-1 modify true false /trunk/common/effects.c

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

dc.5ck.t17121-1 modify true false /trunk/client/options.c

v9.5ck.t17121-1 modify true false /trunk/common/unittype.c

ye.5ck.t17121-1 modify true false /trunk/client/gui-win32/mapview.c

10k.5ck.t17121-1 modify true false /trunk/client/gui-gtk-2.0/gui_main.c

h5.5ck.t17121-1 modify true false /trunk/utility/astring.c

4ej.5ck.t17121-1 modify true false /trunk/client/gui-gtk-2.0/editgui.c

4ex.5ck.t17121-1 modify true false /trunk/server/voting.c

10m.5ck.t17121-1 modify true false /trunk/client/gui-gtk-2.0/gui_stuff.c

33i.5ck.t17121-1 modify true false /trunk/common/team.c

d9.5ck.t17121-1 modify true false /trunk/utility/mem.c

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

b.5ck.t17121-1 modify true false /trunk/ai/aiunit.c

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

10z.5ck.t17121-1 modify true false /trunk/client/gui-gtk-2.0/menu.c

da.5ck.t17121-1 modify true false /trunk/utility/mem.h

33a.5ck.t17121-1 modify true false /trunk/client/colors_common.c

2g7.5ck.t17121-1 modify true false /trunk/utility/fciconv.c

33h.5ck.t17121-1 modify true false /trunk/common/events.c

wp.5ck.t17121-1 modify true false /trunk/common/combat.c

4h8.5ck.t17121-1 modify true false /trunk/client/gui-gtk-2.0/voteinfo_bar.c

100.5ck.t17121-1 modify true false /trunk/client/gui-gtk-2.0/cityrep.c

18i.5ck.t17121-1 modify true false /trunk/client/gui-sdl/repodlgs.c

h9.5ck.t17121-1 modify true false /trunk/utility/inputfile.c

2mr.5ck.t17121-1 modify true false /trunk/client/gui-ftwl/gui_text.c

ax.5ck.t17121-1 modify true false /trunk/client/gui-xaw/ratesdlg.c

uh.5ck.t17121-1 modify true false /trunk/utility/ioz.c

11i.5ck.t17121-1 modify true false /trunk/client/repodlgs_common.c

47d.5ck.t17121-1 modify true false /trunk/client/gui-gtk-2.0/theme_dlg.c

17o.5ck.t17121-1 modify true false /trunk/client/gui-sdl/gui_main.c

2fu.5ck.t17121-1 modify true false /trunk/client/gui-win32/cma_fe.c

43.5ck.t17121-1 modify true false /trunk/common/packets.c

104.5ck.t17121-1 modify true false /trunk/client/gui-gtk-2.0/colors.c

xu.5ck.t17121-1 modify true false /trunk/client/gui-win32/dialogs.c

2ys.5ck.t17121-1 modify true false /trunk/common/tile.c

9u.5ck.t17121-1 modify true false /trunk/client/gui-xaw/chatline.c

188.5ck.t17121-1 modify true false /trunk/client/gui-sdl/menu.c

2dw.5ck.t17121-1 modify true false /trunk/server/connecthand.c

390.5ck.t17121-1 modify true false /trunk/client/gui-sdl/themespec.c

xw.5ck.t17121-1 modify true false /trunk/client/gui-win32/diplodlg.c

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

yb.5ck.t17121-1 modify true false /trunk/client/gui-win32/inteldlg.c

2m0.5ck.t17121-1 modify true false /trunk/server/settings.c

39c.5ck.t17121-1 modify true false /trunk/server/auth.c

2ei.5ck.t17121-1 modify true false /trunk/client/gui-xaw/cma_fe.c

zw.5ck.t17121-1 modify true false /trunk/client/gui-gtk-2.0/chatline.c

32e.5ck.t17121-1 modify true false /trunk/server/scripting/api_utilities.c

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

45.5ck.t17121-1 modify true false /trunk/common/player.c

184.5ck.t17121-1 modify true false /trunk/client/gui-sdl/mapctrl.c

7p.5ck.t17121-1 modify true false /trunk/utility/capability.c

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

lw.5ck.t17121-1 modify true false /trunk/server/barbarian.c

4h3.5ck.t17121-1 modify true false /trunk/common/featured_text.c

2kf.5ck.t17121-1 modify true false /trunk/client/gui-ftwl/connectdlg.c

h1.5ck.t17121-1 modify true false /trunk/client/helpdata.c

17z.5ck.t17121-1 modify true false /trunk/client/gui-sdl/helpdlg.c

3u.5ck.t17121-1 modify true false /trunk/common/game.c

10d.5ck.t17121-1 modify true false /trunk/client/gui-gtk-2.0/gamedlgs.c

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

18f.5ck.t17121-1 modify true false /trunk/client/gui-sdl/plrdlg.c

2fw.5ck.t17121-1 modify true false /trunk/client/connectdlg_common.c

16y.5ck.t17121-1 modify true false /trunk/client/gui-sdl/chatline.c

yv.5ck.t17121-1 modify true false /trunk/client/gui-win32/wldlg.c

14q.5ck.t17121-1 modify true false /trunk/client/chatline_common.c

9y.5ck.t17121-1 modify true false /trunk/client/gui-xaw/cityrep.c

m9.5ck.t17121-1 modify true false /trunk/utility/support.c

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

ma.5ck.t17121-1 modify true false /trunk/utility/support.h

39a.5ck.t17121-1 modify true false /trunk/server/ggzserver.c

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

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

m5.5ck.t17121-1 modify true false /trunk/utility/rand.c

2jz.5ck.t17121-1 modify true false /trunk/utility/ftwl/widget_window.c

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

el.5ck.t17121-1 modify true false /trunk/utility/timing.c

2jj.5ck.t17121-1 modify true false /trunk/utility/ftwl/common_types.c

4hy.5ck.t17121-1 modify true false /trunk/utility/string_vector.c

hc.5ck.t17121-1 modify true false /trunk/client/clinet.c

m6.5ck.t17121-1 modify true false /trunk/utility/rand.h

2f.5cp.t17121-1 modify true false /trunk/client/client_main.c

d5.5ck.t17121-1 modify true false /trunk/client/climisc.c

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

3jw.5ck.t17121-1 modify true false /trunk/common/base.c

178.5ck.t17121-1 modify true false /trunk/client/gui-sdl/connectdlg.c

an.5ck.t17121-1 modify true false /trunk/client/gui-xaw/menu.c

2mg.5ck.t17121-1 modify true false /trunk/server/generator/mapgen.c

2kr.5ck.t17121-1 modify true false /trunk/client/gui-ftwl/gui_main.c

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

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

33x.5ck.t17121-1 modify true false /trunk/client/servers.c

34x.5ck.t17121-1 modify true false /trunk/client/gui-gtk-2.0/themes.c

33n.5ck.t17121-1 modify true false /trunk/server/techtools.c

t.5ck.t17121-1 modify true false /trunk/common/tech.c

376.5ck.t17121-1 modify true false /trunk/client/gui-gtk-2.0/caravan_dialog.c

af.5ck.t17121-1 modify true false /trunk/client/gui-xaw/helpdlg.c

4i2.5ck.t17121-1 modify true false /trunk/server/notify.c

a4.5ck.t17121-1 modify true false /trunk/client/gui-xaw/connectdlg.c

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

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

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

18d.5ck.t17121-1 modify true false /trunk/client/gui-sdl/optiondlg.c

2pi.5ck.t17121-1 modify true false /trunk/client/gui-gtk-2.0/pages.c

yq.5ck.t17121-1 modify true false /trunk/client/gui-win32/repodlgs.c

3ce.5ck.t17121-1 modify true false /trunk/utility/ftwl/be_common_32.c

nb.5ck.t17121-1 modify true false /trunk/client/gui-stub/mapview.c

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

186.5ck.t17121-1 modify true false /trunk/client/gui-sdl/mapview.c

102.5ck.t17121-1 modify true false /trunk/client/gui-gtk-2.0/cma_fe.c

a8.5ck.t17121-1 modify true false /trunk/client/gui-xaw/diplodlg.c

4u.5ck.t17121-1 modify true false /trunk/server/plrhand.c

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

2qm.5ck.t17121-1 modify true false /trunk/client/gui-xaw/pages.c

ad.5ck.t17121-1 modify true false /trunk/client/gui-xaw/graphics.c

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

ai.5ck.t17121-1 modify true false /trunk/client/gui-xaw/inteldlg.c

2g3.5ck.t17121-1 modify true false /trunk/client/text.c

108.5ck.t17121-1 modify true false /trunk/client/gui-gtk-2.0/dialogs.c

r.5ck.t17121-1 modify true false /trunk/common/map.c

yg.5ck.t17121-1 modify true false /trunk/client/gui-win32/menu.c

38p.5ck.t17121-1 modify true false /trunk/client/gui-sdl/themes.c

dd.5ck.t17121-1 modify true false /trunk/server/console.c

55.5ck.t17121-1 modify true false /trunk/utility/shared.c

36n.5ck.t17121-1 modify true false /trunk/client/gui-gtk-2.0/diplomat_dialog.c

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

3bp.5ck.t17121-1 modify true false /trunk/client/gui-sdl/caravan_dialog.c

t7.5ck.t17121-1 modify true false /trunk/utility/netintf.h

4q.5ck.t17121-1 modify true false /trunk/server/handchat.c

10a.5ck.t17121-1 modify true false /trunk/client/gui-gtk-2.0/diplodlg.c

2eg.5ck.t17121-1 modify true false /trunk/server/score.c

xo.5ck.t17121-1 modify true false /trunk/client/gui-win32/cityrep.c

2xv.5ck.t17121-1 modify true false /trunk/common/movement.c

vg.5ck.t17121-1 modify true false /trunk/server/srv_main.c

10u.5ck.t17121-1 modify true false /trunk/client/gui-gtk-2.0/inteldlg.c

2kz.5ck.t17121-1 modify true false /trunk/client/gui-ftwl/mapview.c

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

377.5ck.t17121-1 modify true false /trunk/client/gui-gtk-2.0/choice_dialog.c

2m5.5ck.t17121-1 modify true false /trunk/manual/civmanual.c

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

vb.5ck.t17121-1 modify true false /trunk/common/improvement.c

ab.5ck.t17121-1 modify true false /trunk/client/gui-xaw/gotodlg.c

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

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

2mj.5ck.t17121-1 modify true false /trunk/server/generator/height_map.c

17a.5ck.t17121-1 modify true false /trunk/client/gui-sdl/dialogs.c

4gq.5ck.t17121-1 modify true false /trunk/client/gui-gtk-2.0/embedggz.c

yp.5ck.t17121-1 modify true false /trunk/client/gui-win32/ratesdlg.c

al.5ck.t17121-1 modify true false /trunk/client/gui-xaw/mapview.c

2mp.5ck.t17121-1 modify true false /trunk/server/generator/utilities.c

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

14u.5ck.t17121-1 modify true false /trunk/client/plrdlg_common.c

3bn.5ck.t17121-1 modify true false /trunk/client/gui-sdl/diplomat_dialog.c

dh.5ck.t17121-1 modify true false /trunk/utility/registry.c

328.5ck.t17121-1 modify true false /trunk/server/scripting/script.c

he.5ck.t17121-1 modify true false /trunk/common/government.c

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

17c.5ck.t17121-1 modify true false /trunk/client/gui-sdl/diplodlg.c

53.5ck.t17121-1 modify true false /trunk/utility/log.c

183.5ck.t17121-1 modify true false /trunk/client/gui-sdl/inteldlg.c

15t.5ck.t17121-1 modify true false /trunk/ai/ailog.c

yn.5ck.t17121-1 modify true false /trunk/client/gui-win32/plrdlg.c

un.5ck.t17121-1 modify true false /trunk/common/connection.c

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

8w.5ck.t17121-1 modify true false /trunk/server/ruleset.c

3cg.5ck.t17121-1 modify true false /trunk/utility/ftwl/be_common_cairo_32.c

2kh.5ck.t17121-1 modify true false /trunk/client/gui-ftwl/dialogs.c

32a.5ck.t17121-1 modify true false /trunk/server/scripting/script_signal.c

4o.5ck.t17121-1 modify true false /trunk/server/gamehand.c

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


412496 412647
