DELTA 32154 0 161
SVN  ð/î~ G  …9F …d…~€ á|Ž3*/

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

#include "fc_prehdrs.h"

#include <errno.h>
#include <stdarg.h>
#include <stdio.h>
#include <string.h>ENDREP
DELTA 5100 2276 5210
SVN  ›!í„K‡	 G  ‡,H€‚ y‰€ŠS G €C ‚;‘)¤ D—@º ‚J”lº ƒ8™¦ ƒ§ S¬ Š1¡| …­­ D—@€‚N S¬’ D—@€' TÑ}« D—@€‚d '³S¬ D—@€‚~ *¶F¬ D—@€‚~ *¹;° D—@€„B S¬© D—@€x S¬ª D—@€| S¬ª D—@€C R­ ¢ D—@€e w¼t¥ D—@€y w¿{€i D—@€„ P¬€h D—@€„ S¬€. ƒvÀu€2 ƒ|Äm£ ‚oÈk€E D—@€‚M TÑ}€	 ‚mÒS€ D—@™ UÓ2€^ [Ñv€ D—@ UÓ2€b [Ñv€w D—@€‚F TÑ}ž D—@€‚M S¬~ž D—@€‚^ S¬~ž D—@€‚^ V¬~§ D—@€„  Y¬y  D—@€‚ T¬~¡ D—@€‚ Q¬~€ D—@€P Q¬~€~ D—@€P T¬~˜ D—@€H T¬~™ D—@€N T¬~™ D—@€r T¬~œ D—@€‚" T¬~ª D—@€p 6ö~€‚W T¬~€T D—@€h wŒ[ T¬~€Y D—@€‚l T¬~€a D—@€‚| T¬~€f D—@€„d T¬~€k D—@€ƒ S¬~  D—@€ƒ T¬~œ D—@€„Y T¬~™ D—@€ƒ*fc_config.h>
#endif

#include "fc_prehdrs.h"

#include <limits.h>
#include <math.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#ifdef FREECIV_HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket
/* utility */
#include "bitvector.h"
#include "capability.h"
#include "log.h"
#include "mem.h"
#include "support.h"

/* common */
#include "events.h"
#include "player.h"
#include "requirements.h"
#include "tech.h"
#include "worklist.h"

#include "dataio.h"

static bool get_conv(char *dst, size_t ndst, const char *src,
                     size_t nsrc);

static DIO_PUT_CONV_FUN put_conv_callback = NULL;
static DIO_GET_CONV_FUN get_conv_callback = get_conv;

/* Uncomment to make field range tests to asserts, fatal with -F */
/* #define FIELD_RANGE_ASSERT */

#if defined(FREECIV_TESTMATIC) && !defined(FIELD_RANGE_ASSERT)
#define FIELD_RANGE_ASSERT
#endif

#ifdef FIELD_RANGE_ASSERT
/* This evaluates _test_ twice. If that's a problem,
 * it should evaluate it just once and store result to variable.
 * That would lose verbosity of the assert message. */
#define FIELD_RANGE_TEST(_test_, _action_, _format_, ...) \
  fc_assert(!(_test_));                                   \
  if (_test_) {                                           \
    _action_                                              \
  }
#else
#define FIELD_RANGE_TEST(_test_, _action_, _format_, ...) \
  if (_test_) {                                           \
    _action_                                              \
    log_error(_format_, ## __VA_ARGS__);                  \
  }
#endif

****
  Sets string conversion callback to be used when putting text This is default get_conv_callback.
******/
static bool get_conv(char *dst, size_t ndst, const  Sets string conversion callback to use when getting textdout->current + size > dout->dest_sizereturn dio_input_remaining(din) >= size  Return the size of the data_type in bytes.
******/
size_t data_type_size(enum data_type type)
{
  switch (type) {
  case DIOT_UINT8:
  case DIOT_SINT8:
    return 1;
  case DIOT_UINT16:
  case DIOT_SINT16:
    return 2;
  case DIOT_UINT32:
  case DIOT_SINT32:
    return 4;
  case DIOT_LAST:
    break;
  }

  fc_assert_msg(FALSE, "data_type %d not handled.", type);
  return 0 Skips 'n' bytes.
******/
bool dio_input_skip(struct data_in *din, size_t size)
{
  if (enough_data(din, size)) {
    din->current += size;
    return TRUE;
  } else {
    return FALSE;  Insert value using 8 bits. May overflow.
******/
void dio_put_uint8(struct data_out *dout, int value)
{
  uint8_t x = value;
  FC_STATIC_ASSERT(sizeof(x) == 1, uint8_not_1_byte);

  FIELD_RANGE_TEST((int) x != value, ,
                   "Trying to put %d into 8 bits; "
                   "it will result %d at receiving side.",
                   value, (int) x);

  if (enough_space(dout, 1)) {  Insert value using 16 bits. May overflow.
******/
void dio_put_uint16(struct data_out *dout, int value)
{
  uint16_t x = htons(value);
  FC_STATIC_ASSERT(sizeof(x) == 2, uint16_not_2_bytes);

  FIELD_RANGE_TEST((int) ntohs(x) != value, ,
                   "Trying to put %d into 16 bits; "
                   "it will result %d at receiving side.",
                   value, (int) ntohs(x));

  if (enough_space(dout, 2)) {  Insert value using 32 bits. May overflow.
******/
void dio_put_uint32(struct data_out *dout, int value)
{
  uint32_t x = htonl(value);
  FC_STATIC_ASSERT(sizeof(x) == 4, uint32_not_4_bytes);

  FIELD_RANGE_TEST((int) ntohl(x) != value, ,
                   "Trying to put %d into 32 bits; "
                   "it will result %d at receiving side.",
                   value, (int) ntohl(x));

  if (enough_space(dout, 4)) {  Insert value using 'size' bits. May overflow.
******/
void dio_put_type(struct data_out *dout, enum data_type type, int value)
{
  switch (type) {
  case DIOT_UINT8:
    dio_put_uint8(dout, value);
    return;
  case DIOT_UINT16:
    dio_put_uint16(dout, value);
    return;
  case DIOT_UINT32:
    dio_put_uint32(dout, value);
    return;
  case DIOT_SINT8:
    dio_put_sint8(dout, value);
    return;
  case DIOT_SINT16:
    dio_put_sint16(dout, value);
    return;
  case DIOT_SINT32:
    dio_put_sint32(dout, value);
    return;
  case DIOT_LAST:
    break;
  }

  fc_assert_msg(FALSE, "data_type %d not handled.", type)Insert value using 8 bits. May overflow.
******/
void dio_put_sint8(struct data_out *dout, int value)
{
  dio_put_uint8(dout, 0 <= value ? value : value + 0x100)Insert value using 16 bits. May overflow.
******/
void dio_put_sint16(struct data_out *dout, int value)
{
  dio_put_uint16(dout, 0 <= value ? value : value + 0x10000)Insert value using 32 bits. May overflow.
******/
void dio_put_sint32(struct data_out *dout, int value)
{
#if SIZEOF_INT == 4
  dio_put_uint32(dout, value);
#else
  dio_put_uint32(dout, (0 <= value ? value : value + 0x100000000));
#endifInsert value 0 or 1 using 8 bits.
******/
void dio_put_bool8(struct data_out *dout, bool value)
{
  FIELD_RANGE_TEST(value != TRUE && value != FALSE,
                   value = (value != FALSE);,
                   "Trying to put a non-boolean: %d", (int) value);  Insert value 0 or 1 using 32 bits.
******/
void dio_put_bool32(struct data_out *dout, bool value)
{
  FIELD_RANGE_TEST(value != TRUE && value != FALSE,
                   value = (value != FALSE);,
                   "Trying to put a non-boolean: %d",
                   (int) value);**
  Insert a float number, which is multiplied by 'float_factor' before
  being encoded into an uint32.
********/
void dio_put_ufloat(struct data_out *dout, float value, int float_factor)
{
  uint32_t v = value * float_factor;

  FIELD_RANGE_TEST(fabsf((float) v / float_factor - value) > 1.1 / float_factor, ,
                   "Trying to put %f with factor %d in 32 bits; "
                   "it will result %f at receiving side, having error of %f units.",
                   value, float_factor, (float) v / float_factor,
                   fabsf((float) v / float_factor - value) * float_factor);

  dio_put_uint32(dout, v)**
  Insert a float number, which is multiplied by 'float_factor' before
  being encoded into a sint32.
********/
void dio_put_sfloat(struct data_out *dout, float value, int float_factor)
{
  int32_t v = value * float_factor;

  FIELD_RANGE_TEST(fabsf((float) v / float_factor - value) > 1.1 / float_factor, ,
                   "Trying to put %f with factor %d in 32 bits; "
                   "it will result %f at receiving side, having error of %f units.",
                   value, float_factor, (float) v / float_factor,
                   fabsf((float) v / float_factor - value) * float_factor);

  dio_put_sint32(dout, v)Insert number of values brefore stop_value using 8 bits. Then
  insert values using 8 bits for each. stop_value is not required to
  fit in 8 bits. Actual values may overflow  Insert number of values brefore stop_value using 8 bits. Then
  insert values using 16 bits for each. stop_value is not required to
  fit in 16 bits. Actual values may overflow  Insert block directly from memory  Insert NULL-terminated string. Conversion callback is used if set.
******/
void dio_put_string(struct data_out *dout, const char *value)
{
  if (put_conv_callback) {
    size_t length;
    char *buffer;

    if ((buffer = (*put_conv_callback) (value, &length))) {
      dio_put_memory(dout, buffer, length + 1);
      free(buffer);
    }
  } else {
    dio_put_memory(dout, value, strlen(value) + 1);  Insert tech numbers from value array as 8 bit values until there is value
  A_LAST or MAX_NUM_TECH_LIST tech numbers have been inserted  Insert unit type numbers from value array as 8 bit values until there is
  value U_LAST or MAX_NUM_UNIT_LIST numbers have been inserted.
******/
void dio_put_unitUNIT_LIST; i++) {
    dio_put_uint8(dout, value[i]);
    if (value[i] == U_LAST) {
      break  Insert building type numbers from value array as 8 bit values until there
  is value B_LAST or MAX_NUM_BUILDING_LIST numbers have been inserted.
******/
void dio_put_buildingBUILDING_LIST; i++) {
    dio_put_uint8(dout, value[i]);
    if (value[i] == B_LAST) {
      break  Insert number of worklist items as 8 bit value and then insert
  8 bit kind and 8 bit number for each worklist item.
******/
void dio_put_worklist(struct data_out *dout, const struct worklist *pwl)
{
  int i, length = worklist_length(pwl);

  dio_put_uint8(dout, length);
  for (i = 0; i < length; i++) {
    const struct universal *pcp = &(pwl->entries[i]);

    dio_put_uint8(dout, pcp->kind);
    dio_put_uint8(dout, universal_number(pcp)); Receive uint8 value to dest.
******/
bool dio_get_uint8(struct data_in *din, int *dest)
{
  uint8_t x;

  FC_STATIC_ASSERT(sizeof(x) == 1, uint8_not_byte);

  if (!enough_data(din, 1)) {
    log_packet("Packet too short to read 1 byte");

    return FALSE;
  }

  memcpy(&x, ADD_TO_POINTER(din->src, din->current), 1);
  *dest = x;
  din->current++;
  return TRUReceive uint16 value to dest.
******/
bool dio_get_uint16(struct data_in *din, int *dest)
{
  uint16_t x;

  FC_STATIC_ASSERT(sizeof(x) == 2, uint16_not_2_bytes);

  if (!enough_data(din, 2)) {
    log_packet("Packet too short to read 2 bytes");

    return FALSE;
  }

  memcpy(&x, ADD_TO_POINTER(din->src, din->current), 2);
  *dest = ntohs(x);
  din->current += 2;
  return TRUReceive uint32 value to dest.
******/
bool dio_get_uint32(struct data_in *din, int *dest)
{
  uint32_t x;

  FC_STATIC_ASSERT(sizeof(x) == 4, uint32_not_4_bytes);

  if (!enough_data(din, 4)) {
    log_packet("Packet too short to read 4 bytes");

    return FALSE;
  }

  memcpy(&x, ADD_TO_POINTER(din->src, din->current), 4);
  *dest = ntohl(x);
  din->current += 4;
  return TRUceive value using 'size' bits to dest.
******/
bool dio_get_type(struct data_in *din, enum data_type type, int *dest)
{
  switch (type) {
  case DIOT_UINT8:
    return dio_get_uint8(din, dest);
  case DIOT_UINT16:
    return dio_get_uint16(din, dest);
  case DIOT_UINT32:
    return dio_get_uint32(din, dest);
  case DIOT_SINT8:
    return dio_get_sint8(din, dest);
  case DIOT_SINT16:
    return dio_get_sint16(din, dest);
  case DIOT_SINT32:
    return dio_get_sint32(din, dest);
  case DIOT_LAST:
    break;
  }

  fc_assert_msg(FALSE, "data_type %d not handled.", type);
  returnTake boolean value from 8 bits.
******/
bool dio_get_bool8(struct data_in *din, bool *dest)
{
  int ival;

  if (!dio_get_uint8(din, &ival)) {
    return FALSE;
  }

  if (ival != 0 && ival != 1) {
    log_packet("Got a bad boolean: %d", ival);
    return FALSE;
  }

  *dest = (ival != 0);
  return TRUTake boolean value from 32 bits.
******/
bool dio_get_bool32(struct data_in *din, bool * dest)
{
  int ival;

  if (!dio_get_uint32(din, &ival)) {
    return FALSE;
  }

  if (ival != 0 && ival != 1) {
    log_packet("Got a bad boolean: %d", ival);
    return FALSE;
  }

  *dest = (ival != 0);
  return TRU**
  Get an unsigned float number, which have been multiplied by 'float_factor'
  and encoded into an uint32 by dio_put_ufloat().
********/
bool dio_get_ufloat(struct data_in *din, float *dest, int float_factor)
{
  int ival;

  if (!dio_get_uint32(din, &ival)) {
    return FALSE;
  }

  *dest = (float) ival / float_factor;
  return TRU**
  Get a signed float number, which have been multiplied by 'float_factor'
  and encoded into a sint32 by dio_put_sfloat().
********/
bool dio_get_sfloat(struct data_in *din, float *dest, int float_factor)
{
  int ival;

  if (!dio_get_sint32(din, &ival)) {
    return FALSE;
  }

  *dest = (float) ival / float_factor;
  return TRUTake value from 8 bits.
******/
bool dio_get_sint8(struct data_in *din, int *dest)
{
  int tmp;

  if (!dio_get_uint8(din, &tmp)) {
    return FALSE;
  }

  if (tmp > 0x7f) {
    tmp -= 0x100;
  }
  *dest = tmp;
  return TRUTake value from 16 bits.
******/
bool dio_get_sint16(struct data_in *din, int *dest)
{
  int tmp;

  if (!dio_get_uint16(din, &tmp)) {
    return FALSE;
  }

  if (tmp > 0x7fff) {
    tmp -= 0x10000;
  }
  *dest = tmp;
  return TRUTake value from 32 bits.
******/
bool dio_get_sint32(struct data_in *din, int *dest)
{
  int tmp;

  if (!dio_get_uint32(din, &tmp)) {
    return FALSE;
  }

#if SIZEOF_INT != 4
  if (tmp > 0x7fffffff) {
    tmp -= 0x100000000;
  }
#endif

  *dest = tmp;
  return TRUTake memory block directly.
******/
bool dio_get_memory(struct data_in *din, void *dest, size_t dest_size)
{
  if (!enough_data(din, dest_size)) {
    log_packet("Got too short memory");
    return FALSE;
  }

  memcpy(dest, ADD_TO_POINTER(din->src, din->current), dest_size);
  din->current += dest_size;
  return TRUTake string. Conversion callback is used.
******/
bool dio_get_string(struct data_in *din, char *dest, size_t max_dest_size)
{
  char *c;
  size_t offset, remaining;

  fc_assert(max_dest_size > 0);

  if (!enough_data(din, 1)) {
    log_packet("Got a bad string");
    return FALSEoffset < remaining && c[offset] != '\0'; offset++) {
    /* nothing */
  }

  if (offset >= remaining) {
    log_packet("Got a too short string");
    return FALSE;
  }

  if (!(*get_conv_callback) (dest, max_dest_size, c, offset)) {
    log_packet("Got a bad encoded string");
    return FALSE;
  }

  din->current += offset + 1;
  return TRUTake tech numbers until A_LAST encountered, or MAX_NUM_TECH_LIST techs
  retrieved.
******/
bool dio_get_tech_list(struct data_in *din, int *dest)
{
  int i;

  for (i = 0; i < MAX_NUM_TECH_LIST; i++) {
    if (!dio_get_uint8(din, &dest[i])) {
      log_packet("Got a too short tech list");
      return FALSE;
    }
  return TRUTake unit type numbers until U_LAST encountered, or MAX_NUM_UNIT_LIST
  types retrieved.
******/
bool dio_get_unit_list(struct data_in *din, int *dest)
{
  int i;

  for (i = 0; i < MAX_NUM_UNIT_LIST; i++) {
    if (!dio_get_uint8(din, &dest[i])) {
      log_packet("Got a too short unit list");
      return FALSE;
    }
    if (dest[i] == U_LAST) {
      break;
    }
  }

  for (; i < MAX_NUM_UNIT_LIST; i++) {
    dest[i] = U_LAST;
  }

  return TRUTake building type numbers until B_LAST encountered, or
  MAX_NUM_BUILDING_LIST types retrieved.
******/
bool dio_get_building_list(struct data_in *din, int *dest)
{
  int i;

  for (i = 0; i < MAX_NUM_BUILDING_LIST; i++) {
    if (!dio_get_uint8(din, &dest[i])) {
      log_packet("Got a too short building list");
      return FALSE;
    }
    if (dest[i] == B_LAST) {
      break;
    }
  }

  for (; i < MAX_NUM_BUILDING_LIST; i++) {
    dest[i] = B_LAST;
  }

  return TRUTake worklist item count and then kind and number for each item, and
  put them to provided worklist.
******/
bool dio_get_worklist(struct data_in *din, struct worklist *pwl)
{
  int i, length;

  worklist_init(pwl);

  if (!dio_get_uint8(din, &length)) {
    log_packet("Got a bad worklist");
    return FALSE;
  }

  for (i = 0; i < length; i++) {
    int identifier;
    int kind;

    if (!dio_get_uint8(din, &kind)
        || !dio_get_uint8(din, &identifier)) {
      log_packet("Got a too short worklist");
      return FALSE;
    }

    /*
     * FIXME: the value returned by universal_by_number() should be checked!
     */
    worklist_append(pwl, universal_by_number(kind, identifier));
  }

  return TRUTake vector of 8 bit values and insert stop_value after them. stop_value
  does not need to fit in 8 bits.
******/
bool dio_get_uint8_vec8(struct data_in *din, int **values, int stop_value)
{
  int count, inx;
  int *vec;

  if (!dio_get_uint8(din, &count)) {
    return FALSE;
  }

  vec = fc_calloc(count + 1, sizeof(*vec));
  for (inx = 0; inx < count; inx++) {
    if (!dio_get_uint8(din, vec + inx)) {
      free (vec);
      return FALSE;
    }
  }
  vec[inx] = stop_value;
  *values = vec;

  return TRUReceive vector of uint6 values.
******/
bool dio_get_uint16_vec8(struct data_in *din, int **values, int stop_value)
{
  int count, inx;
  int *vec;

  if (!dio_get_uint8(din, &count)) {
    return FALSE;
  }

  vec = fc_calloc(count + 1, sizeof(*vec));
  for (inx = 0; inx < count; inx++) {
    if (!dio_get_uint16(din, vec + inx)) {
      free (vec);
      return FALSE;
    }
  }
  vec[inx] = stop_value;
  *values = vec;

  return TRUDe-serialize a requirement.
******/
bool dio_get_requirement(struct data_in *din, struct requirement *preq)
{
  int type, range, value;
  bool survives, present, quiet;

  if (!dio_get_uint8(din, &type)
      || !dio_get_sint32(din, &value)
      || !dio_get_uint8(din, &range)
      || !dio_get_bool8(din, &survives)
      || !dio_get_bool8(din, &present)
      || !dio_get_bool8(din, &quiet)) {
    log_packet("Got a bad requirement");
    return FALSE;
  }

  /*
   * FIXME: the value returned by req_from_values() should be checked!
   */
  *preq = req_from_values(type, range, survives, present, quiet, value);

  return TRUSerialize a requirement.
******/
void dio_put_requirement(struct data_out *dout, const struct requirement *preq)
{
  int type, range, value;
  bool survives, present, quiet;

  req_get_values(preq, &type, &range, &survives, &present, &quiet, &value);

  dio_put_uint8(dout, type);
  dio_put_sint32(dout, value);
  dio_put_uint8(dout, range);
  dio_put_bool8(dout, survives);
  dio_put_bool8(dout, present);
  dio_put_bool8(dout, quiet);
}
ENDREP
DELTA 31367 671 223
SVN  ågä4 G  ….HŽ @…k Üpˆw*"fc_prehdrs.h"ENDREP
id: 15r.5qi.r32448/18213
type: file
pred: 15r.5qi.r32142/1215
count: 64
text: 32448 218 17892 30355 57cec099a16ebde862daf77fbacc819f
props: 10806 11936 111 0 227f1557f5d66bc46d32e4db301b2671
cpath: /branches/S2_6/common/dataio.c
copyroot: 27474 /branches/S2_6

id: 43.5qi.r32448/18474
type: file
pred: 43.5qi.r31367/23072
count: 329
text: 32448 18138 48 29236 8327809cdff07241a285c88c4f616561
props: 11001 6188 112 0 be233b9f2c09b9a4fa715b44e3833b02
cpath: /branches/S2_6/common/packets.c
copyroot: 27474 /branches/S2_6

PLAIN
K 11
Makefile.am
V 24
file 5h.5qi.r30222/90685
K 14
achievements.c
V 25
file qhc.5qi.r30222/90944
K 14
achievements.h
V 26
file qhe.5ck.r26905/215849
K 9
actions.c
V 23
file r7a.5qi.r32272/312
K 9
actions.h
V 25
file r7c.5qi.r32222/11695
K 4
ai.c
V 24
file 4go.5qi.r31727/7651
K 4
ai.h
V 22
file 4gp.5qi.r32306/48
K 6
aicore
V 23
dir 18t.5qi.r32397/3226
K 6
base.c
V 24
file 3jw.5qi.r32133/1266
K 6
base.h
V 25
file 3jx.5qi.r32070/28990
K 9
borders.c
V 25
file 4f0.5qi.r31936/23401
K 9
borders.h
V 26
file 4f1.5ck.r26905/213493
K 10
calendar.c
V 27
file 147p.5ck.r26905/214086
K 10
calendar.h
V 27
file 147r.5ck.r26905/215265
K 8
capstr.c
V 22
file dv.5ck.r24976/289
K 8
capstr.h
V 24
file dw.5ck.r18858/97074
K 10
citizens.c
V 26
file 6mx.5ck.r26905/203234
K 10
citizens.h
V 26
file 6my.5ck.r26905/204108
K 6
city.c
V 22
file q.5qi.r32397/3477
K 6
city.h
V 23
file 3q.5qi.r31727/7906
K 13
clientutils.c
V 26
file zj9.5ck.r26905/212022
K 13
clientutils.h
V 26
file zjb.5ck.r26905/213199
K 8
combat.c
V 23
file wp.5qi.r31095/9496
K 8
combat.h
V 24
file wq.5ck.r24573/25814
K 12
connection.c
V 23
file un.5qi.r31660/6530
K 12
connection.h
V 24
file uo.5qi.r30394/34772
K 9
culture.c
V 27
file 104t.5ck.r26905/202652
K 9
culture.h
V 27
file 104v.5ck.r26905/203523
K 8
dataio.c
V 25
file 15r.5qi.r32448/18213
K 8
dataio.h
V 24
file 15s.5ck.r26834/4081
K 11
diptreaty.c
V 23
file 3r.5qi.r29571/7104
K 11
diptreaty.h
V 23
file 3s.5qi.r27518/9734
K 10
disaster.c
V 25
file b2m.5qi.r30000/39648
K 10
disaster.h
V 26
file b2o.5ck.r26905/216145
K 9
effects.c
V 26
file 2eo.5qi.r30061/225985
K 9
effects.h
V 24
file 2ep.5qi.r29180/3668
K 8
events.c
V 24
file 33h.5qi.r31910/5405
K 8
events.h
V 23
file 3t.5qi.r31910/5660
K 8
extras.c
V 25
file o9u.5qi.r32091/24903
K 8
extras.h
V 23
file o9w.5qi.r32238/715
K 12
fc_cmdhelp.c
V 26
file 76j.5ck.r26905/216438
K 12
fc_cmdhelp.h
V 26
file 76k.5ck.r26905/216731
K 14
fc_interface.c
V 23
file 4up.5qi.r29369/494
K 14
fc_interface.h
V 25
file 4uq.5qi.r28204/10610
K 10
fc_types.h
V 25
file 2ll.5qi.r32091/25424
K 15
featured_text.c
V 24
file 4h3.5qi.r32397/3731
K 15
featured_text.h
V 25
file 4h4.5qi.r30000/40165
K 6
game.c
V 23
file 3u.5qi.r32409/2010
K 6
game.h
V 23
file 3v.5qi.r32409/2267
K 19
generate_packets.py
V 23
file 2f4.5qi.r31953/183
K 12
government.c
V 24
file he.5qi.r30000/40431
K 12
government.h
V 24
file hf.5ck.r25151/83855
K 6
idex.c
V 24
file qo.5ck.r25151/84101
K 6
idex.h
V 24
file qp.5ck.r18858/92434
K 13
improvement.c
V 23
file vb.5qi.r31729/3851
K 13
improvement.h
V 23
file vc.5ck.r26605/3666
K 5
map.c
V 22
file r.5qi.r32397/3998
K 5
map.h
V 24
file 41.5qi.r32037/12844
K 11
map_types.h
V 25
file 2175.5qi.r32035/4722
K 8
mapimg.c
V 24
file 6n9.5qi.r31729/4617
K 8
mapimg.h
V 26
file 6na.5ck.r26905/215559
K 15
metaknowledge.c
V 24
file siq.5qi.r32261/3828
K 15
metaknowledge.h
V 24
file sis.5qi.r32261/4092
K 10
movement.c
V 25
file 2xv.5qi.r32446/11692
K 10
movement.h
V 25
file 2xw.5qi.r32446/11952
K 13
multipliers.c
V 26
file 197b.5qi.r30000/40959
K 13
multipliers.h
V 26
file 197d.5qi.r29118/55021
K 18
name_translation.h
V 22
file 4k1.5qi.r31722/47
K 8
nation.c
V 21
file il.5qi.r30333/79
K 8
nation.h
V 22
file im.5ck.r27000/284
K 9
packets.c
V 24
file 43.5qi.r32448/18474
K 11
packets.def
V 25
file 2f5.5qi.r32438/17855
K 9
packets.h
V 23
file 44.5qi.r31079/5570
K 8
player.c
V 22
file 45.5qi.r32431/510
K 8
player.h
V 23
file 46.5qi.r31727/8160
K 14
requirements.c
V 23
file 2wq.5qi.r32238/971
K 14
requirements.h
V 23
file 2wr.5qi.r32230/477
K 10
research.c
V 23
file 4ro.5qi.r32286/600
K 10
research.h
V 23
file 4rp.5qi.r27751/838
K 10
rgbcolor.c
V 25
file 6i6.5qi.r31094/53296
K 10
rgbcolor.h
V 25
file 6i7.5qi.r31094/53559
K 6
road.c
V 24
file 6pq.5qi.r32133/1519
K 6
road.h
V 25
file 6pr.5qi.r32070/29504
K 10
scriptcore
V 23
dir 75a.5qi.r32397/6799
K 11
spaceship.c
V 23
file 98.5ck.r26349/9773
K 11
spaceship.h
V 24
file 99.5ck.r26349/10015
K 12
specialist.c
V 25
file 33f.5qi.r30000/42012
K 12
specialist.h
V 24
file 33g.5qi.r29571/9422
K 7
style.c
V 25
file zzb.5qi.r30000/42275
K 7
style.h
V 26
file zzd.5ck.r26905/204988
K 6
team.c
V 23
file 33i.5ck.r25891/212
K 6
team.h
V 23
file 33j.5ck.r26183/314
K 6
tech.c
V 23
file t.5qi.r30000/42534
K 6
tech.h
V 21
file u.5qi.r29318/376
K 9
terrain.c
V 24
file 2fp.5qi.r31850/1590
K 9
terrain.h
V 24
file qs.5qi.r32000/20696
K 6
tile.c
V 23
file 2ys.5qi.r32399/166
K 6
tile.h
V 25
file 2yt.5qi.r32091/26210
K 13
traderoutes.c
V 25
file bf8.5qi.r27552/33422
K 13
traderoutes.h
V 25
file bfa.5qi.r27552/33689
K 8
traits.h
V 24
file 7k3.5qi.r30331/8160
K 6
unit.c
V 22
file v.5qi.r32426/3591
K 6
unit.h
V 23
file 48.5qi.r32426/3841
K 10
unitlist.c
V 25
file 39m.5qi.r31890/34877
K 10
unitlist.h
V 25
file 39n.5qi.r27612/26147
K 10
unittype.c
V 22
file v9.5qi.r32248/164
K 10
unittype.h
V 23
file va.5qi.r32064/1409
K 9
version.c
V 22
file oe.5qi.r31867/502
K 9
version.h
V 22
file e7.5qi.r31867/755
K 9
victory.c
V 26
file qex.5ck.r26905/217020
K 9
victory.h
V 26
file qez.5ck.r26905/217896
K 8
vision.c
V 22
file 4dm.5qi.r27639/98
K 8
vision.h
V 24
file 4dn.5ck.r24742/9986
K 12
workertask.c
V 26
file llw.5ck.r26905/206753
K 12
workertask.h
V 25
file lly.5qi.r28927/25134
K 10
worklist.c
V 22
file o8.5qi.r28027/169
K 10
worklist.h
V 24
file o9.5ck.r18858/98299
END
ENDREP
id: p.5qi.r32448/24037
type: dir
pred: p.5qi.r32446/17515
count: 4434
text: 32448 18734 5290 0 63455791c7026ba3f3f69d8f1c671139
props: 23743 0 112 0 b2bc91bf125d83375389d51f25ff2c2f
cpath: /branches/S2_6/common
copyroot: 27474 /branches/S2_6

id: uh.5qi.r32448/24280
type: file
pred: uh.5qi.r32154/185
count: 46
text: 32448 0 193 30590 d22504f3df5e7d81b5b0cf91a33a0e32
props: 9074 52 111 0 4b4193808cb95e702a5e5065e4345324
cpath: /branches/S2_6/utility/ioz.c
copyroot: 27474 /branches/S2_6

PLAIN
K 11
Makefile.am
V 24
file 2gg.5qi.r31884/9522
K 9
astring.c
V 23
file h5.5qi.r31575/1826
K 9
astring.h
V 23
file h6.5ck.r20479/1668
K 11
bitvector.c
V 25
file 4un.5qi.r31660/19174
K 11
bitvector.h
V 25
file 4uo.5qi.r28013/32595
K 12
capability.c
V 24
file 7p.5qi.r31660/19434
K 12
capability.h
V 24
file 7q.5ck.r18858/85852
K 14
deprecations.c
V 23
file 2bv0.5qi.r32383/68
K 14
deprecations.h
V 26
file 2bv2.5qi.r32113/11947
K 12
distribute.c
V 26
file 2lp.5ck.r19259/362511
K 12
distribute.h
V 25
file 2lq.5ck.r18858/87951
K 12
fc_prehdrs.h
V 25
file 29q0.5qi.r31575/2080
K 9
fc_utf8.c
V 23
file 4ku.5ck.r26944/198
K 9
fc_utf8.h
V 25
file 4kv.5ck.r26905/46695
K 13
fcbacktrace.c
V 25
file 731.5qi.r32142/15890
K 13
fcbacktrace.h
V 23
file 732.5qi.r31452/150
K 9
fciconv.c
V 25
file 2g7.5ck.r26800/15337
K 9
fciconv.h
V 25
file 2g8.5ck.r18858/89144
K 8
fcintl.c
V 22
file k3.5qi.r30877/137
K 8
fcintl.h
V 24
file fw.5qi.r29620/12681
K 10
fcthread.c
V 24
file 6hv.5ck.r27333/1127
K 10
fcthread.h
V 25
file 6hw.5qi.r31660/19954
K 20
generate_specenum.py
V 23
file 4ia.5ck.r27150/401
K 9
genhash.c
V 23
file 57v.5ck.r27456/668
K 9
genhash.h
V 25
file 57w.5ck.r26905/43784
K 9
genlist.c
V 23
file 51.5qi.r32067/1067
K 9
genlist.h
V 23
file 52.5qi.r32067/1322
K 11
inputfile.c
V 21
file h9.5qi.r32323/64
K 11
inputfile.h
V 24
file ha.5qi.r31201/27185
K 5
ioz.c
V 24
file uh.5qi.r32448/24280
K 5
ioz.h
V 24
file ui.5qi.r29108/10744
K 10
iterator.c
V 25
file 4h5.5ck.r26905/44951
K 10
iterator.h
V 25
file 4f3.5ck.r26905/45830
K 5
log.c
V 24
file 53.5qi.r32397/12599
K 5
log.h
V 24
file 54.5qi.r32142/16154
K 5
md5.c
V 22
file 33q.5ck.r25082/54
K 5
md5.h
V 25
file 33r.5ck.r19849/16287
K 5
mem.c
V 23
file d9.5qi.r31278/1011
K 5
mem.h
V 24
file da.5ck.r20315/22211
K 11
net_types.h
V 24
file 2a10.5qi.r31692/176
K 9
netfile.c
V 23
file 6m8.5qi.r32252/728
K 9
netfile.h
V 25
file 6m9.5ck.r26905/41734
K 9
netintf.c
V 22
file t6.5qi.r31692/376
K 9
netintf.h
V 23
file t7.5qi.r31621/8830
K 6
rand.c
V 25
file m5.5ck.r19259/363664
K 6
rand.h
V 24
file m6.5ck.r20315/22687
K 10
registry.c
V 24
file agw.5qi.r31688/1381
K 10
registry.h
V 25
file 7po.5ck.r26905/40851
K 14
registry_ini.c
V 24
file dh.5si.r32142/16407
K 14
registry_ini.h
V 24
file di.5su.r32010/19926
K 14
registry_xml.c
V 25
file 16x3.5qi.r31688/1640
K 14
registry_xml.h
V 25
file 16x5.5qi.r31688/1904
K 14
section_file.c
V 25
file bw9.5qi.r31546/30465
K 14
section_file.h
V 25
file axo.5ck.r26905/42907
K 8
shared.c
V 24
file 55.5qi.r32422/12723
K 8
shared.h
V 24
file 1d.5qi.r32159/20728
K 10
spechash.h
V 25
file 57x.5ck.r26905/46987
K 10
speclist.h
V 22
file gb.5qi.r31490/168
K 8
specpq.h
V 26
file 1brp.5ck.r26905/42320
K 9
specvec.h
V 22
file z9.5qi.r31527/530
K 15
string_vector.c
V 25
file 4hy.5qi.r31729/11207
K 15
string_vector.h
V 25
file 4hz.5qi.r31729/11474
K 9
support.c
V 21
file m9.5qi.r32359/96
K 9
support.h
V 22
file ma.5qi.r32359/347
K 8
timing.c
V 24
file el.5ck.r24200/17365
K 8
timing.h
V 24
file em.5qi.r28013/32859
END
ENDREP
id: 1c.5qi.r32448/27541
type: dir
pred: 1c.5qi.r32422/15990
count: 979
text: 32448 24528 3000 0 5d4da997d19413fa9da82d03ae8475b8
props: 17175 331 84 0 5447a85ba28edec0d4a8f6120070e2b2
cpath: /branches/S2_6/utility
copyroot: 27474 /branches/S2_6

PLAIN
K 9
ABOUT-NLS
V 24
file fu.5ck.r27270/69307
K 7
AUTHORS
V 24
file 5u.5ck.r22143/14016
K 7
COPYING
V 22
file 1h.5qi.r29455/952
K 9
ChangeLog
V 26
file 6l.5qi.r31298/7507168
K 7
INSTALL
V 22
file 6.5qi.r31740/1317
K 11
Makefile.am
V 22
file 59.5qi.r31920/516
K 4
NEWS
V 24
file 6m.5ck.r25634/30702
K 6
README
V 20
file 7.0.r4421/96382
K 2
ai
V 22
dir 8.5qi.r32446/11452
K 10
autogen.sh
V 22
file 12o.5qi.r32157/51
K 9
bootstrap
V 23
dir 2p5.5qi.r32074/2154
K 6
client
V 21
dir d.5qi.r32440/4761
K 6
common
V 22
dir p.5qi.r32448/24037
K 12
configure.ac
V 24
file 149.5qi.r32422/8022
K 4
data
V 22
dir w.5qi.r32414/11904
K 12
dependencies
V 23
dir 2yu.5qi.r32418/3156
K 3
doc
V 22
dir k7.5qi.r32412/3950
K 10
fc_version
V 25
file 2lo.5qj.r32438/23659
K 11
gen_headers
V 23
dir 1hsw.5qi.r32276/968
K 3
lua
V 24
dir 2c5p.5qi.r31920/4972
K 2
m4
V 23
dir 12p.5qi.r32330/3429
K 7
scripts
V 23
dir 2yo.5qi.r31853/1104
K 6
server
V 22
dir z.5qi.r32446/27016
K 5
tests
V 22
dir 2g9.5qi.r32362/652
K 5
tools
V 23
dir 4pj.5qp.r32435/1170
K 12
translations
V 24
dir t0a.5qi.r32392/50478
K 7
utility
V 23
dir 1c.5qi.r32448/27541
K 3
vms
V 25
dir u9.5ck.r21528/1396085
K 5
win32
V 23
dir 2eu.5qi.r32411/6377
END
ENDREP
id: 3.5qi.r32448/28995
type: dir
pred: 3.5qi.r32446/28469
count: 20604
text: 32448 27787 1195 0 99e1e9a52eedb12702a1bf0e18026c11
props: 28037 14463 292 0 9e1d5de0253c723466868990c52c129f
cpath: /branches/S2_6
copyroot: 27474 /branches/S2_6

PLAIN
K 5
S1_14
V 21
dir 3.21.r18109/18803
K 4
S2_0
V 21
dir 3.10x.r21862/4178
K 4
S2_1
V 22
dir 3.59e.r20026/11014
K 4
S2_2
V 21
dir 3.5cy.r21861/5036
K 4
S2_3
V 21
dir 3.5f2.r29458/5135
K 4
S2_4
V 22
dir 3.5ii.r30401/87429
K 4
S2_5
V 21
dir 3.5kv.r32436/2646
K 6
S2_5_3
V 23
dir 3.5ut.r31805/553797
K 4
S2_6
V 22
dir 3.5qi.r32448/28995
K 11
freeciv-web
V 22
dir 3.5bl.r13594/14918
END
ENDREP
id: 1.0.r32448/29630
type: dir
pred: 1.0.r32446/29103
count: 11089
text: 32448 29236 381 0 2092de8dda98fd70a210ea82a06f9fe4
cpath: /branches
copyroot: 0 /

PLAIN
K 8
branches
V 20
dir 1.0.r32448/29630
K 4
tags
V 19
dir 2.0.r31807/7857
K 5
trunk
V 22
dir 3.5ck.r32447/11812
K 7
website
V 20
dir 3ge.0.r31885/802
END
ENDREP
id: 0.0.r32448/29952
type: dir
pred: 0.0.r32447/12203
count: 32448
text: 32448 29786 153 0 84edd9f8f065b3f88204f79e15750fc4
cpath: /
copyroot: 0 /

15r.5qi.t32447-1 modify true false /branches/S2_6/common/dataio.c

43.5qi.t32447-1 modify true false /branches/S2_6/common/packets.c

uh.5qi.t32447-1 modify true false /branches/S2_6/utility/ioz.c


29952 30100
