DELTA 15755 0 969
SVN  ”V”T „  „„2• ŒˆFnotify.c	\
		notify.hENDREP
DELTA 16080 48 8666
SVN  „²qƒðx ‡A  ‚`‡p† ¸ŠB ‚®E‚„,notifyENDREP
DELTA 16066 1096 1695
SVN  …ˆF…‰X †9  s†8Œ ‚J‡*€6 XŠ^‰ „ûvŒP/* utility *//* common *//* ai */
#include "aicity.h"
#include "aiunit.h"

/* scripting */
#include "script.h"

/* server */
#include "barbarian.h"
#include "cityturn.h"
#include "maphand.h"
#include "notifycitytoolsENDREP
DELTA 15920 9085 30404
SVN  ƒ€z‚ÿ}ƒ ˆ~ † ’5ˆp¬ ƒ›]ª LŸ.„ ¥L ~¬ ƒÇ„ yÊ„ ˆzÌ¸ vëw Ví3 Öx€b aØ„ WÙv‹ …7Úk„ Sà2‹ `á#‹ ‡Lã!Ÿ …vêj€b ƒKðY‹ ‚,ôB‹ ‡÷ž ‚þK‹ ¤€oª ‚¥+® ‚§y¬ ƒ6ª@„ “­z„ …Á„ ‚,Æ6² FÇ= ƒHÉf„ DÍ2„ ˜ÎzŽ ‚™0 ~è1² FÇ= ‡hê3® ‘òU„ †5‚ƒ_„ ‚‚Š$„ …j‚Œ@„ ‚8‚’:€i ‚R‚•g€e ‚2‚™*„ –Y‚›`€7 ‡1‚²]± ‚½# h‚»`² f‚½ ƒ‚¿;€D ‚Å@€N b‚Å/ Œ‚Ç1ž „p‚Ó]€B I‚Ö`¢ ˆY‚Û„ ‚‚ã{„ †S‚æ„ ‚‚ìs„ ‘w‚ïnotifylink(pdiplomat),
                  city_linklink(pdiplomat),
                city_linklinklink(pdiplomat),
                  city_linklinklinkchar victim_link[MAX_LEN_NAME];
  struct player *uplayerN.B: unit_link() always returns the same pointer. */
  sz_strlcpy(victim_link, unit_link(pvictim))linkvictim_linklinkvictim_linkvictim_linkchar victim_link[MAX_LEN_NAME];N.B.: unit_link always returns the same pointer. */
  sz_strlcpy(victim_link, unit_link(pvictim));victim_linkvictim_linklink(pdiplomat),
		victim_linkvictim_linklink(pcity),
                    unit_linklink(pdiplomat),
                    city_linklink(pdiplomat),
                  city_linklinklinklinklink(pdiplomat),
                  city_link(pcitylinklinklink(pdiplomatlink(pdiplomat),
                  city_link(pcitylink(pdiplomat),
                    city_linklinklinklinklinklink(pdiplomat),
                    improvement_name_translation(ptarget),
                    city_linklink(pdiplomat),
                  improvement_name_translation(ptarget),
                  city_linklinkchar diplomat_link[MAX_LEN_NAME];
  struct city *pcity = tile_city(ptile);

  /* N.B.: unit_link() always returns the same pointer. */
  sz_strlcpy(diplomat_link, unit_link(pdiplomat)link(punit),
		      diplomat_link);

	if (pcity)link(punit),
			city_link(pcity),
			diplomat_linklink(punit),
			diplomat_linkdiplomat_link,
                      unit_link(punit));

	if (pcity)%s."),
			nation_adjective_for_player(pplayer),
			diplomat_link,
			city_linkdiplomat_linklink(pdiplomat),
		  city_linklink(pdiplomat),
                    city_link(pcity));
    } else."),
                    unit_linklinklinklinklinkENDREP
DELTA 16032 1595 2087
SVN  ¨d˜  …e  ˆ0ˆ ‰|žhENDREP
DELTA 15920 41744 49143
SVN  ƒÿo„€Ts ‰J › Œ‰f€X U‚²~ ƒè;—4maphand.h"
#include "notify    struct packet_chat_msg packet;

    va_start(ap, text);
    vpackage_event(&packet, NULL, E_DIPLOMACY,
                   FTC_PRIVATE_MSG, NULL, text, ap);
    va_end(ap);

    lsend_packet_chat_msg(dest, &packetENDREP
DELTA 16016 3689 8424
SVN  †  †   Š	  zŒ{ DŠ	† <‹? †‘wunotify†  ì6ìJ” ì6 e, an individual calENDREP
DELTA 11356 1432 7167
SVN  ”ø‚Zóy †E €„\ ‡^ŠM¹ „’J ƒ1™ ‚.–R€†D G ± @Õ@€Œ[ RÓ  @Õ@€…! TÓ}• @Õ@€…i aÃ³ @Õ@€‚X RÓ€ @Õ@€…Y G ¨ @Õ@€c aÃª @Õ@€ƒi RÓ …8 ’ ‚u¢7€G …¥#’ ƒ2ª/€ ‡­V€ …U´b€ ƒº6’ ƒ½A ‰XÁ€y …QÊO€ ˜Ð˜ jè1€H ƒSéB€ƒV ^î6€‚ `ð?€ S‰4€L QÓ  @Õ@ {ô!€ m‡x€‚/ g‰)€ƒ- Oùs€2 G © @Õ@€‚c RÓ~· @Õ@€~ G  ‚…Z€  m‡x€‚ u‰)€m |Š€„9 ‚Ž"½ ^î6€‚ V’0/* utility */
#include "fcintl.h"
#include "log.h"
#include "md5.h"
#include "registry.h"
#include "shared.h"
#include "support.h"

/* common */
#include "connection.h"
#include "packets.h"

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

#include "auth.h"

/* where our mysql database is located and how to get to it */
#define DEFAULT_AUTH_HOST     "localhost"
#define DEFAULT_AUTH_PORT     "3306"
#define DEFAULT_AUTH_USER     "anonymous"
#define DEFAULT_AUTH_PASSWORD ""

/* the database where our table is located */
#define DEFAULT_AUTH_DATABASEDEFAULT_AUTH_TABLE           "auth"
#define DEFAULT_AUTH_#ifdef HAVE_AUTH
static char *alloc_escaped_string(MYSQL *mysql, const char *orig);
static void free_escaped_string(char *str);
#endif /* HAVE_AUTH */

#ifdef HAVE_AUTH

enum auth_option_source {
  AOS_DEFAULT,  /* Internal default         */
  AOS_FILE,     /* Read from config file    */
  AOS_SET       /* Set, currently not used  */
};

struct auth_option {
  const char              *name;
  char                    *value;
  enum auth_option_source source;
};

static struct authentication_conf {
  struct auth_option host;
  struct auth_option port;
  struct auth_option user;
  struct auth_option password;
  struct auth_option database;
  struct auth_option table;
  struct auth_option login_table;
} auth_config;

/* How much information dump functions show */
enum show_source_type {
  SST_NONE,
  SST_DEFAULT,
  SST_ALL
};

****
  Output information about one auth option.
**********/
static void print_auth_option(int loglevel, enum show_source_type show_source,
                              bool show_value, const struct auth_option *target)
{
  char buffer[512];
  bool real_show_source;

  buffer[0] = '\0';

  real_show_source = (show_source == SST_ALL
                      || (show_source == SST_DEFAULT && target->source == AOS_DEFAULT));

  if (show_value || real_show_source) {
    /* We will print this line. Begin it. */
    /* TRANS: Further information about option will follow. */
    my_snprintf(buffer, sizeof(buffer), _("Auth option \"%s\":"), target->name);
  }

  if (show_value) {
    cat_snprintf(buffer, sizeof(buffer), " \"%s\"", target->value);
  }
  if (real_show_source) {
    switch(target->source) {
     case AOS_DEFAULT:
       if (show_source == SST_DEFAULT) {
         cat_snprintf(buffer, sizeof(buffer),
		      /* TRANS: After 'Auth option "user":'. Option value
			 may have been inserted between these. */
                      _(" missing from config file (using default)"));
       } else {
         /* TRANS: auth option originates from internal default */
         cat_snprintf(buffer, sizeof(buffer), _(" (default)"));
       }
       break;
     case AOS_FILE:
       /* TRANS: auth option originates from config file */
       cat_snprintf(buffer, sizeof(buffer), _(" (config)"));
       break;
     case AOS_SET:
       /* TRANS: auth option has been set from prompt */
       cat_snprintf(buffer, sizeof(buffer), _(" (set)"));
       break;
    }
  }

  if (buffer[0] != '\0') {
    /* There is line to print */
    freelog(loglevel, "%s", buffer);
  }Output auth config information.
**********/
static void print_auth_config(int loglevel, enum show_source_type show_source,
                              bool show_value)
{
  print_auth_option(loglevel, show_source, show_value, &auth_config.host);
  print_auth_option(loglevel, show_source, show_value, &auth_config.port);
  print_auth_option(loglevel, show_source, show_value, &auth_config.user);
  print_auth_option(loglevel, show_source, FALSE, &auth_config.password);
  print_auth_option(loglevel, show_source, show_value, &auth_config.database);
  print_auth_option(loglevel, show_source, show_value, &auth_config.table);
  print_auth_option(loglevel, show_source, show_value, &auth_config.login_tableSet one auth option.
**********/
static bool set_auth_option(struct auth_option *target, const char *value,
                            enum auth_option_source source)
{
  if (value != NULL
      && !strcmp(target->name, "port")) {
    /* Port value must be all numeric. */
    int i;

    for (i = 0; value[i] != '\0'; i++) {
      if (value[i] < '0' || value[i] > '9') {
        freelog(LOG_ERROR, _("Illegal value for auth port: \"%s\""), value);
        return FALSE;
      }
    }
  }

  if (value == NULL) {
    if (target->value != NULL) {
      free(target->value);
    }
    target->value = NULL;
  } else {
    target->value = fc_realloc(target->value, strlen(value) + 1);
    memcpy(target->value, value, strlen(value) + 1);
  }
  target->source = source; Load value for one auth option from section_file.
**********/
static void load_auth_option(struct section_file *file,
                             struct auth_option *target)
{
  const char *value;

  value = secfile_lookup_str_default(file, "", "auth.%s", target->name);
  if (value[0] != '\0') {
    /* We really loaded something from file */
    set_auth_option(target, value, AOS_FILE);
  }Load auth configuration from file.
  We use filename just like user gave it to us.
  No searching from datadirs, if file with same name exist there!
**********/
static bool load_auth_config(const char *filename)
{
  struct section_file file;

  assert(filename != NULL);

  if (!section_file_load_nodup(&file, filename)) {
    freelog(LOG_ERROR, _("Cannot load auth config file \"%s\"!"), filename);
    return FALSE;
  }

  load_auth_option(&file, &auth_config.host);
  load_auth_option(&file, &auth_config.port);
  load_auth_option(&file, &auth_config.user);
  load_auth_option(&file, &auth_config.password);
  load_auth_option(&file, &auth_config.database);
  load_auth_option(&file, &auth_config.table);
  load_auth_option(&file, &auth_config.login_table);

  section_file_check_unused(&file, filename);
  section_file_free(&file);

  return TRUE;
}
#endif /* HAVE_AUTH */

****
  Initialize authentication system
**********/
bool auth_init(const char *conf_file)
{
#ifdef HAVE_AUTH
  static bool first_init = TRUE;

  if (first_init) {
    /* Run just once when program starts */
    auth_config.host.value        = NULL;
    auth_config.port.value        = NULL;
    auth_config.user.value        = NULL;
    auth_config.password.value    = NULL;
    auth_config.database.value    = NULL;
    auth_config.table.value       = NULL;
    auth_config.login_table.value = NULL;

    auth_config.host.name         = "host";
    auth_config.port.name         = "port";
    auth_config.user.name         = "user";
    auth_config.password.name     = "password";
    auth_config.database.name     = "database";
    auth_config.table.name        = "table";
    auth_config.login_table.name  = "login_table";

    first_init = FALSE;
  }

  set_auth_option(&auth_config.host, DEFAULT_AUTH_HOST, AOS_DEFAULT);
  set_auth_option(&auth_config.port, DEFAULT_AUTH_PORT, AOS_DEFAULT);
  set_auth_option(&auth_config.user, DEFAULT_AUTH_USER, AOS_DEFAULT);
  set_auth_option(&auth_config.password, DEFAULT_AUTH_PASSWORD, AOS_DEFAULT);
  set_auth_option(&auth_config.database, DEFAULT_AUTH_DATABASE, AOS_DEFAULT);
  set_auth_option(&auth_config.table, DEFAULT_AUTH_TABLE, AOS_DEFAULT);
  set_auth_option(&auth_config.login_table, DEFAULT_AUTH_LOGIN_TABLE, AOS_DEFAULT);

  if (strcmp(conf_file, "-")) {
    if (!load_auth_config(conf_file)) {
      return FALSE;
    }

    /* Print all options in LOG_DEBUG level... */
    print_auth_config(LOG_DEBUG, SST_ALL, TRUE);

    /* ...and those missing from config file with LOG_NORMAL too */
    print_auth_config(LOG_NORMAL, SST_DEFAULT, FALSE);

  } else {
    freelog(LOG_DEBUG, "No auth config file. Using defaults");
  }

#endif /* HAVE_AUTH */ Free resources allocated by auth system.
**********/
void auth_free(void)
{
#ifdef HAVE_AUTH
  set_auth_option(&auth_config.host, NULL, AOS_DEFAULT);
  set_auth_option(&auth_config.port, NULL, AOS_DEFAULT);
  set_auth_option(&auth_config.user, NULL, AOS_DEFAULT);
  set_auth_option(&auth_config.password, NULL, AOS_DEFAULT);
  set_auth_option(&auth_config.database, NULL, AOS_DEFAULT);
  set_auth_option(&auth_config.table, NULL, AOS_DEFAULT);
  set_auth_option(&auth_config.login_table, NULL, AOS_DEFAULT);
#endif /* HAVE_AUTH */ FTC_WARNING, NULLfreelog(LOG_NORMAL, _("%s was rejected: Guests not allowed."), username FTC_WARNING, NULLfreelog(LOG_NORMAL, 
                _("%s was rejected: Database error and guests not allowed."),
                pconn->usernamefreelog(LOG_NORMAL,
                _("%s was rejected: Only preregistered users allowed."),
                pconn->username);
        freelog(LOG_NORMAL, _("%s was rejected: Too many wrong password "
                "verifies for new user."), pconn->username);
 FTC_WARNING, NULLfreelog(LOG_NORMAL,
                _("%s was rejected: Too many wrong password tries."),
                pconn->usernamefreelog(LOG_NORMAL,
              _("%s was rejected: Connection timeout waiting for password."),
              pconn->username);
                        const int bufsize = sizeof(buffer);
  char checksum[DIGEST_HEX_BYTES + 1auth_config.host.value,
                                 auth_config.user.value, auth_config.password.value, 
                                 auth_config.database.value,
                                 atoi(auth_config.port.value), NULL, 0))) {
    char *name_buffer = alloc_escaped_string(&mysql, pconn->username);
    int str_result;

    if (name_buffer != NULL) {
      /* insert an entry into our log */
      str_result = my_snprintf(buffer, bufsize,
                      "values ('%s',unix_timestamp(),'%s','%s')",
                               auth_config.login_table.value,
                               name_buffer, pconn->server.ipaddr, ok ? "S" : "F");

      if (str_result < 0 || str_result >= bufsize || mysql_query(sock, buffer)) {
  pconn->username, mysql_error(sock));
      }
      free_escaped_string(name_buffer);
      name_buffer = NULL;
    }
    mysql_close(sock);
  } else}

  return ok;
#else  /* HAVE_AUTH */
  return TRUE;
#endif /* HAVE_AUTH */Loads a user from the database.
const int bufsize = sizeof(buffer);
  int num_rows = 0;
  MYSQL *sock, mysql;
  MYSQL_RES *res;
  MYSQL_ROW row;
  char *name_buffer;
  int str_resultauth_config.host.value,
                                  auth_config.user.value,
                                  auth_config.password.value,
                                  auth_config.database.value,
                                  atoi(auth_config.port.value),
                                 AUTH_DB_ERROR;
  }

  name_buffer = alloc_escaped_string(&mysql, pconn->username);

  if (name_buffer != NULL) {
    /* select the password from the entry */
    str_result = my_snprintf(buffer, bufsize,
                             "select password from %s where name = '%s'",
                             auth_config.table.value, name_buffer);

    if (str_result < 0 || str_result >= bufsize || mysql_query(sock, buffer)) {
  pconn->username, mysql_error(sock));
      free_escaped_string(name_buffer);
      mysql_close(sock);
      return AUTH_DB_ERROR;
    }

    res = mysql_store_result(sock);
    num_rows = mysql_num_rows(res);
  
    /* if num_rows = 0, then we could find no such user */
    if (num_rows < 1) {
      mysql_free_result(res);
      free_escaped_string(name_buffer);
      mysql_close(sock);

      return AUTH_DB_NOT_FOUND;
    }
  
    /* if there are more than one row that matches this name, it's an error 
     * continue anyway though */
    if (num_rows > 1) {
      freelog(LOG_ERROR, "db_load query found multiple entries (%d) for user: %s",
              num_rows, pconn->username);
    }

    /* if there are rows, then fetch them and use the first one */
    row = mysql_fetch_row(res);
    mystrlcpy(pconn->server.password, row[0], sizeof(pconn->server.password));
    mysql_free_result(res);

    /* update the access time for this user */
    memset(buffer, 0, bufsize);
    str_result = my_snprintf(buffer, bufsize,
                             "update %s set accesstime=unix_timestamp(), "
                             "address='%s', logincount=logincount+1 "
                             "where strcmp(name, '%s') = 0",
                             auth_config.table.value, pconn->server.ipaddr,
                             name_buffer);

    free_escaped_string(name_buffer);
    name_buffer = NULL;

    if (str_result < 0 || str_result >= bufsize || mysql_query(sock, buffer)) {
      freelog(LOG_ERROR, "db_load update accesstime failed for user: %s (%s)",
              pconn->username, mysql_error(sock));
    }
  }

  mysql_close(sock);
#endif
  return AUTH_DB_SUCCESS;
}

#ifdef HAVE_AUTH
****
 Creates escaped version of string.
**********/
static char *alloc_escaped_string(MYSQL *mysql, const char *orig)
{
  int orig_len = strlen(orig);
  char *escaped = fc_malloc(orig_len*2+1);

  if (escaped == NULL) {
    freelog(LOG_ERROR, "Failed to allocate memory for escaped string %s", orig);
  } else {
    mysql_real_escape_string(mysql, escaped, orig, orig_len);
  }

  return escapedFrees escaped string created by alloc_escaped_string()
**********/
static void free_escaped_string(char *str)
{
  if (str != NULL) {
    FC_FREE(str);
  }
}
#endif /* HAVE_AUTH */

const int bufsize = sizeof(buffer);
  char *name_buffer = NULL;
  char *pw_buffer = NULL;
  MYSQL *sock, mysql;
  int str_resultauth_config.host.value,
                                  auth_config.user.value, auth_config.password.value,
                                  auth_config.database.value,
                                  atoi(auth_config.port.value),
                                 name_buffer = alloc_escaped_string(&mysql, pconn->username);
  pw_buffer = alloc_escaped_string(&mysql, pconn->server.password);
  if (name_buffer == NULL || pw_buffer == NULL) {
    free_escaped_string(name_buffer);
    mysql_close(sockstr_result = my_snprintf(buffer, bufsize,
                           "insert into %s values "
                           "(NULL, '%s', md5('%s'), NULL, "
                           "unix_timestamp(), unix_timestamp(),"
                           "'%s', '%s', 0)",
                           auth_config.table.value, name_buffer, pw_buffer,
                           pconn->server.ipaddr, pconn->server.ipaddr);

  /* Password is not needed for further queries. */
  free_escaped_string(pw_buffer);
  pw_buffer = NULL;

  if (str_result < 0 || str_result >= bufsize || bufsize);
  str_result = my_snprintf(buffer, bufsize,
              "values ('%s',unix_timestamp(),'%s', 'S')",
                           auth_config.login_table.value,
                           name_buffer, pconn->server.ipaddr);

  free_escaped_string(name_buffer);
  name_buffer = 0;

  if (str_result < 0 || str_result >= bufsize || ENDREP
DELTA 16008 0 402
SVN  ½g¾ †e € ¶‡X/* utility */
#include "fciconv.h"
#include "fcintl.h"
#include "log.h"
#include "support.h"

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

/* server */
#include "notifyENDREP
DELTA 15920 97740 1485
SVN  î/ïL3… †9 €‚b ®dˆ^€ ‰*¸3 ‚wÁ_¥ iÄs ƒ0Æ^€H ˜hÊN Šwã8/* utility */
#include "fcintl.h"
#include "log.h"
#include "rand.h"
#include "support.h"

/* common */
#include "city.h"
#include "events.h"
#include "game.h"
#include "idex.h"
#include "map.h"
#include "player.h"
#include "specialist.h"
#include "unit.h"
#include "worklist.h"

/* server */
#include "citytools.h"
#include "cityturn.h"
#include "notify                _("You sell %s in %s for %d gold."), 
                improvement_name_translation(pimprove),
                city_link(pcity),
                             _("You don't buy %s!"),
                                            _("%d gold required.  You only have %d gold."), cost,
             ENDREP
DELTA 15920 99255 332
SVN  ŒŒ
 …[  †…l/* server */
#include "notifyENDREP
DELTA 15901 9134 1494
SVN  Z‘D+†W †& €„	 Mú? —"Š?– ®@¡`¨ –8Ð1€ ‚çE€t ¥Dê/* utility */
#include "capability.h"
#include "fcintl.h"
#include "log.h"
#include "mem.h"
#include "rand.h"
#include "registry.h"
#include "shared.h"
#include "support.h"

/* common */
#include "events.h"
#include "game.h"
#include "improvement.h"
#include "movement.h"
#include "packets.h"

/* server */
#include "connecthand.h"
#include "ggzserver.h"
#include "maphand.h"
#include "notify.h"
#include "plrhand.h"
#include "srv_main.h"
#include "unittools.h"

#include "gamehand.h"

#define CHALLENGE_ROOT "challenge"
 FTC_SERVER_INFO, NULLNULL, NULL,
              _("Year: %s"),                  FTC_SERVER_INFO, NULL,
                  _("The turn timeout has exceeded its maximum value, "
                    "fixing at its maximum.                  FTC_SERVER_INFO, NULL,
                  _("The turn timeout is smaller than zero, "
             ENDREP
DELTA 15957 14100 498
SVN  å_æ, …k  s…jŒ z†\± c‡j€E Übˆ}/* utility *//* common *//* scripting */
#include "script.h"

/* server */notify.h"
#include "plrhand.h"
#include "unittools.h"

#include "techENDREP
DELTA 15796 3195 5306
SVN  „˜T„Ÿ*ƒ1• † €G Q†r€‚! sŠˆ Ÿ‹€@ †ªmƒ ”
±‚ ŠGÅ‚ –>ÏU ªæ)‚ ‡H‚9‚ †‚˜‚ †{‚ž‚ …c‚¥‚ …h‚ªy‚ Žk‚°b€m ‚À8‚ V‚Ä, l‚Â€( „0‚Ä,‚ ‚;‚È]‚ {‚Ë‚ ƒ]‚Ì¦ 9‚Ð‚ z‚Ñ>‚ ‚1‚Ó9‚ ?‚Õk‚ 5‚×+‚ ‚v‚æa‚ ƒ7‚éX‚ ƒU‚í‚ W‚ðf‚ ‚ò>€" Sƒâ@ ’‚õH‚ 9ƒ‡P– Kƒ€?€u 5ƒŠ[º rƒŒH‚ PƒŽ;€w 1ƒ~€e ]ƒ”¢ ‚Eƒ–² ƒ™‚ kƒš¢ Mƒ›z‚ *ƒœH‚ ƒs‚ œmƒŸ‚ „Hƒ»{€I hƒÂ‚ ƒÃq‚ ‚2ƒÅ‚ ƒÇ5€g ‚ƒØ2‚ ‘sƒÚM€k ‚Dƒí)‚ @ƒïn‚ ‚ƒñ/‚ ¥!ƒó3 O¦@© I› €V R¦=¤ I› €p/* utility */
#include "fcintl.h"
#include "log.h"
#include "rand.h"
#include "shared.h"
#include "support.h"

/* common */
#include "city.h"
#include "combat.h"
#include "effects.h"
#include "eventsmap.h"
#include "movement.h"
#include "packets.h"
#include "player.h"
#include "specialist.h"
#include "unit.h"
#include "unitlist.h"

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

/* server */
#include "cityhand.h"
#include "citytools.h"
#include "cityturn.h"
#include "gotohand.h"
#include "notify/* ai */LAST], bonus[O_LAST], waste[O_LAST], i;

  memset(prod, 0, O_LASLAS->->->->->->->->->building_want[improvement_index(pimprove)] = 1;
      } improvement_iterate_end;
    } else if (pcity->ai->->->building_wait = pcity->ai->building_turn - game.info.turn;
      pcity->ai->building_turn = game.info.turn;

      improvement_iterate(pimprove) {
        pcity->ai->->->->
                   && 0 < pcity->ai->->->->->->->->->->->building_wait = myrand(RECALC_SPEED) + RECALC_SPEED;
      pcity->ai->building_turn = game.info.turn + pcity->ai->building_wait;
    }
  } city_list_iterate_end->->choice));
  } else {if ((pcity->ai->choice.want <= 100 || pcity->ai->urgency == 0)
        && !(ai_on_war_footing(pplayer) && pcity->ai->->choice));
    }
  }

  /* Fallbacks */
  if (pcity->ai->->->choice.value.utype = best_role_unit(pcity, F_TRADE_ROUTE);
      pcity->ai->choice.type = CT_CIVILIAN;
    } else if (best_role_unit(pcity, F_SETTLERS)) {
      pcity->ai->choice.value.utype = best_role_unit(pcity, F_SETTLERS);
      pcity->ai->->choice.want = 0;
    }
  }

  if (pcity->ai->choice.want != 0) {
    ASSERT_CHOICE(pcity->ai->choice);

    CITY_LOG(LOG_DEBUG, pcity, "wants %s with desire %d.",
	     ai_choice_rule_name(&pcity->ai->choice),
	     pcity->ai->->choice.type
      || pcity->ai->->choice.type
      && is_great_wonder(pcity->ai->->
                      pcity->ai->->->->->->choice.want > bestchoice.want && ai_fuzzy(pplayer, TRUE)) {
        bestchoice.value = acity->ai->choice.value;
        bestchoice.want = acity->ai->choice.want;
        bestchoice.type = acity->ai->->->->->grave_danger != 0 && assess_defense(pcity) == 0)
            || (bestchoice.want > 200 && pcity->ai->->->choice);
    TIMING_LOG(AIT_CITY_MILITARY, TIMER_STOP);
    if (ai_on_war_footing(pplayer) && pcity->ai->->->->Initialize city for use with default AI.
*/
void ai_init_city(struct city *pcity)
{
  pcity->ai = fc_calloc(1, sizeof(*pcity->ai));

  pcity->ai->building_wait = BUILDING_WAIT_MINIMUM;
  pcity->ai->trade_want = 1; /* we always want some TRADE_WEIGHTING */Free city from use with default AI.
*/
void ai_close_city(struct city *pcity)
{
  if (pcity->ai) {
    free(pcity->ai);
    pcity->ai = NULL;
  }
}
ENDREP
DELTA 16074 50411 16006
SVN  ¹Yºx …} €U [†7€# ±Fˆ/* utility */
#include "fcintl.h"
#include "log.h"
#include "support.h"

/* common *//* server */
#include "commands.h"
#include "console.h"
#include "hand_gen.h"
#include "notify.h"
#include "settings.h"
#include "stdinhand.h"

#include "voting.h"ENDREP
DELTA 16098 0 2328
SVN  ƒÎ`ƒÎ4 …  _…~Œ [†\€
 Y‰+‘ ƒÄ9Š'/* utility *//* common *//* generator */
#include "utilities.h"

/* server */
#include "citytools.h"
#include "cityturn.h"
#include "notify.h"
#include "plrhand.h"#include "maphandENDREP
DELTA
SVN   ÝG‘Y‹‚@E€D
•E^ŸD}†EQD_DJ‚G$¥D,„D‚6D
‡J‚@‚T
J7„E‚‰DUD
¥Fƒ“D
D‚M¥Dƒ"D
[pEIŒ@F³D…7H…P…E…]ŽJ…i‡E…}†N†	Dƒa‚D†J†N†<„N†<…P†:†N†<ƒE†hD…~†N†	‡N†<ˆE†J††G†@I‡x„Dƒ-‚F†wD†ME‚vF†wˆD‚k‚E‚F†wDˆgD‡ Oˆp‚D‡ E‚E†6DˆD‰	E†6ƒI‰)„E‰	„F‰F‚EZGiF‰,ŠJ‰+‹D‰	ˆF‰F†Dƒ†D‚1EŠD‚M‹JŠ)D‰	WŠ„iŠ8…G‰EF‹&H‰k†E‰U…G‰FŠD†8Dˆ{…N‹;@J‡xE‰„E†6†Fˆ\QˆKF†wEƒ:\	…Gˆ[F‰"E‰a„F‰rD‰RF‰rnD‰[‚D‚6‚E‰Zg†HŠMŽSHŠanŽ3E‹'‰F‹J•EŠH‚G‰‚D‚w„E‰‚DBHˆh…F‰„MuJD†Ss‚RFEIˆg‚F‰,F‰rDHcD‰[ƒDD‰[‚F‘†EXGfHŠƒIŠƒDY„E‚`‡HŠaD‘6HŠaL‘BHr„GŠ>‚KŠSD†	E"DŽ[‹DŠE‘$™E’H‚G‹1D1D=FM†JŠF’IHcG‹@I’MO“^›IŠI‘dE’iM,„Dƒj†H’M’=i“S’[ƒ@p‡uE„\D’ J‹?fˆgF‰eT‰_K‹@@‚,ŠEŒOHŒTHˆSxŒfYŽF‰e_™&}ŽZgSŒTGŒEŠGKŠG–WR“oR”^@ƒ ”tƒ@}—y@G˜ww™?@B™wTƒF@H3D’eE‘$‰D’eH”^E’iR˜vHštG›]›*I’e†E¡E@y›LG†"G‡,E†6h•x@M‰@‚:–EE†6uŒfY&l^@@™w@Bš:H§1EpFš{@›E‚E‚ƒDŒDŠO‰EŽ'…Dƒ3Fª	Fˆ\IyJˆRˆE‚P¦ZE•xEª$‡DƒnJŽ"EgHŠ‚K«Ej„GbƒD‚`ƒK«”DƒDƒYJ‰n„F«aEƒ,ƒDQE’~DhD†e…E¡@‚E«KD_D‰[ƒF‡…Dª	G1ƒDª|DŠIG‘‚D‡Dª‚H¬c‚F‡,†I«_‚IŠO„D¨wŒH«NG«YŒD‚>‹D•bF¬LE„<E«`’D‹'ƒDŠ[@X‹|Gª#E‘F†wHŒfE‘E6„osWŒnF@WŒg„G®r‚HŒ}DR,I‘$D¯HrD¯‚E¬„E®mG«F”nGfƒF®ˆI”5J“I‘xE‰ƒG°e„D‡ V°lR(G±D¬\I°NI¯‰E¯F‘L‘yEŒOD‰eDªG‹@G¬JE­0’F‘N‚Eˆv†F+DŽ)‚Dƒ]Eª?F‡-ŠH²9L«E¬L‚EŠO‡F­x‹I’E‘)OcD‘TW³7…H‘MK¬rF³#†DYŠHrE±[…FE°RF³0ŽG²_D¡?ƒN³sE±D‡)D«‚E”D¡oD²UI” G³yFTe¬aMD‘UIUM¬eQ‚E±ƒD¬FFlG±sI¬i‚I‘xE”L­mD­ƒTµK¯rRN¶ZPO”E”‚M¶4Iµ†M´CO´RDµTR°[‡G’iR¶ZHER¶zHEG´9D‰eG®rK¡_EŽ/‚K¯rG±6Q±]D¢ @S›MD„7R®g„GªƒF²Z‡H‚BF«qƒD’e@S˜#K®gX®yl%V_V§bRUŽj^¡WŒg†G¢q¡/F¦dF¼OP¨cc¡yQ¢‚T®fF»G½@T›L†EˆzS¹bEµ…Eƒ>„I¬=„D¯D­r„D‰	‚H¬>F±NF¡oE‹dƒM²xDªE¬LG‡M¿!U¿/E¬K°CDˆ{†DªH‚D«‚G¾}DG†JŽH­-‚M¹`EµXDµG†@O®LºsF‡N¯1F¬@‚FÁ_m»@@»Ep¼L¼3O¯DGÁ_HÃ)F‘H«I±O@¼8@½NƒH²H¿<FÁ_…F­xD«†F«qHÁgDŠ^Dƒ^D…QDªHÃ*N«LH¿Y@XÀsFÆƒ^ÁQdŸHÁ_FÆ3Y=@E§@\ KMÃ@!ÃZGÆI±fE­NGÁJHrEiE‡„GÇ2MËHÆ<M³sGÈD¿-LËLµHÃ*OËYJ¶(S®gLËMÃ;L½xF¸<D”OÊt@Y¹D¿9XÅs‚HËsˆD¿#HÍ_DªH¨sM¿7GÆ@ZÆYDÍi@JÁQ@x»GRÃX°:@(ÃSEiNÌGÃ#J±]„GÌJdÊtG° HÊt‡FÎtIÁgMËJÒXP´)F]GÓO±`[Ì(M±uNÓ2ƒD¢!L±oIÓ&X¸uF·UÌWG¸>c½aVÒ
JÓ6DEÔ@U”mdÍ8E¬L‚D­ˆMÆD¬ †E¬H¹wOÍPEª?D¬ DÍiEÆ.‚EÀ<F³„Dƒ0E¬LƒE•x†FÓGÔSJª+FÖGˆEÖwD¿H‰ H‹\„D„=…D¹`JÖ#HÅtEƒ,FÆG×II«h@LÆYPÁ;HÖ$tÇ<@@Â@d¼JÐcFËIÖ$IÖ$…GÁJJØpHÒw¼eF¿1@eÊ7TÚvNË‚IÖ#JÓhU¸G@FÌ(/* 
 Freeciv - Copyright (C) 1996 - A Kjeldberg, L Gregersen, P Unold
   This program is free software; you can redistribute it and/or modifyit under the terms ofGNU General Public License as pshed b S Foundation; either version 2, or (atr op)any lat.
d inhope thatwill be useful,but WITHOUT ANY WARRANTY; without eveimplied warranty ofMERCHANTABILITYFITNESS FOR A PARTICULAR PURPOSE.  Seefre details.
*/

#ifdef HAVE_CONFIG_H
#include <config.h>
#endifstdar
/* utility */"log.h"commontsfeatured_textgamepackeplayertilservermaphandsrv_mainnotify
  Fa _chat_msg struc: A pointo.a occuring: Ttypeconnse(e.g. whenE_CHAT_MSG)fg_colorrequesforegr NULL if notbbackformamessagvargsxtra argumbuild/
static voidage__full(*const*enum_ec *char *,, va_list)
{
  RETURN_IF_FAIL(!=);if () ->x =->x;yy} else-1}->=_id ?->id :( &&[0]'\0'   || (/* Aisbuf[MAX_LEN]  my_vsnprintf(buf, sizeo),_apply_tag)TTT_COLOR, 0, OFFSET_UNSET,,/* Se case}
}atv,,......va_start(va_endisbasor followingify_* funs. Itas defin)N specifaof(fros.hand(x,y) coords associa.  Conl has ed's  knowa(or=->&&ob).  Ifreiredcaller shouly= (-1,-1); owise make sinates have been nliz*desreal =! =.estis__map_posxy = _to__iterate(cpotentially reveal* nal inabmachine todoalreadyhack access= E_LOG_ERRORFATAL _levelALLOW_HACKtinueS_S_RUNNING <=te(alev(&&is_n))OK;.noassert>!-1, -1) & - tjus"non-v",vargenmsg&
 Simila(lso),takeas "ion"If!all=,supporolde may go away -usinstea(*p ?:ends whombassyxies_hasy,aon's team.'new(on_sameappshresearchurrentitwayswayUnlikeone does.  Wassum*= get==lENDREP
DELTA 16103 0 3326
SVN  à6à	  ˆ † Œxˆš Êe•Qnotifyvpackage_chat_msg(&packet,ENDREP
DELTA 15935 15019 7132
SVN  „ª„©=‚9& †:  M†9Œ o‡€C ˆs† ‰vœ  U‹@€@ ‚¬c¦ g­@‰ W¦{ ¦°u¯ NÙ@ {Øy „6Û ƒ!á€‚v kæ Œpç}„ ™Rô}€V s¨@€J ‚*z„ _“(« s¨@€^ ‚–¨ ‚]˜U» V¦| †œO¦ Ó*£º ‹ö9„ Ž5‚J€ ƒ~‚€R ‚‚”w€R ™O‚˜„ l‚±j„ ¡f‚³f ¦9‚ÕN„ s‚ü„ ƒc‚ý€_ ˆƒ€n€A ‚ƒ‰3€L ˆ4ƒŒC• eƒ“< ƒ „eƒ—"• eƒ“< ƒ „Vƒž.¬ „ƒ£<¬ ‡"ƒ§{€H ùyƒ°/* utility *//* common *//* ai */
#include "aiexplorer.h"
#include "aitools.h"

/* server */notifytools.h"

#include "unithandfrom_unit);
    int cost = unit_upgrade_price(pplayer, from_unitnit_link(punit),
		  cost);
  } else {"%s", bufThis new homecity must
  be valid for this unitunit_list_prepend(new_pcity->units_supported, punit);

  /* update unit upkeep */
  city_units_upkeep(new_pcity);

  punit->homecity = new_pcity->id;
  if (old_owner == new_owner) {
    /* Only changed homecity only owner can see it. */
    send_unit_info(new_owner, punit);
  } else {
    /* Player owner changed, send info to all able to see it. */
    send_unit_info(NULLlinklink(punit),
                  city_link(pcity));
    break;
  case AB_NO_MOVES_BUILD:_("%s unit has no moves left to build city."),
                  unit_linklinklink(punit));
    break;
  case AB_TOO_BIG:_("%s is too big to add %s."),
                  city_link(pcity),
                  unit_linklink(pcity),
                  unit_linklink(punit),
                  city_link(pcity));
    breaklink(punit),
                city_linkchar looser_link[MAX_LEN_NAME], winner_link[MAX_LEN_NAME];link
  /* N.B.: unit_link always returns the same pointer. */
  sz_strlcpy(looser_link, unit_link(plooser));
  sz_strlcpy(winner_link, unit_link(pwinner));
winner_link,
		  nation_adjective_for_player(unit_owner(plooser)),
		  looser_linklooser_link,
		  nation_adjective_for_player(unit_owner(pwinner)),
		  winner_linklinklinklinklinkchar homecity_link[MAX_LEN_NAME], destcity_link[MAX_LEN_NAME];
  char punit_link[MAX_LEN_NAME];link(punit));
    return FALSE;
   
  }

  sz_strlcpy(homecity_link, city_link(pcity_homecity));
  sz_strlcpy(destcity_link, city_link(pcity_dest));
  sz_strlcpy(punit_link, unit_link(punit));
punit_link,
                  homecity_link,
                  destcity_linkpunit_link);
        homecity_linkpunit_link);
        destcity_linkhomecity_link,
                    city_linkdestcity_link,
                    city_linkpunit_link,
                homecity_link,
                destcity_linkENDREP
DELTA 16074 97 30908
SVN  †  †  '‚> ‰0 €E e‰k€R u‹H† p/ †Hh€!  †ž8
#include "support.h"            /* fc__attribute, bool type, etc. */ai */
#include "advmilitary.h"        /* assess_danger_player() */
#include "ailognotifyor as global observer */
  connection_attach(pconn, pplayer, TRUE);

  /* Send first to reset the client. */
  send_conn_info(pconn->self, game.est_connections);†  „œo„œG‚I ‚/»]€R ’L‚n‘ ™h•K‘ ‹¯N€l i< ƒ\»X ’Àª Òg …[Ô— ªÚ— Šk„Y‘ ƒ_
  /* redundant self to self cannot be avoided */
  send_player_info(pplayer, NULLconnection_attachconnection_attach/* Send first to reset the client. */
  send_conn_info(pconn->self, game.est_connections);
  if (S_S_RUNNINGconnection_detach(pconn);
  if (pplayer) {connection_detach(aconnconnection_detach(pconnconnection_attachENDREP
DELTA
SVN   ˜iƒ&…X‚@E€D
•E^ŸD}†EQD_DJ‚G$¥D,„D‚6D
‡J‚@‚T
J7„E‚‰DUD
¥Fƒ“D
D‚M¥Dƒ"D
[pEIŒ@FŸN…?¡E…5G…eŒK†‰H:‚E…v†N†Dƒa…K†‡P†W‹J†”E…ND‚6‚N†…F†V†D‡@“E‡P‚I‡X‚F‡@Eƒ:Sˆ†G‡b†D‚6„DZ^ˆ ‰E‡MˆNHˆ\dˆ8ŠE‚`S‰,M†)„F‰˜F‡K@G‡Qxˆ@CˆNU‰Q‰mE†Ru‡aMˆ‡DŒ2†Eƒ`E†hFŒC\ŒzˆUd‹9F‡K‡Dˆ%H‡aDˆ%F‹O…HˆcSŒ+R‰)VŒ?VˆNR‰)Uˆek‰g‰@„J‰kGT‡MˆF]ƒF]mv@@Ž!@BŽ_~‰^cdˆHq‚E…fe’xŒ2@DŠt@V‰„QL„@Jc@:Ž#ˆ_cl’y@AˆOn‰p‰@‡F‡K…AD†6/* 
 Freeciv - Copyright (C) 1996 - A Kjeldberg, L Gregersen, P Unold
   This program is free software; you can redistribute it and/or modifyit under the terms ofGNU General Public License as pshed b S Foundation; either version 2, or (atr op)any lat.
d inhope thatwill be useful,but WITHOUT ANY WARRANTY; without eveimplied warranty ofMERCHANTABILITYFITNESS FOR A PARTICULAR PURPOSE.  Seefre details.
*/
#ifndef FC__NOTIFY_H
#define
#include <stdarg.h>

/* utility "support.h" /* fc__at*/commonts.h"fc_typeeatured_tex/* FTC_*: color pre-is.packe
void age_chat_msg(structet *const connec *sechar *fg_,bormat, ...((____ (__printf__, 5, 6)));vva_list vargstile *p, enumtnotify_*dest6, 7player( *pembassiesex7, 8teamresearch
#endifENDREP
DELTA 13000 9922 6805
SVN  Ô(Ùy5¡3 … €‚! ‚o‡\§ ož;€7 Œp€n ¢4€' `›t „’ „ x–€A W™„ nšaº ›t¼ H@ \ž„ dŒp€v ¢(€ `›t· „¥7„ ©L€R ‚«'€a I¯€ `›t€Z „³€ "¸’ 
¹L cºa€ƒ \›t ‰4¾v† ‚2È*€‹$/* utility */
#include "astring.h"
#include "log.h"
#include "shared.h"
#include "support.h"
#include "timing.h"

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

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

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

              struct advance *padvanceTECH, level);

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

  if (BV_ISSET(pplayer->debug, PLAYER_DEBUG_TECH)) {
    minlevel = LOG_TESTlayer_name(pplayer),
              advance_name_by_player(pplayer, advance_number(padvance)), 
              pplayer->ai_data.tech_want[advance_index(padvance)], 
              num_unknown_techs_for_goal(pplayer, advance_number(padvance))"%s", buffer2);
  if (BV_ISSET(pplayer->debug, PLAYER_DEBUG_TECH)) {
    notify_conn(NULL, NULL, E_AI_DEBUG, FTC_LOG, NULL, "%s", buffer);
  }
  freelog(minlevel, "%s"TESTlayer_name(pplayer),
              player_name(aplayer), 
              pplayer->ai_data.love[player_index(aplayer)],
              adip->countdown, 
              adip->distance,
             "%s"FTC_LOG, NULL, "%s", buffer);
  }
  freelog(minlevel, "%s"Polish Romenna(5,35) [s1 d106 u11 g1] must have Archers ...
TEST %s(%d,%d) [s%d d%d u%d g%d] ",
              nation_rule_name(nation_of_city(pcity)),
              city_name(pcity),
              TILE_XY(pcity->tile), pcity->size,
              pcity->ai->danger, pcity->ai->urgency,
              pcity->ai->"%s", buffer2);
  if (pcity->debug) {
    notify_conn(NULL, NULL, E_AI_DEBUG, FTC_LOG, NULL, "%s", buffer);
  }
  freelog(minlevel, "%s"unit messages, they will appear like this
    2: PolishTESTcity(punit->tile);

      if (pcity && pcity->debug) {
        minlevel = LOG_TEST %s[%d] %s (%d,%d)->(%d,%d){%d,%d} ",
              nation_rule_name(nation_of_unit(punit)),
              unit_rule_name(punit),
              punit->id,
	      get_activity_text(punit->activity),
	      TILE_XY(punit->tile)"%s", buffer2);
  if (punit->debug || messwin) {
    notify_conn(NULL, NULL, E_AI_DEBUG, FTC_LOG, NULL, "%s", buffer);
  }
  freelog(minlevel, "%s"message for bodyguards. They will appear like this
    2: Polish Mech. Inf.[485] bodyguardTEST;
  } else if (minlevel > fc_log_level) {
    return;
  }

  pcity = game_find_city_by_number(punit->ai.charge);
  pcharge = game_find_unit_by_numberrule_name(pcharge)city_name(pcity) %s[%d] %s (%d,%d){%s:%d@%d,%d} ",
              nation_rule_name(nation_of_unit(punit)),
              unit_rule_name(punit),
              punit->id,
              type,
              TILE_XY(punit->tile),
	      s, id, charge_x, charge_y);
  cat_snprintf(buffer, sizeof(buffer), "%s", msg);
  if (punit->debug) {
    notify_conn(NULL, NULL, E_AI_DEBUG, FTC_LOG, NULL, "%s", buffer);
  }
  freelog(minlevel, "%s"AILOG_TEST, "%s", buf);                                          \
  notify_conn(NULL, NULL, E_AI_DEBUG, FTC_LOG, NULL, "%s", buf);

  freelog(LOG_TEST, "  --- AI timing results ---");
  notify_conn(NULL, NULL, E_AI_DEBUG, FTC_LOG, NULL,
              "  --- AI timing results ---");
  AILOG_OUT("Total AI time", AIT_ALL);
  AILOG_OUT("Movemap", AIT_MOVEMAP);
  AILOG_OUT("Units", AIT_UNITS);
  AILOG_OUT(" - Military", AIT_MILITARY);
  AILOG_OUT(" - Attack", AIT_ATTACK);
  AILOG_OUT(" - Defense", AIT_DEFENDERS);
  AILOG_OUT(" - Ferry", AIT_FERRY);
  AILOG_OUT(" - Rampage", AIT_RAMPAGE);
  AILOG_OUT(" - Bodyguard", AIT_BODYGUARD);
  AILOG_OUT(" - Recover", AIT_RECOVER);
  AILOG_OUT(" - Caravan", AIT_CARAVAN);
  AILOG_OUT(" - Hunter", AIT_HUNTER);
  AILOG_OUT(" - Airlift", AIT_AIRLIFT);
  AILOG_OUT(" - Diplomat", AIT_DIPLOMAT);
  AILOG_OUT(" - Air", AIT_AIRUNIT);
  AILOG_OUT(" - Explore", AIT_EXPLORER);
  AILOG_OUT("fstk", AIT_FSTK);
  AILOG_OUT("Settlers", AIT_SETTLERS);
  AILOG_OUT("Workers", AIT_WORKERS);
  AILOG_OUT("Government", AIT_GOVERNMENT);
  AILOG_OUT("Taxes", AIT_TAXES);
  AILOG_OUT("Cities", AIT_CITIES);
  AILOG_OUT(" - Buildings", AIT_BUILDINGS);
  AILOG_OUT(" - Danger", AIT_DANGER);
  AILOG_OUT(" - Worker want", AIT_CITY_TERRAIN);
  AILOG_OUT(" - Military want", AIT_CITY_MILITARY);
  AILOG_OUT(" - Settler want", AIT_CITY_SETTLERS);
  AILOG_OUT("Citizen arrange", AIT_CITIZEN_ARRANGE);
  AILOG_OUT("Tech", AIT_TECH);
}
ENDREP
DELTA 16084 0 4675
SVN  „ÓH„Ó]| m  G“7 ‚\j† ‚8€v „¾P”xnotifytdinhand.h"
#include "techtools.h"
#include "unithand.h"
#include "unittools.h"
#include "voting.h"

#include "srv_maiENDREP
DELTA 15650 627 10387
SVN  ‚´8‚ÚDƒ~²) †  b†(  ‡	€r iˆn€x ™8Š;‘ D£r‘ ‡_¥5‘  ·~ s®€‚ w‚ˆq †w±‘ ‰·~‘  ·~€z FÃ:€F h¹= ‡/Å‘  ·~ fÍ9€‚ h¹= †[Ð!‘ hÖ{‘ päb€k ü:€ ý Qê.€} Uë€J qí€‚& Š$ï(¼ _Á: fål€k ü:€3 ý …Aÿ‘ …;„W‘ ‚aŠ’ „sŒ~‘ c‘p„ …’c‘ j˜a€ Kš¢ -›_€ ‰L‘ ‚s¦X‘ ‚G©J€} ƒ(¬w‘ Œ°‘ "¼* ‚~½W‘ &ÀT †dÂ‘ ‚Èh‘ ‚,Ê~‘ eÍ)‘ „ Ï¬ „DÓ‘ ˆs×O‘ ‚PàA‘ ƒ3ã‘ …
æB‘ ‚AëK‘ ‹î‘ ŒGù‘ ^‚‡e l‚¢,€‚ ‚ˆi§ a‚‰c ‡=‚Šq€† ‡~‚’6‘ ‡‚š3‘ a‚¡K‘ ‡F‚£+‘ ‡‚ªp‘ ‚‚²
€…, ZÅ@¨ G§@€„ V‘@£ G§@€ƒ/* utility *//* common */
#include "events.h"/* generator */
#include "utilities.h"

/* server */
#include "citytools.h"
#include "cityturn.h"
#include "connecnotify.h"
#include "srv_main.h"
#include "stdinhand.h"
#include "techtools.h"
#include "unittools.h"

#include "edithand FTC_EDITOR, NULL FTC_EDITOR, NULL FTC_EDITOR, NULL FTC_EDITOR, NULL,
                /* TRANS: ..." the tile <tile-coordinates> because"... */
                _("Cannot modify terrain for the tile %s because "
                  "%d is not a valid terrain id."),
                tile_link(ptile_center), terrain FTC_EDITOR, NULL FTC_EDITOR, NULL
  if (!(0 <= special && special < S_LAST)) {
    notify_conn(pc->self, ptile_center, E_BAD_COMMAND, FTC_EDITOR, NULL,
                /* TRANS: ..." the tile <tile-coordinates> because"... */
                _("Cannot modify specials for the tile %s
                tile_link(ptile_center), special);
    return;
  }
   FTC_EDITOR, NULL FTC_EDITOR, NULL,
                /* TRANS: ..." the tile <tile-coordinates> because"... */
                _("Cannot modify base for the tile %s because "
                  "%d is not a valid base type id."),
                tile_link(ptile_center), id);
    return;
  }
   FTC_EDITOR, NULL FTC_EDITOR, NULL FTC_EDITOR, NULL,
                /* TRANS: ..." at <tile-coordinates> because"... */
                _("Cannot create a unit at %s because the "
                  "given unit type id %d is invalid."),
                tile_link(ptile) FTC_EDITOR, NULL,
                /* TRANS: ..." type <unit-type> at <tile-coordinates>"... */
                _("Cannot create a unit of type %s at %stile_link(ptile) FTC_EDITOR, NULL,
                /* TRANS: ..." type <unit-type> on enemy tile
                 * <tile-coordinates>"... */%s."), utype_name_translation(punittype),
                tile_link(ptile) FTC_EDITOR, NULL,
                /* TRANS: ..." type <unit-type> on the terrain at
                 * <tile-coordinates>"... */
                _("Cannot create a unit of type %s on the terrain "
                  "at %s."),
                utype_name_translation(punittype), tile_link(ptile) FTC_EDITOR, NULL,
                _("Cannot remove units at FTC_EDITOR, NULL,
                /* TRANS: ..." at <tile-coordinates> because"... */
                _("Cannot remove a unit at %s because the "
                  "given unit type id %d is invalid."),
                tile_link(ptile) FTC_EDITOR, NULL,
                /* TRANS: ..." type <unit-type> at <tile-coordinates>
                 * because"... */
                _("Cannot remove a unit of type %s at %stile_link(ptile) FTC_EDITOR, NULL FTC_EDITOR, NULLutype_fuel(putype) FTC_EDITOR, NULLlink FTC_EDITOR, NULL FTC_EDITOR, NULL,
                /* TRANS: ..." at <tile-coordinates> because"... */
                _("Cannot create a city at %s
                tile_link(ptile), FTC_EDITOR, NULL,
                /* TRANS: ..." at <tile-coordinates>." */
                _("A city may not be built at %s."), tile_link(ptile) FTC_EDITOR, NULL FTC_EDITOR, NULL FTC_EDITOR, NULL,
                  _("Invalid city size %d for city %s."),
                  packet->size, city_link(pcity) FTC_EDITOR, NULL FTC_EDITOR, NULLcity_link(pcity) FTC_EDITOR, NULLcity_link(pcity) FTC_EDITOR, NULL FTC_EDITOR, NULL FTC_EDITOR, NULL FTC_EDITOR, NULLglobal_initial_techs(pplayer);
  give_nation FTC_EDITOR, NULL FTC_EDITOR, NULL FTC_EDITOR, NULL FTC_EDITOR, NULL FTC_EDITOR, NULL FTC_EDITOR, NULL FTC_EDITOR, NULL FTC_EDITOR, NULLit is not on the map!"), x, yptile_center, E_BAD_COMMAND, FTC_EDITOR, NULL,
                /* TRANS: ..." at <tile-coordinates> because"... */
                _("Cannot edit vision for the tile at %s because "
                  "given player id %d is invalid."),
                tile_link(ptile_center)struct city *pcity = tile_city(ptile);
  if (pcity && update_dumb_city(pplayer, pcity)) {
        /* Update city. */
        send_city_info(pplayer, pcity);
      }
        /* Send units. */
      if (map_is_known_and_seen(ptile, pplayer, V_MAIN)) {
        unit_list_iterate(ptile->units, punit) {
          if (!is_hiding_unit(punit)) {
            send_unit_info(pplayer, punit);
          }
        } unit_list_iterate_end;
      }
    } else {
      if (map_is_known_and_seen(ptile, pplayer, V_MAIN)) {
        /* Remove units. */
        unit_list_iterate(ptile->units, punit) {
          if (!is_hiding_unit(punit)) {
            unit_goes_out_of_sight(pplayer, punit);
          }
        } unit_list_iterate_end;
      }
      if (pcity) {
        /* Remove city. */
        remove_dumb_city(pplayer, ptile);
      } FTC_EDITOR, NULL FTC_EDITOR, NULL FTC_EDITOR, NULL FTC_EDITOR, NULL FTC_EDITOR, NULLpacket->scenario != game.scenario.is_scenario) {
    game.scenario.is_scenario = packet->scenario;
    changed = TRUE;
  }

  if (0 != strncmp(packet->scenario_name, game.scenario.name, 256)) {
    sz_strlcpy(game.scenario.name, packet->scenario_name);
    changed = TRUE;
  }

  if (0 != strncmp(packet->scenario_desc, game.scenario.description,
                   MAX_LEN_PACKET)) {
    sz_strlcpy(game.scenario.description, packet->scenario_desc);
    changed = TRUE;
  }

  if (packet->scenario_players != game.scenario.players) {
    game.scenario.players = packet->scenario_players;
    changed = TRUE;
  }

  if (changed) {
    send_scenario_info(NULL);
    send_game_info(NULLMake scenario file out of current game.
*****/
void handle_save_scenario(struct connection *pc, char *name)
{
  if (pc->access_level != ALLOW_HACK) {
    notify_conn(pc->self, NULL, E_BAD_COMMAND, FTC_EDITOR, NULL,
                _("No permissions to remotely save scenario."));
    return;
  }

  if (!game.scenario.is_scenario) {
    /* Scenario information not available */
    notify_conn(pc->self, NULL, E_BAD_COMMAND, FTC_EDITOR, NULL,
                _("Scenario information not set. Cannot save scenario."));
    return;
  }

  save_game(name, "Scenario", TRUEHandle scenario information packet
*****/
void handle_scenario_info(struct connection *pc,
                          struct packet_scenario_info *packet)
{
  game.scenario.is_scenario = packet->is_scenario;
  sz_strlcpy(game.scenario.name, packet->name);
  sz_strlcpy(game.scenario.description, packet->description);
  game.scenario.players = packet->players;

  /* Send new info to everybody. */
  send_scenario_info(NULL);
}
ENDREP
DELTA 15920 144691 10232
SVN  …é…ë}„ˆ, †9  s†8Œ I‡*€ ©‰F„ ¯$²f± l…Â~ ŠGã'„ ƒír„ ‚7ð|„ ¿aó7„ ‚³„ Žµ8„ “ÃM– ƒgÖw„ 9Úb„ ˜yÜŒ )úx ƒ$öM„ †}ùu„ „t‚€v G‚š  ˆ5‚†>„ …H‚Žw„ t‚Žw „6‚•7„ t‚Žw „ ‚še„ t‚Žw „‚Ÿ}„ t‚Žw …‚¥„ t‚Žw „‚«„ t‚Žw …<‚°&„ u‚Žw „w‚¶[„ t‚Žw ˆB‚¼J„ t‚Žw ‰‚Æ I‚¯? ƒ‚Ït„ †y‚Ó£ Q­@ –‚Úy„ I‚ñ„ †z‚þO– ‡6ƒ…k– ‹_ƒC„ Žƒ™&„ ‚ƒ§6„ ”ƒ©W„ ˆ ƒ½i„ ‰ƒÅm„ ‘xƒÏ„ Œƒá„ ªƒí'„ §„—B„ |„¾^„ „„À^„ ŒD„Äg„ Z„Ñ/„ u„Ó„ Ž.„Õ„ ‡y„ã8„  _„ë5€Y )…Œr€  –K…Ž\ †`…¦ …4…¬w ƒ…²1 ‚T…µ; …¸’ jË} ‹…º¢ ›…Å.€l ‚…à,™ ƒ-…âD€i ‚P…åe” 4…èK/* utility *//* common *//* scripting */
#include "script.h"

/* server */
#include "citytools.h"
#include "cityturn.h"
#include "maphand.h"
#include "notifylinklink(pcity));
      }
    } city_list_iterate_endlinklinklinklinklinklinklink(pcity), unit_linklinklinklink(pcity),linklinklink(pcity),
linklinklinklinklinklinklinklinklinklinklink(pcity),
linklink(pcity));
  }

  return successlinklinklink(pcity), unit_linklink(pcity), unit_linklinklinklinklinklinklinklinklinklinklinklinklinklinklinklinklinklinkhar name_from[MAX_LEN_NAME], name_to[MAX_LEN_NAME];
  const char *nation_from, *nation_to/* We copy that, because city_link always returns the same pointer. */
  sz_strlcpy(name_from, city_link(pcity_from));
  sz_strlcpy(name_to, city_link(pcity_to)name_from, name_tochar city_link_text[MAX_LEN_NAME];/* N.B.: city_link always returns the same pointer. */
        sz_strlcpy(city_link_text, city_link(pcity));city_link_text, city_linkN.B.: city_link always returns the same pointer. */
        sz_strlcpy(city_link_text, city_link(pcity));link_text, city_linkENDREP
DELTA 15785 45796 18155
SVN  §w©x5„ ˆE €g M‰€{ ‹‰ –ŒL¯ ƒ`¢^– ú¦=€ ¡€e …;¢</* 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 "notifybarbarianglobal_initial_techs(barbarians);
  give_nation FTC_SERVER_INFO, NULL FTC_SERVER_INFO, NULL,
                  _("Native unrest near %s led by %s."),
                  city_link(pc),
                 FTC_SERVER_INFO, NULL,
                  _("Sea raiders seen near %s!"),
                  city_linkENDREP
DELTA 15957 10906 3165
SVN  ëRì(‚7 † €‚1 b‡f† Sˆ: â*‰(/* utility */
#include "fcintl.h"
#include "log.h"
#include "mem.h"

/* common */
#include "diptreaty.h"
#include "events.h"
#include "game.h"
#include "map.h"
#include "packets.h"
#include "player.h"
#include "unit.h"

/* ai */
#include "advdiplomacy.h"

/* scripting */
#include "script.h"

/* server */notifyENDREP
DELTA 15986 6773 8540
SVN  ¨©~HŽV …~ €‚ p‡Y† œXˆ;‘ ˆU¥.© ¿®i— Ÿ]î-€‚] y€‚{ ‹9’c€< G  TŸG G@€„g/* utility */
#include "capability.h"
#include "fcintl.h"
#include "log.h"
#include "mem.h"
#include "support.h"

/* common */
#include "capstr.h"
#include "events.h"
#include "game.h"
#include "packets.h"
#include "player.h"
#include "version.h"

/* server */notifyconnection_attachif (connection_attach(pconn, NULL, FALSE)connection_detach(pconn- If pplayer is NULL and observing is FALSE: take the next available
    player that is not connected.
  - If pplayer is NULL and observing is TRUE: attach this connection to
    the game as global observer.
  - If pplayer is not NULL and observing is FALSE: take this player.
  - If pplayer is not NULL and observing is TRUE: observe this player.
 connection_attach(struct connection *pconn, struct player *pplayer,
                       bool observing)
{
  RETURN_VAL_IF_FAIL(pconn != NULL, FALSE);
  RETURN_VAL_IF_FAIL_MSG(!pconn->observer && pconn->playing == NULL, FALSE,
                         "connections must be detached with "
                         "connection_detach() before calling this!");

  if (!observing)if (pplayer) {
    conn_list_append(pplayer->connections, pconn);
  }

  restore_access_level(pconn);
  /* Reset the delta-state. */
  conn_clear_packet_cache(pconn);

  return TRUE;
}
  
***/
void connection_detach(struct connection *pconn)
{
  RETURN_IF_FAIL(pconn != NULL);

  if (NULL != pconn->playing) {
    conn_list_unlink(pconn->playing->connections, pconn);

    pconn->playing->is_connected = FALSE;

    /* If any other (non-observing) conn is attached to 
     * this player, the player is still connected. */
    conn_list_iterate(pconn->playing->connections, aconn) {
      if (!aconn->observer) {
        pconn->playing->is_connected = TRUE;
        break;
      }
    } conn_list_iterate_end;

    pconn->playing = NULL;
  }

  pconn->observer = FALSE;
  restore_access_level(pconn);
}
ENDREP
DELTA 15920 158717 1063
SVN  à]áZ † €Z Ù-‡0/* utility */
#include "fcintl.h"
#include "log.h"
#include "shared.h"

/* common */
#include "events.h"
#include "game.h"
#include "packets.h"
#include "spaceship.h"

/* server */
#include "plrhand.h"
#include "notifyENDREP
id: 2ek.5cy.r16112/49144
type: file
pred: 2ek.5cy.r16032/4006
count: 130
text: 16112 2607 281 65620 4640e6b3e1cf3a8c6583d32f9a09cecb
props: 11095 5259 111 0 09fa8b389220258550f0df17fa730769
cpath: /branches/S2_2/ai/advdiplomacy.c
copyroot: 15925 /branches/S2_2

id: 20.5cy.r16112/49406
type: file
pred: 20.5ck.r15837/15576
count: 308
text: 16112 20449 3163 69546 90cde427af8048ff79bb552a5a03a1db
props: 11069 16784 112 0 24b501182e64f7bbc4aaaa8b3f1d9020
cpath: /branches/S2_2/ai/aicity.c
copyroot: 15925 /branches/S2_2

id: 15t.5cy.r16112/49664
type: file
pred: 15t.5ck.r15920/163956
count: 48
text: 16112 32542 4469 11513 6e2c4e90263067691d5803a025109675
props: 11074 1421 111 0 18cdb9becb11c47631b7a093e907200c
cpath: /branches/S2_2/ai/ailog.c
copyroot: 15925 /branches/S2_2

PLAIN
K 11
Makefile.am
V 24
file 5d.5ck.r15407/13434
K 14
advdiplomacy.c
V 25
file 2ek.5cy.r16112/49144
K 14
advdiplomacy.h
V 25
file 2el.5ck.r15803/15045
K 13
advdomestic.c
V 22
file 1m.5ck.r15841/515
K 13
advdomestic.h
V 23
file 1n.0.r13297/443238
K 13
advmilitary.c
V 23
file 1u.5ck.r15851/2837
K 13
advmilitary.h
V 23
file 1v.0.r13297/446464
K 10
advspace.c
V 21
file f2.0.r7995/10885
K 10
advspace.h
V 21
file f3.0.r8119/28225
K 7
aiair.c
V 24
file 15y.5ck.r15894/7670
K 7
aiair.h
V 24
file 15z.0.r13297/446696
K 8
aicity.c
V 24
file 20.5cy.r16112/49406
K 8
aicity.h
V 24
file 21.5ck.r15837/16785
K 8
aidata.c
V 25
file 15o.5ck.r15855/30970
K 8
aidata.h
V 25
file 15p.5bk.r14492/10883
K 12
aidiplomat.c
V 25
file 16r.5ck.r15837/15817
K 12
aidiplomat.h
V 24
file 16s.0.r13297/446010
K 12
aiexplorer.c
V 25
file 2lj.5ck.r15796/42548
K 12
aiexplorer.h
V 25
file 2lk.5bk.r14247/21983
K 9
aiferry.c
V 25
file 2iw.5ck.r15837/14852
K 9
aiferry.h
V 22
file 2ix.0.r13146/1787
K 9
aiguard.c
V 24
file 335.0.r13133/233303
K 9
aiguard.h
V 22
file 336.0.r10445/8032
K 8
aihand.c
V 24
file 22.5ck.r15837/16061
K 8
aihand.h
V 23
file 23.0.r13297/446240
K 8
aihunt.c
V 25
file 2gc.5ck.r15806/12959
K 8
aihunt.h
V 24
file 2gd.0.r13297/447855
K 7
ailog.c
V 25
file 15t.5cy.r16112/49664
K 7
ailog.h
V 24
file 15u.0.r13286/177805
K 15
aiparatrooper.c
V 25
file 36o.5ck.r15837/17260
K 15
aiparatrooper.h
V 23
file 36p.0.r12670/95202
K 11
aisettler.c
V 25
file 2lh.5ck.r15796/43987
K 11
aisettler.h
V 23
file 2li.0.r10181/11195
K 8
aitech.c
V 24
file 24.5ck.r15785/99083
K 8
aitech.h
V 22
file 25.0.r10755/53545
K 9
aitools.c
V 22
file 9.5ck.r15908/2875
K 9
aitools.h
V 23
file a.5ck.r15284/36291
K 8
aiunit.c
V 22
file b.5cy.r15961/1311
K 8
aiunit.h
V 22
file c.5bk.r15066/5373
END
ENDREP
id: 8.5cy.r16112/51695
type: dir
pred: 8.5cy.r16032/6042
count: 1226
text: 16112 49922 1760 1760 46bac1fa60da73d8c7c5923f10b64656
props: 11108 11315 64 0 abac628483ea4fdfa3bea3a3a56e0532
cpath: /branches/S2_2/ai
copyroot: 15925 /branches/S2_2

id: dd.5cy.r16112/51939
type: file
pred: dd.5cy.r16008/431
count: 31
text: 16112 18257 179 7951 a6b2a053c13a1ac474b728ff25853c08
props: 10070 3405 111 0 45c0e160a790dc8f7645f8a7eabea654
cpath: /branches/S2_2/server/console.c
copyroot: 15925 /branches/S2_2

id: 10.5cy.r16112/52196
type: file
pred: 10.5cy.r15957/74351
count: 174
text: 16112 18461 725 14284 54b7e4fa57fa2123845e504d7331b81a
props: 10915 6829 112 0 b6ae571f94553e8ceec7deccc8b56fc9
cpath: /branches/S2_2/server/cityhand.c
copyroot: 15925 /branches/S2_2

id: 4q.5cy.r16112/52458
type: file
pred: 4q.5cy.r16103/3356
count: 45
text: 16112 28027 59 12297 b18717555eae3fea1e8ddc0a6a696c11
props: 10956 2433 111 0 4135f0dfb17a4d11b2424d95e27830f5
cpath: /branches/S2_2/server/handchat.c
copyroot: 15925 /branches/S2_2

id: vg.5cy.r16112/52717
type: file
pred: vg.5cy.r16084/4705
count: 433
text: 16112 37040 165 76253 a30611893b45d4e2775cb2f83f1e8240
props: 11057 12128 112 0 85dbe778568e34751643d476c23a0d7c
cpath: /branches/S2_2/server/srv_main.c
copyroot: 15925 /branches/S2_2

id: 325.5cy.r16112/52979
type: file
pred: 325.5ck.r15920/167191
count: 5
text: 16112 19216 50 1559 3d3a3ff509a2703c3e92a99453cdda1c
props: 10928 4110 110 0 dce24d5ac3f5e86568d59a55fa196991
cpath: /branches/S2_2/server/scripting/api_notify.c
copyroot: 15925 /branches/S2_2

PLAIN
K 11
Makefile.am
V 25
file 31z.5ck.r15407/21368
K 7
api.pkg
V 22
file 320.5cy.r16044/51
K 13
api_actions.c
V 24
file 32c.5ck.r15840/4911
K 13
api_actions.h
V 24
file 32d.5ck.r15840/4408
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 24
file 33d.5ck.r15770/8152
K 13
api_methods.h
V 24
file 33e.5ck.r15770/7650
K 12
api_notify.c
V 25
file 325.5cy.r16112/52979
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 24
file 32e.5bk.r14813/1690
K 15
api_utilities.h
V 24
file 32f.5bk.r14813/2223
K 8
script.c
V 26
file 328.5bk.r15266/135135
K 8
script.h
V 22
file 329.0.r10460/1603
K 15
script_signal.c
V 25
file 32a.5ck.r15296/64594
K 15
script_signal.h
V 21
file 32b.0.r12805/385
END
ENDREP
id: 31x.5cy.r16112/54160
type: dir
pred: 31x.5cy.r16044/1220
count: 98
text: 16112 53252 895 895 7cebf395b05b86f08c3149fb1456c573
props: 11108 4390 88 0 1e9d0e3735a93cd0fae3d0e1df53b911
cpath: /branches/S2_2/server/scripting
copyroot: 15925 /branches/S2_2

id: 2dw.5cy.r16112/54417
type: file
pred: 2dw.5cy.r16080/15780
count: 98
text: 16112 46878 1964 21758 250152a9e65784c24597d0b3c1437cbe
props: 11086 310 111 0 e5ad8d36ef6bfd356bb06d6f3ece066f
cpath: /branches/S2_2/server/connecthand.c
copyroot: 15925 /branches/S2_2

id: 4g.5cy.r16112/54683
type: file
pred: 4g.5cy.r16066/2817
count: 443
text: 16112 141 260 83100 9732b94892987f379e25db0ee0807732
props: 10971 452 112 0 14688860b403b675ea6c3d1b6f5d2330
cpath: /branches/S2_2/server/citytools.c
copyroot: 15925 /branches/S2_2

id: 39c.5cy.r16112/54942
type: file
pred: 39c.5ck.r15920/169098
count: 16
text: 16112 3026 15202 31763 f5847453e0577748ec058cb987323e09
props: 12670 11903 34 0 25e6c2f7558b7484000d4d090dea5b92
cpath: /branches/S2_2/server/auth.c
copyroot: 15925 /branches/S2_2

id: 4i.5cy.r16112/55203
type: file
pred: 4i.5cy.r15957/75136
count: 410
text: 16112 44226 1610 95741 c7bfd7de108e170d74f3e9b5f49e5c07
props: 10955 1971 112 0 e17e3e5087e98ab1d6f041bdc6ae85ee
cpath: /branches/S2_2/server/cityturn.c
copyroot: 15925 /branches/S2_2

id: lw.5cy.r16112/55466
type: file
pred: lw.5cy.r15957/75399
count: 132
text: 16112 45868 602 21752 2aa64c5a37d830f40855d35fdc21f408
props: 11004 1858 112 0 0ba48eb7b1f123775dc0e292f9b3ab64
cpath: /branches/S2_2/server/barbarian.c
copyroot: 15925 /branches/S2_2

id: 9a.5cy.r16112/55729
type: file
pred: 9a.5ck.r15920/169834
count: 51
text: 16112 48871 242 12442 5442497f5f00d85a3719c749910daf2d
props: 10956 4203 111 0 e9cbe3af5d5934f88ab895fd46902062
cpath: /branches/S2_2/server/spacerace.c
copyroot: 15925 /branches/S2_2

id: 4o.5cy.r16112/55992
type: file
pred: 4o.5ck.r15920/170084
count: 198
text: 16112 19295 912 18628 9aa1f432084c4074cdb539bd1fedaf4a
props: 11057 13195 112 0 0c4c829d27ee6fd81512219fee75ff65
cpath: /branches/S2_2/server/gamehand.c
copyroot: 15925 /branches/S2_2

id: 13.5cy.r16112/56256
type: file
pred: 13.5cy.r16098/2359
count: 261
text: 16112 23953 223 59263 74056df7b90333999f33a13aa383f9cf
props: 10990 3093 112 0 0e7b2145f04ad4ce4f4fdbad497f598c
cpath: /branches/S2_2/server/maphand.c
copyroot: 15925 /branches/S2_2

id: 3bk.5cy.r16112/56516
type: file
pred: 3bk.5cy.r16066/3332
count: 56
text: 16112 37231 6966 44356 531c34a53aa33f7fcfa1989e5ec4e337
props: 12670 12724 34 0 25e6c2f7558b7484000d4d090dea5b92
cpath: /branches/S2_2/server/edithand.c
copyroot: 15925 /branches/S2_2

id: 4m.5cy.r16112/56779
type: file
pred: 4m.5cy.r15957/76190
count: 135
text: 16112 46501 347 30248 988395f7dada936d3e6b44c553602451
props: 10928 6706 112 0 b2683e5213f79af73eb9759948ba224b
cpath: /branches/S2_2/server/diplhand.c
copyroot: 15925 /branches/S2_2

id: vz.5cy.r16112/57041
type: file
pred: vz.5cy.r15957/76454
count: 130
text: 16112 430 2093 49149 9bacb5313b86c81bbd88e4a7e7ec5112
props: 10915 10832 111 0 8ab1a522471ad7dd5014b23b42c49491
cpath: /branches/S2_2/server/diplomats.c
copyroot: 15925 /branches/S2_2

id: 1a.5cy.r16112/57304
type: file
pred: 1a.5cy.r16016/51938
count: 525
text: 16112 2919 78 116298 ef5084bcd8003a30c8daa574011d406d
props: 11095 1637 112 0 c5bfe3670c093a84ebf28b66298044e4
cpath: /branches/S2_2/server/unittools.c
copyroot: 15925 /branches/S2_2

id: 33n.5cy.r16112/57566
type: file
pred: 33n.5cy.r15957/76984
count: 59
text: 16112 20236 184 29484 82da39f03f998e6feaeaebf3aa19da71
props: 11004 2210 111 0 05a46e497021c8716b647ee1425e21a2
cpath: /branches/S2_2/server/techtools.c
copyroot: 15925 /branches/S2_2

id: 4ex.5cy.r16112/57830
type: file
pred: 4ex.5cy.r16074/70678
count: 5
text: 16112 23641 281 23830 d21846a52eaee7a86209d011c467ece4
cpath: /branches/S2_2/server/voting.c
copyroot: 15925 /branches/S2_2

id: 4i4.5cy.r16112/58033
type: file
count: 0
text: 16112 24202 3812 11975 ff1995b71bc85306b64b80cd8bd6687b
cpath: /branches/S2_2/server/notify.c
copyroot: 15925 /branches/S2_2

id: 18.5cy.r16112/58210
type: file
pred: 18.5cy.r16107/291
count: 412
text: 16112 28112 2414 70845 11141066401117ff70b72336bed7ea83
props: 11060 7742 112 0 090627d3849ce880ce4f29c1c260669f
cpath: /branches/S2_2/server/unithand.c
copyroot: 15925 /branches/S2_2

id: 4z.5cy.r16112/58471
type: file
pred: 4z.5cy.r16080/16308
count: 546
text: 16112 30556 783 171539 4b2ba58bc7ae1e09d326c411b14c2b97
props: 11087 3718 112 0 d0e5ada95c1c714385b6751e38a4f15d
cpath: /branches/S2_2/server/stdinhand.c
copyroot: 15925 /branches/S2_2

id: 4i5.5cy.r16112/58735
type: file
count: 0
text: 16112 31367 1162 3177 1a909c9a675fbe6956a03531f591b999
cpath: /branches/S2_2/server/notify.h
copyroot: 15925 /branches/S2_2

id: 4u.5cy.r16112/58911
type: file
pred: 4u.5cy.r16080/16571
count: 493
text: 16112 72 42 63608 f889e5fc5187ae343389709b554ae796
props: 11057 14272 112 0 ab87823e529bcaae2ff952f918d53839
cpath: /branches/S2_2/server/plrhand.c
copyroot: 15925 /branches/S2_2

id: 5q.5cy.r16112/59169
type: file
pred: 5q.5ck.r15908/5354
count: 62
text: 16112 0 47 2644 3f46a064b45da4a4920bff55a248aa64
props: 10619 59300 111 0 8ba011ca1ef4e408ab91a853a48e15eb
cpath: /branches/S2_2/server/Makefile.am
copyroot: 15925 /branches/S2_2

id: 4v.5cy.r16112/59425
type: file
pred: 4v.5cy.r16032/6542
count: 99
text: 16112 2553 25 3089 91fa25516fdffb7db0aacffb950deb94
props: 11057 14627 111 0 1506d3ea4bc6eda8c5630824cdee7154
cpath: /branches/S2_2/server/plrhand.h
copyroot: 15925 /branches/S2_2

PLAIN
K 11
Makefile.am
V 24
file 5q.5cy.r16112/59169
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 25
file 39c.5cy.r16112/54942
K 6
auth.h
V 23
file 39d.0.r13513/10535
K 11
barbarian.c
V 24
file lw.5cy.r16112/55466
K 11
barbarian.h
V 21
file lx.0.r13220/1454
K 10
cityhand.c
V 24
file 10.5cy.r16112/52196
K 10
cityhand.h
V 23
file 4f.0.r13297/423686
K 11
citytools.c
V 24
file 4g.5cy.r16112/54683
K 11
citytools.h
V 23
file 4h.5cy.r16066/3077
K 10
cityturn.c
V 24
file 4i.5cy.r16112/55203
K 10
cityturn.h
V 23
file 4j.5ck.r15766/7385
K 11
civserver.c
V 24
file 4k.5ck.r15698/22886
K 11
civserver.h
V 21
file 4l.0.r2805/33121
K 10
commands.c
V 24
file 2ly.5cy.r16034/8328
K 10
commands.h
V 24
file 2lz.5cy.r16034/8586
K 13
connecthand.c
V 25
file 2dw.5cy.r16112/54417
K 13
connecthand.h
V 25
file 2dx.5cy.r16080/16045
K 9
console.c
V 24
file dd.5cy.r16112/51939
K 9
console.h
V 21
file de.0.r11697/6876
K 10
diplhand.c
V 24
file 4m.5cy.r16112/56779
K 10
diplhand.h
V 21
file 4n.0.r13421/6826
K 11
diplomats.c
V 24
file vz.5cy.r16112/57041
K 11
diplomats.h
V 24
file w0.5bk.r13745/13943
K 10
edithand.c
V 25
file 3bk.5cy.r16112/56516
K 10
edithand.h
V 23
file 4ez.5ck.r15317/588
K 10
gamehand.c
V 24
file 4o.5cy.r16112/55992
K 10
gamehand.h
V 24
file 4p.5ck.r15698/24111
K 9
generator
V 24
dir 2me.5ck.r15901/22456
K 11
ggzserver.c
V 25
file 39a.5bk.r15001/48736
K 11
ggzserver.h
V 25
file 39b.5bk.r15001/48999
K 10
gotohand.c
V 23
file 11.5ck.r15908/5108
K 10
gotohand.h
V 24
file 7r.5bk.r14972/34009
K 10
handchat.c
V 24
file 4q.5cy.r16112/52458
K 10
handchat.h
V 22
file dj.0.r7100/189089
K 9
maphand.c
V 24
file 13.5cy.r16112/56256
K 9
maphand.h
V 24
file 14.5cy.r16076/22767
K 6
meta.c
V 24
file 4s.5ck.r15901/23681
K 6
meta.h
V 23
file 4t.5bk.r14763/1928
K 8
notify.c
V 25
file 4i4.5cy.r16112/58033
K 8
notify.h
V 25
file 4i5.5cy.r16112/58735
K 9
plrhand.c
V 24
file 4u.5cy.r16112/58911
K 9
plrhand.h
V 24
file 4v.5cy.r16112/59425
K 8
report.c
V 24
file vi.5cy.r15986/15867
K 8
report.h
V 24
file vj.5cy.r15986/16126
K 9
ruleset.c
V 24
file 8w.5cy.r15944/27149
K 9
ruleset.h
V 23
file 8x.5ck.r15729/3717
K 13
sanitycheck.c
V 24
file wi.5ck.r15414/14072
K 13
sanitycheck.h
V 23
file wj.5bk.r14639/6548
K 10
savegame.c
V 24
file vl.5cy.r16076/23024
K 10
savegame.h
V 24
file vm.5ck.r15698/25092
K 7
score.c
V 25
file 2eg.5ck.r15855/33214
K 7
score.h
V 22
file 2eh.0.r11430/3487
K 9
scripting
V 24
dir 31x.5cy.r16112/54160
K 8
sernet.c
V 21
file 15.5cy.r15968/69
K 8
sernet.h
V 25
file 4y.5bk.r14427/262734
K 10
settings.c
V 25
file 2m0.5cy.r16076/22246
K 10
settings.h
V 24
file 2m1.5ck.r15856/4622
K 10
settlers.c
V 24
file 7s.5ck.r15917/12731
K 10
settlers.h
V 24
file 7t.5bk.r14416/98109
K 11
spacerace.c
V 24
file 9a.5cy.r16112/55729
K 11
spacerace.h
V 21
file 9b.0.r11338/1129
K 10
srv_main.c
V 24
file vg.5cy.r16112/52717
K 10
srv_main.h
V 23
file vh.5cy.r15948/1576
K 11
stdinhand.c
V 24
file 4z.5cy.r16112/58471
K 11
stdinhand.h
V 23
file 50.5ck.r15833/7196
K 11
techtools.c
V 25
file 33n.5cy.r16112/57566
K 11
techtools.h
V 24
file 33o.5ck.r15913/5569
K 10
unithand.c
V 24
file 18.5cy.r16112/58210
K 10
unithand.h
V 24
file 19.5bk.r14247/14333
K 11
unittools.c
V 24
file 1a.5cy.r16112/57304
K 11
unittools.h
V 24
file 1b.5ck.r15610/36892
K 8
voting.c
V 25
file 4ex.5cy.r16112/57830
K 8
voting.h
V 25
file 4ey.5ck.r15675/47518
END
ENDREP
id: z.5cy.r16112/63087
type: dir
pred: z.5cy.r16107/3854
count: 3775
text: 16112 59682 3392 3392 7e1dca8f2760be81ea8dfd60fbde51eb
props: 13932 1834 123 0 2b883b78ac685994a9940e39e0d24770
cpath: /branches/S2_2/server
copyroot: 15925 /branches/S2_2

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 21
file 6.5bk.r14672/184
K 11
Makefile.am
V 23
file 59.5bk.r14918/1267
K 4
NEWS
V 22
file 6m.5bk.r13824/202
K 6
README
V 20
file 7.0.r4421/96382
K 2
ai
V 22
dir 8.5cy.r16112/51695
K 10
autogen.sh
V 22
file 12o.5ck.r15690/50
K 9
bootstrap
V 22
dir 2p5.5ck.r15916/868
K 6
client
V 21
dir d.5cy.r16101/7986
K 6
common
V 21
dir p.5cy.r16110/5686
K 12
config.mac.h
V 20
file hb.0.r6045/5982
K 12
configure.ac
V 23
file 149.5ck.r15790/218
K 4
data
V 22
dir w.5cy.r16068/64685
K 6
debian
V 22
dir 5w.5ck.r15836/2958
K 12
dependencies
V 25
dir 2yu.5ck.r15799/243560
K 11
diff_ignore
V 19
file qq.0.r13200/42
K 3
doc
V 22
dir k7.5ck.r15879/1642
K 2
m4
V 23
dir 12p.5cy.r15942/2078
K 6
manual
V 24
dir 2m2.5ck.r15855/40893
K 2
po
V 24
dir fs.5cy.r16028/501624
K 7
scripts
V 23
dir 2yo.5bk.r14810/1300
K 6
server
V 22
dir z.5cy.r16112/63087
K 10
stamp-h.in
V 19
file 80.0.r1125/241
K 5
tests
V 22
dir 2g9.5ck.r15661/767
K 7
utility
V 22
dir 1c.5cy.r16072/6543
K 10
version.in
V 25
file 2lo.5cy.r16074/70427
K 3
vms
V 21
dir u9.0.r11105/70719
K 5
win32
V 24
dir 2eu.5bk.r13732/30345
END
ENDREP
id: 3.5cy.r16112/64599
type: dir
pred: 3.5cy.r16110/7193
count: 12393
text: 16112 63335 1251 1251 295f76421f38c2b4bc7672383f5bce10
props: 11109 0 255 0 8cbc80e0da9c47b05b8ffee17ea9b0f1
cpath: /branches/S2_2
copyroot: 15925 /branches/S2_2

PLAIN
K 5
S1_14
V 20
dir 3.21.r15733/2958
K 4
S2_0
V 21
dir 3.10x.r15826/3238
K 4
S2_1
V 21
dir 3.59e.r16108/5933
K 4
S2_2
V 22
dir 3.5cy.r16112/64599
K 11
freeciv-web
V 22
dir 3.5bl.r13594/14918
END
ENDREP
id: 1.0.r16112/65045
type: dir
pred: 1.0.r16110/7636
count: 3649
text: 16112 64838 194 194 d0016d8d2ca46854b1150bbd0be7f21f
cpath: /branches
copyroot: 0 /

PLAIN
K 8
branches
V 20
dir 1.0.r16112/65045
K 4
tags
V 21
dir 2.0.r15609/968232
K 5
trunk
V 22
dir 3.5ck.r16111/61963
K 7
website
V 18
dir 3ge.0.r12388/0
END
ENDREP
id: 0.0.r16112/65367
type: dir
pred: 0.0.r16111/62351
count: 16112
text: 16112 65201 153 153 48e1395ee594993e3baeb096cc111b73
cpath: /
copyroot: 0 /

3bk.5cy.t16111-1 modify true false /branches/S2_2/server/edithand.c

4i.5cy.t16111-1 modify true false /branches/S2_2/server/cityturn.c

lw.5cy.t16111-1 modify true false /branches/S2_2/server/barbarian.c

4m.5cy.t16111-1 modify true false /branches/S2_2/server/diplhand.c

2dw.5cy.t16111-1 modify true false /branches/S2_2/server/connecthand.c

9a.5cy.t16111-1 modify true false /branches/S2_2/server/spacerace.c

4u.5cy.t16111-1 modify true false /branches/S2_2/server/plrhand.c

5q.5cy.t16111-1 modify true false /branches/S2_2/server/Makefile.am

4g.5cy.t16111-1 modify true false /branches/S2_2/server/citytools.c

vz.5cy.t16111-1 modify true false /branches/S2_2/server/diplomats.c

4v.5cy.t16111-1 modify true false /branches/S2_2/server/plrhand.h

2ek.5cy.t16111-1 modify true false /branches/S2_2/ai/advdiplomacy.c

1a.5cy.t16111-1 modify true false /branches/S2_2/server/unittools.c

39c.5cy.t16111-1 modify true false /branches/S2_2/server/auth.c

dd.5cy.t16111-1 modify true false /branches/S2_2/server/console.c

325.5cy.t16111-1 modify true false /branches/S2_2/server/scripting/api_notify.c

10.5cy.t16111-1 modify true false /branches/S2_2/server/cityhand.c

33n.5cy.t16111-1 modify true false /branches/S2_2/server/techtools.c

4o.5cy.t16111-1 modify true false /branches/S2_2/server/gamehand.c

20.5cy.t16111-1 modify true false /branches/S2_2/ai/aicity.c

4ex.5cy.t16111-1 modify true false /branches/S2_2/server/voting.c

_0.5cy.t16111-1 add true false /branches/S2_2/server/notify.c

13.5cy.t16111-1 modify true false /branches/S2_2/server/maphand.c

4q.5cy.t16111-1 modify true false /branches/S2_2/server/handchat.c

18.5cy.t16111-1 modify true false /branches/S2_2/server/unithand.c

4z.5cy.t16111-1 modify true false /branches/S2_2/server/stdinhand.c

_1.5cy.t16111-1 add true false /branches/S2_2/server/notify.h

15t.5cy.t16111-1 modify true false /branches/S2_2/ai/ailog.c

vg.5cy.t16111-1 modify true false /branches/S2_2/server/srv_main.c


65367 65517
